From 088e01d9b5eafbc9a01e7450088a01fdbb621202 Mon Sep 17 00:00:00 2001 From: tree Date: Tue, 30 Sep 2025 12:37:00 +0530 Subject: [PATCH 001/398] new oi adapters (#10714) --- defi/src/protocols/data3.ts | 9 ++++++--- defi/src/protocols/data4.ts | 6 ++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index dd42e40f30..b6e771040f 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -6664,7 +6664,8 @@ const data3_1: Protocol[] = [ derivatives: { genuineSpikes: ["1691625600"], adapter: "satori" - } + }, + "open-interest": "satori" } }, { @@ -38324,7 +38325,8 @@ const data3_2: Protocol[] = [ derivatives: { genuineSpikes: ["1712534400", "1712620800"], adapter: "myx-finance" - } + }, + "open-interest": "myx-finance" } }, { @@ -53749,7 +53751,8 @@ const data3_2: Protocol[] = [ listedAt: 1723560145, dimensions: { fees: "reya-dex", - derivatives: "reya-dex" + derivatives: "reya-dex", + "open-interest": "reya-dex" } }, { diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 3eaba6308a..d0877356a9 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -22085,7 +22085,8 @@ const data4: Protocol[] = [ ], forkedFromIds: [], dimensions: { - derivatives: "hibachi" + derivatives: "hibachi", + "open-interest": "hibachi" } }, { @@ -26708,7 +26709,8 @@ const data4: Protocol[] = [ derivatives: { genuineSpikes: ["1722816000"], adapter: "paradex" - } + }, + "open-interest": "paradex" } }, { From 0e7408473a0f6c73cd35fe1995a6fa1b7483f286 Mon Sep 17 00:00:00 2001 From: Artem Trifonov Date: Tue, 30 Sep 2025 10:21:57 +0300 Subject: [PATCH 002/398] Change Risk Curator: Edge Capital -> Ultrayield by Edge Capital Add Onchain Capital Allocator: Ultrayield --- defi/src/protocols/data4.ts | 39 +++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 3eaba6308a..fe89ad9e34 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -23499,25 +23499,25 @@ const data4: Protocol[] = [ }, { id: "6528", - name: "Edge Capital", + name: "Ultrayield by Edge Capital", address: null, symbol: "-", - url: "https://app.euler.finance/governor/edge-capital?network=tac", - description: "Crypto hedge fund & largest liquidity provider to early-stage protocols", - chain: "TAC", - logo: `${baseIconsUrl}/edge-capital.jpg`, + url: "https://ultrayield.app/", + description: "Vault Curator & Infrastructure Provider", + chain: "Ethereum", + logo: `${baseIconsUrl}/ultrayield-by-edge-capital.jpg`, audits: "0", audit_note: null, gecko_id: null, cmcId: null, category: "Risk Curators", chains: ["TAC"], - module: "edge-capital/index.js", + module: "ultrayield-by-edge-capital/index.js", forkedFromIds: [], - twitter: "EdgeCapitalMgmt", + twitter: "ultrayieldapp", listedAt: 1754418907, dimensions: { - fees: "edge-capital" + fees: "ultrayield-by-edge-capital" } }, { @@ -29412,5 +29412,28 @@ const data4: Protocol[] = [ audit_links: ["https://github.com/Legion-Team/legion-protocol-contracts/tree/master/audits"], listedAt: 1759188237 }, + { + id: "6785", + name: "UltraYield", + address: null, + symbol: "-", + url: "https://ultrayield.app/", + description: "Vault Curator & Infrastructure Provider", + chain: "Ethereum", + logo: `${baseIconsUrl}/ultrayield.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Onchain Capital Allocator", + chains: ["Ethereum"], + module: "ultrayield/index.js", + forkedFromIds: [], + twitter: "ultrayieldapp", + listedAt: 1754418907, + dimensions: { + fees: "ultrayield" + } + }, ]; export default data4; From a92c80940b52a433de1a62274e7029c790b3d0cf Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Tue, 30 Sep 2025 09:31:00 +0200 Subject: [PATCH 003/398] Feat: Add pg retries wrapper (#10676) * Add pg retries wrapper * Update index.ts --- defi/src/api2/db/index.ts | 124 +++++++++++++++++++++++--------------- 1 file changed, 74 insertions(+), 50 deletions(-) diff --git a/defi/src/api2/db/index.ts b/defi/src/api2/db/index.ts index 68a0f87d7a..5dd9be333b 100644 --- a/defi/src/api2/db/index.ts +++ b/defi/src/api2/db/index.ts @@ -1,14 +1,21 @@ -import { Sequelize, Model, ModelStatic, Op, Options as SequelizeOptions, QueryTypes } from 'sequelize' +import { Model, ModelStatic, Op, QueryTypes, Sequelize, Options as SequelizeOptions } from 'sequelize' +import { log } from '@defillama/sdk' import getEnv, { validateEnv } from '../env' import { initializeTables, Tables as TABLES } from './tables' -import { log } from '@defillama/sdk' import { - dailyTvl, dailyTokensTvl, dailyUsdTokensTvl, dailyRawTokensTvl, hourlyTvl, hourlyTokensTvl, hourlyUsdTokensTvl, hourlyRawTokensTvl, + dailyRawTokensTvl, + dailyTokensTvl, + dailyTvl, + dailyUsdTokensTvl, + hourlyRawTokensTvl, + hourlyTokensTvl, + hourlyTvl, + hourlyUsdTokensTvl, } from "../../utils/getLastRecord" +import { deleteFromPGCache, getDailyTvlCacheId, readFromPGCache, writeToPGCache } from '../cache/file-cache' import { getTimestampString } from '../utils' -import { readFromPGCache, writeToPGCache, getDailyTvlCacheId, deleteFromPGCache } from '../cache/file-cache' const dummyId = 'dummyId' @@ -44,6 +51,33 @@ function isHourlyDDBPK(ddbPKFunction: Function) { return key.includes('hourly') } +function sleep(ms: number) { + return new Promise((res) => setTimeout(res, ms)) +} + +async function withPgRetries(fn: () => Promise, retries = 2, baseDelayMs = 2000): Promise { + let lastErr: unknown + for (let attempt = 0; attempt <= retries; attempt++) { + try { + return await fn() + } catch (err: any) { + lastErr = err + const msg = `${err?.name ?? ''} ${err?.message ?? ''}` + const retriable = + msg.includes('SequelizeConnectionAcquireTimeoutError') || + msg.includes('SequelizeConnectionError') || + msg.includes('TimeoutError') || + msg.includes('ETIMEDOUT') || + msg.includes('ECONNRESET') + if (!retriable || attempt === retries) break + const delay = baseDelayMs * Math.pow(2, attempt) // 2000ms, 4000ms + log(`PG retry #${attempt + 1} in ${delay}ms -> ${err?.name}`) + await sleep(delay) + } + } + throw lastErr +} + let sequelize: Sequelize | null = null let mSequalize: Sequelize @@ -132,12 +166,14 @@ async function _getAllProtocolItems(ddbPKFunction: Function, protocolId: string, async function _getLatestProtocolItem(ddbPKFunction: Function, protocolId: string) { const table = getTVLCacheTable(ddbPKFunction) - const item: any = await table.findOne({ - where: { id: protocolId }, - attributes: ['data', 'timestamp'], - raw: true, - order: [['timestamp', 'DESC']], - }) + const item: any = await withPgRetries(() => + table.findOne({ + where: { id: protocolId }, + attributes: ['data', 'timestamp'], + raw: true, + order: [['timestamp', 'DESC']], + }) + ) if (!item) return null item.data.SK = item.timestamp return item.data @@ -153,13 +189,14 @@ async function _getClosestProtocolItem(ddbPKFunction: Function, protocolId: stri if (searchWidth) { timestampFilter = { [Op.gte]: timestampTo - searchWidth, [Op.lte]: timestampTo + searchWidth } - const items: any = await table.findAll({ - where: { id: protocolId, timestamp: timestampFilter }, - attributes: ['data', 'timestamp'], - raw: true, - order: [['timestamp', 'DESC']], - }) - + const items: any = await withPgRetries(() => + table.findAll({ + where: { id: protocolId, timestamp: timestampFilter }, + attributes: ['data', 'timestamp'], + raw: true, + order: [['timestamp', 'DESC']], + }) + ) if (!items.length) return null let closest = items[0]; @@ -174,12 +211,14 @@ async function _getClosestProtocolItem(ddbPKFunction: Function, protocolId: stri } else if (timestampFrom) timestampFilter = { [Op.gte]: timestampFrom, [Op.lte]: timestampTo } - const item: any = await table.findOne({ - where: { id: protocolId, timestamp: timestampFilter }, - attributes: ['data', 'timestamp'], - raw: true, - order: [['timestamp', 'DESC']], - }) + const item: any = await withPgRetries(() => + table.findOne({ + where: { id: protocolId, timestamp: timestampFilter }, + attributes: ['data', 'timestamp'], + raw: true, + order: [['timestamp', 'DESC']], + }) + ) if (!item) return null item.data.SK = item.timestamp return item.data @@ -191,14 +230,16 @@ async function _saveProtocolItem(ddbPKFunction: Function, record: TVLCacheRecord const table = getTVLCacheTable(ddbPKFunction) - if (options.overwriteExistingData) { - await table.upsert(record) - } else { - await table.findOrCreate({ - where: { id: record.id, timeS: record.timeS }, - defaults: record, - }) - } + return withPgRetries(async () => { + if (options.overwriteExistingData) { + await table.upsert(record) + } else { + await table.findOrCreate({ + where: { id: record.id, timeS: record.timeS }, + defaults: record, + }) + } + }, 2, 2000) } async function deleteProtocolItems(ddbPKFunction: Function, where: any) { @@ -334,25 +375,8 @@ function getPGConnection() { } export { - TABLES, - sequelize, - getLatestProtocolItem, - getAllProtocolItems, - getClosestProtocolItem, - saveProtocolItem, - getPGConnection, - initializeTVLCacheDB, - closeConnection, - deleteProtocolItems, - readFromPGCache, - writeToPGCache, - deleteFromPGCache, - getDailyTvlCacheId, - getLatestProtocolItems, - getHourlyTvlUpdatedRecordsCount, - getDimensionsUpdatedRecordsCount, - getTweetsPulledCount, - getProtocolItems, + closeConnection, deleteFromPGCache, deleteProtocolItems, getAllProtocolItems, + getClosestProtocolItem, getDailyTvlCacheId, getDimensionsUpdatedRecordsCount, getHourlyTvlUpdatedRecordsCount, getLatestProtocolItem, getLatestProtocolItems, getPGConnection, getProtocolItems, getTweetsPulledCount, initializeTVLCacheDB, readFromPGCache, saveProtocolItem, sequelize, TABLES, writeToPGCache } // Add a process exit hook to close the database connection From 6be759a4c1ffcbbc833b56074f63fb19da8789b5 Mon Sep 17 00:00:00 2001 From: Artem Trifonov Date: Tue, 30 Sep 2025 11:05:33 +0300 Subject: [PATCH 004/398] Fix UltraYield name --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index fe89ad9e34..eaa85ef4ce 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -23499,7 +23499,7 @@ const data4: Protocol[] = [ }, { id: "6528", - name: "Ultrayield by Edge Capital", + name: "UltraYield by Edge Capital", address: null, symbol: "-", url: "https://ultrayield.app/", From 3b26d16bd7b0edf2072af2d2bfadfa52b5ac30da Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 30 Sep 2025 09:13:33 +0100 Subject: [PATCH 005/398] midas starknet (#10715) * temp skip cache * reimplement cache * bridged tvl 2 * starknet btcs * midas tokens starknet --- coins/src/adapters/tokenMapping.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index bda318ed1c..fb00139618 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -5419,6 +5419,16 @@ } }, "starknet": { + "0x04be8945e61dc3e19ebadd1579a6bd53b262f51ba89e6f8b0c4bc9a7e3c633fc": { + "decimals": "18", + "symbol": "mRe7yield", + "to": "coingecko#midas-mre7yield" + }, + "0x04e4fb1a9ca7e84bae609b9dc0078ad7719e49187ae7e425bb47d131710eddac": { + "decimals": "18", + "symbol": "mRe7BTC", + "to": "asset#ethereum:0x9fb442d6b612a6dcd2acc67bb53771ef1d9f661a" + }, "0x0593e034dda23eea82d2ba9a30960ed42cf4a01502cc2351dc9b9881f9931a68": { "decimals": "18", "symbol": "SolvBTC", From e2d7e31bee156f53f94373f35932c18a74584ef8 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 30 Sep 2025 13:28:06 +0200 Subject: [PATCH 006/398] whitelist spikes --- defi/src/protocols/data3.ts | 7 +++++-- defi/src/protocols/data4.ts | 5 ++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index b6e771040f..de2cee1e9c 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -56026,7 +56026,7 @@ const data3_2: Protocol[] = [ category: "Derivatives", chains: ["Injective"], module: "injective-orderbook/index.js", - twitter: "HelixApp_", + twitter: "HelixMarkets", forkedFrom: [], oraclesBreakdown: [ { @@ -56043,7 +56043,10 @@ const data3_2: Protocol[] = [ parentProtocol: "parent#helix", listedAt: 1724923885, dimensions: { - derivatives: "helix-helix-perp", + derivatives: { + adapter: "helix-helix-perp", + genuineSpikes: ["1759104000"], + }, "open-interest": "helix-helix-perp" } }, diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index d0877356a9..6a13790379 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -6697,7 +6697,10 @@ const data4: Protocol[] = [ listedAt: 1740357231, dimensions: { fees: "hyperswap-v2", - dexs: "hyperswap-v2" + dexs: { + adapter: "hyperswap-v2", + genuineSpikes: ["1759104000"], + }, } }, { From 35f3d8f2b643b08ad413ef58dc4be614ca6d7fd8 Mon Sep 17 00:00:00 2001 From: eden Date: Tue, 30 Sep 2025 18:53:26 +0700 Subject: [PATCH 007/398] add whitelist spike (#10716) --- defi/src/protocols/data4.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 6a13790379..a53ce93a80 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -28628,7 +28628,10 @@ const data4: Protocol[] = [ module: "dummy.js", twitter: "injective", dimensions: { - derivatives: "injective-derivatives", + derivatives: { + adapter: "injective-derivatives", + genuineSpikes: ["1759104000"], + }, "open-interest": "injective-derivatives" }, parentProtocol: "parent#injective-orderbook", From 6a81a8fa84e110996f8b542dd5f3d529f4699297 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 30 Sep 2025 14:08:36 +0200 Subject: [PATCH 008/398] fix: update spike ratio threshold for improved accuracy --- defi/src/api2/cron-task/dimensions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/api2/cron-task/dimensions.ts b/defi/src/api2/cron-task/dimensions.ts index a23dece216..e7cf96eb93 100644 --- a/defi/src/api2/cron-task/dimensions.ts +++ b/defi/src/api2/cron-task/dimensions.ts @@ -785,7 +785,7 @@ function getProtocolRecordMapWithMissingData({ records, info = {}, adapterType, case 'dv': case 'dnv': currentValueisHigh = currentValue > 3e8; break; // 300 million } - let spikeRatio = currentValueisHigh ? 3 : 10 + let spikeRatio = currentValueisHigh ? 5 : 10 isSpike = currentValue > spikeRatio * highestCloseValue } From 023d278a2e28f4812d13b7213f539881e027cd28 Mon Sep 17 00:00:00 2001 From: tree Date: Tue, 30 Sep 2025 17:52:02 +0530 Subject: [PATCH 009/398] genuine OI spike in paradex(due to lack of historical data) (#10717) --- defi/src/protocols/data4.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index a53ce93a80..3acb969dba 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -26713,7 +26713,10 @@ const data4: Protocol[] = [ genuineSpikes: ["1722816000"], adapter: "paradex" }, - "open-interest": "paradex" + "open-interest": { + genuineSpikes: ["1759190400"], + adapter: "paradex" + } } }, { From 9f7a965401d506c3a1cc2523f523ba1de5024117 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 30 Sep 2025 08:54:19 -0600 Subject: [PATCH 010/398] add telosc listing --- defi/src/protocols/data4.ts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 3acb969dba..8fa896474e 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29411,7 +29411,7 @@ const data4: Protocol[] = [ description: "Legion is a merit-based crypto fundraising platform that lets projects launch token sales and allocates access to users based on on-chain reputation (Legion Scores) and compliance criteria.", chain: "Ethereum", logo: `${baseIconsUrl}/legion.jpg`, - audits: "0", + audits: "2", audit_note: null, gecko_id: null, cmcId: null, @@ -29423,5 +29423,25 @@ const data4: Protocol[] = [ audit_links: ["https://github.com/Legion-Team/legion-protocol-contracts/tree/master/audits"], listedAt: 1759188237 }, + { + id: "6785", + name: "Telos Consilium", + address: null, + symbol: "-", + url: "https://telosc.com/", + description: "Telos Consilium (Telosc) is a Web3 advisory and treasury firm offering risk-curated vault allocations, tokenized equity, and capital structuring services.", + chain: "Plasma", + logo: `${baseIconsUrl}/telos-consilium.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Risk Curators", + chains: ["Plasma"], + module: "telosc/index.js", + twitter: "TelosConsilium", + forkedFromIds: [], + listedAt: 1759244012 + }, ]; export default data4; From 19c5f06b7ef72b789ce995cafaeeeb7898bd24b6 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 30 Sep 2025 08:56:10 -0600 Subject: [PATCH 011/398] flag o.lab as deprecated --- defi/src/protocols/data4.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 8fa896474e..efea687157 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -2185,7 +2185,8 @@ const data4: Protocol[] = [ dimensions: { dexs: "olab", options: "olab" - } + }, + deprecated: true }, { id: "5649", From ec76ae4bc8ac3a87d42d0ca41625e36b6fffab5b Mon Sep 17 00:00:00 2001 From: Define101 Date: Tue, 30 Sep 2025 15:57:11 +0100 Subject: [PATCH 012/398] add ref link --- defi/src/protocols/data4.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index efea687157..77c27fc7b2 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -24198,7 +24198,8 @@ const data4: Protocol[] = [ name: "dextrabot", address: null, symbol: "-", - url: "https://app.dextrabot.com/", + url: "https://app.dextrabot.com/referral/DEFILLAMA", +  referralUrl: "https://app.dextrabot.com/referral/DEFILLAMA", description: "Enables users to discover and track profitable wallets on Hyperliquid that align with your strategy, and instantly copy trade their positions", chain: "Hyperliquid L1", From ea88946e2bd722d389e64d7bf7bfb39feba39830 Mon Sep 17 00:00:00 2001 From: codenutt <23013728+codenutt@users.noreply.github.com> Date: Tue, 30 Sep 2025 09:59:06 -0500 Subject: [PATCH 013/398] update for tokemak rebrand (#10718) --- defi/src/protocols/data1.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/defi/src/protocols/data1.ts b/defi/src/protocols/data1.ts index 825b2f735b..637e52003b 100644 --- a/defi/src/protocols/data1.ts +++ b/defi/src/protocols/data1.ts @@ -7603,12 +7603,12 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the }, { id: "438", - name: "Tokemak", + name: "AUTOfinance", address: "0x2e9d63788249371f1dfc918a52f8d799f4a38c94", symbol: "TOKE", - url: "https://www.tokemak.xyz", + url: "https://www.auto.finance", description: - "Tokemak Autopilot offers a new way to provide liquidity. Autopools autonomously rebalance your LP positions across a set of DEXs and correlated-assets, while keeping you composable within DeFi.", + "AUTOfinance maximizes returns through Autopools by autonomously routing liquidity across integrated DeFi destinations while preserving composability.", chain: "Ethereum", logo: `${baseIconsUrl}/tokemak.jpg`, audits: "2", @@ -7618,7 +7618,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the category: "Yield", chains: ["Ethereum"], module: "tokemak/index.js", - twitter: "TokemakXYZ", + twitter: "autopools", audit_links: ["https://docs.tokemak.xyz/developer-docs/security-and-audits"], treasury: "tokemak.js", governanceID: ["snapshot:tokemak.eth"], From 51ed04b9e94b6af8072b08c97d2ed46cc7777a59 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 30 Sep 2025 09:01:49 -0600 Subject: [PATCH 014/398] fix icon --- defi/src/protocols/data1.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data1.ts b/defi/src/protocols/data1.ts index 637e52003b..2bd48a5d95 100644 --- a/defi/src/protocols/data1.ts +++ b/defi/src/protocols/data1.ts @@ -7610,7 +7610,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the description: "AUTOfinance maximizes returns through Autopools by autonomously routing liquidity across integrated DeFi destinations while preserving composability.", chain: "Ethereum", - logo: `${baseIconsUrl}/tokemak.jpg`, + logo: `${baseIconsUrl}/autofinance.jpg`, audits: "2", audit_note: null, gecko_id: "tokemak", From 8eb2c3e1287668bf13e70a92781cbaa81a03cd79 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 30 Sep 2025 09:32:42 -0600 Subject: [PATCH 015/398] add new listings --- defi/src/protocols/data4.ts | 54 +++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 77c27fc7b2..6267e5c8b2 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29445,5 +29445,59 @@ const data4: Protocol[] = [ forkedFromIds: [], listedAt: 1759244012 }, + { + id: "6786", + name: "Snowbl Capital", + address: null, + symbol: "-", + url: "https://snowbl.capital", + description: "Snowbl Capital is an on-chain capital allocator with an USDC vault diversifying across funding, lending, farming, and market-neutral arbitrage to pursue risk-managed yield.", + chain: "Base", + logo: `${baseIconsUrl}/snowbl-capital.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Onchain Capital Allocator", + chains: ["Base"], + module: "snowbl-capital.js", + twitter: "snowblcapital", + forkedFromIds: [], + github: ["snowbl-capital"], + listedAt: 1759245833 + }, + { + id: "6787", + name: "Blend Money", + address: null, + symbol: "-", + url: "https://blend.money/", + description: "Blend is the programmable savings layer for DeFi, powering safe, sustainable yield for chains, wallets, stablecoins, and on-chain apps. Every deposit lives in a signer-bound Safe with automated risk protections. There are no pooled vaults, no custodial risk, and no lockups. Just real-time routing, real yield, and full control. Curators plug in capital strategies through a modular strategy layer, and Blend orchestrates allocation across chains and protocols.", + chain: "Botanix", + logo: `${baseIconsUrl}/blend-money.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Onchain Capital Allocator", + chains: ["Botanix", "Scroll"], + module: "blend/index.js", + twitter: "blend_money", + forkedFromIds: [], + oraclesBreakdown: [ + { + name: "Chainlink", + type: "Primary", + proof: ["https://github.com/blendmoney/blend-contracts/blob/main/contracts/oracles/MorphoChainlinkOracleV2.sol"] + } + ], + audit_links: [ + "https://docs.blend.money/static/audits/cantinacode-blend-25-08-10-0.pdf", + "https://docs.blend.money/static/audits/cantinacode-blend-25-09-29-0.pdf", + "https://docs.blend.money/static/audits/cantinacode-blend-25-09-29-1.pdf" + ], + github: ["blendmoney"], + listedAt: 1759246067 + }, ]; export default data4; From 3bf514a83b984cee51a69343ddb6c6c8efbc140f Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 30 Sep 2025 16:38:05 +0100 Subject: [PATCH 016/398] More Chain Assets 2 (#10719) * temp skip cache * reimplement cache * bridged tvl 2 * starknet btcs * midas tokens starknet * plasma xusd * GREEN * more chain assets 2 --- coins/src/adapters/markets/curve/index.ts | 1 + coins/src/adapters/tokenMapping.json | 5 + defi/l2/types.ts | 3 + defi/l2/v2/index.ts | 114 ++++++++++----- defi/l2/v2/storeToDb.ts | 162 ++++++++++++++++++++++ 5 files changed, 253 insertions(+), 32 deletions(-) create mode 100644 defi/l2/v2/storeToDb.ts diff --git a/coins/src/adapters/markets/curve/index.ts b/coins/src/adapters/markets/curve/index.ts index 99037b0e3e..43f2b64c26 100644 --- a/coins/src/adapters/markets/curve/index.ts +++ b/coins/src/adapters/markets/curve/index.ts @@ -132,6 +132,7 @@ export function curve5(timestamp: number = 0) { export function curve6(timestamp: number = 0) { return Promise.all([ getTokenPrices2("base", [], timestamp, "eth-custom", [ + "0xd6c283655B42FA0eb2685F7AB819784F071459dc", "0xf6c5f01c7f3148891ad0e19df78743d31e390d1f", "0x6e53131f68a034873b6bfa15502af094ef0c5854", "0x6dfe79cece4f64c1a34f48cf5802492ab595257e", diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index fb00139618..66501fc67a 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -12083,6 +12083,11 @@ } }, "plasma": { + "0x6eaf19b2fc24552925db245f9ff613157a7dbb4c": { + "decimals": "6", + "symbol": "xUSD", + "to": "asset#ethereum:0xe2fc85bfb48c4cf147921fbe110cf92ef9f26f94" + }, "0x0A1a1A107E45b7Ced86833863f482BC5f4ed82EF": { "to": "coingecko#usdai", "decimals": 18, diff --git a/defi/l2/types.ts b/defi/l2/types.ts index c1426a848b..5e9b9ff1f3 100644 --- a/defi/l2/types.ts +++ b/defi/l2/types.ts @@ -31,6 +31,9 @@ export type FinalChainData = { native: any; ownTokens: any; total: any; + rwa?: any; + lst?: any; + stablecoins?: any // metadata: any; }; export type FinalData = { diff --git a/defi/l2/v2/index.ts b/defi/l2/v2/index.ts index 362f998edd..a490d11040 100644 --- a/defi/l2/v2/index.ts +++ b/defi/l2/v2/index.ts @@ -16,6 +16,9 @@ import setEnvSecrets from "../../src/utils/shared/setEnvSecrets"; import { bridgedTvlMixedCaseChains, chainsThatShouldNotBeLowerCased } from "../../src/utils/shared/constants"; import { getR2JSONString, storeR2JSONString } from "../../src/utils/r2"; import { additional, excluded } from "../adapters/manual"; +import { storeHistoricalToDB } from "./storeToDb"; +import { stablecoins } from "../../src/getProtocols"; +import { metadata as rwaMetadata } from "../../src/rwa/protocols"; const searchWidth = 10800; // 3hr @@ -65,16 +68,16 @@ async function fetchNativeAndMcaps( if (ownTokenCgid) storedTokens.push(ownTokenCgid); let prices: { [token: string]: CoinsApiData } = {}; - // try { - // prices = await getR2JSONString(`prices/${chain}.json`); - // } catch (e) { - // console.log(`${chain} prices not cached, fetching`); + try { + prices = await getR2JSONString(`prices/${chain}.json`); + } catch (e) { + console.log(`${chain} prices not cached, fetching`); prices = await getPrices( storedTokens.map((t: string) => normalizeKey(t.startsWith("coingecko:") ? t : `${chain}:${t}`)), timestamp ); - // await storeR2JSONString(`prices/${chain}.json`, JSON.stringify(prices)); - // } + await storeR2JSONString(`prices/${chain}.json`, JSON.stringify(prices)); + } Object.keys(prices).map((p: string) => { if (p.startsWith("coingecko:")) prices[p].decimals = 0; @@ -82,31 +85,33 @@ async function fetchNativeAndMcaps( }); let mcaps: { [token: string]: McapsApiData } = {}; - // try { - // mcaps = await getR2JSONString(`mcaps/${chain}.json`); - // } catch (e) { - // console.log(`${chain} mcaps not cached, fetching`); + try { + mcaps = await getR2JSONString(`mcaps/${chain}.json`); + } catch (e) { + console.log(`${chain} mcaps not cached, fetching`); mcaps = await getMcaps(Object.keys(prices), timestamp); - // await storeR2JSONString(`mcaps/${chain}.json`, JSON.stringify(mcaps)); - // } + await storeR2JSONString(`mcaps/${chain}.json`, JSON.stringify(mcaps)); + } Object.keys(mcaps).map((m: string) => { allMcaps[m] = mcaps[m]; }); let supplies; - // try { - // supplies = await getR2JSONString(`supplies/${chain}.json`); - // if (ownTokenCgid && mcaps[ownTokenCgid]) supplies[ownTokenCgid] = mcaps[ownTokenCgid].mcap / prices[ownTokenCgid].price; - // } catch (e) { - // console.log(`${chain} supplies not cached, fetching`); + try { + supplies = await getR2JSONString(`supplies/${chain}.json`); + if (ownTokenCgid && mcaps[ownTokenCgid]) + supplies[ownTokenCgid] = mcaps[ownTokenCgid].mcap / prices[ownTokenCgid].price; + } catch (e) { + console.log(`${chain} supplies not cached, fetching`); supplies = await fetchSupplies( chain, Object.keys(prices).map((t: string) => t.substring(t.indexOf(":") + 1)), timestamp ); - if (ownTokenCgid && mcaps[ownTokenCgid]) supplies[ownTokenCgid] = mcaps[ownTokenCgid].mcap / prices[ownTokenCgid].price; + if (ownTokenCgid && mcaps[ownTokenCgid]) + supplies[ownTokenCgid] = mcaps[ownTokenCgid].mcap / prices[ownTokenCgid].price; await storeR2JSONString(`supplies/${chain}.json`, JSON.stringify(supplies)); - // } + } chainData[chain] = { prices, mcaps, supplies }; @@ -241,6 +246,27 @@ async function fetchExcludedAmounts(timestamp: number) { return excludedAmounts; } +async function fetchStablecoinSymbols() { + const { peggedAssets } = await fetch("https://stablecoins.llama.fi/stablecoins").then((r) => r.json()); + const symbols = peggedAssets.map((s: any) => s.symbol); + const allSymbols = [...new Set([...symbols, ...stablecoins].map((t) => t.toUpperCase()))]; + return allSymbols; +} + +async function fetchLstSymbols() { + const assets = await fetch("https://yields.llama.fi/lsdRates").then((r) => r.json()); + const symbols = assets.map((s: any) => s.symbol.toUpperCase()); + return symbols; +} + +function fetchRwaSymbols() { + const symbols: string[] = []; + Object.values(rwaMetadata).map(({ matchExact, symbols }: { matchExact: boolean; symbols: string[] }) => { + if (matchExact) symbols.push(...symbols); + }); + return symbols; +} + function normalizeKey(key: string) { if (key.startsWith("0x")) return `ethereum:${key.toLowerCase()}`; const [chain, address] = key.split(":"); @@ -249,10 +275,9 @@ function normalizeKey(key: string) { return key.toLowerCase(); } -function isOwnToken(chain: string, address: string, allPrices: { [token: string]: CoinsApiData }) { +function isOwnToken(chain: string, symbol: string) { const ownToken = ownTokens[chain]; if (!ownToken) return false; - const symbol = allPrices[address].symbol.toUpperCase(); if (symbol.startsWith("W")) { const unwrappedSymbol = symbol.substring(1); @@ -269,6 +294,9 @@ async function main() { const incomingAssets = await fetchIncomingAssetsList(); const excludedAmounts = await fetchExcludedAmounts(timestamp); const { chainData, allPrices, allMcaps } = await fetchNativeAndMcaps(timestamp); + const stablecoinSymbols = await fetchStablecoinSymbols(); + const lstSymbols = await fetchLstSymbols(); + const rwaSymbols = fetchRwaSymbols(); const nativeDataAfterDeductions: { [chain: Chain]: { [token: string]: BigNumber } } = {}; allChainKeys.map((chain: Chain) => { @@ -324,6 +352,9 @@ async function main() { native: { breakdown: {} }, ownTokens: { breakdown: {} }, total: { breakdown: {} }, + rwa: { breakdown: {} }, + lst: { breakdown: {} }, + stablecoins: { breakdown: {} }, }; if (Object.values(protocolBridgeIds).includes(chain)) { const protocolAmount = protocolAmounts[chain]; @@ -336,12 +367,17 @@ async function main() { const coinData = allPrices[key]; if (!coinData || !coinData.price) return; - const finalAmount = BigNumber(coinData.price) - .times(protocolAmount[token]) - .div(BigNumber(10).pow(coinData.decimals)); + const amount = BigNumber(coinData.price).times(protocolAmount[token]).div(BigNumber(10).pow(coinData.decimals)); - rawData[chain][isOwnToken(chain, key, allPrices) ? "ownTokens" : "canonical"].breakdown[key] = finalAmount; - if (!isOwnToken(chain, key, allPrices)) rawData[chain].total.breakdown[key] = finalAmount; + const symbol = allPrices[key].symbol.toUpperCase(); // filter for rwa, lst, stablecoins + + let section = "canonical"; + if (isOwnToken(chain, symbol)) section = "ownTokens"; + else if (stablecoinSymbols.includes(symbol)) section = "stablecoins"; + else if (rwaSymbols.includes(symbol)) section = "rwa"; + else if (lstSymbols.includes(symbol)) section = "lst"; + rawData[chain][section as keyof FinalChainData].breakdown[key] = amount; + if (!isOwnToken(chain, symbol)) rawData[chain].total.breakdown[key] = amount; }); return; @@ -349,21 +385,23 @@ async function main() { Object.keys(nativeDataAfterMcaps[chain]).map((key: string) => { if (!allPrices[key]) return; + const symbol = allPrices[key].symbol.toUpperCase(); let section = "native"; - if (isOwnToken(chain, key, allPrices)) section = "ownTokens"; + if (isOwnToken(chain, symbol)) section = "ownTokens"; + else if (stablecoinSymbols.includes(symbol)) section = "stablecoins"; + else if (rwaSymbols.includes(symbol)) section = "rwa"; + else if (lstSymbols.includes(symbol)) section = "lst"; else if (incomingAssets[chain] && incomingAssets[chain].includes(key.substring(key.indexOf(":") + 1))) section = "thirdParty"; else if (!key.startsWith("coingecko:") && !key.startsWith(chain)) section = "canonical"; const amount = nativeDataAfterMcaps[chain][key]; - if (section == 'ownTokens') { - amount - } rawData[chain][section as keyof FinalChainData].breakdown[key] = amount; if (section != "ownTokens") rawData[chain].total.breakdown[key] = amount; }); }); + const symbolMap: { [key: string]: string } = (await getR2JSONString("chainAssetsSymbolMap")) ?? {}; const symbolData: FinalData = {}; Object.keys(rawData).map((chain: Chain) => { symbolData[chain] = { @@ -372,16 +410,21 @@ async function main() { native: { breakdown: {} }, ownTokens: { breakdown: {} }, total: { breakdown: {} }, + rwa: { breakdown: {} }, + lst: { breakdown: {} }, + stablecoins: { breakdown: {} }, }; Object.keys(rawData[chain]).map((section: string) => { Object.keys(rawData[chain][section as keyof FinalChainData].breakdown).map((key: string) => { const symbol = allPrices[key].symbol.toUpperCase(); symbolData[chain][section as keyof FinalChainData].breakdown[symbol] = rawData[chain][section as keyof FinalChainData].breakdown[key]; + if (!symbolMap[key]) symbolMap[key] = symbol; }); }); }); + const symbolMapPromise = storeR2JSONString("chainAssetsSymbolMap", JSON.stringify(symbolMap)); [rawData, symbolData].map((allData) => { Object.keys(allData).map((chain: Chain) => { let totalTotal = zero; @@ -405,6 +448,9 @@ async function main() { native: { breakdown: {} }, ownTokens: { breakdown: {} }, total: { breakdown: {} }, + rwa: { breakdown: {} }, + lst: { breakdown: {} }, + stablecoins: { breakdown: {} }, }; Object.keys(symbolData[chain]).map((section: string) => { const a = Object.entries(symbolData[chain][section as keyof FinalChainData].breakdown).sort((a: any, b: any) => @@ -425,7 +471,11 @@ async function main() { const rawDataJson = JSON.parse(JSON.stringify(rawData)); const symbolDataJson = JSON.parse(JSON.stringify(symbolData)); - return { rawDataJson, symbolDataJson }; + await Promise.all([ + symbolMapPromise, + storeHistoricalToDB({ timestamp: getCurrentUnixTimestamp(), value: rawData }), + storeR2JSONString("chainAssets2", JSON.stringify({ timestamp: getCurrentUnixTimestamp(), value: symbolData })), + ]); } -main(); // ts-node defi/l2/v2/index.ts \ No newline at end of file +main(); // ts-node defi/l2/v2/index.ts diff --git a/defi/l2/v2/storeToDb.ts b/defi/l2/v2/storeToDb.ts new file mode 100644 index 0000000000..b4d8bccf4f --- /dev/null +++ b/defi/l2/v2/storeToDb.ts @@ -0,0 +1,162 @@ +// timestamp, value + +import postgres from "postgres"; +import { queryPostgresWithRetry } from "../../src/utils/shared/bridgedTvlPostgres"; +import { getCurrentUnixTimestamp, getTimestampAtStartOfDay } from "../../src/utils/date"; +import { getR2JSONString } from "../../src/utils/r2"; +import { getChainDisplayName } from "../../src/utils/normalizeChain"; + +let auth: string[] = []; +const secondsInADay = 86400; +const columns: any = ["timestamp", "value"]; +async function iniDbConnection() { + auth = process.env.COINS2_AUTH?.split(",") ?? []; + if (!auth || auth.length != 3) throw new Error("there aren't 3 auth params"); + + return postgres(auth[0], { idle_timeout: 90 }); +} + +export async function storeHistoricalToDB(res: { timestamp: number; value: any }) { + const write: { timestamp: string; value: string } = { + timestamp: res.timestamp.toFixed(), + value: JSON.stringify(res.value), + }; + const sql = await iniDbConnection(); + + await queryPostgresWithRetry( + sql` + insert into chainassets2 + ${sql([write], ...columns)} + `, + sql + ); + + // delete old hourly datas here?? + sql.end(); +} + +export async function fetchHistoricalFromDB(chain: string | undefined = undefined, isRaw: boolean = false) { + const sql = await iniDbConnection(); + + const timestamps = await queryPostgresWithRetry(sql`select timestamp from chainassets2`, sql); + const dailyEntries = findDailyTimestamps(timestamps); + const dailyData = await queryPostgresWithRetry( + sql`select * from chainassets2 where timestamp in ${sql(dailyEntries)}`, + sql + ); + sql.end(); + + const data = chain + ? dailyData.map((d: any) => ({ timestamp: d.timestamp, [chain]: JSON.parse(d.value)[chain] })) + : dailyData.map((d: any) => ({ timestamp: d.timestamp, ...JSON.parse(d.value) })); + + if (isRaw) return data; + + const symbolMap: { [key: string]: string } = await getR2JSONString("chainAssetsSymbolMap"); + + const symbolData: any[] = []; + data.map((d: any) => { + const symbolEntry: any = { timestamp: d.timestamp }; + Object.keys(d).forEach((chain: string) => { + if (chain == "timestamp") return; + const readableChain = getChainDisplayName(chain, true); + symbolEntry[readableChain] = {}; + Object.keys(d[chain]).map((section) => { + symbolEntry[readableChain][section] = { total: d[chain][section].total, breakdown: {} }; + Object.keys(d[chain][section].breakdown).forEach((asset: string) => { + if (!symbolMap[asset]) { + console.log(`${asset} not found in symbolMap`); + return; + } + symbolEntry[readableChain][section].breakdown[symbolMap[asset]] = d[chain][section].breakdown[asset]; + }); + }); + }); + symbolData.push(symbolEntry); + }); + + return symbolData; +} + +export async function fetchChartData(chain: string) { + const allHistorical = await fetchHistoricalFromDB(chain) + const chartData: any[] = [] + allHistorical.map((h: any) => { + const entry: any = { timestamp: h.timestamp } + Object.keys(h).map((chain: string) => { + if (chain == "timestamp") return; + const totalsOnly: { [key: string]: string } = {} + Object.keys(h[chain]).map((section: string) => { + totalsOnly[section] = h[chain][section].total + }) + entry[chain] = totalsOnly + }) + chartData.push(entry) + }) + return chartData +} + +function findDailyTimestamps(timestamps: { timestamp: number }[]): number[] { + const end = getTimestampAtStartOfDay(getCurrentUnixTimestamp()); + + const start = getTimestampAtStartOfDay(timestamps[timestamps.length - 1].timestamp + secondsInADay); + const dailyTimestamps = [timestamps[timestamps.length - 1].timestamp]; + + for (let i = start; i < end; i += secondsInADay) { + const timestamp = timestamps.reduce((prev, curr) => + Math.abs(curr.timestamp - i) < Math.abs(prev.timestamp - i) ? curr : prev + ); + dailyTimestamps.push(timestamp.timestamp); + } + return dailyTimestamps; +} + +export async function fetchFlows(period: number = secondsInADay) { + const sql = await iniDbConnection(); + const targetEnd = getCurrentUnixTimestamp(); + const targetStart = targetEnd - period * 1.5; + const datas: any[] = await queryPostgresWithRetry( + sql`select * from chainassets2 where timestamp > ${targetStart}`, + sql + ); + + const actualStart = datas.reduce((prev, curr) => + Math.abs(curr.timestamp - targetStart) < Math.abs(prev.timestamp - targetStart) ? curr : prev + ); + const actualEnd = datas.reduce((prev, curr) => + Math.abs(curr.timestamp - targetEnd) < Math.abs(prev.timestamp - targetEnd) ? curr : prev + ); + + const startData = JSON.parse(datas.find((d) => d.timestamp == actualStart.timestamp)?.value ?? "{}"); + const endData = JSON.parse(datas.find((d) => d.timestamp == actualEnd.timestamp)?.value ?? "{}"); + + const flows: any = {}; + Object.keys(endData).map((chain) => { + const readableChain = getChainDisplayName(chain, true); + flows[readableChain] = {}; + Object.keys(endData[chain]).map((section) => { + flows[readableChain][section] = {}; + const startValue = startData[chain]?.[section]?.total ?? 0; + const endValue = endData[chain][section].total; + const raw = endValue - startValue; + const perc = (raw / startValue) * 100; + flows[readableChain][section].raw = raw; + flows[readableChain][section].perc = perc; + }); + }); + + return flows; +} + +export async function fetchCurrentChainAssets() { + const res = await getR2JSONString("chainAssets2"); + + const readable: any = { timestamp: res.timestamp }; + Object.keys(res.value).map((chain) => { + const readableChain = getChainDisplayName(chain, true); + readable[readableChain] = res.value[chain]; + }); + + return readable; +} +// fetchFlows(); // ts-node defi/l2/v2/storeToDb.ts From 5f3835d93abade7c5d083b8b9f6205cf1e006b40 Mon Sep 17 00:00:00 2001 From: tree Date: Tue, 30 Sep 2025 23:48:11 +0530 Subject: [PATCH 017/398] genuine dailybribe for aerodrome-slipstream (#10720) --- defi/src/protocols/data3.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index de2cee1e9c..e36c2794b0 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -43141,7 +43141,10 @@ const data3_2: Protocol[] = [ listedAt: 1714088562, dimensions: { fees: "aerodrome-slipstream", - dexs: "aerodrome-slipstream" + dexs: { + adapter: "aerodrome-slipstream", + genuineSpikes: ["1757548800"] + } } }, { From 90ffc4cfc189c029575b318f340f557a8b6a811e Mon Sep 17 00:00:00 2001 From: mintdart <96025197+mintdart@users.noreply.github.com> Date: Tue, 30 Sep 2025 13:17:40 -0700 Subject: [PATCH 018/398] update stablecoins list (#10722) --- defi/src/protocols/data3.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index e36c2794b0..3bc0faf412 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -54456,7 +54456,7 @@ const data3_2: Protocol[] = [ module: "dummy.js", twitter: "circle", audit_links: [], - stablecoins: ["usdc"], + stablecoins: ["usd-coin"], dimensions: { fees: "circle" } @@ -54481,7 +54481,7 @@ const data3_2: Protocol[] = [ module: "dummy.js", twitter: "Tether_to", audit_links: [], - stablecoins: ["usdt"], + stablecoins: ["tether"], dimensions: { fees: "tether" } From 824d2990314f84af67a88952d1addb76989032c8 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 30 Sep 2025 14:40:21 -0600 Subject: [PATCH 019/398] add new listings --- defi/src/protocols/data4.ts | 121 ++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 6267e5c8b2..f1edef422b 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29499,5 +29499,126 @@ const data4: Protocol[] = [ github: ["blendmoney"], listedAt: 1759246067 }, + { + id: "6788", + name: "246Club", + address: null, + symbol: "-", + url: "https://www.246club.xyz/", + description: "246 Club extends credit from lending protocols, allocates it to yield sources, and captures the spread.", + chain: "Plasma", + logo: `${baseIconsUrl}/246club.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Lending", + chains: ["Plasma"], + module: "246Club/index.js", + twitter: "246_club", + forkedFromIds: [], + oraclesBreakdown: [ + { + name: "Chainlink", + type: "Primary", + proof: ["https://github.com/DefiLlama/DefiLlama-Adapters/pull/16460"] + } + ], + audit_links: ["https://docs.246club.xyz/docs/resources/security"], + github: ["246club"], + listedAt: 1759263432 + }, + { + id: "6789", + name: "Solstice USX", + address: null, + symbol: "-", + url: "https://solstice.finance/", + description: "Solstice is a synthetic stablecoin protocol built on Solana", + chain: "Solana", + logo: `${baseIconsUrl}/solstice-usx.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Basis Trading", + chains: ["Solana"], + module: "solstice-usx/index.js", + twitter: "solsticefi", + forkedFromIds: [], + oraclesBreakdown: [ + { + name: "Pyth", + type: "Primary", + proof: ["https://github.com/DefiLlama/DefiLlama-Adapters/pull/16456"] + } + ], + audit_links: ["https://storage.googleapis.com/dapp_prod/audit_reports/halborn_program_audit_250605.pdf"], + listedAt: 1759263438 + }, + { + id: "6790", + name: "Falcon Finance", + address: null, + symbol: "-", + url: "https://falcon.finance/", + description: "Falcon Finance is the first universal collateralization infrastructure protocol that creates sustainable yield opportunities.", + chain: "Ethereum", + logo: `${baseIconsUrl}/falcon-finance.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Basis Trading", + chains: ["Ethereum"], + module: "falcon-finance/index.js", + twitter: "falconstable", + forkedFromIds: [], + audit_links: ["https://docs.falcon.finance/resources/audits#smart-contract-audits"], + listedAt: 1759263444 + }, + { + id: "6791", + name: "Ionex", + address: "plasma:0x133a09Dd6169f6F0509658a911F2a82Fc8ab6A0D", + symbol: "INX", + url: "https://ionex.trade", + description: "Plasma's native on-chain liquidity marketplace for stablecoins, combining a capital-efficient AMM with integrated perpetual trading for next-gen DeFi.", + chain: "Plasma", + logo: `${baseIconsUrl}/ionex.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Plasma"], + module: "ionex-v1/index.js", + twitter: "IonexTrade", + forkedFromIds: ["1407"], + audit_links: ["https://docs.ionex.trade/info-and-security/audits"], + listedAt: 1759263452 + }, + { + id: "6792", + name: "Ploutos Money", + address: null, + symbol: "-", + url: "https://ploutos.money/", + description: "Ploutos is a non-custodial money market and leveraged farming platform.", + chain: "Polygon", + logo: `${baseIconsUrl}/ploutos-money.jpg`, + audits: "1", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Lending", + chains: ["Polygon", "Katana", "Arbitrum", "Base", "Plasma"], + module: "ploutos/index.js", + twitter: "ploutos_money", + forkedFromIds: ["1599"], + audit_links: [], + github: ["ploutusFi"], + listedAt: 1759263458 + }, ]; export default data4; From 4dccd5f4662af780d816744f2841a7fc9e840225 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 30 Sep 2025 23:40:42 +0200 Subject: [PATCH 020/398] disable pacaswap volume --- defi/src/protocols/data4.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index f1edef422b..3718b5ed39 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29320,8 +29320,8 @@ const data4: Protocol[] = [ forkedFromIds: [], parentProtocol: "parent#pacaswap", dimensions: { - dexs: "pacaswap", - fees: "pacaswap" + // dexs: "pacaswap", // disabled as the api was returning cummulative data + // fees: "pacaswap" } }, { From 55bb9db78ddacc3048747fa2c8c079e3e751a0b4 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 30 Sep 2025 18:11:13 -0600 Subject: [PATCH 021/398] add ploutos money treasury --- defi/DefiLlama-Adapters | 2 +- defi/src/protocols/data4.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/defi/DefiLlama-Adapters b/defi/DefiLlama-Adapters index 6c42def799..6315a4e549 160000 --- a/defi/DefiLlama-Adapters +++ b/defi/DefiLlama-Adapters @@ -1 +1 @@ -Subproject commit 6c42def7990ea26663da9cd8a96de84c7b34d997 +Subproject commit 6315a4e549388cbc15ed68a89bb0971e506d2b88 diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 3718b5ed39..814a396a36 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29618,6 +29618,7 @@ const data4: Protocol[] = [ forkedFromIds: ["1599"], audit_links: [], github: ["ploutusFi"], + treasury: "ploutos-money.js", listedAt: 1759263458 }, ]; From c2544ced4fe10f71943f36eaea4e11949d8014ac Mon Sep 17 00:00:00 2001 From: 0xAnon0602 Date: Wed, 1 Oct 2025 06:14:16 +0530 Subject: [PATCH 022/398] Update Flow lending Info (#10721) * updating flow-lendig info * update from jpg to png * updated more info * revert module name change --------- Co-authored-by: Real Shaman <85087525+realdealshaman@users.noreply.github.com> --- defi/src/protocols/data4.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 814a396a36..73bde9a4e3 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -22703,14 +22703,14 @@ const data4: Protocol[] = [ }, { id: "6494", - name: "Flow Lending", + name: "Surf Lending", address: "cardano:2d9db8a89f074aa045eab177f23a3395f62ced8b53499a9e4ad46c80.464c4f57", - symbol: "FLOW", - url: "https://flowcardano.org/app", + symbol: "SURF", + url: "https://surflending.org/", description: - "Flow is a capital-efficient pooled lending protocol enabling investors to earn interest and borrowers to obtain instant loans on Cardano", + "Surf Lending is a capital-efficient pooled lending protocol enabling investors to earn interest and borrowers to obtain instant loans on Cardano", chain: "Cardano", - logo: `${baseIconsUrl}/flow-lending.jpg`, + logo: `${baseIconsUrl}/surf-lending.png`, audits: "2", audit_note: null, gecko_id: "flow-lending", @@ -22719,7 +22719,7 @@ const data4: Protocol[] = [ chains: ["Cardano"], forkedFromIds: [], module: "flow/index.js", - twitter: "flowdefi", + twitter: "surfcardano", audit_links: [ "https://github.com/flow-lending/flow-lending-smart-contracts/blob/main/audits/flow_lending_audit-2025-07-07.pdf", ], From b4e00f722bfb48b5d393251e1378e7701a3ba2a4 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 30 Sep 2025 18:45:36 -0600 Subject: [PATCH 023/398] include previous name --- defi/DefiLlama-Adapters | 2 +- defi/src/protocols/data4.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/defi/DefiLlama-Adapters b/defi/DefiLlama-Adapters index 6315a4e549..9edc144925 160000 --- a/defi/DefiLlama-Adapters +++ b/defi/DefiLlama-Adapters @@ -1 +1 @@ -Subproject commit 6315a4e549388cbc15ed68a89bb0971e506d2b88 +Subproject commit 9edc144925bcfeab2a825bb807a057935d82b614 diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 73bde9a4e3..d8c8d9a205 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -22704,6 +22704,7 @@ const data4: Protocol[] = [ { id: "6494", name: "Surf Lending", + previousNames: ["Flow Lending"], address: "cardano:2d9db8a89f074aa045eab177f23a3395f62ced8b53499a9e4ad46c80.464c4f57", symbol: "SURF", url: "https://surflending.org/", From 7f75f546f0e3de8a566c63b25eae37c9e7e6df3b Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 30 Sep 2025 20:34:53 -0600 Subject: [PATCH 024/398] add new listing for xtrade protocol perps --- defi/src/protocols/data4.ts | 31 ++++++++++++++++++++++++--- defi/src/protocols/parentProtocols.ts | 11 ++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index d8c8d9a205..6f2ce53772 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29238,13 +29238,13 @@ const data4: Protocol[] = [ }, { id: "6776", - name: "XTrade Protocol", + name: "XTrade Protocol Spot", address: null, symbol: "-", url: "https://xtrade.gg/", description: "XTrade is a high-performance, all-in-one trading terminal for DeFi — currently supporting Solana Spot and Hyperliquid Perpetuals. Designed for both beginners and pros, XTrade removes the friction of decentralized finance while offering powerful tools once out of reach for the average trader", chain: "Solana", - logo: `${baseIconsUrl}/xtrade-protocol.jpg`, + logo: `${baseIconsUrl}/xtrade-protocol-spot.jpg`, audits: "0", audit_note: null, gecko_id: null, @@ -29254,8 +29254,10 @@ const data4: Protocol[] = [ module: "dummy.js", twitter: "xtrade_gg", forkedFromIds: [], + parentProtocol: "parent#xtrade-protocol", dimensions: { - fees: "xtrade-protocol" + fees: "xtrade-protocol", + } }, { @@ -29622,5 +29624,28 @@ const data4: Protocol[] = [ treasury: "ploutos-money.js", listedAt: 1759263458 }, + { + id: "6776", + name: "XTrade Protocol Perps", + address: null, + symbol: "-", + url: "https://xtrade.gg/", + description: "XTrade is a high-performance, all-in-one trading terminal for DeFi — currently supporting Solana Spot and Hyperliquid Perpetuals. Designed for both beginners and pros, XTrade removes the friction of decentralized finance while offering powerful tools once out of reach for the average trader", + chain: "Hyperliquid L1", + logo: `${baseIconsUrl}/xtrade-protocol-perps.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Derivatives", + chains: ["Hyperliquid L1"], + module: "dummy.js", + twitter: "xtrade_gg", + forkedFromIds: [], + parentProtocol: "parent#xtrade-protocol", + dimensions: { + fees: "xtrade-protocol-perps", + } + }, ]; export default data4; diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index 3c8f997aa0..c42d153151 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8074,6 +8074,17 @@ const parentProtocols: IParentProtocol[] = [ chains: [], twitter: "PacaSwap", }, + { + id: "parent#xtrade-protocol", + name: "XTrade Protocol", + url: "https://xtrade.gg/", + description: "XTrade is a high-performance, all-in-one trading terminal for DeFi — currently supporting Solana Spot and Hyperliquid Perpetuals. Designed for both beginners and pros, XTrade removes the friction of decentralized finance while offering powerful tools once out of reach for the average trader", + logo: `${baseIconsUrl}/xtrade-protocol.jpg`, + gecko_id: null, + cmcId: null, + chains: [], + twitter: "xtrade_gg", + }, ]; export default parentProtocols; From bc469b399bbee941c106c0751858b5bbcf08d697 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 30 Sep 2025 20:35:42 -0600 Subject: [PATCH 025/398] fix id --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 6f2ce53772..d408531585 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29625,7 +29625,7 @@ const data4: Protocol[] = [ listedAt: 1759263458 }, { - id: "6776", + id: "6793", name: "XTrade Protocol Perps", address: null, symbol: "-", From bb2b46ef8468f5183db7a4732ab8b9c6a9a5a3b9 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 30 Sep 2025 21:09:50 -0600 Subject: [PATCH 026/398] flag bucket farm as deprecated --- defi/src/protocols/data3.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 3bc0faf412..a674e5cf1c 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -66556,7 +66556,8 @@ const data3_2: Protocol[] = [ module: "bucket-farm/index.js", twitter: "bucket_protocol", parentProtocol: "parent#bucket-protocol", - listedAt: 1734642540 + listedAt: 1734642540, + deprecated: true, }, { id: "5531", From 9b2cc88463ba037fc2323e9caf8494a5f89e91cb Mon Sep 17 00:00:00 2001 From: eden Date: Wed, 1 Oct 2025 13:38:53 +0700 Subject: [PATCH 027/398] add whitelist spike (#10724) From 2a791c6a68276c5b87ed8a417a4ab2ef756300c4 Mon Sep 17 00:00:00 2001 From: eden Date: Wed, 1 Oct 2025 13:44:57 +0700 Subject: [PATCH 028/398] add aero fees spike (#10726) --- defi/src/protocols/data3.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index a674e5cf1c..b9b6a596a0 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -43140,7 +43140,10 @@ const data3_2: Protocol[] = [ parentProtocol: "parent#aerodrome", listedAt: 1714088562, dimensions: { - fees: "aerodrome-slipstream", + fees: { + adapter: "aerodrome-slipstream", + genuineSpikes: ["1757548800"], + }, dexs: { adapter: "aerodrome-slipstream", genuineSpikes: ["1757548800"] From 294ad5e40ee4f3c6b27ca01b0450b367e0828c38 Mon Sep 17 00:00:00 2001 From: Define101 Date: Wed, 1 Oct 2025 09:21:11 +0100 Subject: [PATCH 029/398] add price syrupUSDT --- coins/src/adapters/tokenMapping.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index 66501fc67a..e6727c75c3 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -12137,6 +12137,11 @@ "to": "coingecko#plasma", "decimals": 18, "symbol": "XPL" + }, + "0xc4374775489cb9c56003bf2c9b12495fc64f0771": { + "to": "coingecko#syrupusdt", + "decimals": 6, + "symbol": "syrupUSDT" } }, "xone": { From 475abcaca5dfa729ad1cd99fbc2bc384543da4c6 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 1 Oct 2025 10:15:25 +0100 Subject: [PATCH 030/398] coins (#10727) * temp skip cache * reimplement cache * bridged tvl 2 * starknet btcs * midas tokens starknet * plasma xusd * GREEN * more chain assets 2 * plasma curve * ryt * teth --- coins/src/adapters/markets/curve/contracts.json | 5 +++++ coins/src/adapters/markets/curve/index.ts | 9 +++++++++ coins/src/adapters/tokenMapping.json | 5 +++++ coins/src/adapters/yield/derivs.ts | 12 ++++++++++++ 4 files changed, 31 insertions(+) diff --git a/coins/src/adapters/markets/curve/contracts.json b/coins/src/adapters/markets/curve/contracts.json index e73e48c2d1..b7ebd2999b 100644 --- a/coins/src/adapters/markets/curve/contracts.json +++ b/coins/src/adapters/markets/curve/contracts.json @@ -153,5 +153,10 @@ "addressProvider": "0x87FE17697D0f14A222e8bEf386a0860eCffDD617", "gasTokenDummy": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "wrapped": "0x039e2fb66102314ce7b64ce5ce3e5183bc94ad38" + }, + "plasma": { + "addressProvider": "0x4574921eb950d3Fd5B01562162EC566Cb8bc3648", + "gasTokenDummy": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "wrapped": "0x6100E367285b01F48D07953803A2d8dCA5D19873" } } \ No newline at end of file diff --git a/coins/src/adapters/markets/curve/index.ts b/coins/src/adapters/markets/curve/index.ts index 43f2b64c26..3751fdb88b 100644 --- a/coins/src/adapters/markets/curve/index.ts +++ b/coins/src/adapters/markets/curve/index.ts @@ -200,6 +200,14 @@ export function curve15(timestamp: number = 0) { // getGaugePrices("sonic", timestamp), ]); } +export function curve16(timestamp: number = 0) { + return Promise.all([ + getTokenPrices2("plasma", [], timestamp, "eth-custom", [ + "0x2D84D79C852f6842AbE0304b70bBaA1506AdD457", + '0x1e8d78e9b3f0152d54d32904b7933f1cfe439df1' + ]), + ]); +} export const adapters = { curve, @@ -218,4 +226,5 @@ export const adapters = { curve13, curve14, curve15, + curve16 }; diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index e6727c75c3..7d39e31ba2 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -2107,6 +2107,11 @@ } }, "avax": { + "0xd09ACb80C1E8f2291862c4978A008791c9167003": { + "decimals": "18", + "symbol": "tETH", + "to": "coingecko#treehouse-eth" + }, "0x2f643d728926C20269f0A04931dd7b4b6B650204": { "decimals": "18", "symbol": "SHIB", diff --git a/coins/src/adapters/yield/derivs.ts b/coins/src/adapters/yield/derivs.ts index 92c32ad6b8..750ff14919 100644 --- a/coins/src/adapters/yield/derivs.ts +++ b/coins/src/adapters/yield/derivs.ts @@ -555,6 +555,18 @@ const configs: { [adapter: string]: Config } = { chain: "ethereum", underlying: "0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f", address: "0x1a88Df1cFe15Af22B3c4c783D4e6F7F9e0C1885d", + }, + RYT: { + rate: async ({ api }) => { + const rate = await api.call({ + abi: "uint256:latestNAV", + target: "0x75bA0077D78c78e24018C2dFDC4722493b281014", + }); + return rate / 1e4; + }, + chain: "ethereum", + underlying: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + address: "0x1D06aa46994f2aba30F6eeD46b315664460a709A", } }; From 3ece5960aa4e91c3b43bf97a921f20e684c17105 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 1 Oct 2025 12:09:54 +0200 Subject: [PATCH 031/398] add price support for plasma tokens --- coins/src/adapters/yield/misc4626/tokens.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/coins/src/adapters/yield/misc4626/tokens.json b/coins/src/adapters/yield/misc4626/tokens.json index 30f7d11914..1254b25a7d 100644 --- a/coins/src/adapters/yield/misc4626/tokens.json +++ b/coins/src/adapters/yield/misc4626/tokens.json @@ -257,5 +257,10 @@ }, "bsc": { "satUSD+": "0x03d9C4E4BC5D3678A9076caC50dB0251D8676872" + }, + "plasma": { + "fUSDT0": "0x1dd4b13fcae900c60a350589be8052959d2ed27b", + "k3USDT": "0xe818ad0d20d504c55601b9d5e0e137314414dec4", + "Re7USDT0Core": "0xa5eed1615cd883dd6883ca3a385f525e3beb4e79" } } \ No newline at end of file From a6e38c7affeff12d6ef942b1ae078966a7b9af02 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 1 Oct 2025 11:25:29 +0100 Subject: [PATCH 032/398] more tokens (#10728) * temp skip cache * reimplement cache * bridged tvl 2 * starknet btcs * midas tokens starknet * plasma xusd * GREEN * more chain assets 2 * plasma curve * ryt * teth * plasma assets * xsbtc --- coins/src/adapters/tokenMapping.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index 7d39e31ba2..bff82b29df 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -5462,7 +5462,12 @@ "0x43a35c1425a0125ef8c171f1a75c6f31ef8648edcc8324b55ce1917db3f9b91": { "decimals": "18", "symbol": "xtBTC", - "to": "coingecko#true-btc" + "to": "coingecko#tbtc" + }, + "0x580f3dC564a7B82f21d40d404b3842D490aE7205e6ac07B1b7Af2b4A5183dC9":{ + "decimals": "18", + "symbol": "xSBTC", + "to": "coingecko#solv-btc" }, "0x7dd3c80de9fcc5545f0cb83678826819c79619ed7992cc06ff81fc67cd2efe0": { "decimals": "8", From e496acfb4bec2f8da309da1d18b0f0f9e10cbc3f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 1 Oct 2025 13:38:04 +0200 Subject: [PATCH 033/398] price jupAg tokens --- coins/src/adapters/solana/jupAg.ts | 57 +++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/coins/src/adapters/solana/jupAg.ts b/coins/src/adapters/solana/jupAg.ts index 04d773eedd..2ad9cd3c26 100644 --- a/coins/src/adapters/solana/jupAg.ts +++ b/coins/src/adapters/solana/jupAg.ts @@ -8,38 +8,38 @@ import { sliceIntoChunks } from '@defillama/sdk/build/util'; import axios from 'axios' import { addToDBWritesList } from '../utils/database'; -const additionalTokens = [ - 'sctmB7GPi5L2Q5G9tUSzXvhZ4YiDMEGcRov9KfArQpx', - 'roxDFxTFHufJBFy3PgzZcgz6kwkQNPZpi9RfpcAv4bu', - '4yCLi5yWGzpTWMQ1iWHG5CrGYAdBkhyEdsuSugjDUqwj', - 'HN8GGgzBFvuePPL3DGPg7uuq2dVgLApnNcW4pxY9a11o', - '5fKr9joRHpioriGmMgRVFdmZge8EVUTbrWyxDVdSrcuG', - 'B8GKqTDGYc7F6udTHjYeazZ4dFCRkrwK2mBQNS4igqTv', - 'ALTP6gug9wv5mFtx2tSU1YYZ1NrEc2chDdMPoJA8f8pu', - 'AVw2QGVkXJPRPRjLAceXVoLqU5DVtJ53mdgMXp14yGit', +const whitelistedTokens = new Set([ + 'sctmB7GPi5L2Q5G9tUSzXvhZ4YiDMEGcRov9KfArQpx', + 'roxDFxTFHufJBFy3PgzZcgz6kwkQNPZpi9RfpcAv4bu', + '4yCLi5yWGzpTWMQ1iWHG5CrGYAdBkhyEdsuSugjDUqwj', + // 'HN8GGgzBFvuePPL3DGPg7uuq2dVgLApnNcW4pxY9a11o', + '5fKr9joRHpioriGmMgRVFdmZge8EVUTbrWyxDVdSrcuG', + 'B8GKqTDGYc7F6udTHjYeazZ4dFCRkrwK2mBQNS4igqTv', + 'ALTP6gug9wv5mFtx2tSU1YYZ1NrEc2chDdMPoJA8f8pu', + 'AVw2QGVkXJPRPRjLAceXVoLqU5DVtJ53mdgMXp14yGit', 'FJug3z58gssSTDhVNkTse5fP8GRZzuidf9SRtfB2RhDe' -] +]) async function getTokensWithCGMapping() { const tokens = (await bridgedTokens()).map((token) => token.from.replace('solana:', '')); return new Set(tokens) } -export async function jupAg(timestamp: number) { +async function _jupAg(timestamp: number) { if (timestamp != 0) throw new Error('jupAg adapter only supports timestamp 0') - const tokens = await getTokensWithCGMapping() + // const tokens = await getTokensWithCGMapping() let lavaTokens = await getLavaTokens() - lavaTokens = additionalTokens // [...additionalTokens, ...lavaTokens.filter((token) => !tokens.has(token))] + lavaTokens = [...whitelistedTokens] // [...additionalTokens, ...lavaTokens.filter((token) => !tokens.has(token))] const lavaTokensPK = lavaTokens.map(i => new PublicKey(i)) const symbolMap = await getTokenSymbolMap(lavaTokens) const writes: Write[] = []; const connection = await getConnection() - const chunks = sliceIntoChunks(lavaTokensPK, 99) + const chunks = sliceIntoChunks(lavaTokensPK, 49) for (const chunk of chunks) { const { value } = await connection.getMultipleParsedAccounts(chunk) const keyStr = chunk.join(',') - const jupCall = `https://lite-api.jup.ag/price/v2?ids=${keyStr}&showExtraInfo=true` + const jupCall = `https://lite-api.jup.ag/price/v3?ids=${keyStr}&showExtraInfo=true` const { data: { data } } = await axios.get(jupCall) const tokenData = [] as any chunk.forEach((pk, i) => { @@ -55,7 +55,7 @@ export async function jupAg(timestamp: number) { symbol, price: +priceData.price, decimals: info.decimals, - confidence: priceData.extraInfo.confidenceLevel, + // confidence: priceData.extraInfo.confidenceLevel, sol10Sell: priceData.extraInfo.depth.sellPriceImpactRatio.depth['10'], }) @@ -66,5 +66,30 @@ export async function jupAg(timestamp: number) { } + return writes; +} + + +export async function jupAg(timestamp: number) { + if (timestamp != 0) throw new Error('jupAg adapter only supports timestamp 0') + + const writes: Write[] = [] + + const { data } = await axios.get('https://lite-api.jup.ag/tokens/v2/tag?query=verified') + + data.forEach((i: any) => { + const isWhitelisted = whitelistedTokens.has(i.id) || i.tags?.includes('jup-lend-earn') + if (!isWhitelisted) { + if (!(i.mcap > 5_000_000)) return; // minimum mcap 5M + if (!(i.liquidity > 50_000)) return; // minimum liquidity 50k + if (i.mcap > 5e7 && i.liquidity < 100_000) return; // if mcap > 50M, min liquidity 100k + if (i.mcap > 1e8 && i.liquidity < 200_000) return; // if mcap > 100M, min liquidity 200k + if (i.mcap > 2e8 && i.liquidity < 400_000) return; // if mcap > 200M, min liquidity 500k + } + addToDBWritesList(writes, 'solana', i.id, i.usdPrice, i.decimals, i.symbol, timestamp, 'jup-ag', 0.9) + }) + + + return writes; } From 2e16666f8d95af7b7817a4a321c094238a4c0914 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 1 Oct 2025 14:01:08 +0200 Subject: [PATCH 034/398] increase concurrency --- coins/src/scripts/defiCoins.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coins/src/scripts/defiCoins.ts b/coins/src/scripts/defiCoins.ts index 6dff2ff211..8765b01068 100644 --- a/coins/src/scripts/defiCoins.ts +++ b/coins/src/scripts/defiCoins.ts @@ -32,7 +32,7 @@ async function storeDefiCoins() { shuffleArray(protocolIndexes); const a = Object.entries(adapters); const timestamp = 0; - await PromisePool.withConcurrency(5) + await PromisePool.withConcurrency(13) .for(protocolIndexes) .process(async (i) => { const adapterKey = a[i][0]; From 978a5d1b36bb31203ed61b831ac05416e4c2d064 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 1 Oct 2025 14:01:54 +0200 Subject: [PATCH 035/398] coins: disable debug logging --- coins/src/adapters/bridges/index.ts | 6 +++--- coins/src/adapters/bridges/zklink.ts | 2 +- coins/src/adapters/markets/aftermath.ts | 2 +- .../adapters/markets/balancer/balancerV2.ts | 10 +++++----- .../adapters/markets/balancer/balancerV3.ts | 14 +++++++------- coins/src/adapters/markets/cetus.ts | 2 +- coins/src/adapters/markets/curve/curve2.ts | 4 ++-- coins/src/adapters/markets/graphCoins.ts | 2 +- coins/src/adapters/markets/minswap.ts | 2 +- .../src/adapters/markets/stargate/stargate.ts | 6 +++--- coins/src/adapters/other/gmxV2.ts | 2 +- coins/src/adapters/utils/erc20.ts | 1 + coins/src/adapters/utils/uniV2.ts | 18 +++++------------- coins/src/adapters/utils/updateTokenMapping.js | 4 ++-- coins/src/adapters/yield/apiDerivs.ts | 4 ++-- coins/src/adapters/yield/derivs.ts | 2 +- coins/src/adapters/yield/jeurx.ts | 8 +------- coins/src/adapters/yield/stakeDao/index.ts | 16 +++++++--------- coins/src/cli/checkWrongBlocks.ts | 2 +- 19 files changed, 46 insertions(+), 61 deletions(-) diff --git a/coins/src/adapters/bridges/index.ts b/coins/src/adapters/bridges/index.ts index e623a62200..a796645d3c 100644 --- a/coins/src/adapters/bridges/index.ts +++ b/coins/src/adapters/bridges/index.ts @@ -15,11 +15,11 @@ import avax from "./avax"; // import bsc from "./bsc"; // import brc20 from "./brc20"; import fantom from "./fantom"; -import era from "./era"; +// import era from "./era"; import gasTokens from "./gasTokens"; //import harmony from "./harmony"; import optimism from "./optimism"; -import polygon from "./polygon"; +// import polygon from "./polygon"; // import solana from "./solana"; // import xdai from "./xdai"; // import cosmos from "./cosmos"; @@ -40,7 +40,7 @@ import fuel from "./fuel"; import zircuit from "./zircuit"; import morph from "./morph"; import aptos from "./aptosFa"; -import sophon from "./sophon"; +// import sophon from "./sophon"; import unichan from "./unichain"; import flow from "./flow"; import layerzero from "./layerzero"; diff --git a/coins/src/adapters/bridges/zklink.ts b/coins/src/adapters/bridges/zklink.ts index a469a4be89..2474b4a490 100644 --- a/coins/src/adapters/bridges/zklink.ts +++ b/coins/src/adapters/bridges/zklink.ts @@ -32,7 +32,7 @@ export default async function bridge(): Promise { case 'optimism': sourceChain = 'optimism'; break; case 'primary': sourceChain = 'linea'; break; case 'scroll': sourceChain = 'scroll'; break; - default: console.log('zklink Unknown networkKey', token.networkKey) + // default: console.log('zklink Unknown networkKey', token.networkKey) } if (!sourceChain) return; tokens.push({ diff --git a/coins/src/adapters/markets/aftermath.ts b/coins/src/adapters/markets/aftermath.ts index 7a62d7d27b..7e12f8cb06 100644 --- a/coins/src/adapters/markets/aftermath.ts +++ b/coins/src/adapters/markets/aftermath.ts @@ -34,7 +34,7 @@ async function getTokenPrices(timestamp: number) { } const tokens = Array.from(tokenSet) const tokenChunks = sliceIntoChunks(tokens, 10) - console.log('Token chunks', tokens.length) + for (const chunk of tokenChunks) { const { data: coinPrices } = await axios.post('https://aftermath.finance/api/price-info', { coins: chunk }) const { data: coinMetadata } = await axios.post('https://aftermath.finance/api/coins/metadata', { coins: chunk }) diff --git a/coins/src/adapters/markets/balancer/balancerV2.ts b/coins/src/adapters/markets/balancer/balancerV2.ts index eb8fead4e4..eb1e2045b2 100644 --- a/coins/src/adapters/markets/balancer/balancerV2.ts +++ b/coins/src/adapters/markets/balancer/balancerV2.ts @@ -50,7 +50,7 @@ const chainToEnum: any = { async function getPoolIdsFromLogs(api: sdk.ChainApi, options: BalancerOptions) { const { poolConfig: { address, fromBlock } } = options - console.log('getPoolIdsFromLogs', address, fromBlock) + // console.log('getPoolIdsFromLogs', address, fromBlock) const logs = await getLogs({ api, target: address, @@ -60,7 +60,7 @@ async function getPoolIdsFromLogs(api: sdk.ChainApi, options: BalancerOptions) { }) const pools = logs.map((log: any) => log.pool) const poolIds = await api.multiCall({ abi: 'function getPoolId() view returns (bytes32)', calls: pools, permitFailure: true, }) - console.log('poolIds', poolIds.length, logs.length, api.chain) + // console.log('poolIds', poolIds.length, logs.length, api.chain) return poolIds.filter((id: any) => id) } @@ -103,7 +103,7 @@ async function getPoolIds2(api: sdk.ChainApi, options?: BalancerOptions): Promis } while (hasMore) return addresses.filter((a: string) => { if (a.length < 44) { - console.log('bad address', a) + // console.log('bad address', a) return false; } return true; @@ -148,8 +148,8 @@ export async function getTokenPrices2( supply /= (10 ** decimals[i]) const price = poolValues[pool] / supply if (poolValues[pool] > 1e10 || poolValues[pool] < 1e4) { - if (poolValues[pool] > 1e10) - console.log('bad balancer pool result? ignoring it', { pool, price, supply, value: poolValues[pool] }) + // if (poolValues[pool] > 1e10) + // console.log('bad balancer pool result? ignoring it', { pool, price, supply, value: poolValues[pool] }) return; } if (price > 0 && price != Infinity) pricesObject[pool] = { price, supply: supplies[i] / 1e24, supplies2: supplies2[i] / 1e24, pool: pools[i], poolValue: poolValues[pool] / 1e6 } diff --git a/coins/src/adapters/markets/balancer/balancerV3.ts b/coins/src/adapters/markets/balancer/balancerV3.ts index 7df35b5626..d8e9452a47 100644 --- a/coins/src/adapters/markets/balancer/balancerV3.ts +++ b/coins/src/adapters/markets/balancer/balancerV3.ts @@ -105,13 +105,13 @@ async function getTokenPrices( supply /= 10 ** decimals[i]; const price = poolValues[pool] / supply; if (poolValues[pool] > 1e10 || poolValues[pool] < 1e4) { - if (poolValues[pool] > 1e10) - console.log("bad balancer pool result? ignoring it", { - pool, - price, - supply, - value: poolValues[pool], - }); + // if (poolValues[pool] > 1e10) + // console.log("bad balancer pool result? ignoring it", { + // pool, + // price, + // supply, + // value: poolValues[pool], + // }); return; } if (price > 0 && price != Infinity) diff --git a/coins/src/adapters/markets/cetus.ts b/coins/src/adapters/markets/cetus.ts index dc605d7483..899766b057 100644 --- a/coins/src/adapters/markets/cetus.ts +++ b/coins/src/adapters/markets/cetus.ts @@ -26,7 +26,7 @@ async function getTokenPrices(timestamp: number) { if (+i.pure_tvl_in_usd < 5_000 || +i.vol_in_usd_24h < 1000) return; const coinInfo = coinInfos[i.address] if (!coinInfo) { - console.log('Metadata not found: ', i.address) + // console.log('Metadata not found: ', i.address) return; } diff --git a/coins/src/adapters/markets/curve/curve2.ts b/coins/src/adapters/markets/curve/curve2.ts index f568708706..0b2b4c52ed 100644 --- a/coins/src/adapters/markets/curve/curve2.ts +++ b/coins/src/adapters/markets/curve/curve2.ts @@ -245,7 +245,7 @@ async function unknownPools2(api: ChainApi, timestamp: number, poolList: any, re // poolData.name = await api.call({ target: poolData.lpToken, abi: 'string:name' }) } catch (e) { delete cPoolInfo[pool]; - console.log('failed to get lp token', pool) + // console.log('failed to get lp token', pool) return; } } @@ -256,7 +256,7 @@ async function unknownPools2(api: ChainApi, timestamp: number, poolList: any, re poolData.tokens = await getPoolTokens(api, pool, cache.registries[registryType], registryType) } catch { delete cPoolInfo[pool]; - console.log('failed to get pool underlyings', pool) + // console.log('failed to get pool underlyings', pool) return; } diff --git a/coins/src/adapters/markets/graphCoins.ts b/coins/src/adapters/markets/graphCoins.ts index b9b9950f8b..d05bb4357a 100644 --- a/coins/src/adapters/markets/graphCoins.ts +++ b/coins/src/adapters/markets/graphCoins.ts @@ -34,7 +34,7 @@ function getGraphCoinsAdapter({ chain, endpoint, minVolume = 1e4, minTVL = 1e5, const pricesObject: any = {} tokens.forEach((token: any) => { if (token.totalValueLockedUSD > 51 * 1e6) { - console.log(`coin: ${token.id} has too high TVL (${Number(token.totalValueLockedUSD / 1e6).toFixed(2)}M), skipping`) + // console.log(`coin: ${token.id} has too high TVL (${Number(token.totalValueLockedUSD / 1e6).toFixed(2)}M), skipping`) return; } let price = token.totalValueLockedUSD / token.totalValueLocked diff --git a/coins/src/adapters/markets/minswap.ts b/coins/src/adapters/markets/minswap.ts index 31ed95ce49..79d4e87bd6 100644 --- a/coins/src/adapters/markets/minswap.ts +++ b/coins/src/adapters/markets/minswap.ts @@ -311,6 +311,6 @@ async function getTokenPrices(timestamp: number): Promise { appendAdaPrices(); - console.log(`${calls} bitfrost calls were made`); + // console.log(`${calls} bitfrost calls were made`); return writes; } diff --git a/coins/src/adapters/markets/stargate/stargate.ts b/coins/src/adapters/markets/stargate/stargate.ts index be67512a37..56974e53e4 100644 --- a/coins/src/adapters/markets/stargate/stargate.ts +++ b/coins/src/adapters/markets/stargate/stargate.ts @@ -28,9 +28,9 @@ async function processDbData( const coinData: CoinData = coinsData[token]; if (coinData == undefined) { - console.log( - `Couldn't find underlying data for ${chain}:${token} on stargate`, - ); + // console.log( + // `Couldn't find underlying data for ${chain}:${token} on stargate`, + // ); return; } return { diff --git a/coins/src/adapters/other/gmxV2.ts b/coins/src/adapters/other/gmxV2.ts index 27ed00367b..e7c746d9cf 100644 --- a/coins/src/adapters/other/gmxV2.ts +++ b/coins/src/adapters/other/gmxV2.ts @@ -77,7 +77,7 @@ async function getTokenPrices(chain: string, timestamp: number) { const longConfig = getCallConfig(long) const shortConfig = getCallConfig(short) if (!indexConfig || !longConfig || !shortConfig) { - console.log('missing coin data', index, long, short, market) + // console.log('missing coin data', index, long, short, market) return; } diff --git a/coins/src/adapters/utils/erc20.ts b/coins/src/adapters/utils/erc20.ts index 3fc4cfac66..12c5c6ccbd 100644 --- a/coins/src/adapters/utils/erc20.ts +++ b/coins/src/adapters/utils/erc20.ts @@ -152,6 +152,7 @@ export async function listUnknownTokens( unknownTokens = unknownTokens.map( (t, i) => `${unknownSymbols[i].output}-${t}`, ); + if (!unknownTokens.length) return; console.log(chain); console.log(unknownTokens); } diff --git a/coins/src/adapters/utils/uniV2.ts b/coins/src/adapters/utils/uniV2.ts index bdfae30b24..96ff6c0d2c 100644 --- a/coins/src/adapters/utils/uniV2.ts +++ b/coins/src/adapters/utils/uniV2.ts @@ -91,11 +91,10 @@ export function getUniV2Adapter({ pairs (where: { reserveUSD_gt: ${minLiquidity} ${lastId == "" ? "" : `id_gt: "${lastId}"`} - ${ - timestamp == 0 - ? `` - : `createdAtTimestamp_lt: ${(timestamp * 1000).toString()}` - } + ${timestamp == 0 + ? `` + : `createdAtTimestamp_lt: ${(timestamp * 1000).toString()}` + } volumeUSD_gt: ${minVolume} } block: { number: ${block} } @@ -197,14 +196,7 @@ export function getUniV2Adapter({ const confidence = calculateConfidence(liquidity, minLiquidity / 2); const price = liquidity / supply; if (isNaN(price)) { - console.log("bug in uni v2 pricing", { - id, - symbol, - supply, - liquidity, - price, - decimals, - }); + // console.log("bug in uni v2 pricing", { id, symbol, supply, liquidity, price, decimals, }); return; } if (confidence > 0.8) diff --git a/coins/src/adapters/utils/updateTokenMapping.js b/coins/src/adapters/utils/updateTokenMapping.js index 1eb11de7f0..075c68340b 100644 --- a/coins/src/adapters/utils/updateTokenMapping.js +++ b/coins/src/adapters/utils/updateTokenMapping.js @@ -20,7 +20,7 @@ async function run() { if (processedSet.has(normalizedLabel)) continue; processedSet.add(normalizedLabel) if (existingTokensSet.has(normalizedLabel)) { - console.log('Already have mapping for: ', chain, token) + // console.log('Already have mapping for: ', chain, token) continue; } let symbol = '' @@ -28,7 +28,7 @@ async function run() { try { symbol = await api.call({ abi: 'string:symbol', target: token }) } catch (e) { - console.log('unable to fetch symbol for ', chain, token) + // console.log('unable to fetch symbol for ', chain, token) symbol = token } chainTokenMapping[token] = { to: `coingecko#${coingeckoId}`, decimals, symbol } diff --git a/coins/src/adapters/yield/apiDerivs.ts b/coins/src/adapters/yield/apiDerivs.ts index 2339a6d6e8..a238df6cfa 100644 --- a/coins/src/adapters/yield/apiDerivs.ts +++ b/coins/src/adapters/yield/apiDerivs.ts @@ -272,7 +272,7 @@ const configs: { [adapter: string]: Config } = { weightedNum += lunaFloat * priceInLuna; weightedDen += lunaFloat; } catch (e: any) { - console.log(` Error reading pool ${pool}: ${e.message}`); + // console.log(` Error reading pool ${pool}: ${e.message}`); } } @@ -307,7 +307,7 @@ export async function apiDerivs(timestamp: number) { return Promise.all( Object.keys(configs).map((k: string) => deriv(timestamp, k, configs[k]).catch((e) => { - console.log(e); + console.log(e?.message, k); return []; }), ), diff --git a/coins/src/adapters/yield/derivs.ts b/coins/src/adapters/yield/derivs.ts index 750ff14919..398c3dd998 100644 --- a/coins/src/adapters/yield/derivs.ts +++ b/coins/src/adapters/yield/derivs.ts @@ -574,7 +574,7 @@ export async function derivs(timestamp: number) { return Promise.all( Object.keys(configs).map((k: string) => deriv(timestamp, k, configs[k]).catch((e) => { - console.log(`API deriv ${k} failed with ${e}`); + console.log(`API deriv ${k} failed with ${e?.message ?? e}`); }), ), ); diff --git a/coins/src/adapters/yield/jeurx.ts b/coins/src/adapters/yield/jeurx.ts index 0a80aa36c6..ec478b91bb 100644 --- a/coins/src/adapters/yield/jeurx.ts +++ b/coins/src/adapters/yield/jeurx.ts @@ -22,13 +22,7 @@ async function getTokenPrices(chain: string, timestamp: number) { [jEURx]: { price: eurUSDPrice / 1e8 }, }; const writes: Write[] = []; - console.log({ - chain, - timestamp, - writes, - pricesObject, - projectName: "jeurx", - }); + return getWrites({ chain, timestamp, diff --git a/coins/src/adapters/yield/stakeDao/index.ts b/coins/src/adapters/yield/stakeDao/index.ts index 72009600ad..8912c8331f 100644 --- a/coins/src/adapters/yield/stakeDao/index.ts +++ b/coins/src/adapters/yield/stakeDao/index.ts @@ -51,16 +51,15 @@ async function fetchStakeDaoData(protocol: Protocol): Promise { try { const { url } = PROTOCOLS[protocol]; const response = await axios.get(url); - console.log(`Data retrieved from StakeDAO ${protocol} API`); if (!response.data?.deployed) { throw new Error(`Invalid response format from ${protocol} API`); } const strategies = response.data.deployed; - if (strategies.length === 0) { - console.log(`No deployed ${protocol} strategies available.`); - } + // if (strategies.length === 0) { + // console.log(`No deployed ${protocol} strategies available.`); + // } return strategies; } catch (error) { @@ -121,7 +120,6 @@ function formatStrategy( // Main function to be called by DefiLlama export async function stakeDao(timestamp: number) { - console.log("Calling getTokenPrices with timestamp:", timestamp); // Fetch data from all protocols concurrently const protocolResults = await Promise.all( @@ -134,7 +132,7 @@ export async function stakeDao(timestamp: number) { const allStrategies = protocolResults.flat(); if (allStrategies.length === 0) { - console.log("No strategies retrieved from StakeDAO."); + // console.log("No strategies retrieved from StakeDAO."); return []; } @@ -144,8 +142,8 @@ export async function stakeDao(timestamp: number) { .map((strategy) => formatStrategy(strategy, timestamp, writes)) .filter((item): item is NonNullable => item !== null); - console.log( - `Successfully formatted ${writes.length} strategies for DefiLlama`, - ); + // console.log( + // `Successfully formatted ${writes.length} strategies for DefiLlama`, + // ); return writes; } diff --git a/coins/src/cli/checkWrongBlocks.ts b/coins/src/cli/checkWrongBlocks.ts index a1c319cf32..246aa995a1 100644 --- a/coins/src/cli/checkWrongBlocks.ts +++ b/coins/src/cli/checkWrongBlocks.ts @@ -10,7 +10,7 @@ async function main() { let lastHeight = 0 entries.forEach(entry=>{ if(entry.height < lastHeight){ - console.log(entry, lastHeight) + // console.log(entry, lastHeight) if(DRY_RUN === false){ ddb.delete({ Key:{ From aa7b8e0c77a524f0c66755bb9f81076567e7c951 Mon Sep 17 00:00:00 2001 From: mintdart <96025197+mintdart@users.noreply.github.com> Date: Wed, 1 Oct 2025 05:15:26 -0700 Subject: [PATCH 036/398] update search api error handling (#10729) --- defi/src/updateSearch.ts | 44 ++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/defi/src/updateSearch.ts b/defi/src/updateSearch.ts index 1e76b58ec2..f15376dec1 100644 --- a/defi/src/updateSearch.ts +++ b/defi/src/updateSearch.ts @@ -879,13 +879,45 @@ executeWithRetry().then(success => { async function fetchJson(url: string, ...rest: any): Promise { const response = await fetch(url, ...rest); - const strData = await response.text(); try { - const json = JSON.parse(strData) - return json + if (response.ok) { + const data = await response.json() + return data + } + + // Handle non-200 status codes + let errorMessage = `[HTTP] [error] [${response.status}] < ${response.url} >` + + // Try to get error message from statusText first + if (response.statusText) { + errorMessage += ` : ${response.statusText}` + } + + // Read response body only once + const responseText = await response.text() + + if (responseText) { + // Try to parse as JSON first + try { + const errorResponse = JSON.parse(responseText) + if (errorResponse.error) { + errorMessage += ` : ${errorResponse.error}` + } else if (errorResponse.message) { + errorMessage += ` : ${errorResponse.message}` + } else { + // If JSON parsing succeeded but no error/message field, use the text + errorMessage += ` : ${responseText}` + } + } catch (jsonError) { + // If JSON parsing fails, use the text response + errorMessage += ` : ${responseText}` + } + } + + throw new Error(errorMessage) } catch (error) { - console.log('response status:', response.status) - console.log('response text:', strData) - throw new Error('Failed to parse JSON response: ' + url) + const msg = error instanceof Error ? error.message : String(error) + console.log(msg) + throw new Error(msg) } } \ No newline at end of file From 7792c5d245a8fc174599637dd566e2ada45bf1fb Mon Sep 17 00:00:00 2001 From: mintdart <96025197+mintdart@users.noreply.github.com> Date: Wed, 1 Oct 2025 05:36:45 -0700 Subject: [PATCH 037/398] fix api to delete old search results (#10730) --- defi/src/updateSearch.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/defi/src/updateSearch.ts b/defi/src/updateSearch.ts index f15376dec1..e2fac73665 100644 --- a/defi/src/updateSearch.ts +++ b/defi/src/updateSearch.ts @@ -794,6 +794,7 @@ const main = async () => { method: "POST", headers: { Authorization: `Bearer ${process.env.SEARCH_MASTER_KEY}`, + "Content-Type": "application/json", }, body: JSON.stringify(resultsToDelete), }); From 995fe891d54359fd434b9c17d16442a39bd6e37c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 1 Oct 2025 14:55:02 +0200 Subject: [PATCH 038/398] coins: optimize balancer v3 adapter --- coins/src/adapters/markets/balancer/balancerV3.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/coins/src/adapters/markets/balancer/balancerV3.ts b/coins/src/adapters/markets/balancer/balancerV3.ts index d8e9452a47..e97c43e412 100644 --- a/coins/src/adapters/markets/balancer/balancerV3.ts +++ b/coins/src/adapters/markets/balancer/balancerV3.ts @@ -41,7 +41,10 @@ async function getPoolIds3(chain: string): Promise { skip: ${skip} orderBy: address orderDirection: desc - ) { + where:{ + isInitialized:true + isPaused:false + }) { address }}`; @@ -60,6 +63,8 @@ async function getTokenPrices( let writes: Write[] = []; const api = await getApi(chain, timestamp); const pools: string[] = await getPoolIds3(chain); + // console.log(`Found ${pools.length} pools on ${chain}...`); + const poolTokens: { tokens: string[]; balancesRaw: number[] }[] = await api.multiCall({ From f5f1e735423686ce2125cbdfa00f3b4976b6d16f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 1 Oct 2025 15:01:45 +0200 Subject: [PATCH 039/398] coins: fix infinite loop bug in balancer v3 --- coins/src/adapters/markets/balancer/balancerV3.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/coins/src/adapters/markets/balancer/balancerV3.ts b/coins/src/adapters/markets/balancer/balancerV3.ts index e97c43e412..166f07f533 100644 --- a/coins/src/adapters/markets/balancer/balancerV3.ts +++ b/coins/src/adapters/markets/balancer/balancerV3.ts @@ -51,6 +51,7 @@ async function getPoolIds3(chain: string): Promise { const { pools }: any = await request(graphs[chain], lpQuery); addresses.push(...pools.map((p: any) => p.address)); hasMore = pools.length === size; + skip += size; } while (hasMore); return addresses; From f670aacd001164452a4968a16bb5d854580276c2 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 1 Oct 2025 15:59:18 +0200 Subject: [PATCH 040/398] coins: optimize curve --- coins/src/adapters/markets/curve/curve2.ts | 160 +++++++++------------ 1 file changed, 70 insertions(+), 90 deletions(-) diff --git a/coins/src/adapters/markets/curve/curve2.ts b/coins/src/adapters/markets/curve/curve2.ts index 0b2b4c52ed..2b13f6ee6e 100644 --- a/coins/src/adapters/markets/curve/curve2.ts +++ b/coins/src/adapters/markets/curve/curve2.ts @@ -11,11 +11,12 @@ import { getCache, setCache } from "../../../utils/cache"; import { PromisePool } from "@supercharge/promise-pool"; import * as sdk from '@defillama/sdk' import { nullAddress } from "../../../utils/shared/constants"; +const crypto = require('crypto'); -const metaRegistryContracts: {[chain: string]: string } = { - ethereum: '0xF98B45FA17DE75FB1aD0e7aFD971b0ca00e379fC', - fraxtal: '0xd125E7a0cEddF89c6473412d85835450897be6Dc', - sonic: '0x1764ee18e8B3ccA4787249Ceb249356192594585', +const metaRegistryContracts: { [chain: string]: string } = { + ethereum: '0xF98B45FA17DE75FB1aD0e7aFD971b0ca00e379fC', + fraxtal: '0xd125E7a0cEddF89c6473412d85835450897be6Dc', + sonic: '0x1764ee18e8B3ccA4787249Ceb249356192594585', base: '0x5ffe7FB82894076ECB99A30D6A32e969e6e35E98' } @@ -91,6 +92,52 @@ async function PoolToToken( pool = pool.toLowerCase(); let token: string; + // WARNING: do not check mapping first, as same contract may be deployed on multiple chains with different lp tokens + const mapping: { [key: string]: any } = { + // pool contract : token contract + "0x160caed03795365f3a589f10c379ffa7d75d4e76": "0xaF4dE8E872131AE328Ce21D909C74705d3Aaf452", + "0x2477fB288c5b4118315714ad3c7Fd7CC69b00bf9": "0x2a435Ecb3fcC0E316492Dc1cdd62d0F189be5640", + "0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7": "0x6c3f90f043a72fa612cbac8115ee7e52bde6e490", + "0x79a8c46dea5ada233abaffd40f3a0a2b1e5a4f27": "0x3b3ac5386837dc563660fb6a0937dfaa5924333b", + "0xa2b47e3d5c44877cca798226b7b8118f9bfb7a56": "0x845838df265dcd2c412a1dc9e959c7d08537f8a2", + "0x4ca9b3063ec5866a4b82e437059d2c43d1be596f": "0xb19059ebb43466c323583928285a49f558e572fd", + "0x06364f10b501e868329afbc005b3492902d6c763": "0xd905e2eaebe188fc92179b6350807d8bd91db0d8", + "0x93054188d876f558f4a66b2ef1d97d16edf0895b": "0x49849c98ae39fff122806c06791fa73784fb3675", + "0x7fc77b5c7614e1533320ea6ddc2eb61fa00a9714": "0x075b1bb99792c9e1041ba13afef80c91a1e70fb3", + "0xc5424b857f758e906013f3555dad202e4bdb4567": "0xa3d87fffce63b53e0d54faa1cc983b7eb0b74a9c", + "0xa5407eae9ba41422680e2e00537571bcc53efbfd": "0xc25a3a3b969415c80451098fa907ec722572917f", + "0x52ea46506b9cc5ef470c5bf89f17dc28bb35d85c": "0x9fc689ccada600b6df723d9e47d84d76664a1f23", + "0x45f783cce6b7ff23b2ab2d70e416cdb7d6055f51": "0xdf5e0e81dff6faf3a7e52ba697820c5e32d806a8", + "0x8038c01a0390a8c547446a0b2c18fc9aefecc10c": "0x3a664ab939fd8482048609f652f9a0b0677337b9", + "0x4f062658eaaf2c1ccf8c8e36d6824cdf41167956": "0xd2967f45c4f384deea880f807be904762a3dea07", + "0x3ef6a01a0f81d6046290f3e2a8c5b843e738e604": "0x5b5cfe992adac0c9d48e05854b2d91c73a003858", + "0xe7a24ef0c5e95ffb0f6684b813a78f2a3ad7d171": "0x6d65b498cb23deaba52db31c93da9bffb340fb8f", + "0x8474ddbe98f5aa3179b3b3f5942d724afcdec9f6": "0x1aef73d49dedc4b1778d0706583995958dc862e6", + "0xc18cc39da8b11da8c3541c598ee022258f9744da": "0xc2ee6b0334c261ed60c72f6054450b61b8f18e35", + "0x3e01dd8a5e1fb3481f0f589056b428fc308af0fb": "0x97e2768e8e73511ca874545dc5ff8067eb19b787", + "0x0f9cb53ebe405d49a0bbdbd291a65ff571bc83e1": "0x4f3e8f405cf5afc05d68142f3783bdfe13811522", + "0x890f4e345b1daed0367a877a1612f86a1f86985f": "0x94e131324b6054c0d789b190b2dac504e4361b53", + "0x071c661b4deefb59e2a3ddb20db036821eee8f4b": "0x410e3e86ef427e30b9235497143881f717d93c2a", + "0xd81da8d904b52208541bade1bd6595d8a251f8dd": "0x2fe94ea3d5d4a175184081439753de15aef9d614", + "0x7f55dde206dbad629c080068923b36fe9d6bdbef": "0xde5331ac4b3630f94853ff322b66407e0d6331e8", + "0xc25099792e9349c7dd09759744ea681c7de2cb66": "0x64eda51d3ad40d56b9dfc5554e06f94e1dd786fd", + "0x80466c64868e1ab14a1ddf27a676c3fcbe638fe5": "0xca3d75ac011bf5ad07a98d02f18225f9bd9a6bdf", + "0xd51a44d3fae010294c616388b506acda1bfaae46": "0xc4ad29ba4b3c580e6d59105fff484999997675ff", + "0x9838eccc42659fa8aa7daf2ad134b53984c9427b": "0x3b6831c0077a1e44ed0a21841c3bc4dc11bce833", + "0x98a7f18d4e56cfe84e3d081b40001b3d5bd3eb8b": "0x3d229e1b4faab62f621ef2f6a610961f7bd7b23b", + "0x8301ae4fc9c624d1d396cbdaa1ed877821d7c511": "0xed4064f376cb8d68f770fb1ff088a3d0f3ff5c4d", + "0xb576491f1e6e5e62f1d8f26062ee822b40b0e0d4": "0x3a283d9c08e8b55966afb64c515f5143cf907611", + "0xadcfcf9894335dc340f6cd182afa45999f45fc44": "0x8484673ca7bff40f82b041916881aea15ee84834", + "0x98638facf9a3865cd033f36548713183f6996122": "0x8282bd15dca2ea2bdf24163e8f2781b30c43a2ef", + "0x752ebeb79963cf0732e9c0fec72a49fd1defaeac": "0xcb08717451aae9ef950a2524e33b6dcaba60147b", + "0xe84f5b1582ba325fdf9ce6b0c1f087ccfc924e54": "0x70fc957eb90e37af82acdbd12675699797745f68", + "0x3a1659ddcf2339be3aea159ca010979fb49155ff": "0x58e57ca18b7a47112b877e31929798cd3d703b0f", + "0x960ea3e3c7fb317332d990873d354e18d7645590": "0x8e0b8c8bb9db49a46697f3a5bb8a308e744821d2", + "0xa827a652ead76c6b0b3d19dba05452e06e25c27e": "0x3dfe1324a0ee9d86337d06aeb829deb4528db9ca", + "0xb755b949c126c04e0348dd881a5cf55d424742b2": "0x1dab6560494b04473a0be3e7d83cf3fdf3a51828", + }; + + const faultyPools: string[] = [ "0x5633e00994896d0f472926050ecb32e38bef3e65", "0xd0c855c092dbc41055a40297420bba0a6f46f8ad", @@ -105,85 +152,6 @@ async function PoolToToken( try { token = (await api.call({ target: pool, abi: abi.lp_token, })).toLowerCase(); } catch { - const mapping: { [key: string]: any } = { - // pool contract : token contract - "0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7": - "0x6c3f90f043a72fa612cbac8115ee7e52bde6e490", - "0x79a8c46dea5ada233abaffd40f3a0a2b1e5a4f27": - "0x3b3ac5386837dc563660fb6a0937dfaa5924333b", - "0xa2b47e3d5c44877cca798226b7b8118f9bfb7a56": - "0x845838df265dcd2c412a1dc9e959c7d08537f8a2", - "0x4ca9b3063ec5866a4b82e437059d2c43d1be596f": - "0xb19059ebb43466c323583928285a49f558e572fd", - "0x06364f10b501e868329afbc005b3492902d6c763": - "0xd905e2eaebe188fc92179b6350807d8bd91db0d8", - "0x93054188d876f558f4a66b2ef1d97d16edf0895b": - "0x49849c98ae39fff122806c06791fa73784fb3675", - "0x7fc77b5c7614e1533320ea6ddc2eb61fa00a9714": - "0x075b1bb99792c9e1041ba13afef80c91a1e70fb3", - "0xc5424b857f758e906013f3555dad202e4bdb4567": - "0xa3d87fffce63b53e0d54faa1cc983b7eb0b74a9c", - "0xa5407eae9ba41422680e2e00537571bcc53efbfd": - "0xc25a3a3b969415c80451098fa907ec722572917f", - "0x52ea46506b9cc5ef470c5bf89f17dc28bb35d85c": - "0x9fc689ccada600b6df723d9e47d84d76664a1f23", - "0x45f783cce6b7ff23b2ab2d70e416cdb7d6055f51": - "0xdf5e0e81dff6faf3a7e52ba697820c5e32d806a8", - "0x8038c01a0390a8c547446a0b2c18fc9aefecc10c": - "0x3a664ab939fd8482048609f652f9a0b0677337b9", - "0x4f062658eaaf2c1ccf8c8e36d6824cdf41167956": - "0xd2967f45c4f384deea880f807be904762a3dea07", - "0x3ef6a01a0f81d6046290f3e2a8c5b843e738e604": - "0x5b5cfe992adac0c9d48e05854b2d91c73a003858", - "0xe7a24ef0c5e95ffb0f6684b813a78f2a3ad7d171": - "0x6d65b498cb23deaba52db31c93da9bffb340fb8f", - "0x8474ddbe98f5aa3179b3b3f5942d724afcdec9f6": - "0x1aef73d49dedc4b1778d0706583995958dc862e6", - "0xc18cc39da8b11da8c3541c598ee022258f9744da": - "0xc2ee6b0334c261ed60c72f6054450b61b8f18e35", - "0x3e01dd8a5e1fb3481f0f589056b428fc308af0fb": - "0x97e2768e8e73511ca874545dc5ff8067eb19b787", - "0x0f9cb53ebe405d49a0bbdbd291a65ff571bc83e1": - "0x4f3e8f405cf5afc05d68142f3783bdfe13811522", - "0x890f4e345b1daed0367a877a1612f86a1f86985f": - "0x94e131324b6054c0d789b190b2dac504e4361b53", - "0x071c661b4deefb59e2a3ddb20db036821eee8f4b": - "0x410e3e86ef427e30b9235497143881f717d93c2a", - "0xd81da8d904b52208541bade1bd6595d8a251f8dd": - "0x2fe94ea3d5d4a175184081439753de15aef9d614", - "0x7f55dde206dbad629c080068923b36fe9d6bdbef": - "0xde5331ac4b3630f94853ff322b66407e0d6331e8", - "0xc25099792e9349c7dd09759744ea681c7de2cb66": - "0x64eda51d3ad40d56b9dfc5554e06f94e1dd786fd", - "0x80466c64868e1ab14a1ddf27a676c3fcbe638fe5": - "0xca3d75ac011bf5ad07a98d02f18225f9bd9a6bdf", - "0xd51a44d3fae010294c616388b506acda1bfaae46": - "0xc4ad29ba4b3c580e6d59105fff484999997675ff", - "0x9838eccc42659fa8aa7daf2ad134b53984c9427b": - "0x3b6831c0077a1e44ed0a21841c3bc4dc11bce833", - "0x98a7f18d4e56cfe84e3d081b40001b3d5bd3eb8b": - "0x3d229e1b4faab62f621ef2f6a610961f7bd7b23b", - "0x8301ae4fc9c624d1d396cbdaa1ed877821d7c511": - "0xed4064f376cb8d68f770fb1ff088a3d0f3ff5c4d", - "0xb576491f1e6e5e62f1d8f26062ee822b40b0e0d4": - "0x3a283d9c08e8b55966afb64c515f5143cf907611", - "0xadcfcf9894335dc340f6cd182afa45999f45fc44": - "0x8484673ca7bff40f82b041916881aea15ee84834", - "0x98638facf9a3865cd033f36548713183f6996122": - "0x8282bd15dca2ea2bdf24163e8f2781b30c43a2ef", - "0x752ebeb79963cf0732e9c0fec72a49fd1defaeac": - "0xcb08717451aae9ef950a2524e33b6dcaba60147b", - "0xe84f5b1582ba325fdf9ce6b0c1f087ccfc924e54": - "0x70fc957eb90e37af82acdbd12675699797745f68", - "0x3a1659ddcf2339be3aea159ca010979fb49155ff": - "0x58e57ca18b7a47112b877e31929798cd3d703b0f", - "0x960ea3e3c7fb317332d990873d354e18d7645590": - "0x8e0b8c8bb9db49a46697f3a5bb8a308e744821d2", - "0xa827a652ead76c6b0b3d19dba05452e06e25c27e": - "0x3dfe1324a0ee9d86337d06aeb829deb4528db9ca", - "0xb755b949c126c04e0348dd881a5cf55d424742b2": - "0x1dab6560494b04473a0be3e7d83cf3fdf3a51828", - }; token = mapping[pool] ? mapping[pool] : pool; } } @@ -198,7 +166,15 @@ const chainBlacklistedPools: any = { export default async function getTokenPrices2(chain: any, registries: string[], timestamp: number, name: string | undefined = undefined, customPools: any = undefined) { const writes: Write[] = []; - const cache = await getCache('curve', name ? name : chain) + + // Create a hash string from registries, chain, and name + const createSha256Hash = (): string => { + const dataToHash = `${registries.join('')}${chain}${name || ''}`; + return crypto.createHash('sha256').update(dataToHash).digest('hex'); + }; + + const cacheKey = createSha256Hash(); + const cache = await getCache('curve', cacheKey) const api = await getApi(chain, timestamp) let poolList if (customPools) { @@ -209,7 +185,7 @@ export default async function getTokenPrices2(chain: any, registries: string[], poolList = await getPools(api, name, cache); } await unknownPools2(api, timestamp, poolList, registries, writes, cache) - await setCache('curve', name ? name : chain, cache) + await setCache('curve', cacheKey, cache) return writes.filter((w: Write) => w.price != undefined && !isNaN(w.price)); } @@ -229,7 +205,7 @@ async function unknownPools2(api: ChainApi, timestamp: number, poolList: any, re if (!rPoolList || !rPoolList.length) continue; // update cache info - await PromisePool.withConcurrency(2) + await PromisePool.withConcurrency(15) .for(rPoolList) .process(async (pool: any) => { if (!cPoolInfo[pool]) @@ -243,9 +219,9 @@ async function unknownPools2(api: ChainApi, timestamp: number, poolList: any, re poolData.decimals = await api.call({ target: poolData.lpToken, abi: 'erc20:decimals' }) poolData.symbol = await api.call({ target: poolData.lpToken, abi: 'string:symbol' }) // poolData.name = await api.call({ target: poolData.lpToken, abi: 'string:name' }) - } catch (e) { + } catch (e: any) { delete cPoolInfo[pool]; - // console.log('failed to get lp token', pool) + console.log('[curve] failed to get lp token', pool, e?.message ?? e ) return; } } @@ -254,9 +230,10 @@ async function unknownPools2(api: ChainApi, timestamp: number, poolList: any, re if (!poolData.tokens) try { poolData.tokens = await getPoolTokens(api, pool, cache.registries[registryType], registryType) - } catch { + console.log('found pool tokens', poolData.tokens.length, pool, api.chain) + } catch (e: any) { delete cPoolInfo[pool]; - // console.log('failed to get pool underlyings', pool) + console.log('failed to get pool underlyings', pool, cache.registries[registryType], registryType, e?.message ?? e) return; } @@ -422,6 +399,9 @@ async function unknownPools2(api: ChainApi, timestamp: number, poolList: any, re if (registryType === 'pcs') { const tokens = await api.fetchList({ lengthAbi: 'uint256:N_COINS', itemAbi: 'function coins(uint256) view returns (address)', target: pool }) return tokens + } else if (registryType === 'stableswap') { + const tokens = await api.call({ target: registry, params: pool, abi: 'function get_coins(address) view returns (address[4])', }) + return tokens } else if (registryType === 'custom') { const tokens = [] let i = 0 From a4b8829864f464dfe022a0ed30175ec39c0d5afb Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 1 Oct 2025 16:13:11 +0200 Subject: [PATCH 041/398] coins: disable vvsFinance & orbit v2 --- coins/src/adapters/markets/uniswap/index.ts | 2 +- .../src/adapters/moneyMarkets/compound/index.ts | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/coins/src/adapters/markets/uniswap/index.ts b/coins/src/adapters/markets/uniswap/index.ts index 33d3e9769b..afa94fac54 100644 --- a/coins/src/adapters/markets/uniswap/index.ts +++ b/coins/src/adapters/markets/uniswap/index.ts @@ -21,7 +21,7 @@ const config = { 'eddy-fi': { factory: '0x9fd96203f7b22bCF72d9DCb40ff98302376cE09c', chain: 'zeta', getReservesAbi: alternateGetReservesAbi, }, // pancakeswap: { endpoint: 'https://info-gateway.pancakeswap.com/subgraphs/v2/bsc/graphql', chain: 'bsc', factory: '0xca143ce32fe78f1f7019d7d551a6402fc5350c73', }, traderJoe: { chain: 'avax', factory: '0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10', endpoint: sdk.graph.modifyEndpoint('9ZjERoA7jGANYNz1YNuFMBt11fK44krveEhzssJTWokM') }, - vvsFinance: { chain: 'cronos', factory: '0x3b44b2a187a7b3824131f8db5a74194d0a42fc15', }, + // vvsFinance: { chain: 'cronos', factory: '0x3b44b2a187a7b3824131f8db5a74194d0a42fc15', }, quickswap: { chain: 'polygon', factory: '0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32', endpoint: sdk.graph.modifyEndpoint('FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd') }, biswap: { chain: 'bsc', factory: '0x858e3312ed3a876947ea49d572a7c42de08af7ee', }, // mmFinance: { chain: 'cronos', factory: '0xd590cC180601AEcD6eeADD9B7f2B7611519544f4', }, diff --git a/coins/src/adapters/moneyMarkets/compound/index.ts b/coins/src/adapters/moneyMarkets/compound/index.ts index 144e95b6e4..6b66fa6f0b 100644 --- a/coins/src/adapters/moneyMarkets/compound/index.ts +++ b/coins/src/adapters/moneyMarkets/compound/index.ts @@ -219,13 +219,13 @@ export function moonwell(timestamp: number = 0) { ]); } -export function orbitv2(timestamp: number = 0) { - return getTokenPrices( - "blast", - "0x1E18C3cb491D908241D0db14b081B51be7B6e652", - timestamp, - ); -} +// export function orbitv2(timestamp: number = 0) { +// return getTokenPrices( +// "blast", +// "0x1E18C3cb491D908241D0db14b081B51be7B6e652", +// timestamp, +// ); +// } export function segmentFinance(timestamp: number = 0) { return getTokenPrices( @@ -259,7 +259,7 @@ export const adapters = { tenderfi, Ovix, mare, - orbitv2, + // orbitv2, ironBank, segmentFinance, compoundV3, From 53732e83e268164b465d07dfdd619084f1f53e96 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 1 Oct 2025 17:07:58 +0200 Subject: [PATCH 042/398] add debug viewer --- defi/src/utils/findOutdated.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/defi/src/utils/findOutdated.ts b/defi/src/utils/findOutdated.ts index 082dc27dce..a75b932a36 100644 --- a/defi/src/utils/findOutdated.ts +++ b/defi/src/utils/findOutdated.ts @@ -84,6 +84,7 @@ export function buildOutdatedMessage(outdated: [string, InfoProtocol, boolean, n } const maxLengthProtocolName = outdated.reduce((max, line) => Math.max(max, line[0].length), 0) const maxDisplay = 101 + const logViewer = process.env.LOG_VIEWER_URL return `REFILLABLE ${printOutdated(outdated.filter(p => p[2]).slice(0, maxDisplay), maxLengthProtocolName, now)} @@ -91,7 +92,10 @@ ${outdated.filter(p => p[2]).length > maxDisplay ? `... and ${outdated.filter(p CAN'T BE REFILLED (needs fixing asap) ${printOutdated(outdated.filter(p => !p[2]).slice(0, maxDisplay), maxLengthProtocolName, now)} -${outdated.filter(p => !p[2]).length > maxDisplay ? `... and ${outdated.filter(p => !p[2]).length - maxDisplay} more` : ""}` +${outdated.filter(p => !p[2]).length > maxDisplay ? `... and ${outdated.filter(p => !p[2]).length - maxDisplay} more` : ""} + +${logViewer ? `Check error logs at ${logViewer}` : ""} +` } From 42dd1e70ed9455fe5d4901681113a267c47310c0 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 1 Oct 2025 17:55:51 +0200 Subject: [PATCH 043/398] pacaswap dex adapter is fixed --- defi/src/protocols/data4.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index d408531585..b500ff27fe 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29323,8 +29323,8 @@ const data4: Protocol[] = [ forkedFromIds: [], parentProtocol: "parent#pacaswap", dimensions: { - // dexs: "pacaswap", // disabled as the api was returning cummulative data - // fees: "pacaswap" + dexs: "pacaswap", + fees: "pacaswap" } }, { From 0dbbd0b6378540f599194c5f4a2bd172f05867fb Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 1 Oct 2025 11:30:20 -0600 Subject: [PATCH 044/398] add new listings, parents and chains --- defi/src/protocols/data4.ts | 88 ++++++++++++++++++++++++++- defi/src/protocols/parentProtocols.ts | 12 ++++ defi/src/utils/normalizeChain.ts | 10 +++ 3 files changed, 107 insertions(+), 3 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index b500ff27fe..e75782dc2d 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -21591,7 +21591,7 @@ const data4: Protocol[] = [ }, { id: "6447", - name: "Kinetiq", + name: "Kinetiq kHYPE", address: null, symbol: "-", assetToken: "kHYPE", @@ -21599,7 +21599,7 @@ const data4: Protocol[] = [ description: "Kinetiq is a non-custodial liquid staking protocol that allows users to stake HYPE tokens on Hyperliquid L1 and receive kHYPE, a yield-bearing representation of staked HYPE that is usable in DeFi.", chain: "Hyperliquid L1", - logo: `${baseIconsUrl}/kinetiq.jpg`, + logo: `${baseIconsUrl}/kinetiq-khype.jpg`, audits: "0", audit_note: null, gecko_id: null, @@ -21608,10 +21608,10 @@ const data4: Protocol[] = [ chains: ["Hyperliquid L1"], module: "kinetiq/index.js", twitter: "kinetiq_xyz", - treasury: "kinetiq.js", forkedFromIds: [], audit_links: [], listedAt: 1752719634, + parentProtocol: "parent#kinetiq", dimensions: { fees: "kinetiq-staked-hype" } @@ -29647,5 +29647,87 @@ const data4: Protocol[] = [ fees: "xtrade-protocol-perps", } }, + { + id: "6794", + name: "Tigris", + address: null, + symbol: "-", + url: "https://mezo.org/explore/pools", + description: "Tigris is Mezo's native ve(3,3) DEX and incentive management system featuring stable/volatile AMM pools, vote-escrow tokenomics, and fee distribution to voters", + chain: "Mezo", + logo: `${baseIconsUrl}/tigris.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Mezo"], + module: "mezo-tigris/index.js", + twitter: "MezoNetwork", + forkedFromIds: [], + listedAt: 1759338887 + }, + { + id: "6795", + name: "Kinetiq Earn", + address: null, + symbol: "-", + url: "https://xtrade.gg/", + description: "Kinetiq Earn puts your HYPE and kHYPE to work across leading DeFi protocols on HyperEVM, optimizing for the best risk-adjusted returns. Powered by Veda.", + chain: "Hyperliquid L1", + logo: `${baseIconsUrl}/kinetiq-earn.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Yield Aggregator", + chains: ["Hyperliquid L1"], + module: "kinetiq-earn/index.js", + twitter: "kinetiq_xyz", + forkedFromIds: [], + listedAt: 1759338894 + }, + { + id: "6796", + name: "Credit", + address: null, + symbol: "-", + url: "https://credit.cash/", + description: "Credit is an undercollateralized peer-to-pool lending protocol on World Chain", + chain: "World Chain", + logo: `${baseIconsUrl}/credit.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Lending", + chains: ["World Chain"], + module: "credit/index.js", + twitter: "DivineResearch", + forkedFromIds: [], + listedAt: 1759338901 + }, + { + id: "6797", + name: "ForgeYields", + address: null, + symbol: "-", + url: "https://app.forgeyields.com", + description: "ForgeYields is a cross-chain yield aggregator. Users deposit into token gateways across multiple chains, and assets are netted and allocated into yield strategies (Curve, Convex, lending protocols, etc.) on Ethereum L1 and L2s", + chain: "Starknet", + logo: `${baseIconsUrl}/forgeyields.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Onchain Capital Allocator", + chains: ["Starknet"], + module: "forgeyields/index.js", + twitter: "ForgeYields", + forkedFromIds: [], + audit_links: ["https://forge-labs.gitbook.io/forge-docs/audits"], + github: ["ForgeYields"], + listedAt: 1759338907 + }, ]; export default data4; diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index c42d153151..947a3ebc6c 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8085,6 +8085,18 @@ const parentProtocols: IParentProtocol[] = [ chains: [], twitter: "xtrade_gg", }, + { + id: "parent#kinetiq", + name: "Kinetiq", + url: "https://kinetiq.xyz/", + description: "Kinetiq is a non-custodial liquid staking protocol that allows users to stake HYPE tokens on Hyperliquid L1 and receive kHYPE, a yield-bearing representation of staked HYPE that is usable in DeFi.", + logo: `${baseIconsUrl}/kinetiq.jpg`, + gecko_id: null, + cmcId: null, + chains: [], + twitter: "Kinetiq_xyz", + treasury: "kinetiq.js", + }, ]; export default parentProtocols; diff --git a/defi/src/utils/normalizeChain.ts b/defi/src/utils/normalizeChain.ts index 66687eefe8..0d69d72d08 100644 --- a/defi/src/utils/normalizeChain.ts +++ b/defi/src/utils/normalizeChain.ts @@ -4937,6 +4937,16 @@ export const chainCoingeckoIds = { url: "https://constellationnetwork.io/", github: ["Constellation-Labs"], }, + "Mezo": { + geckoId: null, + symbol: null, + cmcId: null, + categories: [], + twitter: "MezoNetwork", + url: "https://mezo.org", + github: ["mezo-org"], + chainId: 31612, + }, } as unknown as ChainCoinGekcoIds // We are creating the list here because, later in the code, we include historical chain labels with the same chain metadata, so, chainCoingeckoIds will have duplicate keys From 872b5eefbeaebdd68e997675e34302b4bfedc79f Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 1 Oct 2025 11:31:38 -0600 Subject: [PATCH 045/398] enable legion spot and fees --- defi/src/protocols/data4.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index e75782dc2d..aab0d084df 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29426,7 +29426,11 @@ const data4: Protocol[] = [ twitter: "legiondotcc", forkedFromIds: [], audit_links: ["https://github.com/Legion-Team/legion-protocol-contracts/tree/master/audits"], - listedAt: 1759188237 + listedAt: 1759188237, + dimensions: { + fees: "legion", + dexs: "legion" + } }, { id: "6785", From 314c888b8e84eed5b6674c7a17f6ec715b1b82ae Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 1 Oct 2025 11:40:41 -0600 Subject: [PATCH 046/398] add new listings --- defi/src/protocols/data4.ts | 45 ++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index aab0d084df..966fe95f6b 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29720,7 +29720,7 @@ const data4: Protocol[] = [ description: "ForgeYields is a cross-chain yield aggregator. Users deposit into token gateways across multiple chains, and assets are netted and allocated into yield strategies (Curve, Convex, lending protocols, etc.) on Ethereum L1 and L2s", chain: "Starknet", logo: `${baseIconsUrl}/forgeyields.jpg`, - audits: "0", + audits: "2", audit_note: null, gecko_id: null, cmcId: null, @@ -29733,5 +29733,48 @@ const data4: Protocol[] = [ github: ["ForgeYields"], listedAt: 1759338907 }, + { + id: "6798", + name: "Lithos", + address: null, + symbol: "LITH", + url: "https://lithos.to/", + description: "Plasma's native onchain liquidity marketplace. Powered by the ve3,3 flywheel. Optimized for stable and volatile pairs", + chain: "Plasma", + logo: `${baseIconsUrl}/lithos.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Plasma"], + module: "lithos/index.js", + twitter: "lithos_to", + forkedFromIds: ["1407"], + audit_links: ["https://docs.lithos.to/security/security"], + github: ["LithosDex"], + listedAt: 1759340413 + }, + { + id: "6799", + name: "LeadFi leadBTC", + address: null, + symbol: "-", + url: "https://leadfi.org/", + description: "leadBTC is a wrapped Bitcoin token that maintains full Bitcoin backing while enabling seamless access to DeFi protocols across multiple blockchain networks", + chain: "Binance", + logo: `${baseIconsUrl}/leadfi-leadbtc.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Bridge", + chains: ["Binance"], + module: "LeadFi-leadBTC/index.js", + twitter: "LeadFiOfficial", + forkedFromIds: [], + github: ["leadfi"], + listedAt: 1759340419 + }, ]; export default data4; From 6cd55ccf31da52b9ff6c62cb155ad3c170cce312 Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 1 Oct 2025 11:41:38 -0600 Subject: [PATCH 047/398] enable silo fees --- defi/src/protocols/data4.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 966fe95f6b..8a300ab725 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -1286,6 +1286,9 @@ const data4: Protocol[] = [ audit_links: ["https://docs.silo.finance/audits-and-tests"], parentProtocol: "parent#silo-finance", listedAt: 1736470165, + dimensions: { + fees: "silo-finance-v2" + } }, { id: "5612", From 4846ae8d369f51fb8b906e919fdd4e0d9a1d8a6e Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 1 Oct 2025 12:27:02 -0600 Subject: [PATCH 048/398] enable limitless fees and derivatives --- defi/DefiLlama-Adapters | 2 +- defi/src/protocols/data3.ts | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/defi/DefiLlama-Adapters b/defi/DefiLlama-Adapters index 9edc144925..7f94d72fba 160000 --- a/defi/DefiLlama-Adapters +++ b/defi/DefiLlama-Adapters @@ -1 +1 @@ -Subproject commit 9edc144925bcfeab2a825bb807a057935d82b614 +Subproject commit 7f94d72fbaf90e007c8b2d6a38682d26b058cd9d diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index b9b6a596a0..6b586e1773 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -44397,6 +44397,10 @@ const data3_2: Protocol[] = [ deadUrl: true, audit_links: ["https://limitless.gitbook.io/limitless/intro/audits-and-security"], listedAt: 1715269057, + dimensions: { + derivatives: "limitless-exchange", + fees: "limitless-exchange", + } }, { id: "4579", From 7333ce20b32aaeed006388aca4ce5d1037cbafb3 Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 1 Oct 2025 12:28:45 -0600 Subject: [PATCH 049/398] fix name --- defi/src/protocols/data4.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 8a300ab725..eb6cc5b5e3 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29656,13 +29656,13 @@ const data4: Protocol[] = [ }, { id: "6794", - name: "Tigris", + name: "Tigris Mezo", address: null, symbol: "-", url: "https://mezo.org/explore/pools", description: "Tigris is Mezo's native ve(3,3) DEX and incentive management system featuring stable/volatile AMM pools, vote-escrow tokenomics, and fee distribution to voters", chain: "Mezo", - logo: `${baseIconsUrl}/tigris.jpg`, + logo: `${baseIconsUrl}/tigris-mezo.jpg`, audits: "0", audit_note: null, gecko_id: null, From 0e01530555a0b53957cf75e8442c916c3dc1d825 Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 1 Oct 2025 14:19:53 -0600 Subject: [PATCH 050/398] add parent protocol to listing --- defi/src/protocols/data4.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index eb6cc5b5e3..66f063b273 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29692,6 +29692,7 @@ const data4: Protocol[] = [ module: "kinetiq-earn/index.js", twitter: "kinetiq_xyz", forkedFromIds: [], + parentProtocol: "parent#kinetiq", listedAt: 1759338894 }, { From 5dcca1eea8d005c3e5ccf347c3d8302ade179bef Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 1 Oct 2025 15:33:03 -0600 Subject: [PATCH 051/398] fix chain map --- defi/src/protocols/data4.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 66f063b273..9790ffafd0 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29766,14 +29766,14 @@ const data4: Protocol[] = [ symbol: "-", url: "https://leadfi.org/", description: "leadBTC is a wrapped Bitcoin token that maintains full Bitcoin backing while enabling seamless access to DeFi protocols across multiple blockchain networks", - chain: "Binance", + chain: "Bitcoin", logo: `${baseIconsUrl}/leadfi-leadbtc.jpg`, audits: "0", audit_note: null, gecko_id: null, cmcId: null, category: "Bridge", - chains: ["Binance"], + chains: ["Bitcoin"], module: "LeadFi-leadBTC/index.js", twitter: "LeadFiOfficial", forkedFromIds: [], From a8537ebc0c0ba45b12814cc317f7b01010b9bef5 Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 1 Oct 2025 15:46:30 -0600 Subject: [PATCH 052/398] fix ids for limitless exchange dimensions --- defi/src/protocols/data3.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 6b586e1773..59c7e1184b 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -44397,10 +44397,7 @@ const data3_2: Protocol[] = [ deadUrl: true, audit_links: ["https://limitless.gitbook.io/limitless/intro/audits-and-security"], listedAt: 1715269057, - dimensions: { - derivatives: "limitless-exchange", - fees: "limitless-exchange", - } + }, { id: "4579", @@ -58532,7 +58529,11 @@ const data3_2: Protocol[] = [ twitter: "trylimitless", forkedFrom: [], oraclesBreakdown: [ { name: "Pyth", type: "Primary", proof: [] } ], // https://x.com/kirkoyaa/status/1858123297788920123 , https://x.com/PythNetwork/status/1857445973431300419 - listedAt: 1727294687 + listedAt: 1727294687, + dimensions: { + derivatives: "limitless-exchange", + fees: "limitless-exchange", + } }, { id: "5182", From caf1208b42a6f769fe4ca7e164b9399a7bdd92f0 Mon Sep 17 00:00:00 2001 From: billyjitsu <82428978+billyjitsu@users.noreply.github.com> Date: Wed, 1 Oct 2025 17:17:38 -0700 Subject: [PATCH 053/398] update TakaraLend primary oracle (#10731) --- defi/src/protocols/data4.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 9790ffafd0..87b2e5d4f4 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -5392,11 +5392,16 @@ const data4: Protocol[] = [ chains: ["Sei"], oraclesBreakdown: [ { - name: "RedStone", + name: "Api3", type: "Primary", proof: [ "https://takara.gitbook.io/takara-lend/protocol-information/security#takara-security-measures", "https://app.takaralend.com/market/WSEI", + "https://app.takaralend.com/market/spSEI", + "https://app.takaralend.com/market/iSEI", + "https://app.takaralend.com/market/uBTC", + "https://app.takaralend.com/market/MBTC", + "https://app.takaralend.com/market/SBTC", ], }, { @@ -5408,7 +5413,7 @@ const data4: Protocol[] = [ ], }, { - name: "Api3", + name: "RedStone", type: "Fallback", proof: [ "https://takara.gitbook.io/takara-lend/protocol-information/security#takara-security-measures", From 1ae00fca1ccb7697fa180dc98efc8bf95a8080f6 Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 1 Oct 2025 21:29:46 -0600 Subject: [PATCH 054/398] udpate listing --- defi/src/protocols/data3.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 59c7e1184b..738837514a 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -58531,7 +58531,7 @@ const data3_2: Protocol[] = [ oraclesBreakdown: [ { name: "Pyth", type: "Primary", proof: [] } ], // https://x.com/kirkoyaa/status/1858123297788920123 , https://x.com/PythNetwork/status/1857445973431300419 listedAt: 1727294687, dimensions: { - derivatives: "limitless-exchange", + dexs: "limitless-exchange", fees: "limitless-exchange", } }, From 2b042c38e405ad6fcc58cd5ebac1c5313b70c533 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 2 Oct 2025 09:55:09 +0100 Subject: [PATCH 055/398] assets (#10732) * temp skip cache * reimplement cache * bridged tvl 2 * starknet btcs * midas tokens starknet * plasma xusd * GREEN * more chain assets 2 * plasma curve * ryt * teth * plasma assets * xsbtc * bridged rwa patch * assets --- coins/src/adapters/tokenMapping.json | 15 +++++++++++++++ defi/l2/v2/index.ts | 22 +++++++++++++++++----- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index bff82b29df..79ae65c8d6 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -499,6 +499,11 @@ } }, "polygon": { + "0x695a61817D468983fd32881ea4CE83E91eF2C11E": { + "decimals": 18, + "symbol": "RYT", + "to": "asset#ethereum:0x1d06aa46994f2aba30f6eed46b315664460a709a" + }, "0xdbBC41FFD1e4D219E2cfd5Bfe9e4623cd4274532": { "decimals": "18", "symbol": "uRON", @@ -1645,6 +1650,11 @@ } }, "arbitrum": { + "0x1759AEF9c1Ad57B2D16caEC43f451BA46D504fD7": { + "decimals": 18, + "symbol": "RYT", + "to": "asset#ethereum:0x1d06aa46994f2aba30f6eed46b315664460a709a" + }, "0x6eaf19b2fc24552925db245f9ff613157a7dbb4c": { "decimals": "6", "symbol": "xUSD", @@ -9124,6 +9134,11 @@ } }, "sonic": { + "0x6202B9f02E30E5e1c62Cc01E4305450E5d83b926": { + "to": "coingecko#staked-stream-usd", + "decimals": 6, + "symbol": "xUSD" + }, "0xb827e91c5cd4d6aca2fc0cd93a07db61896af40b": { "decimals": "18", "symbol": "SPECTRA", diff --git a/defi/l2/v2/index.ts b/defi/l2/v2/index.ts index a490d11040..e51bb7f804 100644 --- a/defi/l2/v2/index.ts +++ b/defi/l2/v2/index.ts @@ -19,6 +19,7 @@ import { additional, excluded } from "../adapters/manual"; import { storeHistoricalToDB } from "./storeToDb"; import { stablecoins } from "../../src/getProtocols"; import { metadata as rwaMetadata } from "../../src/rwa/protocols"; +import { verifyChanges } from "../test"; const searchWidth = 10800; // 3hr @@ -260,11 +261,20 @@ async function fetchLstSymbols() { } function fetchRwaSymbols() { - const symbols: string[] = []; + const allSymbols: {[symbol: string]: boolean } = {}; Object.values(rwaMetadata).map(({ matchExact, symbols }: { matchExact: boolean; symbols: string[] }) => { - if (matchExact) symbols.push(...symbols); + symbols.map((symbol) => allSymbols[symbol] = matchExact) }); - return symbols; + return allSymbols; +} + +function isRwaSymbol(symbol: string, rwaSymbols: {[symbol: string]: boolean }) { + if (rwaSymbols[symbol]) return true; + Object.keys(rwaSymbols).map((s) => { + if (!rwaSymbols[s] && symbol.startsWith(s)) return true; + }); + + return false } function normalizeKey(key: string) { @@ -374,7 +384,7 @@ async function main() { let section = "canonical"; if (isOwnToken(chain, symbol)) section = "ownTokens"; else if (stablecoinSymbols.includes(symbol)) section = "stablecoins"; - else if (rwaSymbols.includes(symbol)) section = "rwa"; + else if (isRwaSymbol(symbol, rwaSymbols)) section = "rwa"; else if (lstSymbols.includes(symbol)) section = "lst"; rawData[chain][section as keyof FinalChainData].breakdown[key] = amount; if (!isOwnToken(chain, symbol)) rawData[chain].total.breakdown[key] = amount; @@ -390,7 +400,7 @@ async function main() { let section = "native"; if (isOwnToken(chain, symbol)) section = "ownTokens"; else if (stablecoinSymbols.includes(symbol)) section = "stablecoins"; - else if (rwaSymbols.includes(symbol)) section = "rwa"; + else if (isRwaSymbol(symbol, rwaSymbols)) section = "rwa"; else if (lstSymbols.includes(symbol)) section = "lst"; else if (incomingAssets[chain] && incomingAssets[chain].includes(key.substring(key.indexOf(":") + 1))) section = "thirdParty"; @@ -471,6 +481,8 @@ async function main() { const rawDataJson = JSON.parse(JSON.stringify(rawData)); const symbolDataJson = JSON.parse(JSON.stringify(symbolData)); + await verifyChanges(symbolData); + await Promise.all([ symbolMapPromise, storeHistoricalToDB({ timestamp: getCurrentUnixTimestamp(), value: rawData }), From e48b86dd85f7b9006888dbc20faa9042fba28afd Mon Sep 17 00:00:00 2001 From: Define101 Date: Thu, 2 Oct 2025 10:00:14 +0100 Subject: [PATCH 056/398] new logo --- defi/src/protocols/data3.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 738837514a..063792d341 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -53742,7 +53742,7 @@ const data3_2: Protocol[] = [ url: "https://app.reya.xyz/", description: "Reya DEX is a perpetual futures exchange on the Reya Network", chain: "Reya Network", - logo: `${baseIconsUrl}/reya-perps-dex.png`, + logo: `${baseIconsUrl}/reya-dex.jpg`, audits: "2", audit_note: null, gecko_id: null, From b3d6a84cb7b104fa74b43d23ff4611540b1f2cbe Mon Sep 17 00:00:00 2001 From: Define101 Date: Thu, 2 Oct 2025 11:01:41 +0100 Subject: [PATCH 057/398] new lighter code --- defi/src/protocols/parentProtocols.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index 947a3ebc6c..f5195a4218 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -3387,7 +3387,8 @@ const parentProtocols: IParentProtocol[] = [ { id: "parent#lighter", name: "Lighter", - url: "https://app.lighter.xyz/trade/ETH?referral=28HHQ5EZ22UR", + url: "https://app.lighter.xyz/trade/ETH?referral=FHT1N8AYKHP4", + referralUrl: "https://app.lighter.xyz/trade/ETH?referral=FHT1N8AYKHP4", description: "Lighter is a decentralized trading platform that is designed to deliver unmatched security and scale. Lighter provides verifiable matching and liquidations, while operating at the best-in-class traditional exchange level performances.", logo: `${baseIconsUrl}/lighter.jpg`, From 458984794e9197d3dec6ed835547872ec044d22b Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 2 Oct 2025 12:41:29 +0100 Subject: [PATCH 058/398] Chain Assets API2 (#10674) * uxlink * rings few category * return distressed assets * chain assets api2 * somnia, plasma bridged * openeden --- defi/l2/adapters/thirdParty.ts | 37 +++++++-- defi/l2/constants.ts | 4 + defi/src/api2/routes/index.ts | 26 +++++- defi/src/api2ChainAssets.ts | 19 +++++ defi/src/cli/scaleTokenAmountsForTVL.ts | 103 ++++++++++++++++++++++++ 5 files changed, 182 insertions(+), 7 deletions(-) create mode 100644 defi/src/api2ChainAssets.ts create mode 100644 defi/src/cli/scaleTokenAmountsForTVL.ts diff --git a/defi/l2/adapters/thirdParty.ts b/defi/l2/adapters/thirdParty.ts index c449b3f98e..28880c6dc6 100644 --- a/defi/l2/adapters/thirdParty.ts +++ b/defi/l2/adapters/thirdParty.ts @@ -117,18 +117,45 @@ const celer = async (): Promise => { const layerzero = async (): Promise => { const bridge = "layerzero"; if (doneAdapters.includes(bridge)) return; - if (!(bridge in bridgePromises)) - bridgePromises[bridge] = fetch( - "https://gist.githubusercontent.com/vrtnd/02b1125edf1afe2baddbf1027157aa31/raw/5cab2009357b1acb8982e6a80e66b64ab7ea1251/mappings.json" - ).then((r) => r.json()); + if (!(bridge in bridgePromises)) { + bridgePromises[bridge] = Promise.all([ + fetch( + "https://gist.githubusercontent.com/vrtnd/02b1125edf1afe2baddbf1027157aa31/raw/5cab2009357b1acb8982e6a80e66b64ab7ea1251/mappings.json" + ).then((r) => r.json()), + fetch("https://metadata.layerzero-api.com/v1/metadata").then((r) => r.json()), + ]) + } const data = await bridgePromises[bridge]; - data.map(({ to }: any) => { + data[0].map(({ to }: any) => { const [chain, address] = to.split(":"); if (!(chain in addresses)) addresses[chain] = []; if (!(address in addresses[chain])) addresses[chain].push(address); }); + const nonEvmMapping: { [key: string]: string } = { + solana: "solana", + aptos: "aptos", + ton: "ton", + movement: "move", + "sui-mainnet": "sui", + }; + + Object.keys(data[1]).map((chain: string) => { + if (chain.endsWith("-testnet")) return; + if (!data[1][chain].chainDetails) return; + + const { chainType, chainId, nativeChainId } = data[1][chain].chainDetails; + if (chainType != "evm" && !nonEvmMapping[chain]) return + const destinationChainSlug = + chainIdMap[chainId] ?? chainIdMap[nativeChainId] ?? nonEvmMapping[chain]; + if (!destinationChainSlug) return; + + if (!allChainKeys.includes(destinationChainSlug)) return; + if (!addresses[destinationChainSlug]) addresses[destinationChainSlug] = []; + addresses[destinationChainSlug].push(...Object.keys(data[1][chain].tokens)); + }); + const staticTokens: { [chain: string]: string[] } = { morph: ["0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34", "0x7DCC39B4d1C53CB31e1aBc0e358b43987FEF80f7"], unichain: [ diff --git a/defi/l2/constants.ts b/defi/l2/constants.ts index d403ea30ed..af5ff67917 100644 --- a/defi/l2/constants.ts +++ b/defi/l2/constants.ts @@ -29,6 +29,8 @@ export const chainsWithoutCanonicalBridges: string[] = [ // "aurora", "berachain", "flow", + "somnia", + "plasma" ]; export const canonicalBridgeIds: { [id: string]: Chain } = { @@ -252,4 +254,6 @@ export const ownTokens: { [chain: Chain]: { ticker: string; address: string } } // embr: {} "xion": { ticker: "XION", address: "coingecko:xion-2" }, "hemi-l2": { ticker: "HEMI", address: "coingecko:hemi" }, + "somnia": { ticker: "SOMI", address: "coingecko:somnia" }, + "plasma": { ticker: "XPL", address: "coingecko:plasma" }, }; diff --git a/defi/src/api2/routes/index.ts b/defi/src/api2/routes/index.ts index 4904d166c5..ad60397431 100644 --- a/defi/src/api2/routes/index.ts +++ b/defi/src/api2/routes/index.ts @@ -22,6 +22,7 @@ import { getDimensionsMetadata } from "../utils/dimensionsUtils"; import { chainNameToIdMap } from "../../utils/normalizeChain"; import { getCategoryChartByChainData, getTagChartByChainData } from "../../getCategoryChartByChainData"; import { getCexs } from "../../getCexs"; +import { chainAssetHistoricalFlows, chainAssetFlows, chainAssetChart } from "../../api2ChainAssets"; /* import { getProtocolUsersHandler } from "../../getProtocolUsers"; import { getActiveUsers } from "../../getActiveUsers"; @@ -67,7 +68,6 @@ export default function setRoutes(router: HyperExpress.Router, routerBasePath: s router.get("/oracles", defaultFileHandler); router.get("/forks", defaultFileHandler); router.get("/rwa/stats", defaultFileHandler); - router.get("/chain-assets/raw", r2Wrapper({ endpoint: 'chainAssetsRaw' })); router.get("/categories", defaultFileHandler); router.get("/langs", defaultFileHandler); router.get("/lite/charts/:chain", defaultFileHandler); @@ -99,7 +99,13 @@ export default function setRoutes(router: HyperExpress.Router, routerBasePath: s router.get("/emissionsBreakdownAggregated", r2Wrapper({ endpoint: 'emissionsBreakdownAggregated' })) router.get("/emissionsSupplyMetrics", r2Wrapper({ endpoint: 'emissionsSupplyMetrics' })) router.get("/emission/:name", emissionProtocolHandler) - router.get("/chainAssets", r2Wrapper({ endpoint: 'chainAssets' })) + + router.get("/chainAssets", r2Wrapper({ endpoint: 'chainAssets' })); + router.get("/chain-assets/chains", r2Wrapper({ endpoint: 'chainAssets' })); + router.get("/chain-assets/raw", r2Wrapper({ endpoint: 'chainAssetsRaw' })); + router.get("/chain-assets/chart/:chain", ew(async (req: any, res: any) => chainAssetsHandler(req, res, { isFlows: false, isHistorical: true }))); + router.get("/chain-assets/flows/:period", ew(async (req: any, res: any) => chainAssetsHandler(req, res, { isFlows: true, isHistorical: false }))); + router.get("/chain-assets/historical-flows/:chain/:period", ew(async (req: any, res: any) => chainAssetsHandler(req, res, { isFlows: true, isHistorical: true }))); router.get("/twitter/overview", ew(getTwitterOverview)) router.get("/twitter/user/:handle", ew(getTwitterData)) @@ -424,6 +430,22 @@ async function emissionProtocolHandler(req: HyperExpress.Request, res: HyperExpr return returnR2Data({ endpoint: `emissions/${name}`, errorMessage: `protocol '${name}' has no chart to fetch`, res, parseJson: false }) } +async function chainAssetsHandler(req: HyperExpress.Request, res: HyperExpress.Response, params?: { isFlows: boolean, isHistorical: boolean }) { + let data; + try { + if (params?.isFlows) { + data = params?.isHistorical ? await chainAssetHistoricalFlows(req.path_parameters) : await chainAssetFlows(); + } else { + data = await chainAssetChart(req.path_parameters); + } + } catch (e: any) { + return errorResponse(res, e.message) + } + + return successResponse(res, data, 60); +} + + async function getChartsData(req: HyperExpress.Request, res: HyperExpress.Response) { const name = decodeURIComponent(req.path_parameters?.name ?? '') try { diff --git a/defi/src/api2ChainAssets.ts b/defi/src/api2ChainAssets.ts new file mode 100644 index 0000000000..b59b2b8aed --- /dev/null +++ b/defi/src/api2ChainAssets.ts @@ -0,0 +1,19 @@ +import { fetchFlows, fetchHistoricalFlows, fetchHistoricalFromDB } from "../l2/storeToDb"; +import { secondsInDay } from "./utils/date"; + +export async function chainAssetFlows() { + return await fetchFlows(secondsInDay); +} + +export async function chainAssetHistoricalFlows(pathParameters: { [key: string]: string }) { + const chain = pathParameters?.chain; + if (!chain) throw new Error(`chain path param required`); + return await fetchHistoricalFlows(secondsInDay, chain); +} + +export async function chainAssetChart(pathParameters: { [key: string]: string }) { + const chainParam = pathParameters?.chain; + if (!chainParam) throw new Error(`chain path param required`); + const chain = chainParam.replace("%20", " "); + return await fetchHistoricalFromDB(chain); +} \ No newline at end of file diff --git a/defi/src/cli/scaleTokenAmountsForTVL.ts b/defi/src/cli/scaleTokenAmountsForTVL.ts new file mode 100644 index 0000000000..5927c2fc10 --- /dev/null +++ b/defi/src/cli/scaleTokenAmountsForTVL.ts @@ -0,0 +1,103 @@ +import { getProtocolItems } from "../api2/db"; +import { dailyTvl, dailyRawTokensTvl, dailyTokensTvl, dailyUsdTokensTvl } from "../utils/getLastRecord"; +import { PromisePool } from "@supercharge/promise-pool"; +import dynamodb from "../utils/shared/dynamodb"; + +// config +const id = '5995' +const chain = 'ripple' +const tokens = ['openeden-tbill', 'TBILL'] +const decimals = 0 +const rawToken = 'ripple:TBL.rJNE2NNz83GJYtWVLwMvchDWEon3huWnFn' +const priceKey = 'coingecko:openeden-tbill' +const minTvl = 50000000 +const timestampFrom = Math.floor(new Date('2025-08-28').getTime() / 1000) // last accurate record +const timestampTo = Math.floor(new Date('2025-09-16').getTime() / 1000) // first accurate record + +const tvlTypes = [dailyTokensTvl, dailyUsdTokensTvl, dailyTvl, dailyRawTokensTvl] + +async function getFaultyTimestamps(tvlType: (id: string) => string) { + const storedRecords = await getProtocolItems(tvlType, id, { + timestampFrom: timestampFrom - (86400 * 2), + timestampTo: timestampTo + 1, + }) + + const filteredRecords = storedRecords.filter((record: any) => Object.keys(record[chain]).map((token) => + tokens.includes(token) ? record[chain][token] : 0).reduce((a, b) => a + b, 0) < minTvl) + + const faultyTimestamps = filteredRecords.map((record: any) => record.SK) + + const recordBeforeGap = Object.keys(storedRecords[0][chain]).map((token) => { + if (storedRecords[0][chain][token] > 0) { + return storedRecords[0][chain][token] + } + return 0 + }).reduce((a, b) => a + b, 0) + + const recordAfterGap = Object.keys(storedRecords[storedRecords.length - 1][chain]).map((token) => { + if (storedRecords[storedRecords.length - 1][chain][token] > 0) { + return storedRecords[storedRecords.length - 1][chain][token] + } + return 0 + }).reduce((a, b) => a + b, 0) + + return { timestamps: faultyTimestamps, recordBeforeGap, recordAfterGap } +} + +async function main() { + const {timestamps, recordBeforeGap, recordAfterGap } = await getFaultyTimestamps(dailyTokensTvl) + + const { coins } = await fetch(`https://coins.llama.fi/batchHistorical?coins=${JSON.stringify({ + [priceKey]: timestamps, + })}`).then(r => r.json()) + + const prices = coins[priceKey].prices + const startQty = recordBeforeGap / prices[prices.length - 1].price + const endQty = recordAfterGap / prices[0].price + const qtyStep = (endQty - startQty) / timestamps.length + + + await Promise.all(tvlTypes.map(async (tvlType) => { + const dbKey = tvlType(id) + const storedRecords = await getProtocolItems(tvlType, id, { + timestampFrom: timestampFrom - (86400 * 2), + timestampTo: timestampTo + 1, + }) + + await PromisePool.withConcurrency(10).for(storedRecords).process(async (record: any) => { + try { + const index = timestamps.indexOf(record.SK) + if (index < 0) return + + let addition = startQty + index * qtyStep + let tokenKey = dbKey.includes('Raw') ? rawToken : tokens[0] + let newRecord = record + + if (dbKey.includes('Raw')) { // scale by decimals + addition = addition * 10 ** decimals + newRecord[chain][tokenKey] = addition + newRecord.tvl[tokenKey] = (newRecord.tvl[tokenKey] ?? 0) + addition + } if (dbKey.includes('Usd')) { // scale by price + addition = addition * prices[index].price + newRecord[chain][tokenKey] = addition + newRecord.tvl[tokenKey] = (newRecord.tvl[tokenKey] ?? 0) + addition + } if (!dbKey.includes('Tokens')) { // just aggregate USD TVLs + addition = addition * prices[index].price + newRecord[chain] = (newRecord[chain] ?? 0) + addition + newRecord.tvl = newRecord.tvl + addition + } else { // dailyTokensTvl + newRecord[chain][tokenKey] = addition + newRecord.tvl[tokenKey] = (newRecord.tvl[tokenKey] ?? 0) + addition + } + + + await dynamodb.put({ PK: dbKey, ...newRecord, }); + } catch (e) { + throw e; + } + }) + })) + + return +} +main() // ts-node defi/src/cli/scaleTokenAmountsForTVL.ts \ No newline at end of file From d076fe0b960e570d3791df452a3402725a5bcddb Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 2 Oct 2025 12:44:49 +0100 Subject: [PATCH 059/398] plasma mappings (#10734) --- coins/src/adapters/tokenMapping.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index 79ae65c8d6..ba2855841b 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -12108,6 +12108,16 @@ } }, "plasma": { + "0xC4374775489CB9C56003BF2C9b12495fC64F0771": { + "decimals": 6, + "symbol": "syrupUSDT", + "to": "coingecko#syrupusdt" + }, + "0x2a52B289bA68bBd02676640aA9F605700c9e5699": { + "decimals": 18, + "symbol": "wstUSR", + "to": "coingecko#resolv-wstusr" + }, "0x6eaf19b2fc24552925db245f9ff613157a7dbb4c": { "decimals": "6", "symbol": "xUSD", From b828e221f1396a6f3af923a3bef2189d6790f712 Mon Sep 17 00:00:00 2001 From: Define101 Date: Thu, 2 Oct 2025 12:58:10 +0100 Subject: [PATCH 060/398] Project and update lighter --- defi/src/protocols/data4.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 87b2e5d4f4..77ac5c0bca 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -11708,8 +11708,8 @@ const data4: Protocol[] = [ previousNames: ["Lighter V2"], address: null, symbol: "-", - url: "https://app.lighter.xyz/trade/ETH?referral=28HHQ5EZ22UR", - referralUrl: "https://app.lighter.xyz/trade/ETH?referral=28HHQ5EZ22UR", + url: "https://app.lighter.xyz/trade/ETH?referral=FHT1N8AYKHP4", + referralUrl: "https://app.lighter.xyz/trade/ETH?referral=FHT1N8AYKHP4", description: "Lighter is a decentralized trading platform that is designed to deliver unmatched security and scale. Lighter provides verifiable matching and liquidations, while operating at the best-in-class traditional exchange level performances.", chain: "Ethereum", @@ -21529,7 +21529,8 @@ const data4: Protocol[] = [ name: "Project X", address: null, symbol: "-", - url: "https://www.prjx.com", + url: "https://www.prjx.com/@DEFILLAMA", +  referralUrl: "https://www.prjx.com/@DEFILLAMA", description: "Project X is built on the belief that tech is becoming increasingly commoditized and the next era of DeFi will be won by innovating on distribution, incentive design and UX.", chain: "Hyperliquid L1", @@ -28678,8 +28679,8 @@ const data4: Protocol[] = [ name: "Lighter Perps", address: null, symbol: "-", - url: "https://app.lighter.xyz/trade/ETH?referral=28HHQ5EZ22UR", - referralUrl: "https://app.lighter.xyz/trade/ETH?referral=28HHQ5EZ22UR", + url: "https://app.lighter.xyz/trade/ETH?referral=FHT1N8AYKHP4", + referralUrl: "https://app.lighter.xyz/trade/ETH?referral=FHT1N8AYKHP4", description: "Lighter is a decentralized trading platform that is designed to deliver unmatched security and scale. Lighter provides verifiable matching and liquidations, while operating at the best-in-class traditional exchange level performances.", chain: "zkLighter", From 91be32c6bab6d8d6e791419382330ed3af866ee7 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 2 Oct 2025 14:03:11 +0100 Subject: [PATCH 061/398] prefix malformed (#10735) * plasma mappings * prefix malformed catch * inc hashnote confidence --- coins/src/adapters/rwa/hashnote.ts | 4 ++-- defi/src/storeTvlInterval/computeTVL.ts | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/coins/src/adapters/rwa/hashnote.ts b/coins/src/adapters/rwa/hashnote.ts index f7a8f2beb7..44c41feb1d 100644 --- a/coins/src/adapters/rwa/hashnote.ts +++ b/coins/src/adapters/rwa/hashnote.ts @@ -9,8 +9,8 @@ export async function hashnote(timestamp: number): Promise { const tokenPrice = (await api.call({ abi, target: "0x4c48bcb2160F8e0aDbf9D4F3B034f1e36d1f8b3e", })).answer / 1e8; const writes: Write[] = []; - addToDBWritesList(writes, 'canto', '0xfb8255f0de21acebf490f1df6f0bdd48cc1df03b', tokenPrice, 6, symbol, timestamp, "hashnote-rwa", 0.8,); - addToDBWritesList(writes, 'ethereum', '0x136471a34f6ef19fe571effc1ca711fdb8e49f2b', tokenPrice, 6, symbol, timestamp, "hashnote-rwa", 0.8,); + addToDBWritesList(writes, 'canto', '0xfb8255f0de21acebf490f1df6f0bdd48cc1df03b', tokenPrice, 6, symbol, timestamp, "hashnote-rwa", 1,); + addToDBWritesList(writes, 'ethereum', '0x136471a34f6ef19fe571effc1ca711fdb8e49f2b', tokenPrice, 6, symbol, timestamp, "hashnote-rwa", 1,); return writes; } diff --git a/defi/src/storeTvlInterval/computeTVL.ts b/defi/src/storeTvlInterval/computeTVL.ts index 117806d72b..9c9b3d879b 100644 --- a/defi/src/storeTvlInterval/computeTVL.ts +++ b/defi/src/storeTvlInterval/computeTVL.ts @@ -13,6 +13,16 @@ type Balances = { [symbol: string]: number; }; +function prefixMalformed(address: string) { + const parts = address.split(':') + if (parts.length == 2) return false + + if (parts.length == 1) return true + if (address.indexOf(':coingecko:') != -1) return true + if (parts[0] == parts[1]) return true + return false +} + export default async function (balances: { [address: string]: string }, timestamp: "now" | number, protocol: string, staleCoins: StaleCoins) { replaceETHwithWETH(balances) @@ -23,6 +33,7 @@ export default async function (balances: { [address: string]: string }, timestam .map((address) => { if (+balances[address] === 0) return undefined; let prefix = ""; + if (prefixMalformed(address)) return undefined if (address.startsWith("0x")) { prefix = "ethereum:" } else if (!address.includes(":")) { From d5363e4222fb434851c5e2c0c4fba3a602cdd1b5 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 2 Oct 2025 14:25:15 +0100 Subject: [PATCH 062/398] CG edits (#10736) * plasma mappings * prefix malformed catch * inc hashnote confidence * solstice, falcon rwa tags * cg full precision * patch cg adapter check --- coins/src/scripts/coingecko.ts | 26 ++++++++++++++------------ coins/src/utils/getCoinsUtils.ts | 2 +- defi/src/rwa/protocols.ts | 20 ++++++++++++++++++++ 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/coins/src/scripts/coingecko.ts b/coins/src/scripts/coingecko.ts index d5ff891d63..39cb991586 100644 --- a/coins/src/scripts/coingecko.ts +++ b/coins/src/scripts/coingecko.ts @@ -132,7 +132,7 @@ async function getAndStoreCoins(coins: Coin[], rejected: Coin[]) { SK: 0, })), ) - ).filter((c) => !c.adapter && c.confidence == 0.99); + ).filter((c) => c.confidence == 0.99); const deleteStaleKeysPromise = DELETE( staleEntries.map((e) => ({ @@ -460,17 +460,19 @@ async function triggerFetchCoingeckoData(hourly: boolean, coinType?: string) { coins.map((coin) => coin.id), coinType, ); - coins = coins.filter((coin) => { - const metadata = metadatas[coin.id]; - if (!metadata) return true; // if we don't have metadata, we don't know if it's over 10m - if (hourly) { - return metadata.usd_market_cap > 1e8 && metadata.usd_24h_vol > 1e8; - } - return ( - metadata.coinType === coinType || - metadata.coinType === COIN_TYPES.over100m - ); // always include over100m coins - }); + coins = coins.filter((coin) => coin.id == 'ubtc'); + if (!coins.length) process.exit(0) + // coins = coins.filter((coin) => { + // const metadata = metadatas[coin.id]; + // if (!metadata) return true; // if we don't have metadata, we don't know if it's over 10m + // if (hourly) { + // return metadata.usd_market_cap > 1e8 && metadata.usd_24h_vol > 1e8; + // } + // return ( + // metadata.coinType === coinType || + // metadata.coinType === COIN_TYPES.over100m + // ); // always include over100m coins + // }); } console.log( `Fetching prices for ${coins.length} coins`, diff --git a/coins/src/utils/getCoinsUtils.ts b/coins/src/utils/getCoinsUtils.ts index 809dc10b31..0feab48473 100644 --- a/coins/src/utils/getCoinsUtils.ts +++ b/coins/src/utils/getCoinsUtils.ts @@ -79,7 +79,7 @@ export async function fetchCgPriceData( return await retryCoingeckoRequest( `simple/price?ids=${coinIds.join( ",", - )}&vs_currencies=usd&include_market_cap=true&include_last_updated_at=true&include_24hr_vol=true`, + )}&vs_currencies=usd&include_market_cap=true&include_last_updated_at=true&include_24hr_vol=true&precision=full`, 10, log, ); diff --git a/defi/src/rwa/protocols.ts b/defi/src/rwa/protocols.ts index 3a9d3f5064..50efc17617 100644 --- a/defi/src/rwa/protocols.ts +++ b/defi/src/rwa/protocols.ts @@ -724,5 +724,25 @@ export const metadata: { [id: string]: Characteristics } = { kyc: false, transferable: true, selfCustody: true, + }, + "6789": { + symbols: ["USX"], + matchExact: true, + redeemable: true, + attestations: true, + cexListed: false, + kyc: true, + transferable: true, + selfCustody: true, + }, + "6790": { + symbols: ["USDf"], + matchExact: true, + redeemable: true, + attestations: true, + cexListed: false, + kyc: true, + transferable: true, + selfCustody: true, } }; From 291b9775b6d04fd8fce727644d802d99e8eb14ca Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 2 Oct 2025 15:13:37 +0100 Subject: [PATCH 063/398] skip check (#10737) * plasma mappings * prefix malformed catch * inc hashnote confidence * solstice, falcon rwa tags * cg full precision * patch cg adapter check * skip check for now --- defi/src/storeTvlInterval/computeTVL.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/storeTvlInterval/computeTVL.ts b/defi/src/storeTvlInterval/computeTVL.ts index 9c9b3d879b..5171227f6d 100644 --- a/defi/src/storeTvlInterval/computeTVL.ts +++ b/defi/src/storeTvlInterval/computeTVL.ts @@ -33,7 +33,7 @@ export default async function (balances: { [address: string]: string }, timestam .map((address) => { if (+balances[address] === 0) return undefined; let prefix = ""; - if (prefixMalformed(address)) return undefined + // if (prefixMalformed(address)) return undefined if (address.startsWith("0x")) { prefix = "ethereum:" } else if (!address.includes(":")) { From 8b4c3dd7c423ac4fa30194c3a5fc185878b4d65e Mon Sep 17 00:00:00 2001 From: Define101 Date: Thu, 2 Oct 2025 15:16:25 +0100 Subject: [PATCH 064/398] ABEL deadurl --- defi/src/protocols/data2.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/defi/src/protocols/data2.ts b/defi/src/protocols/data2.ts index 024d5662bb..8aacd638ad 100644 --- a/defi/src/protocols/data2.ts +++ b/defi/src/protocols/data2.ts @@ -22518,6 +22518,7 @@ const data2: Protocol[] = [ ], listedAt: 1670348069, github: ["abelfinance"], + deadUrl: true, }, { id: "2336", From 96a94b43f380d93cec6daba7706c6d627487281f Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 2 Oct 2025 15:27:18 +0100 Subject: [PATCH 065/398] Malformed Keys In Balances (#10738) * plasma mappings * prefix malformed catch * inc hashnote confidence * solstice, falcon rwa tags * cg full precision * patch cg adapter check * skip check for now * malformed keys in balances --- defi/src/storeTvlInterval/computeTVL.ts | 11 ----------- defi/src/storeTvlInterval/getAndStoreTvl.ts | 9 +++++++++ 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/defi/src/storeTvlInterval/computeTVL.ts b/defi/src/storeTvlInterval/computeTVL.ts index 5171227f6d..117806d72b 100644 --- a/defi/src/storeTvlInterval/computeTVL.ts +++ b/defi/src/storeTvlInterval/computeTVL.ts @@ -13,16 +13,6 @@ type Balances = { [symbol: string]: number; }; -function prefixMalformed(address: string) { - const parts = address.split(':') - if (parts.length == 2) return false - - if (parts.length == 1) return true - if (address.indexOf(':coingecko:') != -1) return true - if (parts[0] == parts[1]) return true - return false -} - export default async function (balances: { [address: string]: string }, timestamp: "now" | number, protocol: string, staleCoins: StaleCoins) { replaceETHwithWETH(balances) @@ -33,7 +23,6 @@ export default async function (balances: { [address: string]: string }, timestam .map((address) => { if (+balances[address] === 0) return undefined; let prefix = ""; - // if (prefixMalformed(address)) return undefined if (address.startsWith("0x")) { prefix = "ethereum:" } else if (!address.includes(":")) { diff --git a/defi/src/storeTvlInterval/getAndStoreTvl.ts b/defi/src/storeTvlInterval/getAndStoreTvl.ts index 9665e24184..d6c7d7bdb0 100644 --- a/defi/src/storeTvlInterval/getAndStoreTvl.ts +++ b/defi/src/storeTvlInterval/getAndStoreTvl.ts @@ -78,6 +78,7 @@ async function getTvl( chainDashPromise = storeAllTokens(Object.keys(tvlBalances)); } Object.keys(tvlBalances).forEach((key) => { + if (prefixMalformed(key)) delete tvlBalances[key] if (+tvlBalances[key] === 0) delete tvlBalances[key] }) const isStandard = Object.entries(tvlBalances).every( @@ -158,6 +159,14 @@ function mergeBalances(key: string, storedKeys: string[], balancesObject: tvlsOb } } +function prefixMalformed(address: string) { + const parts = address.split(':') + if (parts.length < 3) return false + if (address.indexOf(':coingecko:') != -1) return true + if (parts.length > 2 &&parts[0] == parts[1]) return true + return false +} + type StoreTvlOptions = { returnCompleteTvlObject?: boolean, partialRefill?: boolean, From 589c98947c35553a07dd653da42740626cf891f1 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 2 Oct 2025 16:04:18 +0100 Subject: [PATCH 066/398] Smardex switch adapter (#10739) * plasma mappings * prefix malformed catch * inc hashnote confidence * solstice, falcon rwa tags * cg full precision * patch cg adapter check * skip check for now * malformed keys in balances * smardex switch adapter --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 77ac5c0bca..e51e4823ad 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -16255,7 +16255,7 @@ const data4: Protocol[] = [ category: "Lending", chains: ["Ethereum"], forkedFrom: [], - module: "p2p-lending/index.js", + module: "SMARDEX-P2P-Lending/index.js", twitter: "SmarDex", parentProtocol: "parent#smardex-ecosystem", listedAt: 1747967378, From f103e7c11711c395ef3ab99b8be4808e0c9140e5 Mon Sep 17 00:00:00 2001 From: Reynardo Etenia Wongso Date: Thu, 2 Oct 2025 23:11:58 +0800 Subject: [PATCH 067/398] fix (#10740) --- defi/src/storeEmissionsUtils.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/defi/src/storeEmissionsUtils.ts b/defi/src/storeEmissionsUtils.ts index 4f218d239f..1b99741887 100644 --- a/defi/src/storeEmissionsUtils.ts +++ b/defi/src/storeEmissionsUtils.ts @@ -165,10 +165,12 @@ async function getPricedUnlockChart(emissionData: Awaited; label: string }) => { - if (!incentiveSections?.includes(chart.label)) return; + if (!allIncentiveSections?.includes(chart.label)) return; chart.data .filter((val) => val.timestamp < currDate) @@ -540,4 +542,4 @@ export async function processSingleProtocol( await storeR2JSONString(`emissions/${sluggifiedId}`, JSON.stringify(finalData)); return sluggifiedId; -} \ No newline at end of file +} From ee46dd0cf3e59e82dcee8c55594f4b661887cdea Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 2 Oct 2025 10:00:01 -0600 Subject: [PATCH 068/398] update project name --- defi/DefiLlama-Adapters | 2 +- defi/src/protocols/data4.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/defi/DefiLlama-Adapters b/defi/DefiLlama-Adapters index 7f94d72fba..28162f0ccf 160000 --- a/defi/DefiLlama-Adapters +++ b/defi/DefiLlama-Adapters @@ -1 +1 @@ -Subproject commit 7f94d72fbaf90e007c8b2d6a38682d26b058cd9d +Subproject commit 28162f0ccf74dc4acdb6780c8b69a284a6dd783b diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index e51e4823ad..2a55e86aef 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29056,15 +29056,15 @@ const data4: Protocol[] = [ }, { id: "6767", - name: "Idle Mining", - previousNames: ["Qubic Mining"], + name: "Qubic Idle Compute", + previousNames: ["Qubic Mining", "Idle Mining"], address: null, symbol: "-", url: "https://qpools.qubicdisciple.info/", description: "A mining pool for Monero that generates revenue from mining and directs the proceeds to token burns.", chain: "Qubic", - logo: `${baseIconsUrl}/idle-mining.jpg`, + logo: `${baseIconsUrl}/qubic-idle-compute.jpg`, audits: "0", audit_note: null, gecko_id: null, From fc3a6e793f72c1c9474ed1d607960bffe696ca36 Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 2 Oct 2025 10:36:45 -0600 Subject: [PATCH 069/398] enable dimensions adapters --- defi/src/protocols/data3.ts | 4 +++- defi/src/protocols/data4.ts | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 063792d341..bb09b4766b 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -60660,7 +60660,9 @@ const data3_2: Protocol[] = [ audit_links: ["https://github.com/defxcode/defx-contract/blob/main/DefxBridgeAuditReport.pdf"], listedAt: 1729687090, dimensions: { - derivatives: "defx" + derivatives: "defx", + fees: "defx", + "open-interest": "defx" } }, { diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 2a55e86aef..b52b80cdbd 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -28910,7 +28910,10 @@ const data4: Protocol[] = [ "https://github.com/DefiTuna/tuna-sdk/blob/main/audit/torii-defituna-report-27-Jan-2025.pdf" ], parentProtocol: "parent#defituna", - listedAt: 1758723382 + listedAt: 1758723382, + dimensions: { + fees: "defituna-liquidity" + } }, { id: "6761", From af4186200999d60bc768d4d721d5be207df293ff Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 2 Oct 2025 10:37:34 -0600 Subject: [PATCH 070/398] enable fees for optfun --- defi/src/protocols/data4.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index b52b80cdbd..b0a2e61b67 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -18985,7 +18985,8 @@ const data4: Protocol[] = [ forkedFromIds: [], listedAt: 1750434513, dimensions: { - options: "optfun" + options: "optfun", + fees: "optfun" } }, { From a0473c1c380cae2a8560b5674262049db63fdc9e Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 2 Oct 2025 10:53:36 -0600 Subject: [PATCH 071/398] add new dimensions listings --- defi/src/protocols/data4.ts | 49 +++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index b0a2e61b67..d989345892 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29790,5 +29790,54 @@ const data4: Protocol[] = [ github: ["leadfi"], listedAt: 1759340419 }, + { + id: "6800", + name: "MetaMask USD", + address: null, + symbol: "-", + url: "https://metamask.io/price/metamask-usd", + description: "MetaMask USD (mUSD) is a self-custodial wallet-native stablecoin issued via Bridge and M0, fully backed by short-term Treasury and cash reserves, and integrated into MetaMask’s wallet for swaps, on-ramps, and spending", + chain: "Ethereum", + logo: `${baseIconsUrl}/metamask-usd.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Stablecoin Issuer", + chains: ["Ethereum", "Linea"], + module: "dummy.js", + twitter: "MetaMask", + forkedFromIds: [], + dimensions: { + fees: "metamask-musd" + } + }, + { + id: "6801", + name: "Lotus Finance", + address: null, + symbol: "-", + url: "https://app.lotusfinance.io/", + description: "Lotus Finance is a liquidity provider protocol on Sui. It now runs market making strategy on Deepbook and other CLOB DEX's, generates yield from trading strategies and maker fees", + chain: "Sui", + logo: `${baseIconsUrl}/lotus-finance.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Yield", + chains: ["Sui"], + module: "dummy.js", + twitter: "Lotusfinance_io", + forkedFromIds: [], + audit_links: [ + "https://app.lotusfinance.io/files/Lotus%20Finance%20Smart%20Contract%20Audit%20Report-2025-5-27.pdf", + "https://info.asymptotic.tech/lotus-protocol-audit" + ], + dimensions: { + fees: "metamask-musd" + }, + github: ["lotus-finance-team"] + }, ]; export default data4; From 33f8120dafe70e6dd83a7b3b6fb9211c06719ae1 Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 2 Oct 2025 10:55:59 -0600 Subject: [PATCH 072/398] enable new dimensions adapters --- defi/src/protocols/data3.ts | 3 +++ defi/src/protocols/data4.ts | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index bb09b4766b..1df170b473 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -53927,6 +53927,9 @@ const data3_2: Protocol[] = [ twitter: "DSwap", audit_links: [], listedAt: 1723632346, + dimensions: { + dexs: "diviswap" + } }, { id: "4986", diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index d989345892..91398ef9a7 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -28040,7 +28040,11 @@ const data4: Protocol[] = [ module: "ultrasolid-v3/index.js", twitter: "ultrasolid_hl", parentProtocol: "parent#ultrasolid", - listedAt: 1757693515 + listedAt: 1757693515, + dimensions: { + fees: "ultrasolid-v3", + dexs: "ultrasolid-v3" + } }, { id: "6723", From 9d26d4ef80f7d2bfac089bfaea6be85f984e5391 Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 2 Oct 2025 11:00:26 -0600 Subject: [PATCH 073/398] add yieldEDU listing --- defi/src/protocols/data4.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 91398ef9a7..a0f9b29985 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29843,5 +29843,27 @@ const data4: Protocol[] = [ }, github: ["lotus-finance-team"] }, + { + id: "6802", + name: "yieldEDU", + address: null, + symbol: "-", + url: "https://yieldedu.xyz", + description: "yieldEDU transforms education into an investable defi asset on-chain, where learners grow through verifiable progress and investors track funded impact", + chain: "Edu Chain", + logo: `${baseIconsUrl}/yieldedu.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Yield Aggregator", + chains: ["Edu Chain"], + module: "yieldedu/index.js", + twitter: "yield_edu", + forkedFromIds: [], + audit_links: [], + github: ["YieldEdu"], + listedAt: 1759424411 + }, ]; export default data4; From db89d0eba209d742b9dd8a6e9fdd7474f6632282 Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 2 Oct 2025 11:36:56 -0600 Subject: [PATCH 074/398] fix chain map --- defi/src/protocols/data4.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index a0f9b29985..ed02c1aa38 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29850,14 +29850,14 @@ const data4: Protocol[] = [ symbol: "-", url: "https://yieldedu.xyz", description: "yieldEDU transforms education into an investable defi asset on-chain, where learners grow through verifiable progress and investors track funded impact", - chain: "Edu Chain", + chain: "EDU Chain", logo: `${baseIconsUrl}/yieldedu.jpg`, audits: "0", audit_note: null, gecko_id: null, cmcId: null, category: "Yield Aggregator", - chains: ["Edu Chain"], + chains: ["EDU Chain"], module: "yieldedu/index.js", twitter: "yield_edu", forkedFromIds: [], From b2844e96cb69b60cd92854fec060eea801415abe Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 2 Oct 2025 18:51:51 -0600 Subject: [PATCH 075/398] add kona stableswap listing --- defi/src/protocols/data4.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index ed02c1aa38..ba5724e04a 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29865,5 +29865,26 @@ const data4: Protocol[] = [ github: ["YieldEdu"], listedAt: 1759424411 }, + { + id: "6803", + name: "Kona Stableswap", + address: null, + symbol: "-", + url: "https://kona.surf/", + description: "Kona's DEX infrastructure is built on top of KittyPunch's PunchSwap and StableKitty protocols.", + chain: "Abstract", + logo: `${baseIconsUrl}/kona-stableswap.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Abstract"], + module: "kittypunch-kona-stableswap/index.js", + twitter: "KonaDeFi", + forkedFromIds: [], + parentProtocol: "parent#kittypunch", + listedAt: 1759452565, + }, ]; export default data4; From e15e982a59971a1bd44fe6ffcf0df1094eabdcf9 Mon Sep 17 00:00:00 2001 From: billyjitsu <82428978+billyjitsu@users.noreply.github.com> Date: Thu, 2 Oct 2025 17:59:23 -0700 Subject: [PATCH 076/398] update CompoundV3 - Mantle - Oracle (#10743) --- defi/src/protocols/data2.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/defi/src/protocols/data2.ts b/defi/src/protocols/data2.ts index 8aacd638ad..5f61113f4a 100644 --- a/defi/src/protocols/data2.ts +++ b/defi/src/protocols/data2.ts @@ -16558,6 +16558,12 @@ const data2: Protocol[] = [ proof: ["https://github.com/DefiLlama/defillama-server/pull/9930"], chains: [{chain: "Unichain"}] }, + { + name: "Api3", + type: "Primary", + proof: ["https://github.com/compound-finance/comet/pull/939"], + chains: [{chain: "Mantle"}] + }, ], forkedFrom: [], module: "compound-v3/index.js", From a7d1edd68a885d014ad84731f6ff83ac45071871 Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 2 Oct 2025 19:55:34 -0600 Subject: [PATCH 077/398] add new risk curators --- defi/src/protocols/data4.ts | 100 ++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index ba5724e04a..c808ab3814 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29886,5 +29886,105 @@ const data4: Protocol[] = [ parentProtocol: "parent#kittypunch", listedAt: 1759452565, }, + { + id: "6804", + name: "alphagrowth", + address: null, + symbol: "-", + url: "https://app.euler.finance/governor/alphagrowth?network=unichain", + description: "AlphaGrowth is a blockchain consultancy focused on expanding token utility and accessibility through partnerships and integrations.", + chain: "Unichain", + logo: `${baseIconsUrl}/alphagrowth.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Risk Curators", + chains: ["Unichain"], + module: "alpha-growth/index.js", + twitter: "alphagrowth1", + forkedFromIds: [], + listedAt: 1759454377, + }, + { + id: "6805", + name: "Avantgarde", + address: null, + symbol: "-", + url: "https://app.morpho.org/ethereum/curator/avantgarde", + description: "Unleashing the potential of idle on-chain capital.", + chain: "Ethereum", + logo: `${baseIconsUrl}/avantgarde.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Risk Curators", + chains: ["Ethereum"], + module: "avantgarde/index.js", + twitter: "avantgardefi", + forkedFromIds: [], + listedAt: 1759454384, + }, + { + id: "6806", + name: "Keyring", + address: null, + symbol: "-", + url: "https://app.euler.finance/governor/keyring?network=avalanche", + description: "Enhanced depositor protection with instant zkVerification.", + chain: "Avalanche", + logo: `${baseIconsUrl}/keyring.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Risk Curators", + chains: ["Avalanche"], + module: "keyring/index.js", + twitter: "KeyringNetwork", + forkedFromIds: [], + listedAt: 1759454392, + }, + { + id: "6807", + name: "Sentora", + address: null, + symbol: "-", + url: "https://app.euler.finance/governor/sentora?network=ethereum", + description: "Sentora provides the institutional-grade foundation for powering the next generation of DeFi solutions. Sentora's vault platform unlocks access to DeFi through sophisticated strategies, robust risk management, and enterprise-grade security.", + chain: "Ethereum", + logo: `${baseIconsUrl}/sentora.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Risk Curators", + chains: ["Ethereum"], + module: "sentora/index.js", + twitter: "SentoraHQ", + forkedFromIds: [], + listedAt: 1759454399, + }, + { + id: "6808", + name: "SingularV", + address: null, + symbol: "-", + url: "https://app.morpho.org/ethereum/curator/singularv", + description: "Onchain market making firm. Focusing on Optimization, and risk management on Ethereum & TON", + chain: "Ethereum", + logo: `${baseIconsUrl}/singularv.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Risk Curators", + chains: ["Ethereum"], + module: "singularv/index.js", + twitter: "SingularV__", + forkedFromIds: [], + listedAt: 1759454407, + }, ]; export default data4; From 2c16da8a80eb17a563e788ef7ec05493a7785175 Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 2 Oct 2025 20:13:24 -0600 Subject: [PATCH 078/398] add token symbol --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index c808ab3814..51f3e81ab2 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29154,7 +29154,7 @@ const data4: Protocol[] = [ id: "6771", name: "Yield Basis", address: null, - symbol: "-", + symbol: "YB", url: "https://yieldbasis.com/", description: "YieldBasis is an on-chain liquidity protocol solving Impermanent Loss problem in AMM pools. It turns crypto into productive assets starting from Bitcoin. Using Yield Basis, LPs have a direct spot exposure to an asset and earn organic yield with significantly improved risk/reward profile (compared to conventional AMMs).", chain: "Ethereum", From df7925b9e53029ceaaf3dedf917bb242a471f2cb Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 3 Oct 2025 09:53:10 +0200 Subject: [PATCH 079/398] Revert "CG edits (#10736)" (#10744) This reverts commit d5363e4222fb434851c5e2c0c4fba3a602cdd1b5. --- coins/src/scripts/coingecko.ts | 26 ++++++++++++-------------- coins/src/utils/getCoinsUtils.ts | 2 +- defi/src/rwa/protocols.ts | 20 -------------------- 3 files changed, 13 insertions(+), 35 deletions(-) diff --git a/coins/src/scripts/coingecko.ts b/coins/src/scripts/coingecko.ts index 39cb991586..d5ff891d63 100644 --- a/coins/src/scripts/coingecko.ts +++ b/coins/src/scripts/coingecko.ts @@ -132,7 +132,7 @@ async function getAndStoreCoins(coins: Coin[], rejected: Coin[]) { SK: 0, })), ) - ).filter((c) => c.confidence == 0.99); + ).filter((c) => !c.adapter && c.confidence == 0.99); const deleteStaleKeysPromise = DELETE( staleEntries.map((e) => ({ @@ -460,19 +460,17 @@ async function triggerFetchCoingeckoData(hourly: boolean, coinType?: string) { coins.map((coin) => coin.id), coinType, ); - coins = coins.filter((coin) => coin.id == 'ubtc'); - if (!coins.length) process.exit(0) - // coins = coins.filter((coin) => { - // const metadata = metadatas[coin.id]; - // if (!metadata) return true; // if we don't have metadata, we don't know if it's over 10m - // if (hourly) { - // return metadata.usd_market_cap > 1e8 && metadata.usd_24h_vol > 1e8; - // } - // return ( - // metadata.coinType === coinType || - // metadata.coinType === COIN_TYPES.over100m - // ); // always include over100m coins - // }); + coins = coins.filter((coin) => { + const metadata = metadatas[coin.id]; + if (!metadata) return true; // if we don't have metadata, we don't know if it's over 10m + if (hourly) { + return metadata.usd_market_cap > 1e8 && metadata.usd_24h_vol > 1e8; + } + return ( + metadata.coinType === coinType || + metadata.coinType === COIN_TYPES.over100m + ); // always include over100m coins + }); } console.log( `Fetching prices for ${coins.length} coins`, diff --git a/coins/src/utils/getCoinsUtils.ts b/coins/src/utils/getCoinsUtils.ts index 0feab48473..809dc10b31 100644 --- a/coins/src/utils/getCoinsUtils.ts +++ b/coins/src/utils/getCoinsUtils.ts @@ -79,7 +79,7 @@ export async function fetchCgPriceData( return await retryCoingeckoRequest( `simple/price?ids=${coinIds.join( ",", - )}&vs_currencies=usd&include_market_cap=true&include_last_updated_at=true&include_24hr_vol=true&precision=full`, + )}&vs_currencies=usd&include_market_cap=true&include_last_updated_at=true&include_24hr_vol=true`, 10, log, ); diff --git a/defi/src/rwa/protocols.ts b/defi/src/rwa/protocols.ts index 50efc17617..3a9d3f5064 100644 --- a/defi/src/rwa/protocols.ts +++ b/defi/src/rwa/protocols.ts @@ -724,25 +724,5 @@ export const metadata: { [id: string]: Characteristics } = { kyc: false, transferable: true, selfCustody: true, - }, - "6789": { - symbols: ["USX"], - matchExact: true, - redeemable: true, - attestations: true, - cexListed: false, - kyc: true, - transferable: true, - selfCustody: true, - }, - "6790": { - symbols: ["USDf"], - matchExact: true, - redeemable: true, - attestations: true, - cexListed: false, - kyc: true, - transferable: true, - selfCustody: true, } }; From 033d24bb4e722f72671e76ee6d6190a0146d234a Mon Sep 17 00:00:00 2001 From: Define101 Date: Fri, 3 Oct 2025 09:11:35 +0100 Subject: [PATCH 080/398] exclude parent --- defi/src/protocols/data4.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 51f3e81ab2..43c737d5b2 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -21622,6 +21622,9 @@ const data4: Protocol[] = [ audit_links: [], listedAt: 1752719634, parentProtocol: "parent#kinetiq", + tokensExcludedFromParent: { + Hyperliquid: ["KHYPE"], + }, dimensions: { fees: "kinetiq-staked-hype" } From e907cae580bf40366843efd0d42d16d682570610 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 3 Oct 2025 10:36:59 +0200 Subject: [PATCH 081/398] temp refill everything --- coins/src/scripts/coingecko.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coins/src/scripts/coingecko.ts b/coins/src/scripts/coingecko.ts index d5ff891d63..0cfd8ceaff 100644 --- a/coins/src/scripts/coingecko.ts +++ b/coins/src/scripts/coingecko.ts @@ -464,7 +464,7 @@ async function triggerFetchCoingeckoData(hourly: boolean, coinType?: string) { const metadata = metadatas[coin.id]; if (!metadata) return true; // if we don't have metadata, we don't know if it's over 10m if (hourly) { - return metadata.usd_market_cap > 1e8 && metadata.usd_24h_vol > 1e8; + return metadata.usd_market_cap > 1e6 && metadata.usd_24h_vol > 1e6; } return ( metadata.coinType === coinType || From 0d2fee93ce0c70004c86810eec69e3e7939efd73 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 3 Oct 2025 10:39:31 +0200 Subject: [PATCH 082/398] revert temp fix --- coins/src/scripts/coingecko.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coins/src/scripts/coingecko.ts b/coins/src/scripts/coingecko.ts index 0cfd8ceaff..d5ff891d63 100644 --- a/coins/src/scripts/coingecko.ts +++ b/coins/src/scripts/coingecko.ts @@ -464,7 +464,7 @@ async function triggerFetchCoingeckoData(hourly: boolean, coinType?: string) { const metadata = metadatas[coin.id]; if (!metadata) return true; // if we don't have metadata, we don't know if it's over 10m if (hourly) { - return metadata.usd_market_cap > 1e6 && metadata.usd_24h_vol > 1e6; + return metadata.usd_market_cap > 1e8 && metadata.usd_24h_vol > 1e8; } return ( metadata.coinType === coinType || From aeb6b2c51e440e79beb16f066df0fc98b04eb167 Mon Sep 17 00:00:00 2001 From: Define101 Date: Fri, 3 Oct 2025 09:46:30 +0100 Subject: [PATCH 083/398] Pacifica ref --- defi/src/protocols/data4.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 43c737d5b2..253c1129f4 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -27150,7 +27150,8 @@ const data4: Protocol[] = [ name: "Pacifica", address: null, symbol: "-", - url: "https://pacifica.fi", + url: "https://app.pacifica.fi?referral=defillama", +  referralUrl: "https://app.pacifica.fi?referral=defillama", description: "Pacifica is a decentralized perpetual futures exchange offering leverage trading through advanced order types and APIs", chain: "Solana", From d5f9bb671472e81caddf95f6bdc6224d35d61b15 Mon Sep 17 00:00:00 2001 From: eden Date: Fri, 3 Oct 2025 16:20:03 +0700 Subject: [PATCH 084/398] add legit boros spike vol fees (#10746) --- defi/src/protocols/data4.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 253c1129f4..790f63da4c 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -23720,8 +23720,14 @@ const data4: Protocol[] = [ twitter: "boros_fi", listedAt: 1754577595, dimensions: { - fees: "boros", - derivatives: "boros" + fees: { + adapter: "boros", + genuineSpikes: ["1759449600"], + }, + derivatives: { + adapter: "boros", + genuineSpikes: ["1759449600"], + }, } }, { From 36141714a105d6b72b12b0ad097291991b33d2bb Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 3 Oct 2025 11:48:01 +0200 Subject: [PATCH 085/398] readd changes #10744 #10736 --- coins/src/utils/getCoinsUtils.ts | 2 +- defi/src/rwa/protocols.ts | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/coins/src/utils/getCoinsUtils.ts b/coins/src/utils/getCoinsUtils.ts index 809dc10b31..0feab48473 100644 --- a/coins/src/utils/getCoinsUtils.ts +++ b/coins/src/utils/getCoinsUtils.ts @@ -79,7 +79,7 @@ export async function fetchCgPriceData( return await retryCoingeckoRequest( `simple/price?ids=${coinIds.join( ",", - )}&vs_currencies=usd&include_market_cap=true&include_last_updated_at=true&include_24hr_vol=true`, + )}&vs_currencies=usd&include_market_cap=true&include_last_updated_at=true&include_24hr_vol=true&precision=full`, 10, log, ); diff --git a/defi/src/rwa/protocols.ts b/defi/src/rwa/protocols.ts index 3a9d3f5064..12f7c6e9c8 100644 --- a/defi/src/rwa/protocols.ts +++ b/defi/src/rwa/protocols.ts @@ -724,5 +724,25 @@ export const metadata: { [id: string]: Characteristics } = { kyc: false, transferable: true, selfCustody: true, + }, + "6789": { + symbols: ["USX"], + matchExact: true, + redeemable: true, + attestations: true, + cexListed: false, + kyc: true, + transferable: true, + selfCustody: true, + }, + "6790": { + symbols: ["USDf"], + matchExact: true, + redeemable: true, + attestations: true, + cexListed: false, + kyc: true, + transferable: true, + selfCustody: true, } }; From 4948815fb7690a5a31eb385c58bd03e7647ba78d Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 3 Oct 2025 10:57:39 +0100 Subject: [PATCH 086/398] Patch cg (#10747) * plasma mappings * prefix malformed catch * inc hashnote confidence * solstice, falcon rwa tags * cg full precision * patch cg adapter check * skip check for now * malformed keys in balances * smardex switch adapter * reimplement From 27c159a0d20e8190e5ce1899c2443630f85f74be Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 3 Oct 2025 11:34:48 +0100 Subject: [PATCH 087/398] somnia bridged update (#10748) * somnia bridged assets * hyperEulerUSDT --- coins/src/adapters/yield/misc4626/tokens.json | 3 ++- defi/l2/adapters/thirdParty.ts | 13 +++++++------ defi/package-lock.json | 2 +- defi/package.json | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/coins/src/adapters/yield/misc4626/tokens.json b/coins/src/adapters/yield/misc4626/tokens.json index 1254b25a7d..037f0a1b7e 100644 --- a/coins/src/adapters/yield/misc4626/tokens.json +++ b/coins/src/adapters/yield/misc4626/tokens.json @@ -261,6 +261,7 @@ "plasma": { "fUSDT0": "0x1dd4b13fcae900c60a350589be8052959d2ed27b", "k3USDT": "0xe818ad0d20d504c55601b9d5e0e137314414dec4", - "Re7USDT0Core": "0xa5eed1615cd883dd6883ca3a385f525e3beb4e79" + "Re7USDT0Core": "0xa5eed1615cd883dd6883ca3a385f525e3beb4e79", + "hyperEulerUSDT": "0x66bE42a0BdA425A8C3b3c2cF4F4Cb9EDfcAEd21d" } } \ No newline at end of file diff --git a/defi/l2/adapters/thirdParty.ts b/defi/l2/adapters/thirdParty.ts index 28880c6dc6..d60407c7cd 100644 --- a/defi/l2/adapters/thirdParty.ts +++ b/defi/l2/adapters/thirdParty.ts @@ -130,7 +130,7 @@ const layerzero = async (): Promise => { data[0].map(({ to }: any) => { const [chain, address] = to.split(":"); if (!(chain in addresses)) addresses[chain] = []; - if (!(address in addresses[chain])) addresses[chain].push(address); + if (!(address in addresses[chain])) addresses[chain].push(address.toLowerCase()); }); const nonEvmMapping: { [key: string]: string } = { @@ -153,15 +153,16 @@ const layerzero = async (): Promise => { if (!allChainKeys.includes(destinationChainSlug)) return; if (!addresses[destinationChainSlug]) addresses[destinationChainSlug] = []; - addresses[destinationChainSlug].push(...Object.keys(data[1][chain].tokens)); + const tokens = Object.keys(data[1][chain].tokens).filter((t: string) => addresses[chain].indexOf(t.toLowerCase()) == -1 ); + addresses[destinationChainSlug].push(...tokens); }); const staticTokens: { [chain: string]: string[] } = { - morph: ["0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34", "0x7DCC39B4d1C53CB31e1aBc0e358b43987FEF80f7"], + morph: ["0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34", "0x7dcc39b4d1c53cb31e1abc0e358b43987fef80f7"], unichain: [ - "0x2416092f143378750bb29b79eD961ab195CcEea5", - "0xc3eACf0612346366Db554C991D7858716db09f58", - "0x7DCC39B4d1C53CB31e1aBc0e358b43987FEF80f7", + "0x2416092f143378750bb29b79ed961ab195cceea5", + "0xc3eacf0612346366db554c991d7858716db09f58", + "0x7dcc39b4d1c53cb31e1abc0e358b43987fef80f7", ], }; diff --git a/defi/package-lock.json b/defi/package-lock.json index 6014fd7490..9a6161160a 100644 --- a/defi/package-lock.json +++ b/defi/package-lock.json @@ -13,7 +13,7 @@ "@defillama/adapters": "file:./DefiLlama-Adapters", "@defillama/dimension-adapters": "file:./dimension-adapters", "@defillama/emissions-adapters": "file:./emissions-adapters", - "@defillama/sdk": "^5.0.126", + "@defillama/sdk": "^5.0.172", "@elastic/elasticsearch": "^8.13.1", "@supercharge/promise-pool": "^2.3.2", "@types/async-retry": "^1.4.8", diff --git a/defi/package.json b/defi/package.json index 805381bf6d..9381da5154 100644 --- a/defi/package.json +++ b/defi/package.json @@ -89,7 +89,7 @@ "@defillama/adapters": "file:./DefiLlama-Adapters", "@defillama/dimension-adapters": "file:./dimension-adapters", "@defillama/emissions-adapters": "file:./emissions-adapters", - "@defillama/sdk": "^5.0.126", + "@defillama/sdk": "^5.0.172", "@elastic/elasticsearch": "^8.13.1", "@supercharge/promise-pool": "^2.3.2", "@types/async-retry": "^1.4.8", From a90332cd9cc918fe91dc2f905ebafbe1680eb40d Mon Sep 17 00:00:00 2001 From: jarrydallison <90670725+jarrydallison@users.noreply.github.com> Date: Fri, 3 Oct 2025 04:49:47 -0600 Subject: [PATCH 088/398] Jarryd/add figure heloc token (#10546) * feat: add FIGR_HELOC, ylds to provenance * feat: update FIGR_HELOC decimal count * feat: update provenance pm.sale denom mapping * feat: update decimals and remove unused token --- coins/src/adapters/tokenMapping.json | 50 ++++--------------- .../src/adapters/zeroDecimalTokenMapping.json | 4 +- 2 files changed, 12 insertions(+), 42 deletions(-) diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index ba2855841b..7330625dfb 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -11906,8 +11906,13 @@ "decimals": 6, "symbol": "uusdc.figure" }, + "ueur.trading": { + "to": "coingecko#euro-coin", + "decimals": 6, + "symbol": "ueur.trading" + }, "uylds.fcc": { - "to": "coingecko#usd-coin", + "to": "coingecko#ylds", "decimals": 6, "symbol": "uylds.fcc" }, @@ -11956,45 +11961,10 @@ "decimals": 6, "symbol": "ureit.figure" }, - "SOL": { - "to": "coingecko#solana", - "decimals": 0, - "symbol": "SOL" - }, - "ETH": { - "to": "coingecko#ethereum", - "decimals": 0, - "symbol": "ETH" - }, - "USDT": { - "to": "coingecko#tether", - "decimals": 0, - "symbol": "USDT" - }, - "BTC": { - "to": "coingecko#bitcoin", - "decimals": 0, - "symbol": "BTC" - }, - "USDC": { - "to": "coingecko#usd-coin", - "decimals": 0, - "symbol": "USDC" - }, - "USD": { - "to": "coingecko#usd-coin", - "decimals": 0, - "symbol": "USD" - }, - "YLDS": { - "to": "coingecko#usd-coin", - "decimals": 0, - "symbol": "YLDS" - }, - "pm.sale.pool.3dxq3fk9llvhrqqwhodiap": { - "to": "coingecko#usd-coin", - "decimals": 0, - "symbol": "pm.sale.pool.3dxq3fk9llvhrqqwhodiap" + "FIGR_HELOC": { + "to": "coingecko#figure-heloc", + "decimals": 3, + "symbol": "FIGR_HELOC" } }, "bitci": { diff --git a/coins/src/adapters/zeroDecimalTokenMapping.json b/coins/src/adapters/zeroDecimalTokenMapping.json index 43ce0c4127..32731786ca 100644 --- a/coins/src/adapters/zeroDecimalTokenMapping.json +++ b/coins/src/adapters/zeroDecimalTokenMapping.json @@ -36,9 +36,9 @@ "symbol": "YLDS" }, "pm.sale.pool.3dxq3fk9llvhrqqwhodiap": { - "to": "coingecko#usd-coin", + "to": "coingecko#figure-heloc", "decimals": 0, - "symbol": "USDC" + "symbol": "FIGR_HELOC" } }, "ripple": { From 040ad016ceb6e2f8f30bb81a277e0f8bf3aa2197 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 3 Oct 2025 11:56:18 +0100 Subject: [PATCH 089/398] api key (#10749) * somnia bridged assets * hyperEulerUSDT * infinite api key --- defi/src/rwa/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/rwa/index.ts b/defi/src/rwa/index.ts index 015ce476b1..89f4c68927 100644 --- a/defi/src/rwa/index.ts +++ b/defi/src/rwa/index.ts @@ -22,8 +22,8 @@ function fetchSymbols() { export async function fetchRWAStats() { const symbols = fetchSymbols(); - if (!process.env.INTERNAL_API_KEY) throw new Error("INTERNAL_API_KEY is not set"); - const data = await fetch(`https://pro-api.llama.fi/${process.env.INTERNAL_API_KEY}/yields/pools`).then((r) => + if (!process.env.INFINITE_INTERNAL_API_KEY) throw new Error("INFINITE_INTERNAL_API_KEY is not set"); + const data = await fetch(`https://pro-api.llama.fi/${process.env.INFINITE_INTERNAL_API_KEY}/yields/pools`).then((r) => r.json() ); if (!data.data) throw new Error(`No data: ${JSON.stringify(data)}`); From 86af3aca01c907823604a7af91fbb1ab00908d08 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 3 Oct 2025 11:59:20 +0100 Subject: [PATCH 090/398] Revert "api key (#10749)" (#10750) This reverts commit 040ad016ceb6e2f8f30bb81a277e0f8bf3aa2197. --- defi/src/rwa/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/rwa/index.ts b/defi/src/rwa/index.ts index 89f4c68927..015ce476b1 100644 --- a/defi/src/rwa/index.ts +++ b/defi/src/rwa/index.ts @@ -22,8 +22,8 @@ function fetchSymbols() { export async function fetchRWAStats() { const symbols = fetchSymbols(); - if (!process.env.INFINITE_INTERNAL_API_KEY) throw new Error("INFINITE_INTERNAL_API_KEY is not set"); - const data = await fetch(`https://pro-api.llama.fi/${process.env.INFINITE_INTERNAL_API_KEY}/yields/pools`).then((r) => + if (!process.env.INTERNAL_API_KEY) throw new Error("INTERNAL_API_KEY is not set"); + const data = await fetch(`https://pro-api.llama.fi/${process.env.INTERNAL_API_KEY}/yields/pools`).then((r) => r.json() ); if (!data.data) throw new Error(`No data: ${JSON.stringify(data)}`); From 10ae90f208e1dc72b481f7e761e38cf6e0626b74 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 3 Oct 2025 12:12:44 +0100 Subject: [PATCH 091/398] apikey (#10751) --- defi/src/rwa/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/rwa/index.ts b/defi/src/rwa/index.ts index 015ce476b1..89f4c68927 100644 --- a/defi/src/rwa/index.ts +++ b/defi/src/rwa/index.ts @@ -22,8 +22,8 @@ function fetchSymbols() { export async function fetchRWAStats() { const symbols = fetchSymbols(); - if (!process.env.INTERNAL_API_KEY) throw new Error("INTERNAL_API_KEY is not set"); - const data = await fetch(`https://pro-api.llama.fi/${process.env.INTERNAL_API_KEY}/yields/pools`).then((r) => + if (!process.env.INFINITE_INTERNAL_API_KEY) throw new Error("INFINITE_INTERNAL_API_KEY is not set"); + const data = await fetch(`https://pro-api.llama.fi/${process.env.INFINITE_INTERNAL_API_KEY}/yields/pools`).then((r) => r.json() ); if (!data.data) throw new Error(`No data: ${JSON.stringify(data)}`); From 473654f321432586decf57c98b9170b9ea736b83 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 3 Oct 2025 12:33:25 +0100 Subject: [PATCH 092/398] woofswap (#10752) * apikey * woofswap --- coins/src/adapters/tokenMapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index 7330625dfb..c173e0fad5 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -12202,5 +12202,12 @@ "decimals": 8, "symbol": "0x4548a3bcb3c2b5ce42bf0559b1cf2f1ec97a51d0" } + }, + "gatelayer": { + "0x6803b8e93b13941f6b73b82e324b80251b3de338": { + "to": "coingecko#gatechain-token", + "decimals": 18, + "symbol": "WGT" + } } } From 529f570dec7e67864a7f7dbede2e6b23a7f51e2a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 3 Oct 2025 15:49:02 +0200 Subject: [PATCH 093/398] track hollar price #4337 --- coins/src/adapters/tokenMapping.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index c173e0fad5..23471b1144 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -10869,6 +10869,11 @@ "to": "coingecko#ethereum", "decimals": 18, "symbol": "ETH" + }, + "0x531a654d1696ed52e7275a8cede955e82620f99a": { + "to": "coingecko#hydrated-dollar", + "decimals": 18, + "symbol": "HOLLAR" } }, "coti": { From d0d1ab9144731701311435cb897b611e6fe3758f Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 3 Oct 2025 15:01:54 +0100 Subject: [PATCH 094/398] lower stale coin latency (#10754) --- defi/src/storeTvlInterval/staleCoins.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/storeTvlInterval/staleCoins.ts b/defi/src/storeTvlInterval/staleCoins.ts index 15f30c4854..ae717660cc 100644 --- a/defi/src/storeTvlInterval/staleCoins.ts +++ b/defi/src/storeTvlInterval/staleCoins.ts @@ -114,7 +114,7 @@ export async function notifyStaleCoins() { message += `\nIn ${timeout - d.latency}h a ${d.protocol} TVL chart will lose ${readableTvl}$ (${ d.percentage }%) because ${d.key} is ${d.latency}h stale`; - if (d.usd_amount > 1e8 && timeout - d.latency < 7) { + if (d.usd_amount > 1e8 && timeout - d.latency < 13) { teamMessage += `\nIn ${timeout - d.latency}h a ${d.protocol} TVL chart will lose ${readableTvl}$ (${ d.percentage }%) because ${d.key} is ${d.latency}h stale`; From 1e02177d1a959586cd63816043cbac1450ff6fd8 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 3 Oct 2025 16:45:23 -0600 Subject: [PATCH 095/398] add morpho curator oracles --- defi/DefiLlama-Adapters | 2 +- defi/src/protocols/data4.ts | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/defi/DefiLlama-Adapters b/defi/DefiLlama-Adapters index 28162f0ccf..88e0ba6535 160000 --- a/defi/DefiLlama-Adapters +++ b/defi/DefiLlama-Adapters @@ -1 +1 @@ -Subproject commit 28162f0ccf74dc4acdb6780c8b69a284a6dd783b +Subproject commit 88e0ba6535f339437dba4c20119e75d4d18594b1 diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 790f63da4c..d28023306b 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -15569,7 +15569,13 @@ const data4: Protocol[] = [ "https://app.morpho.org/unichain/market/0xae4c2c8f12e170497b7282c0c257636546c7dadb56122d18cfae50defb2d6777/wsteth-usdt0", "https://oracles.euler.finance/130/", ], - chains: [{ chain: "Unichain" }], + chains: [{ chain: "Unichain" }, { chain: "Katana" }], + }, + { + name: "Chainlink", + type: "Primary", + proof: ["https://app.morpho.org/polygon/earn",], + chains: [{ chain: "Polygon" }], }, ], listedAt: 1747734127, @@ -15900,6 +15906,12 @@ const data4: Protocol[] = [ ], chains: [{ chain: "Unichain" }], }, + { + name: "Chainlink", + type: "Primary", + proof: ["https://app.morpho.org/ethereum/curator/steakhouse-financial"], + chains: [{chain: "Katana"}] + } ], module: "steakhouse/index.js", twitter: "SteakhouseFi", From f1c7515a4f9b9a140d9cca12b37ca7cadab48be2 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 3 Oct 2025 16:47:14 -0600 Subject: [PATCH 096/398] add oracle --- defi/src/protocols/data4.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index d28023306b..2bd5b0d583 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -15574,8 +15574,8 @@ const data4: Protocol[] = [ { name: "Chainlink", type: "Primary", - proof: ["https://app.morpho.org/polygon/earn",], - chains: [{ chain: "Polygon" }], + proof: ["https://app.morpho.org/polygon/earn","https://app.morpho.org/base/earn"], + chains: [{ chain: "Polygon" }, { chain: "Base" }], }, ], listedAt: 1747734127, From bd223c0ce68ee612e9ae9fcbd2a5274a407efad5 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 3 Oct 2025 17:09:36 -0600 Subject: [PATCH 097/398] add oracle info --- defi/src/protocols/data4.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 2bd5b0d583..9d43eb11d9 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -16882,6 +16882,14 @@ const data4: Protocol[] = [ twitter: "yearnfi", parentProtocol: "parent#yearn", listedAt: 1748533355, + oraclesBreakdown: [ + { + name: "Chainlink", + type: "Primary", + proof: ["https://app.morpho.org/katana/earn"], + chains: [{chain: "Katana"}, {chain: "Base"}] + } + ], dimensions: { fees: "yearn-curating" } From 27f6cf7d4793eb0f4ccf94b17ce38f70454eaf96 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 3 Oct 2025 17:27:01 -0600 Subject: [PATCH 098/398] add morpho tvs to curators per chain --- defi/src/protocols/data4.ts | 68 ++++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 9d43eb11d9..2e34fee705 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -15354,8 +15354,17 @@ const data4: Protocol[] = [ proof: [ "https://app.morpho.org/unichain/vault/0x4C91d8FBb468F2A318A16C95a9AE17dAe20d8328/9s-puncak-jaya-eth", "https://oracles.euler.finance/130/", + "https://app.morpho.org/ethereum/earn" ], - chains: [{ chain: "Unichain" }], + chains: [{ chain: "Unichain" }, { chain: "Ethereum" }], + }, + { + name: "Chainlink", + type: "Primary", + proof: [ + "https://app.morpho.org/base/earn", + ], + chains: [{ chain: "Base" }], }, ], listedAt: 1747733002, @@ -15405,6 +15414,14 @@ const data4: Protocol[] = [ module: "apostro/index.js", twitter: "apostroxyz", listedAt: 1747733258, + oraclesBreakdown: [ + { + name: "Pyth", + type: "Primary", + proof: ["https://app.morpho.org/base/earn"], + chains: [{ chain: "Base" }], + }, + ], dimensions: { fees: "apostro" } @@ -15427,6 +15444,14 @@ const data4: Protocol[] = [ forkedFrom: [], module: "b-protocol/index.js", twitter: "bprotocoleth", + oraclesBreakdown: [ + { + name: "Chainlink", + type: "Primary", + proof: ["https://app.morpho.org/base/earn","https://app.morpho.org/ethereum/earn"], + chains: [{ chain: "Base" }, { chain: "Ethereum" }], + }, + ], listedAt: 1747733358, dimensions: { fees: "b-protocol" @@ -15451,6 +15476,14 @@ const data4: Protocol[] = [ module: "block-analitica/index.js", twitter: "BlockAnalitica", listedAt: 1747733666, + oraclesBreakdown: [ + { + name: "Chainlink", + type: "Primary", + proof: ["https://app.morpho.org/base/earn","https://app.morpho.org/ethereum/earn"], + chains: [{ chain: "Base" }, { chain: "Ethereum" }], + }, + ], dimensions: { fees: "block-analitica" } @@ -15474,6 +15507,14 @@ const data4: Protocol[] = [ module: "clearstar/index.js", twitter: "ClearstarLabs", listedAt: 1747733862, + oraclesBreakdown: [ + { + name: "Chainlink", + type: "Primary", + proof: ["https://app.morpho.org/base/earn"], + chains: [{ chain: "Base" }], + }, + ], dimensions: { fees: "clearstar" } @@ -15834,6 +15875,15 @@ const data4: Protocol[] = [ ], chains: [{ chain: "TAC" }], }, + { + name: "Chainlink", + type: "Primary", + proof: [ + "https://app.morpho.org/polygon/earn", + "https://app.morpho.org/base/earn", + ], + chains: [{ chain: "Polygon" }, { chain: "Base" }], + }, ], module: "re7/index.js", twitter: "Re7Labs", @@ -15861,6 +15911,14 @@ const data4: Protocol[] = [ module: "relend/index.js", twitter: "relend_network", listedAt: 1747735979, + oraclesBreakdown: [ + { + name: "Chainlink", + type: "Primary", + proof: ["https://app.morpho.org/base/earn"], + chains: [{ chain: "Base" }], + }, + ], dimensions: { fees: "relend" } @@ -15939,6 +15997,14 @@ const data4: Protocol[] = [ module: "tulip-capital/index.js", twitter: "tulipacapital", listedAt: 1747736624, + oraclesBreakdown: [ + { + name: "RedStone", + type: "Primary", + proof: ["https://app.morpho.org/ethereum/earn"], + chains: [ { chain: "Ethereum" }], + }, + ], dimensions: { fees: "tulip-capital" } From dca9edcd195f71ebcb1485a357084b9222988d73 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 3 Oct 2025 17:45:19 -0600 Subject: [PATCH 099/398] fix chain map --- defi/src/protocols/data4.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 2e34fee705..b2cb5fb3fc 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -12185,7 +12185,6 @@ const data4: Protocol[] = [ "IoTeX", "Mode", "Sei", - "XDC", "Unichain", "zkSync Era", ], @@ -29282,7 +29281,7 @@ const data4: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Synthetics", + category: "Bridge", chains: ["Flare"], module: "flare-asset/index.js", twitter: "FlareNetworks", From 60e7cfd3e775f5b7e402d45698478653b0288df1 Mon Sep 17 00:00:00 2001 From: FullSunny-Chen <38760375+FullSunny-Chen@users.noreply.github.com> Date: Sat, 4 Oct 2025 07:54:08 +0800 Subject: [PATCH 100/398] update rollx website link and description (#10745) * update rollx website link and description * revert back to original chain map --------- Co-authored-by: Real Shaman <85087525+realdealshaman@users.noreply.github.com> --- defi/src/protocols/data4.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index b2cb5fb3fc..da357c70c6 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -10097,9 +10097,9 @@ const data4: Protocol[] = [ previousNames: ["Rolldex"], address: null, symbol: "-", - url: "https://www.rolldex.io/", + url: "https://rollx.trade/", description: - "The first BitVM-powered multichain BTC-Fi-centric decentralized derivatives trading platform. 100% community-owned.", + "RollX is the fastest-growing perpetual DEX on Base. Supporting multi-asset and BTC-native collateral, it serves the largest user base on Base. ", chain: "Bitlayer", logo: `${baseIconsUrl}/rollx.jpg`, audits: "2", From 522901248c44adc2120657702317ec8b707fdf39 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 4 Oct 2025 11:10:11 +0200 Subject: [PATCH 101/398] reduce twitter notifications --- defi/src/notifyOutdated.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/notifyOutdated.ts b/defi/src/notifyOutdated.ts index 58982212cb..be393f1530 100644 --- a/defi/src/notifyOutdated.ts +++ b/defi/src/notifyOutdated.ts @@ -34,7 +34,7 @@ export async function notifyOutdatedPG() { const tvlUpdateCount = await getHourlyTvlUpdatedRecordsCount() const dimUpdateCount = await getDimensionsUpdatedRecordsCount() - const tweetsPulledCount = await getTweetsPulledCount() + const tweetsPulledCount = currentHour % 6 === 0 ? await getTweetsPulledCount() : 0 const debugString = ` tvl update count: ${tvlUpdateCount} (in the last 2 hours) dimensions update count: ${dimUpdateCount} (in the last 2 hours) @@ -52,7 +52,7 @@ export async function notifyOutdatedPG() { if (dimUpdateCount < 500) await sendMessage(`Only ${dimUpdateCount} dimension records were updated in the last 2 hours, check the pipeline if everything is fine`, teamwebhookUrl) - if (tweetsPulledCount < 500) + if (tweetsPulledCount < 500 && currentHour % 6 === 0) await sendMessage(`Only ${tweetsPulledCount} tweets were pulled in the last 3 days, check the pipeline if everything is fine`, teamwebhookUrl) } catch (e) { From 692106b859f701304c9d8002776f047f246a067e Mon Sep 17 00:00:00 2001 From: realshaman Date: Sat, 4 Oct 2025 12:18:35 -0600 Subject: [PATCH 102/398] enable fees for curators --- defi/src/protocols/data4.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index da357c70c6..ad9a7d85d1 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30000,6 +30000,9 @@ const data4: Protocol[] = [ twitter: "alphagrowth1", forkedFromIds: [], listedAt: 1759454377, + dimensions: { + fees: "alphagrowth" + } }, { id: "6805", @@ -30020,6 +30023,9 @@ const data4: Protocol[] = [ twitter: "avantgardefi", forkedFromIds: [], listedAt: 1759454384, + dimensions: { + fees: "avantgarde" + } }, { id: "6806", @@ -30040,6 +30046,9 @@ const data4: Protocol[] = [ twitter: "KeyringNetwork", forkedFromIds: [], listedAt: 1759454392, + dimensions: { + fees: "keyring" + } }, { id: "6807", @@ -30060,6 +30069,9 @@ const data4: Protocol[] = [ twitter: "SentoraHQ", forkedFromIds: [], listedAt: 1759454399, + dimensions: { + fees: "sentora" + } }, { id: "6808", @@ -30080,6 +30092,9 @@ const data4: Protocol[] = [ twitter: "SingularV__", forkedFromIds: [], listedAt: 1759454407, + dimensions: { + fees: "singularv" + } }, ]; export default data4; From 7904078b7fd1c88e38defb45d6d731cf3a3d0b80 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 4 Oct 2025 20:38:06 +0200 Subject: [PATCH 103/398] bugfix: lotus fi --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index ad9a7d85d1..433ee2c3c3 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29934,7 +29934,7 @@ const data4: Protocol[] = [ "https://info.asymptotic.tech/lotus-protocol-audit" ], dimensions: { - fees: "metamask-musd" + dexs: "lotus-finance", }, github: ["lotus-finance-team"] }, From 5e31e1f9086602e31da2ebdd50fd59457fd7add8 Mon Sep 17 00:00:00 2001 From: realshaman Date: Sat, 4 Oct 2025 12:50:44 -0600 Subject: [PATCH 104/398] add new listings and enable fees --- defi/src/protocols/data.test.ts | 3 ++- defi/src/protocols/data4.ts | 45 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data.test.ts b/defi/src/protocols/data.test.ts index 672f8788b7..5032ef627d 100644 --- a/defi/src/protocols/data.test.ts +++ b/defi/src/protocols/data.test.ts @@ -301,7 +301,8 @@ test("no surprise category", async () => { "DePIN", "Dual-Token Stablecoin", "Physical TCG", - "Mining Pools" + "Mining Pools", + "NFT Automated Strategies" ] for (const protocol of protocols) { expect(whitelistedCategories).toContain(protocol.category); diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 433ee2c3c3..d2dd7431bd 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30096,5 +30096,50 @@ const data4: Protocol[] = [ fees: "singularv" } }, + { + id: "6809", + name: "TokenWorks", + address: null, + symbol: "-", + url: "https://www.nftstrategy.fun/", + description: "NFTStrategy is an on-chain protocol that creates strategy tokens for NFT collections, using trading fees to buy floor NFTs, relist them for profit, and burn supply while paying creator royalties", + chain: "Ethereum", + logo: `${baseIconsUrl}/tokenworks.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "NFT Automated Strategies", + chains: ["Ethereum"], + module: "dummy.js", + twitter: "token_works", + forkedFromIds: [], + dimensions: { + fees: "token-works" + } + }, + { + id: "6810", + name: "Tokos", + address: null, + symbol: "-", + url: "https://app.tokos.fi/", + description: "Permissionless lending & borrowing on Somnia Network", + chain: "Somnia", + logo: `${baseIconsUrl}/tokos.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Lending", + chains: ["Somnia"], + module: "tokos-fi/index.js", + twitter: "tokos_fi", + forkedFromIds: [], + listedAt: 1759603671, + dimensions: { + fees: "tokos-fi" + } + }, ]; export default data4; From f5a37a7c7b2953e915a73ecdbaf007ebd3f3cabc Mon Sep 17 00:00:00 2001 From: realshaman Date: Sat, 4 Oct 2025 14:16:43 -0600 Subject: [PATCH 105/398] enable alpha-growth fees --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index d2dd7431bd..8114baf626 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30001,7 +30001,7 @@ const data4: Protocol[] = [ forkedFromIds: [], listedAt: 1759454377, dimensions: { - fees: "alphagrowth" + fees: "alpha-growth" } }, { From 643ec76470af738bfe9b6a4ad6e8a452d2caebba Mon Sep 17 00:00:00 2001 From: realshaman Date: Sat, 4 Oct 2025 14:18:37 -0600 Subject: [PATCH 106/398] add volume to rysk v12 --- defi/src/protocols/data4.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 8114baf626..ec5be1b3f5 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -20907,6 +20907,9 @@ const data4: Protocol[] = [ twitter: "ryskfinance", parentProtocol: "parent#rysk-finance", listedAt: 1752225071, + dimensions: { + dexs: "rysk-v12" + } }, { id: "6416", From d8da01ac5796a24541f44feddc6b1dfdc3812371 Mon Sep 17 00:00:00 2001 From: realshaman Date: Sat, 4 Oct 2025 14:33:31 -0600 Subject: [PATCH 107/398] update rysk v12 dimensions to derivatives volume --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index ec5be1b3f5..1cdec6d235 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -20908,7 +20908,7 @@ const data4: Protocol[] = [ parentProtocol: "parent#rysk-finance", listedAt: 1752225071, dimensions: { - dexs: "rysk-v12" + derivatives: "rysk-v12" } }, { From 2cd7e9e04b44a160e03ff7ed42833b9f7f66b298 Mon Sep 17 00:00:00 2001 From: eden Date: Sun, 5 Oct 2025 05:25:44 +0700 Subject: [PATCH 108/398] add plasma config for pendle tokens prices (#10759) --- coins/src/adapters/yield/pendle/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/coins/src/adapters/yield/pendle/index.ts b/coins/src/adapters/yield/pendle/index.ts index c401cb8e6d..ef2364bc1d 100644 --- a/coins/src/adapters/yield/pendle/index.ts +++ b/coins/src/adapters/yield/pendle/index.ts @@ -29,6 +29,9 @@ const config: { [chain: string]: { pendleOracle: string } } = { hyperliquid: { pendleOracle: "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2", }, + plasma: { + pendleOracle: "0x9a9fa8338dd5e5b2188006f1cd2ef26d921650c2", + }, }; export async function pendle(timestamp: number = 0) { From 3f28972f341c392118e78550d6e3dd17291cc98e Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 5 Oct 2025 12:41:49 +0200 Subject: [PATCH 109/398] bugfix --- defi/src/rwa/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/defi/src/rwa/index.ts b/defi/src/rwa/index.ts index 89f4c68927..326f907e89 100644 --- a/defi/src/rwa/index.ts +++ b/defi/src/rwa/index.ts @@ -63,5 +63,3 @@ export async function fetchRWAStats() { return res; } - -fetchRWAStats(); // ts-node defi/src/rwa/index.ts From 74619ee4f5282e980c43177d0427a80ce1674173 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 5 Oct 2025 12:53:56 +0200 Subject: [PATCH 110/398] Revert "apikey (#10751)" (#10760) This reverts commit 10ae90f208e1dc72b481f7e761e38cf6e0626b74. --- defi/src/rwa/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/rwa/index.ts b/defi/src/rwa/index.ts index 326f907e89..f6f2d0ad4b 100644 --- a/defi/src/rwa/index.ts +++ b/defi/src/rwa/index.ts @@ -22,8 +22,8 @@ function fetchSymbols() { export async function fetchRWAStats() { const symbols = fetchSymbols(); - if (!process.env.INFINITE_INTERNAL_API_KEY) throw new Error("INFINITE_INTERNAL_API_KEY is not set"); - const data = await fetch(`https://pro-api.llama.fi/${process.env.INFINITE_INTERNAL_API_KEY}/yields/pools`).then((r) => + if (!process.env.INTERNAL_API_KEY) throw new Error("INTERNAL_API_KEY is not set"); + const data = await fetch(`https://pro-api.llama.fi/${process.env.INTERNAL_API_KEY}/yields/pools`).then((r) => r.json() ); if (!data.data) throw new Error(`No data: ${JSON.stringify(data)}`); From b12c8ca524ff4f2d34b449d60a2cf758aebc4a66 Mon Sep 17 00:00:00 2001 From: tree Date: Sun, 5 Oct 2025 17:13:43 +0530 Subject: [PATCH 111/398] delist aster-perps volume (#10761) --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 1cdec6d235..7a4a56f9c8 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -28239,7 +28239,7 @@ const data4: Protocol[] = [ parentProtocol: "parent#astherus", dimensions: { fees: "apollox", - derivatives: "apollox", + // derivatives: "apollox", "open-interest": "apollox" } }, From 56eb17726206f119578402a869b93c641f43f8e4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 5 Oct 2025 14:11:20 +0200 Subject: [PATCH 112/398] hotfix: storeAppMetadata runs forever --- defi/src/api2/cron-task/dimensions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/api2/cron-task/dimensions.ts b/defi/src/api2/cron-task/dimensions.ts index e7cf96eb93..bbe7a08819 100644 --- a/defi/src/api2/cron-task/dimensions.ts +++ b/defi/src/api2/cron-task/dimensions.ts @@ -727,7 +727,7 @@ type ProtocolSummary = RecordSummary & { } run() - .then(storeAppMetadata) + // .then(storeAppMetadata) .catch(async e => { console.error(e) const errorMessage = (e as any)?.message ?? (e as any)?.stack ?? JSON.stringify(e) From 093bd149d2f6257e7e797166707b7c7f4e2d09c4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 5 Oct 2025 15:13:04 +0200 Subject: [PATCH 113/398] add debug logging to app-metadata script --- defi/package.json | 1 + defi/src/api2/cron-task/appMetadata.ts | 105 +++++++++++---------- defi/src/api2/cron-task/dimensions.ts | 2 +- defi/src/api2/cron-task/raises.ts | 19 +++- defi/src/api2/scripts/docker_prod_start.sh | 2 + defi/src/api2/utils/cachedFunctions.ts | 63 ++++++++++++- 6 files changed, 138 insertions(+), 54 deletions(-) diff --git a/defi/package.json b/defi/package.json index 9381da5154..0f87bada1d 100644 --- a/defi/package.json +++ b/defi/package.json @@ -47,6 +47,7 @@ "run-governance": "npx ts-node --logError --transpile-only src/governance/test.ts", "cron-dimensions": "export AWS_REGION='eu-central-1' && export tableName='prod-table' && npx --node-options='--max-old-space-size=20144' ts-node --logError --transpile-only src/api2/cron-task/dimensions.ts", "cron-raises": "npx ts-node --logError --transpile-only src/api2/cron-task/raises.ts", + "cron-app-metadata": "npx ts-node --logError --transpile-only src/api2/cron-task/appMetadata.ts", "extension-updateExtensionTwitterConfig": "export AWS_REGION='eu-central-1' && npx ts-node --logError --transpile-only src/api2/scripts/updateExtensionTwitterConfig.ts", "dimensions-store-all": "npx --node-options='--max-old-space-size=30144' ts-node --logError --transpile-only src/adaptors/handlers/storeAdaptorData/storeAll.ts 2>&1 | tee dimensionsRun.log; node src/api2/scripts/dimensions/printDimensionRunStats.js 2>&1 | tee dimensionsRunStats2.log", "fillOld-dimensions": "npx ts-node --logError --transpile-only src/adaptors/handlers/storeAdaptorData/refillScript.ts", diff --git a/defi/src/api2/cron-task/appMetadata.ts b/defi/src/api2/cron-task/appMetadata.ts index 260d7be35c..e208cf582c 100644 --- a/defi/src/api2/cron-task/appMetadata.ts +++ b/defi/src/api2/cron-task/appMetadata.ts @@ -7,7 +7,6 @@ import { readRouteData, storeRouteData } from "../cache/file-cache"; import * as sdk from "@defillama/sdk"; -import fetch from "node-fetch"; // import { pullDevMetricsData } from "./githubMetrics"; import { chainNameToIdMap, extraSections } from "../../utils/normalizeChain"; import protocols from "../../protocols/data"; @@ -15,6 +14,7 @@ import parentProtocols from "../../protocols/parentProtocols"; import { bridgeCategoriesSet } from "../../utils/excludeProtocols"; import { IChainMetadata, IProtocolMetadata } from "./types"; import { SAFE_HARBOR_PROJECTS_CACHE_KEY } from "../constants"; +import { cachedJSONPull, readCachedRouteData } from "../utils/cachedFunctions"; const { exec } = require("child_process"); const allExtraSections = [...extraSections, "doublecounted", "liquidstaking", "dcAndLsOverlap", "excludeParent"]; @@ -59,7 +59,6 @@ protocols.forEach((protocol: any) => { } }); -const fetchJson = async (url: string) => fetch(url).then((res) => res.json()); const slugMap: any = { Binance: "BSC", }; @@ -79,9 +78,11 @@ export async function storeAppMetadata() { console.time("storeAppMetadata"); console.log("starting to build metadata for front-end"); try { - await pullRaisesDataIfMissing(); + // await pullRaisesDataIfMissing(); // not needed anymore as raises data is always updated before this line is invoked // await pullDevMetricsData(); // we no longer use this data await _storeAppMetadata(); + + //TODO: add code to send notification of success } catch (e) { console.log("Error in storeAppMetadata: ", e); console.error(e); @@ -111,6 +112,7 @@ async function _storeAppMetadata() { const finalChains: Record = {}; let lendingProtocols = 0; + console.time("_storeMetadataFile fetch all data"); const [ tvlData, dimensionsChainAggData, @@ -148,44 +150,45 @@ async function _storeAppMetadata() { entitiesData, nftStatsData, ] = await Promise.all([ - readRouteData("/lite/protocols2"), - readRouteData("/dimensions/chain-agg-data"), - fetchJson(YIELD_POOLS_API).then((res) => res.data ?? []), - fetchJson(PROTOCOLS_EXPENSES_API).catch(() => []), - readRouteData("/treasuries").catch(() => []), - fetchJson(LIQUIDITY_API).catch(() => []), - readRouteData("/hacks").catch(() => []), - fetchJson(NFT_MARKETPLACES_STATS_API).catch(() => []), - readRouteData("/raises").catch(() => ({ raises: [] })), - fetchJson(ACTIVE_USERS_API).catch(() => ({})), - readRouteData("/dimensions/fees/df-lite").catch(() => ({ protocols: {} })), - readRouteData("/dimensions/fees/dr-lite").catch(() => ({ protocols: {} })), - readRouteData("/dimensions/fees/dhr-lite").catch(() => ({ protocols: {} })), - readRouteData("/dimensions/fees/dbr-lite").catch(() => ({ protocols: {} })), - readRouteData("/dimensions/fees/dtt-lite").catch(() => ({ protocols: {} })), - readRouteData("/dimensions/dexs/dv-lite").catch(() => ({ protocols: {} })), - readRouteData("/dimensions/derivatives/dv-lite").catch(() => ({ protocols: {} })), - readRouteData("/dimensions/open-interest/doi-lite").catch(() => ({ protocols: {} })), - readRouteData("/dimensions/aggregators/dv-lite").catch(() => ({ protocols: {} })), - readRouteData("/dimensions/options/dnv-lite").catch(() => ({ protocols: {} })), - readRouteData("/dimensions/options/dpv-lite").catch(() => ({ protocols: {} })), - readRouteData("/dimensions/aggregator-derivatives/dv-lite").catch(() => ({ protocols: {} })), - readRouteData("/dimensions/bridge-aggregators/dbv-lite").catch(() => ({ protocols: {} })), - fetchJson(`https://defillama-datasets.llama.fi/emissionsProtocolsList`).catch(() => []), - fetchJson(`https://defillama-datasets.llama.fi/emissionsBreakdown`).catch(() => { }), - fetchJson(`${BRIDGES_API}?includeChains=true`).catch(() => ({ chains: [], bridges: [] })), - fetchJson(CHAINS_ASSETS).catch(() => ({})), - readRouteData("/chains").catch(() => []), - readRouteData("/forks").catch(() => ({ forks: {} })), - fetchJson(STABLECOINS_API) - .catch(() => ({ peggedAssets: [], chains: [] })), - readRouteData("/oracles").catch(() => ({ oracles: {} })), - fetchJson(CHAIN_NFTS).catch(() => ({})), + readCachedRouteData({ route: "/lite/protocols2" }), + readCachedRouteData({ route: "/dimensions/chain-agg-data" }), + cachedJSONPull({ endpoint: YIELD_POOLS_API, defaultResponse: { data: [] } }).then((res) => res.data ?? []), + cachedJSONPull({ endpoint: PROTOCOLS_EXPENSES_API, defaultResponse: [] }), + readCachedRouteData({ route: "/treasuries", defaultResponse: [] }), + cachedJSONPull({ endpoint: LIQUIDITY_API, defaultResponse: [] }), + readCachedRouteData({ route: "/hacks", defaultResponse: [] }), + cachedJSONPull({ endpoint: NFT_MARKETPLACES_STATS_API, defaultResponse: [] }), + readCachedRouteData({ route: "/raises", defaultResponse: { raises: [] } }), + cachedJSONPull({ endpoint: ACTIVE_USERS_API, defaultResponse: {} }), + readCachedRouteData({ route: "/dimensions/fees/df-lite" }), + readCachedRouteData({ route: "/dimensions/fees/dr-lite" }), + readCachedRouteData({ route: "/dimensions/fees/dhr-lite" }), + readCachedRouteData({ route: "/dimensions/fees/dbr-lite" }), + readCachedRouteData({ route: "/dimensions/fees/dtt-lite" }), + readCachedRouteData({ route: "/dimensions/dexs/dv-lite" }), + readCachedRouteData({ route: "/dimensions/derivatives/dv-lite" }), + readCachedRouteData({ route: "/dimensions/open-interest/doi-lite" }), + readCachedRouteData({ route: "/dimensions/aggregators/dv-lite" }), + readCachedRouteData({ route: "/dimensions/options/dnv-lite" }), + readCachedRouteData({ route: "/dimensions/options/dpv-lite" }), + readCachedRouteData({ route: "/dimensions/aggregator-derivatives/dv-lite" }), + readCachedRouteData({ route: "/dimensions/bridge-aggregators/dbv-lite" }), + cachedJSONPull({ endpoint: `https://defillama-datasets.llama.fi/emissionsProtocolsList`, defaultResponse: [] }), + cachedJSONPull({ endpoint: `https://defillama-datasets.llama.fi/emissionsBreakdown`, defaultResponse: {} }), + cachedJSONPull({ endpoint: `${BRIDGES_API}?includeChains=true`, defaultResponse: { chains: [], bridges: [] } }), + cachedJSONPull({ endpoint: CHAINS_ASSETS, defaultResponse: {} }), + readCachedRouteData({ route: "/chains", defaultResponse: [] }), + readCachedRouteData({ route: "/forks", defaultResponse: { forks: {} } }), + cachedJSONPull({ endpoint: STABLECOINS_API, defaultResponse: { peggedAssets: [], chains: [] } }), + readCachedRouteData({ route: "/oracles", defaultResponse: { oracles: {} } }), + cachedJSONPull({ endpoint: CHAIN_NFTS, defaultResponse: {} }), sdk.cache.readCache(SAFE_HARBOR_PROJECTS_CACHE_KEY, { readFromR2Cache: true }).catch(() => ({})), - fetchJson("https://api.llama.fi/entities").catch(() => []), + cachedJSONPull({ endpoint: "https://api.llama.fi/entities", defaultResponse: [] }), getNftStats(), ]); + console.timeEnd("_storeMetadataFile fetch all data"); + await _storeMetadataFile(); await storeRouteData("/_fe/static/safe-harbor-projects", safeHarborData); @@ -1005,18 +1008,14 @@ const STABLECOINS_API = "https://stablecoins.llama.fi/stablecoins"; async function getNftStats() { const [collections, marketplaces, chains] = await Promise.all([ - fetchJson("https://nft.llama.fi/collections") - .then((res) => res.length) - .catch(() => 0), - fetchJson("https://nft.llama.fi/exchangeStats") - .then((res) => res.length) - .catch(() => 0), - fetchJson("https://nft.llama.fi/mints") - .then((res) => res.length) - .catch(() => 0), - fetchJson(CHAIN_NFTS) - .then((res) => Object.keys(res).length) - .catch(() => 0), + cachedJSONPull({ endpoint: "https://nft.llama.fi/collections", defaultResponse: [] }) + .then((res) => res.length), + cachedJSONPull({ endpoint: "https://nft.llama.fi/exchangeStats", defaultResponse: [] }) + .then((res) => res.length), + cachedJSONPull({ endpoint: "https://nft.llama.fi/mints", defaultResponse: [] }) + .then((res) => res.length), + cachedJSONPull({ endpoint: CHAIN_NFTS }) + .then((res) => Object.keys(res).length), ]); return { collections, @@ -1024,3 +1023,11 @@ async function getNftStats() { chains, }; } + +storeAppMetadata().catch(console.error).then(() => process.exit(0)) + +setTimeout(() => { + console.log('Running for more than 5 minutes, exiting.'); + process.exit(1); +}, 5 * 60 * 1000) // keep process alive for 5 minutes in case of hanging promises + diff --git a/defi/src/api2/cron-task/dimensions.ts b/defi/src/api2/cron-task/dimensions.ts index bbe7a08819..cd7468287f 100644 --- a/defi/src/api2/cron-task/dimensions.ts +++ b/defi/src/api2/cron-task/dimensions.ts @@ -17,7 +17,7 @@ import * as sdk from '@defillama/sdk' import { getOverviewProcess2, getProtocolDataHandler2 } from "../routes/dimensions" import { storeRouteData } from "../cache/file-cache" import { sluggifyString } from "../../utils/sluggify" -import { storeAppMetadata } from './appMetadata'; +// import { storeAppMetadata } from './appMetadata'; import { sendMessage } from '../../utils/discord'; import { ProtocolAdaptor, AdaptorRecordType, ACCOMULATIVE_ADAPTOR_TYPE, getAdapterRecordTypes, ADAPTER_TYPES, } from '../../adaptors/data/types'; diff --git a/defi/src/api2/cron-task/raises.ts b/defi/src/api2/cron-task/raises.ts index 9efa55e05e..5a5fc09732 100644 --- a/defi/src/api2/cron-task/raises.ts +++ b/defi/src/api2/cron-task/raises.ts @@ -2,13 +2,25 @@ import { storeRouteData, } from "../cache/file-cache"; import { getRaisesInternal } from "../../getRaises"; import { getHacksInternal } from "../../getHacks"; // import { fetchArticles } from "../../getNewsArticles"; +import * as sdk from '@defillama/sdk' + async function run() { + const { lastUpdateTS } = (await sdk.cache.readExpiringJsonCache('cron-task/raises-last-update')) ?? { lastUpdateTS: 0 } + const now = Date.now() + // only run if last update was more than 2 hours ago + if (now - lastUpdateTS < 2 * 60 * 60 * 1000) { + console.log('Last raises data pull was less than 2 hours ago, skipping') + return + } + await writeRaises() await writeHacks() // await writeArticles() + await sdk.cache.writeExpiringJsonCache('cron-task/raises-last-update', { lastUpdateTS: now }, { expireAfter: 24 * 60 * 60 * 1000 }) // expire after 24 hours + async function writeRaises() { console.time('write /raises') const data = await getRaisesInternal() @@ -31,4 +43,9 @@ async function run() { } */ } -run().catch(console.error).then(() => process.exit(0)) \ No newline at end of file +run().catch(console.error).then(() => process.exit(0)) + +setTimeout(() => { + console.log('Running for more than 5 minutes, exiting.'); + process.exit(1); +}, 5 * 60 * 1000) // keep process alive for 5 minutes in case of hanging promises \ No newline at end of file diff --git a/defi/src/api2/scripts/docker_prod_start.sh b/defi/src/api2/scripts/docker_prod_start.sh index b4399b3098..14ae0a1899 100644 --- a/defi/src/api2/scripts/docker_prod_start.sh +++ b/defi/src/api2/scripts/docker_prod_start.sh @@ -14,8 +14,10 @@ git checkout HEAD -- package-lock.json # reset any changes to package-lock.json time npm run prebuild +time npm run cron-raises time npm run api2-cron-task time npm run cron-dimensions +# time npm run cron-app-metadata // enable after testing # start API2 server timeout 6m npx pm2 startOrReload src/api2/ecosystem.config.js diff --git a/defi/src/api2/utils/cachedFunctions.ts b/defi/src/api2/utils/cachedFunctions.ts index 52058852f4..4fd1b0203e 100644 --- a/defi/src/api2/utils/cachedFunctions.ts +++ b/defi/src/api2/utils/cachedFunctions.ts @@ -2,8 +2,12 @@ import { mergeSortAndRemoveDups } from "." import { Protocol } from "../../protocols/types" import { dailyTokensTvl, dailyTvl, dailyUsdTokensTvl } from "../../utils/getLastRecord" import { getAllProtocolItems } from "../db" -import { getDailyTvlCacheId, readFromPGCache, writeToPGCache } from "../cache/file-cache" -import { log } from "@defillama/sdk" +import { getDailyTvlCacheId, readFromPGCache, readRouteData, writeToPGCache } from "../cache/file-cache" +import { log, cache } from "@defillama/sdk" +import { createHash } from "crypto" +import fetch from "node-fetch"; + +const fetchJson = async (url: string) => fetch(url).then((res) => res.json()) export async function getProtocolAllTvlData(protocol: Protocol, useOnlyCachedData = true) { @@ -36,7 +40,7 @@ export async function getProtocolAllTvlData(protocol: Protocol, useOnlyCachedDat const cacheAgeLimit = currentHour <= 2 ? 2 * 60 * 60 : 4 * 60 * 60; // 2 hours or 10 hours in seconds const cacheIsOld = !timestamp || (unixNow - timestamp) > cacheAgeLimit; const deadProtocolWithCache = protocol.deadFrom && protocolCache - const fetchNewData = cacheIsOld && !deadProtocolWithCache + const fetchNewData = cacheIsOld && !deadProtocolWithCache if (fetchNewData && !useOnlyCachedData) { if (logEnabled) log('Fetching new data for', protocol.name, cacheIsOld, (unixNow - timestamp) > cacheAgeLimit, unixNow, timestamp, cacheAgeLimit, unixNow - timestamp) @@ -63,3 +67,56 @@ export async function getProtocolAllTvlData(protocol: Protocol, useOnlyCachedDat protocolCache.tokens, ] } + +export async function cachedJSONPull({ + endpoint, + defaultResponse = {}, +}: { + endpoint: string + defaultResponse?: any +}) { + // Create a cache key based on the endpoint + const hash = createHash('sha256').update(endpoint).digest('hex').substring(0, 16) + const cacheKey = `json-pull-${hash}` + + let data: any = null + try { + // Try to get data from cache + data = await fetchJson(endpoint) + cache.writeCache(cacheKey, data) + return data; + } catch (error: any) { + log(`Error in cachedJSONPull for ${endpoint}:`, error?.message ?? error) + const cachedData = await cache.readCache(cacheKey) + if (cachedData) { + log(`Returning cached data for ${endpoint}`); + return cachedData; + } + return defaultResponse; + } +} + +export async function readCachedRouteData({ route, defaultResponse = { protocols: {} } }: { + route: string, defaultResponse?: any +}) { + // Create a cache key based on the route + const hash = createHash('sha256').update(route).digest('hex').substring(0, 16) + const cacheKey = `json-route-${hash}` + + let data: any = null + try { + // Try to get data from cache + data = await readRouteData(route) + cache.writeCache(cacheKey, data) + return data; + } catch (error: any) { + log(`Error in readCachedRouteData for ${route}:`, error?.message ?? error) + const cachedData = await cache.readCache(cacheKey) + if (cachedData) { + log(`Returning cached data for ${route}`); + return cachedData; + } + return defaultResponse; + } + +} \ No newline at end of file From bd62a2e7dbcb203217b2eabf49dfe130820f8a3d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 5 Oct 2025 15:23:41 +0200 Subject: [PATCH 114/398] re-enable app-metadata script --- defi/src/api2/scripts/docker_prod_start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/api2/scripts/docker_prod_start.sh b/defi/src/api2/scripts/docker_prod_start.sh index 14ae0a1899..d8fcc68951 100644 --- a/defi/src/api2/scripts/docker_prod_start.sh +++ b/defi/src/api2/scripts/docker_prod_start.sh @@ -17,7 +17,7 @@ time npm run prebuild time npm run cron-raises time npm run api2-cron-task time npm run cron-dimensions -# time npm run cron-app-metadata // enable after testing +time npm run cron-app-metadata # start API2 server timeout 6m npx pm2 startOrReload src/api2/ecosystem.config.js From c5f8606638cbafc60282049aa38cf86ec3e7ad60 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 5 Oct 2025 23:08:29 +0200 Subject: [PATCH 115/398] store successful run logs --- defi/src/api2/cron-task/appMetadata.ts | 16 +++++++++++++++- defi/src/api2/cron-task/dimensions.ts | 18 +++++++++++++++++- defi/src/api2/cron-task/index.ts | 19 +++++++++++++++++++ defi/src/api2/env.ts | 18 ++++++++++++++++++ defi/src/rwa/index.ts | 2 ++ 5 files changed, 71 insertions(+), 2 deletions(-) diff --git a/defi/src/api2/cron-task/appMetadata.ts b/defi/src/api2/cron-task/appMetadata.ts index e208cf582c..c38458dac4 100644 --- a/defi/src/api2/cron-task/appMetadata.ts +++ b/defi/src/api2/cron-task/appMetadata.ts @@ -15,6 +15,8 @@ import { bridgeCategoriesSet } from "../../utils/excludeProtocols"; import { IChainMetadata, IProtocolMetadata } from "./types"; import { SAFE_HARBOR_PROJECTS_CACHE_KEY } from "../constants"; import { cachedJSONPull, readCachedRouteData } from "../utils/cachedFunctions"; +import { getUnixTimeNow } from "../utils/time"; +import { cronNotifyOnDiscord } from "../env"; const { exec } = require("child_process"); const allExtraSections = [...extraSections, "doublecounted", "liquidstaking", "dcAndLsOverlap", "excludeParent"]; @@ -75,6 +77,8 @@ const slug = (tokenName = "") => { }; export async function storeAppMetadata() { + const startTime = getUnixTimeNow(); + console.time("storeAppMetadata"); console.log("starting to build metadata for front-end"); try { @@ -82,7 +86,17 @@ export async function storeAppMetadata() { // await pullDevMetricsData(); // we no longer use this data await _storeAppMetadata(); - //TODO: add code to send notification of success + const endTime = getUnixTimeNow(); + + if (cronNotifyOnDiscord()) + await sdk.elastic.addRuntimeLog({ + runtime: endTime - startTime, + success: true, + metadata: { + application: "cron-task", + type: 'app-metadata', + } + }); } catch (e) { console.log("Error in storeAppMetadata: ", e); console.error(e); diff --git a/defi/src/api2/cron-task/dimensions.ts b/defi/src/api2/cron-task/dimensions.ts index cd7468287f..c7555788dc 100644 --- a/defi/src/api2/cron-task/dimensions.ts +++ b/defi/src/api2/cron-task/dimensions.ts @@ -20,6 +20,7 @@ import { sluggifyString } from "../../utils/sluggify" // import { storeAppMetadata } from './appMetadata'; import { sendMessage } from '../../utils/discord'; import { ProtocolAdaptor, AdaptorRecordType, ACCOMULATIVE_ADAPTOR_TYPE, getAdapterRecordTypes, ADAPTER_TYPES, } from '../../adaptors/data/types'; +import { cronNotifyOnDiscord, } from '../env'; // const startOfDayTimestamp = toStartOfDay(new Date().getTime() / 1000) @@ -65,6 +66,8 @@ const timeData = { async function run() { + const startTime = getUnixTimeNow(); + // Go over all types const allCache = await getDimensionsCacheV2(RUN_TYPE.CRON) await Promise.all(ADAPTER_TYPES.map(updateAdapterData)) @@ -117,6 +120,19 @@ async function run() { await generateDimensionsResponseFiles(allCache) + const endTime = getUnixTimeNow(); + + if (cronNotifyOnDiscord()) + await sdk.elastic.addRuntimeLog({ + runtime: endTime - startTime, + success: true, + metadata: { + application: "cron-task", + type: 'dimensions', + } + }); + + async function updateAdapterData(adapterType: AdapterType) { // if (adapterType !== AdapterType.DERIVATIVES) return; @@ -738,7 +754,7 @@ run() const spikeRecords = [] as any[] const invalidDataRecords = [] as any[] -const NOTIFY_ON_DISCORD = process.env.DIM_CRON_NOTIFY_ON_DISCORD === 'true' +const NOTIFY_ON_DISCORD = cronNotifyOnDiscord() const ThreeMonthsAgo = (Date.now() / 1000) - 3 * 30 * 24 * 60 * 60 const isLessThanThreeMonthsAgo = (timeS: string) => timeSToUnix(timeS) > ThreeMonthsAgo diff --git a/defi/src/api2/cron-task/index.ts b/defi/src/api2/cron-task/index.ts index 02b4ec70be..f70072597d 100644 --- a/defi/src/api2/cron-task/index.ts +++ b/defi/src/api2/cron-task/index.ts @@ -24,6 +24,8 @@ import { RUN_TYPE } from "../utils"; import { genFormattedChains } from "./genFormattedChains"; import { fetchRWAStats } from "../../rwa"; import { sendMessage } from "../../utils/discord"; +import { getUnixTimeNow } from "../utils/time"; +import { cronNotifyOnDiscord } from "../env"; const protocolDataMap: { [key: string]: any } = {} @@ -31,6 +33,9 @@ let getYesterdayTvl: Function, getLastWeekTvl: Function, getLastMonthTvl: Functi let getYesterdayTokensUsd: Function, getLastWeekTokensUsd: Function, getLastMonthTokensUsd: Function async function run() { + + const startTime = getUnixTimeNow(); + await initializeTVLCacheDB() await initCache({ cacheType: RUN_TYPE.CRON }) @@ -71,6 +76,20 @@ async function run() { await storeRWAStats() + + + const endTime = getUnixTimeNow(); + + if (cronNotifyOnDiscord()) + await sdk.elastic.addRuntimeLog({ + runtime: endTime - startTime, + success: true, + metadata: { + application: "cron-task", + type: 'tvl-data', + } + }); + // await storeRouteData('twitter/overview', await getTwitterOverviewFileV2()) // await writeRaises() // moved to different cron task diff --git a/defi/src/api2/env.ts b/defi/src/api2/env.ts index c8cd755d3b..1b533ac4aa 100644 --- a/defi/src/api2/env.ts +++ b/defi/src/api2/env.ts @@ -65,3 +65,21 @@ export default function getTvlCacheEnv() { api2CacheDir: ENV.API2_CACHE_DIR, } } + +const booleanEnvVarsSet = new Set(['DIM_CRON_NOTIFY_ON_DISCORD']) +const validEnvVarsSet = new Set([ ...requiredEnvVars, ...booleanEnvVarsSet, ]) + +export function getEnv(env: string): string | boolean | undefined { + if (!validEnvVarsSet.has(env)) { + console.warn(`Warning: Accessing an environment variable that is not in the list of valid env vars: ${env}`); + } + if (booleanEnvVarsSet.has(env)) { + return process.env[env] === 'true' + } + + return process.env[env] +} + +export function cronNotifyOnDiscord(): boolean { + return getEnv('DIM_CRON_NOTIFY_ON_DISCORD') as boolean +} diff --git a/defi/src/rwa/index.ts b/defi/src/rwa/index.ts index f6f2d0ad4b..abcaeaadb2 100644 --- a/defi/src/rwa/index.ts +++ b/defi/src/rwa/index.ts @@ -63,3 +63,5 @@ export async function fetchRWAStats() { return res; } + +fetchRWAStats() \ No newline at end of file From ff85f2b539cb10c29fbc706077bcccdbba3098d5 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 5 Oct 2025 23:09:12 +0200 Subject: [PATCH 116/398] bugfix --- defi/src/rwa/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/defi/src/rwa/index.ts b/defi/src/rwa/index.ts index abcaeaadb2..f6f2d0ad4b 100644 --- a/defi/src/rwa/index.ts +++ b/defi/src/rwa/index.ts @@ -63,5 +63,3 @@ export async function fetchRWAStats() { return res; } - -fetchRWAStats() \ No newline at end of file From 95bd9aae90c86786b39b2e857ef38e95eeb82f56 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 6 Oct 2025 09:38:22 +0200 Subject: [PATCH 117/398] add wrapper for runtime logging, cut down debug logging --- defi/DefiLlama-Adapters | 2 +- defi/dimension-adapters | 2 +- defi/emissions-adapters | 2 +- defi/src/adaptors/db-utils/db2.ts | 8 +-- defi/src/api2/cache/file-cache.ts | 21 +++++--- defi/src/api2/cron-task/appMetadata.ts | 22 +++----- defi/src/api2/cron-task/dimensions.ts | 29 +++-------- defi/src/api2/cron-task/genFormattedChains.ts | 8 ++- defi/src/api2/cron-task/index.ts | 38 +++++--------- defi/src/api2/cron-task/raises.ts | 7 ++- defi/src/api2/db/index.ts | 2 +- defi/src/api2/env.ts | 4 -- defi/src/api2/utils/index.ts | 52 ++++++++++++++++++- 13 files changed, 112 insertions(+), 85 deletions(-) diff --git a/defi/DefiLlama-Adapters b/defi/DefiLlama-Adapters index 88e0ba6535..7ca5debbb0 160000 --- a/defi/DefiLlama-Adapters +++ b/defi/DefiLlama-Adapters @@ -1 +1 @@ -Subproject commit 88e0ba6535f339437dba4c20119e75d4d18594b1 +Subproject commit 7ca5debbb09e08d4e1a3a346a58e00337f1034cb diff --git a/defi/dimension-adapters b/defi/dimension-adapters index fbfad6e756..b80bd0898e 160000 --- a/defi/dimension-adapters +++ b/defi/dimension-adapters @@ -1 +1 @@ -Subproject commit fbfad6e7560bae9d6a1813f5bdd73b24f6f32dbf +Subproject commit b80bd0898efb857ae994ac050b1abc1e3f5e001c diff --git a/defi/emissions-adapters b/defi/emissions-adapters index 5a21f17d95..b6bed644df 160000 --- a/defi/emissions-adapters +++ b/defi/emissions-adapters @@ -1 +1 @@ -Subproject commit 5a21f17d952368e80eafbd65978bd6cf479c8db1 +Subproject commit b6bed644df05bbea8e1aeb654dc456a9f2e1ee63 diff --git a/defi/src/adaptors/db-utils/db2.ts b/defi/src/adaptors/db-utils/db2.ts index 861789a5f8..d93e0c84ac 100644 --- a/defi/src/adaptors/db-utils/db2.ts +++ b/defi/src/adaptors/db-utils/db2.ts @@ -92,7 +92,7 @@ export async function getAllItemsUpdatedAfter({ adapterType, timestamp }: { adap if (timestamp < 946684800) timestamp = 946684800 // 2000-01-01 const label = `getAllItemsUpdatedAfter(${adapterType})` - console.time(label) + // console.time(label) let result: any = [] let offset = 0 @@ -109,13 +109,13 @@ export async function getAllItemsUpdatedAfter({ adapterType, timestamp }: { adap }) result = result.concat(batch) - sdk.log(`getAllItemsUpdatedAfter(${adapterType}) found ${batch.length} total fetched: ${result.length} items updated after ${new Date(timestamp * 1000)}`) + // sdk.log(`getAllItemsUpdatedAfter(${adapterType}) found ${batch.length} total fetched: ${result.length} items updated after ${new Date(timestamp * 1000)}`) if (batch.length < limit) break offset += limit } - sdk.log(`getAllItemsUpdatedAfter(${adapterType}) found ${result.length} items updated after ${new Date(timestamp * 1000)}`) - console.timeEnd(label) + // sdk.log(`getAllItemsUpdatedAfter(${adapterType}) found ${result.length} items updated after ${new Date(timestamp * 1000)}`) + // console.timeEnd(label) return result } diff --git a/defi/src/api2/cache/file-cache.ts b/defi/src/api2/cache/file-cache.ts index b044413e33..ee288839fc 100644 --- a/defi/src/api2/cache/file-cache.ts +++ b/defi/src/api2/cache/file-cache.ts @@ -67,9 +67,13 @@ export async function storeRouteData(subPath: string, data: any) { return storeData(subPath, data) } -export async function readRouteData(subPath: string) { +export async function readRouteData(subPath: string, { + skipErrorLog = false +}: { + skipErrorLog?: boolean +} = {}) { subPath = fileNameNormalizer(`build/${subPath}`) - return readFileData(subPath) + return readFileData(subPath, { skipErrorLog }) } async function storeData(subPath: string, data: any) { @@ -84,13 +88,18 @@ async function storeData(subPath: string, data: any) { } } -async function readFileData(subPath: string) { +async function readFileData(subPath: string, { + skipErrorLog = false +}: { + skipErrorLog?: boolean +} = {}) { const filePath = path.join(CACHE_DIR!, subPath) try { const data = await fs.promises.readFile(filePath, 'utf8') return JSON.parse(data.toString()) } catch (e) { - log((e as any)?.message) + if (!skipErrorLog) + log((e as any)?.message) return null } } @@ -168,12 +177,12 @@ export async function storeTvlCacheAllFile(data: any) { throw new Error('Invalid data type. Expected an object.') } const { allTvlData = {}, ...restCache } = data - const tvlEntries = Object.entries(allTvlData) + const tvlEntries = Object.entries(allTvlData) const chunkedTvlEntries = sliceIntoChunks(tvlEntries, 1000) restCache.tvlEntryCount = chunkedTvlEntries.length await writeToPGCache(PG_CACHE_KEYS.CACHE_DATA_ALL, restCache) - let i = 0 + let i = 0 for (const chunk of chunkedTvlEntries) { const key = `${PG_CACHE_KEYS.CACHE_DATA_ALL}-tvlChunk-${i}` await writeToPGCache(key, chunk) diff --git a/defi/src/api2/cron-task/appMetadata.ts b/defi/src/api2/cron-task/appMetadata.ts index c38458dac4..54bf394318 100644 --- a/defi/src/api2/cron-task/appMetadata.ts +++ b/defi/src/api2/cron-task/appMetadata.ts @@ -15,8 +15,7 @@ import { bridgeCategoriesSet } from "../../utils/excludeProtocols"; import { IChainMetadata, IProtocolMetadata } from "./types"; import { SAFE_HARBOR_PROJECTS_CACHE_KEY } from "../constants"; import { cachedJSONPull, readCachedRouteData } from "../utils/cachedFunctions"; -import { getUnixTimeNow } from "../utils/time"; -import { cronNotifyOnDiscord } from "../env"; +import { runWithRuntimeLogging } from "../utils"; const { exec } = require("child_process"); const allExtraSections = [...extraSections, "doublecounted", "liquidstaking", "dcAndLsOverlap", "excludeParent"]; @@ -77,7 +76,6 @@ const slug = (tokenName = "") => { }; export async function storeAppMetadata() { - const startTime = getUnixTimeNow(); console.time("storeAppMetadata"); console.log("starting to build metadata for front-end"); @@ -85,18 +83,7 @@ export async function storeAppMetadata() { // await pullRaisesDataIfMissing(); // not needed anymore as raises data is always updated before this line is invoked // await pullDevMetricsData(); // we no longer use this data await _storeAppMetadata(); - - const endTime = getUnixTimeNow(); - - if (cronNotifyOnDiscord()) - await sdk.elastic.addRuntimeLog({ - runtime: endTime - startTime, - success: true, - metadata: { - application: "cron-task", - type: 'app-metadata', - } - }); + } catch (e) { console.log("Error in storeAppMetadata: ", e); console.error(e); @@ -1038,7 +1025,10 @@ async function getNftStats() { }; } -storeAppMetadata().catch(console.error).then(() => process.exit(0)) +runWithRuntimeLogging(storeAppMetadata, { + application: 'cron-task', + type: 'app-metadata', +}).catch(console.error).then(() => process.exit(0)) setTimeout(() => { console.log('Running for more than 5 minutes, exiting.'); diff --git a/defi/src/api2/cron-task/dimensions.ts b/defi/src/api2/cron-task/dimensions.ts index c7555788dc..95eec824d3 100644 --- a/defi/src/api2/cron-task/dimensions.ts +++ b/defi/src/api2/cron-task/dimensions.ts @@ -11,7 +11,7 @@ import { getDisplayChainNameCached, normalizeDimensionChainsMap, } from "../../a import { parentProtocolsById } from "../../protocols/parentProtocols"; import { protocolsById } from "../../protocols/data"; -import { RUN_TYPE, roundVaules, } from "../utils"; +import { RUN_TYPE, roundVaules, runWithRuntimeLogging, cronNotifyOnDiscord } from "../utils"; import * as sdk from '@defillama/sdk' import { getOverviewProcess2, getProtocolDataHandler2 } from "../routes/dimensions" @@ -20,7 +20,6 @@ import { sluggifyString } from "../../utils/sluggify" // import { storeAppMetadata } from './appMetadata'; import { sendMessage } from '../../utils/discord'; import { ProtocolAdaptor, AdaptorRecordType, ACCOMULATIVE_ADAPTOR_TYPE, getAdapterRecordTypes, ADAPTER_TYPES, } from '../../adaptors/data/types'; -import { cronNotifyOnDiscord, } from '../env'; // const startOfDayTimestamp = toStartOfDay(new Date().getTime() / 1000) @@ -66,8 +65,6 @@ const timeData = { async function run() { - const startTime = getUnixTimeNow(); - // Go over all types const allCache = await getDimensionsCacheV2(RUN_TYPE.CRON) await Promise.all(ADAPTER_TYPES.map(updateAdapterData)) @@ -120,19 +117,6 @@ async function run() { await generateDimensionsResponseFiles(allCache) - const endTime = getUnixTimeNow(); - - if (cronNotifyOnDiscord()) - await sdk.elastic.addRuntimeLog({ - runtime: endTime - startTime, - success: true, - metadata: { - application: "cron-task", - type: 'dimensions', - } - }); - - async function updateAdapterData(adapterType: AdapterType) { // if (adapterType !== AdapterType.DERIVATIVES) return; @@ -205,7 +189,7 @@ async function run() { console.time(timeKey1) let { protocolMap: dimensionProtocolMap } = loadAdaptorsData(adapterType) - console.timeEnd(timeKey1) + // console.timeEnd(timeKey1) const adapterData = allCache[adapterType] const timeKey3 = `summary ${adapterType}` @@ -251,7 +235,7 @@ async function run() { adapterData.summaries = summaries adapterData.allChains = Object.keys(chainMappingToVal).sort((a, b) => chainMappingToVal[b] - chainMappingToVal[a]) adapterData.lastUpdated = getUnixTimeNow() - console.timeEnd(timeKey3) + // console.timeEnd(timeKey3) function addProtocolData({ protocolId, dimensionProtocolInfo = ({} as any), isParentProtocol = false, adapterType, skipChainSummary = false, records, hasAppMetrics = false, }: { isParentProtocol: boolean, adapterType: AdapterType, skipChainSummary: boolean, records?: any, protocolId: string, dimensionProtocolInfo?: ProtocolAdaptor, hasAppMetrics?: boolean }) { if (isParentProtocol) skipChainSummary = true @@ -742,7 +726,10 @@ type ProtocolSummary = RecordSummary & { breakdown30d?: any } -run() +runWithRuntimeLogging(run, { + application: 'cron-task', + type: 'dimensions', +}) // .then(storeAppMetadata) .catch(async e => { console.error(e) @@ -989,7 +976,7 @@ async function generateDimensionsResponseFiles(cache: any) { } } - console.timeEnd(timeKey) + // console.timeEnd(timeKey) } await storeRouteData(`dimensions/chain-agg-data`, dimChainsAggData) } diff --git a/defi/src/api2/cron-task/genFormattedChains.ts b/defi/src/api2/cron-task/genFormattedChains.ts index 41f2d3000b..90701f5fbc 100644 --- a/defi/src/api2/cron-task/genFormattedChains.ts +++ b/defi/src/api2/cron-task/genFormattedChains.ts @@ -65,8 +65,12 @@ export async function genFormattedChains() { for (const chain of res.chains) { allChainData[chain] = { tvl: [] } try { - const data = await readRouteData('/lite/charts/' + chain) - if (!data) console.warn('No data for chain', chain) + const data = await readRouteData('/lite/charts/' + chain, { + skipErrorLog: true, + }) + if (!data) { + // console.warn('No data for chain', chain) + } else allChainData[chain] = data } catch (e) { console.warn('Error fetching chain data for', chain) diff --git a/defi/src/api2/cron-task/index.ts b/defi/src/api2/cron-task/index.ts index f70072597d..b349d08f66 100644 --- a/defi/src/api2/cron-task/index.ts +++ b/defi/src/api2/cron-task/index.ts @@ -20,12 +20,10 @@ import { storeGetProtocols } from "../../storeGetProtocols"; import { getYieldsConfig } from "../../getYieldsConfig"; import { getOutdated } from "../../stats/getOutdated"; import * as sdk from '@defillama/sdk' -import { RUN_TYPE } from "../utils"; +import { RUN_TYPE, runWithRuntimeLogging } from "../utils"; import { genFormattedChains } from "./genFormattedChains"; import { fetchRWAStats } from "../../rwa"; import { sendMessage } from "../../utils/discord"; -import { getUnixTimeNow } from "../utils/time"; -import { cronNotifyOnDiscord } from "../env"; const protocolDataMap: { [key: string]: any } = {} @@ -34,8 +32,6 @@ let getYesterdayTokensUsd: Function, getLastWeekTokensUsd: Function, getLastMont async function run() { - const startTime = getUnixTimeNow(); - await initializeTVLCacheDB() await initCache({ cacheType: RUN_TYPE.CRON }) @@ -77,19 +73,6 @@ async function run() { await storeRWAStats() - - const endTime = getUnixTimeNow(); - - if (cronNotifyOnDiscord()) - await sdk.elastic.addRuntimeLog({ - runtime: endTime - startTime, - success: true, - metadata: { - application: "cron-task", - type: 'tvl-data', - } - }); - // await storeRouteData('twitter/overview', await getTwitterOverviewFileV2()) // await writeRaises() // moved to different cron task @@ -104,44 +87,44 @@ async function run() { const latestProtocolItems = await getLatestProtocolItems(hourlyTvl, { filterLast24Hours: true }) const latestProtocolItemsMap: any = {} latestProtocolItems.forEach((data: any) => latestProtocolItemsMap[data.id] = data.data) - console.timeEnd('getLatestProtocolItems filterLast24Hours') + // console.timeEnd('getLatestProtocolItems filterLast24Hours') console.time('getLatestProtocolItems filterADayAgo') const latestProtocolItemsDayAgo = await getLatestProtocolItems(hourlyTvl, { filterADayAgo: true }) const latestProtocolItemsDayAgoMap: any = {} latestProtocolItemsDayAgo.forEach((data: any) => latestProtocolItemsDayAgoMap[data.id] = data.data) - console.timeEnd('getLatestProtocolItems filterADayAgo') + // console.timeEnd('getLatestProtocolItems filterADayAgo') console.time('getLatestProtocolItems filterAWeekAgo') const latestProtocolItemsWeekAgo = await getLatestProtocolItems(hourlyTvl, { filterAWeekAgo: true }) const latestProtocolItemsWeekAgoMap: any = {} latestProtocolItemsWeekAgo.forEach((data: any) => latestProtocolItemsWeekAgoMap[data.id] = data.data) - console.timeEnd('getLatestProtocolItems filterAWeekAgo') + // console.timeEnd('getLatestProtocolItems filterAWeekAgo') console.time('getLatestProtocolItems filterAMonthAgo') const latestProtocolItemsMonthAgo = await getLatestProtocolItems(hourlyTvl, { filterAMonthAgo: true }) const latestProtocolItemsMonthAgoMap: any = {} latestProtocolItemsMonthAgo.forEach((data: any) => latestProtocolItemsMonthAgoMap[data.id] = data.data) - console.timeEnd('getLatestProtocolItems filterAMonthAgo') + // console.timeEnd('getLatestProtocolItems filterAMonthAgo') console.time('getLatestProtocolTokensUSD filterADayAgo') const latestProtocolTokensUSD = await getLatestProtocolItems(hourlyUsdTokensTvl, { filterADayAgo: true, }) const latestProtocolTokensUSDMap: any = {} latestProtocolTokensUSD.forEach((data: any) => latestProtocolTokensUSDMap[data.id] = data.data) - console.timeEnd('getLatestProtocolTokensUSD filterADayAgo') + // console.timeEnd('getLatestProtocolTokensUSD filterADayAgo') console.time('getLatestProtocolTokensUSD filterAWeekAgo') const latestProtocolTokensUSDWeekAgo = await getLatestProtocolItems(hourlyUsdTokensTvl, { filterAWeekAgo: true }) const latestProtocolTokensUSDWeekAgoMap: any = {} latestProtocolTokensUSDWeekAgo.forEach((data: any) => latestProtocolTokensUSDWeekAgoMap[data.id] = data.data) - console.timeEnd('getLatestProtocolTokensUSD filterAWeekAgo') + // console.timeEnd('getLatestProtocolTokensUSD filterAWeekAgo') console.time('getLatestProtocolTokensUSD filterAMonthAgo') const latestProtocolTokensUSDMonthAgo = await getLatestProtocolItems(hourlyUsdTokensTvl, { filterAMonthAgo: true }) const latestProtocolTokensUSDMonthAgoMap: any = {} latestProtocolTokensUSDMonthAgo.forEach((data: any) => latestProtocolTokensUSDMonthAgoMap[data.id] = data.data) - console.timeEnd('getLatestProtocolTokensUSD filterAMonthAgo') + // console.timeEnd('getLatestProtocolTokensUSD filterAMonthAgo') console.time('getAllProtocolItems') @@ -431,7 +414,10 @@ async function storeRWAStats() { } -run() +runWithRuntimeLogging(run, { + application: "cron-task", + type: 'tvl-data', + }) .then(genFormattedChains) .catch(async e => { console.error(e) diff --git a/defi/src/api2/cron-task/raises.ts b/defi/src/api2/cron-task/raises.ts index 5a5fc09732..c58a432426 100644 --- a/defi/src/api2/cron-task/raises.ts +++ b/defi/src/api2/cron-task/raises.ts @@ -3,6 +3,7 @@ import { getRaisesInternal } from "../../getRaises"; import { getHacksInternal } from "../../getHacks"; // import { fetchArticles } from "../../getNewsArticles"; import * as sdk from '@defillama/sdk' +import { runWithRuntimeLogging } from "../utils"; async function run() { @@ -43,7 +44,11 @@ async function run() { } */ } -run().catch(console.error).then(() => process.exit(0)) + +runWithRuntimeLogging(run, { + application: "cron-task", + type: 'raises', +}).catch(console.error).then(() => process.exit(0)) setTimeout(() => { console.log('Running for more than 5 minutes, exiting.'); diff --git a/defi/src/api2/db/index.ts b/defi/src/api2/db/index.ts index 5dd9be333b..d73d6d2087 100644 --- a/defi/src/api2/db/index.ts +++ b/defi/src/api2/db/index.ts @@ -281,7 +281,7 @@ async function getLatestProtocolItems(ddbPKFunction: Function, { filterLast24Hou { type: QueryTypes.SELECT } ) - log('[Postgres] fetch item count', table.getTableName(), items.length) + // log('[Postgres] fetch item count', table.getTableName(), items.length) items.forEach((i: any) => i.data.SK = i.timestamp) return items diff --git a/defi/src/api2/env.ts b/defi/src/api2/env.ts index 1b533ac4aa..367cf99898 100644 --- a/defi/src/api2/env.ts +++ b/defi/src/api2/env.ts @@ -79,7 +79,3 @@ export function getEnv(env: string): string | boolean | undefined { return process.env[env] } - -export function cronNotifyOnDiscord(): boolean { - return getEnv('DIM_CRON_NOTIFY_ON_DISCORD') as boolean -} diff --git a/defi/src/api2/utils/index.ts b/defi/src/api2/utils/index.ts index b34c416c23..d754ee9137 100644 --- a/defi/src/api2/utils/index.ts +++ b/defi/src/api2/utils/index.ts @@ -1,3 +1,6 @@ +import { getEnv } from "../env"; +import * as sdk from "@defillama/sdk"; + export function unixTSToDateString(unixTimestamp: number) { return unixTSToHourString(unixTimestamp).slice(0, 10) } @@ -103,7 +106,7 @@ export function tableToString(data: any, columns: any) { data.unshift(headerObject1) data.unshift(headerObject) // Calculate the maximum width for each column - const columnWidths = columns.map((col: any) => + const columnWidths = columns.map((col: any) => Math.max(col.length, ...data.map((row: any) => (row[col] !== undefined ? String(row[col]).length : 0))) ); @@ -119,4 +122,51 @@ export function tableToString(data: any, columns: any) { }); return tableString; +} + +export function cronNotifyOnDiscord(): boolean { + return getEnv('DIM_CRON_NOTIFY_ON_DISCORD') as boolean +} + +export async function runWithRuntimeLogging(fn: () => Promise, metadata: { + application: string; + type: string; +}) { + + let addRuntimeLog = true + if (metadata.application === 'cron-task') addRuntimeLog = cronNotifyOnDiscord() + + if (!addRuntimeLog) return fn() + + + const startTime = Date.now() + try { + + + await fn() + + const endTime = Date.now() + await sdk.elastic.addRuntimeLog({ + metadata, + success: true, + runtime: (endTime - startTime) / 1e3, + }) + + + } catch (e) { + + const endTime = Date.now() + + await sdk.elastic.addErrorLog({ + error: (e as any)?.message ? (e as any).message : e, + metadata + }) + + await sdk.elastic.addRuntimeLog({ + metadata, + success: false, + runtime: (endTime - startTime) / 1e3, + }) + throw e + } } \ No newline at end of file From 7083ce8e3e5e8b888ad36335de6b02e53a9728d5 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 6 Oct 2025 10:40:58 +0200 Subject: [PATCH 118/398] app-metadata: bugfix --- defi/src/api2/cron-task/appMetadata.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/api2/cron-task/appMetadata.ts b/defi/src/api2/cron-task/appMetadata.ts index 54bf394318..e917bdda6b 100644 --- a/defi/src/api2/cron-task/appMetadata.ts +++ b/defi/src/api2/cron-task/appMetadata.ts @@ -1013,8 +1013,8 @@ async function getNftStats() { .then((res) => res.length), cachedJSONPull({ endpoint: "https://nft.llama.fi/exchangeStats", defaultResponse: [] }) .then((res) => res.length), - cachedJSONPull({ endpoint: "https://nft.llama.fi/mints", defaultResponse: [] }) - .then((res) => res.length), + // cachedJSONPull({ endpoint: "https://nft.llama.fi/mints", defaultResponse: [] }) + // .then((res) => res.length), // this route doesnt work, plus we were reading only three items in the .all response cachedJSONPull({ endpoint: CHAIN_NFTS }) .then((res) => Object.keys(res).length), ]); From 53db4582d8f6e89005964a58e7863c0028ed516d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 6 Oct 2025 15:51:38 +0200 Subject: [PATCH 119/398] rage-trade: add hallmark --- defi/src/protocols/data3.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 1df170b473..d7247ca308 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -41322,6 +41322,9 @@ const data3_2: Protocol[] = [ twitter: "rage_trade", github: ["RageTrade"], listedAt: 1712327109, + hallmarks: [ + ['2025-10-06', 'Project winds down'] + ], dimensions: { "aggregator-derivatives": "rage-trade" } From 3b3e0ba61c569bef329fc5a5411d9e16a71388b8 Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 6 Oct 2025 08:50:11 -0600 Subject: [PATCH 120/398] fix garden dimensions --- defi/src/protocols/data3.ts | 3 +- defi/src/protocols/data4.ts | 50 +++++++++++++-------------- defi/src/protocols/parentProtocols.ts | 22 ++++++------ 3 files changed, 38 insertions(+), 37 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index d7247ca308..9f676e936b 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -32678,7 +32678,8 @@ const data3_1: Protocol[] = [ listedAt: 1706793085, dimensions: { fees: "garden", - dexs: "garden" + dexs: "garden", + "bridge-aggregators": "garden" } }, { diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 7a4a56f9c8..b306574193 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -25597,31 +25597,31 @@ const data4: Protocol[] = [ github: ["fiamma-chain"], listedAt: 1755792897, }, - { - id: "6615", - name: "Garden Bridge Aggregator", - address: "0x5eed99d066a8caf10f3e4327c1b3d8b673485eed", - symbol: "SEED", - url: "https://app.garden.finance/", - description: - "Garden is a decentralized, intents-based Bitcoin bridge using atomic swaps and HTLCs to transfer BTC across multiple chains instantly, powered by SEED-governed liquidity solvers.", - chain: "Bitcoin", - logo: `${baseIconsUrl}/garden-bridge-aggregator.jpg`, - audits: "2", - audit_note: null, - gecko_id: null, - cmcId: null, - category: "Bridge Aggregator", - chains: ["Bitcoin"], - forkedFrom: [], - module: "dummy.js", - twitter: "garden_finance", - audit_links: ["https://github.com/catalogfi/swapper/blob/main/audits/audit-01-ottersec.pdf"], - parentProtocol: "parent#garden", - dimensions: { - "bridge-aggregators": "garden" - } - }, + // { + // id: "6615", + // name: "Garden Bridge Aggregator", + // address: "0x5eed99d066a8caf10f3e4327c1b3d8b673485eed", + // symbol: "SEED", + // url: "https://app.garden.finance/", + // description: + // "Garden is a decentralized, intents-based Bitcoin bridge using atomic swaps and HTLCs to transfer BTC across multiple chains instantly, powered by SEED-governed liquidity solvers.", + // chain: "Bitcoin", + // logo: `${baseIconsUrl}/garden-bridge-aggregator.jpg`, + // audits: "2", + // audit_note: null, + // gecko_id: null, + // cmcId: null, + // category: "Bridge Aggregator", + // chains: ["Bitcoin"], + // forkedFrom: [], + // module: "dummy.js", + // twitter: "garden_finance", + // audit_links: ["https://github.com/catalogfi/swapper/blob/main/audits/audit-01-ottersec.pdf"], + // parentProtocol: "parent#garden", + // dimensions: { + // "bridge-aggregators": "garden" + // } + // }, { id: "6616", name: "BrownFi", diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index f5195a4218..d8d50d6637 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -7762,17 +7762,17 @@ const parentProtocols: IParentProtocol[] = [ github: ["zerolend"], treasury: "zerolend.js", }, - { - id: "parent#garden", - name: "Garden.Finance", - url: "https://garden.finance/", - description: "Garden is a decentralized, intents-based Bitcoin bridge using atomic swaps and HTLCs to transfer BTC across multiple chains instantly, powered by SEED-governed liquidity solvers", - logo: `${baseIconsUrl}/garden.finance.jpg`, - gecko_id: "garden-2", - cmcId: null, - chains: [], - twitter: "garden_finance", - }, + // { + // id: "parent#garden", + // name: "Garden.Finance", + // url: "https://garden.finance/", + // description: "Garden is a decentralized, intents-based Bitcoin bridge using atomic swaps and HTLCs to transfer BTC across multiple chains instantly, powered by SEED-governed liquidity solvers", + // logo: `${baseIconsUrl}/garden.finance.jpg`, + // gecko_id: "garden-2", + // cmcId: null, + // chains: [], + // twitter: "garden_finance", + // }, { id: "parent#weero", name: "Weero", From 05a6ecd031b7ca64a3f4eac5ee0129c9806854d5 Mon Sep 17 00:00:00 2001 From: jarrydallison <90670725+jarrydallison@users.noreply.github.com> Date: Mon, 6 Oct 2025 09:15:38 -0600 Subject: [PATCH 121/398] feat: revert ylds to usd-coin while troubleshooting (#10755) --- coins/src/adapters/tokenMapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index 23471b1144..0b20218152 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -11917,7 +11917,7 @@ "symbol": "ueur.trading" }, "uylds.fcc": { - "to": "coingecko#ylds", + "to": "coingecko#usd-coin", "decimals": 6, "symbol": "uylds.fcc" }, From ebc888d5a41cfb489049b77bb5275d01364fe5df Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 6 Oct 2025 09:35:52 -0600 Subject: [PATCH 122/398] update listing and dimensions --- defi/DefiLlama-Adapters | 2 +- defi/dimension-adapters | 2 +- defi/emissions-adapters | 2 +- defi/src/protocols/data3.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/defi/DefiLlama-Adapters b/defi/DefiLlama-Adapters index 7ca5debbb0..88e0ba6535 160000 --- a/defi/DefiLlama-Adapters +++ b/defi/DefiLlama-Adapters @@ -1 +1 @@ -Subproject commit 7ca5debbb09e08d4e1a3a346a58e00337f1034cb +Subproject commit 88e0ba6535f339437dba4c20119e75d4d18594b1 diff --git a/defi/dimension-adapters b/defi/dimension-adapters index b80bd0898e..fbfad6e756 160000 --- a/defi/dimension-adapters +++ b/defi/dimension-adapters @@ -1 +1 @@ -Subproject commit b80bd0898efb857ae994ac050b1abc1e3f5e001c +Subproject commit fbfad6e7560bae9d6a1813f5bdd73b24f6f32dbf diff --git a/defi/emissions-adapters b/defi/emissions-adapters index b6bed644df..5a21f17d95 160000 --- a/defi/emissions-adapters +++ b/defi/emissions-adapters @@ -1 +1 @@ -Subproject commit b6bed644df05bbea8e1aeb654dc456a9f2e1ee63 +Subproject commit 5a21f17d952368e80eafbd65978bd6cf479c8db1 diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 9f676e936b..d9720c23f3 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -32679,7 +32679,7 @@ const data3_1: Protocol[] = [ dimensions: { fees: "garden", dexs: "garden", - "bridge-aggregators": "garden" + //"bridge-aggregators": "garden" } }, { From a94ebb6690235a8f603346d7baf9f885899652c8 Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 6 Oct 2025 10:10:32 -0600 Subject: [PATCH 123/398] add token --- defi/src/protocols/data3.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index d9720c23f3..77ac00b462 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -58520,7 +58520,7 @@ const data3_2: Protocol[] = [ id: "5181", name: "Limitless Exchange", address: null, - symbol: "-", + symbol: "LMTS", url: "https://limitless.exchange/", description: "Prediction market on Base", From 904f936308277057381b4ed30ed2f1dc0aec93ce Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 6 Oct 2025 10:11:51 -0600 Subject: [PATCH 124/398] fix parent --- defi/src/protocols/data3.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 77ac00b462..4993a38789 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -32674,7 +32674,7 @@ const data3_1: Protocol[] = [ module: "dummy.js", twitter: "garden_finance", audit_links: ["https://github.com/catalogfi/swapper/blob/main/audits/audit-01-ottersec.pdf"], - parentProtocol: "parent#garden", + //parentProtocol: "parent#garden", listedAt: 1706793085, dimensions: { fees: "garden", From a78690aa8248bfc22dedd10782f97b0f210eaa31 Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 6 Oct 2025 10:29:30 -0600 Subject: [PATCH 125/398] add gatelayer chain, projects and parent --- defi/src/protocols/data2.ts | 2 +- defi/src/protocols/data3.ts | 7 ++++--- defi/src/protocols/data4.ts | 21 +++++++++++++++++++++ defi/src/protocols/parentProtocols.ts | 11 +++++++++++ defi/src/utils/normalizeChain.ts | 13 ++++++++++++- 5 files changed, 49 insertions(+), 5 deletions(-) diff --git a/defi/src/protocols/data2.ts b/defi/src/protocols/data2.ts index 5f61113f4a..1d0553eb59 100644 --- a/defi/src/protocols/data2.ts +++ b/defi/src/protocols/data2.ts @@ -12412,7 +12412,7 @@ const data2: Protocol[] = [ treasury: "betswirl.js", cmcId: "18453", category: "Prediction Market", - chains: ["Binance", "Ethereum", "Polygon", "Arbitrum", "Avalanche"], + chains: ["Binance", "Polygon", "Arbitrum", "Avalanche"], oraclesBreakdown: [ { name: "Chainlink", type: "Primary", proof: []} ], forkedFrom: [], module: "betswirl/index.js", diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 4993a38789..2394c570a2 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -17845,13 +17845,13 @@ const data3_1: Protocol[] = [ }, { id: "3458", - name: "WoofSwap", + name: "WoofSwap Shibarium", address: null, symbol: "WOOF", url: "https://www.woofswap.finance", description: "The first ve(3,3) DEX on #Shibarium.", chain: "Shibarium", - logo: `${baseIconsUrl}/woofswap.png`, + logo: `${baseIconsUrl}/woofswap-shibarium.jpg`, audits: "0", audit_note: null, gecko_id: null, @@ -17859,8 +17859,9 @@ const data3_1: Protocol[] = [ category: "Dexs", chains: ["Shibarium"], module: "woofswap/index.js", - forkedFromIds: ["2197"], + forkedFromIds: ["1407"], twitter: "woofswap", + parentProtocol: "parent#woofswap", listedAt: 1693328565, }, { diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index b306574193..6452579704 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30144,5 +30144,26 @@ const data4: Protocol[] = [ fees: "tokos-fi" } }, + { + id: "6811", + name: "WoofSwap GateLayer", + address: null, + symbol: "WOOF", + url: "https://www.woofswap.finance", + description: "A ve(3,3) DEX on GateLayer.", + chain: "GateLayer", + logo: `${baseIconsUrl}/woofswap-gatelayer.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["GateLayer"], + module: "woofswap/index.js", + forkedFromIds: ["1407"], + twitter: "woofswap", + parentProtocol: "parent#woofswap", + listedAt: 1759767459, + }, ]; export default data4; diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index d8d50d6637..6d51dbfe73 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8098,6 +8098,17 @@ const parentProtocols: IParentProtocol[] = [ twitter: "Kinetiq_xyz", treasury: "kinetiq.js", }, + { + id: "parent#woofswap", + name: "WoofSwap", + url: "https://www.woofswap.finance/", + description: "WoofSwap is your all-in-one multichain DEX. - ve33 DEX.", + logo: `${baseIconsUrl}/woofswap.png`, + gecko_id: null, + cmcId: null, + chains: [], + twitter: "woofswap", + }, ]; export default parentProtocols; diff --git a/defi/src/utils/normalizeChain.ts b/defi/src/utils/normalizeChain.ts index 0d69d72d08..578e1b6215 100644 --- a/defi/src/utils/normalizeChain.ts +++ b/defi/src/utils/normalizeChain.ts @@ -4947,6 +4947,16 @@ export const chainCoingeckoIds = { github: ["mezo-org"], chainId: 31612, }, + "GateLayer": { + geckoId: null, + symbol: "GT", + cmcId: null, + categories: ["EVM", "Rollup", "Superchain"], + twitter: "gatechain_io", + url: "https://gatechain.io/gatelayer", + github: ["gatechain"], + chainId: 10088, + }, } as unknown as ChainCoinGekcoIds // We are creating the list here because, later in the code, we include historical chain labels with the same chain metadata, so, chainCoingeckoIds will have duplicate keys @@ -5160,7 +5170,8 @@ const chainLabelMap = { "camp": "Camp", "off_chain": "Off Chain", "zklighter": "zkLighter", - "goat": "Goat" + "goat": "Goat", + "gatelayer": "GateLayer" } as { [key: string]: string } // When we decide to change the display name of a chain, we add the mapping for the new name here From 87c7d230430e31df4aaf938b8e270fd9eac0f84a Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 6 Oct 2025 10:33:45 -0600 Subject: [PATCH 126/398] fix module for new woofswap listing --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 6452579704..c7101b1f58 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30159,7 +30159,7 @@ const data4: Protocol[] = [ cmcId: null, category: "Dexs", chains: ["GateLayer"], - module: "woofswap/index.js", + module: "woofswapGL/index.js", forkedFromIds: ["1407"], twitter: "woofswap", parentProtocol: "parent#woofswap", From df06eb0c992356884901a698fd569a77718b3588 Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 6 Oct 2025 12:21:33 -0600 Subject: [PATCH 127/398] add xone chain and swapx listing --- defi/src/protocols/data4.ts | 20 ++++++++++++++++++++ defi/src/utils/normalizeChain.ts | 13 ++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index c7101b1f58..1541a090c8 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30165,5 +30165,25 @@ const data4: Protocol[] = [ parentProtocol: "parent#woofswap", listedAt: 1759767459, }, + { + id: "6812", + name: "SwapX Xone Chain", + address: null, + symbol: "-", + url: "https://swapx.exchange/en", + description: "SwapX is a decentralized token exchange, providing users with a complete digital asset management solution.", + chain: "Xone Chain", + logo: `${baseIconsUrl}/swapx-xone-chain.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Xone Chain"], + module: "swapx/index.js", + forkedFromIds: ["2197"], + twitter: "SwapX009", + listedAt: 1759774769, + }, ]; export default data4; diff --git a/defi/src/utils/normalizeChain.ts b/defi/src/utils/normalizeChain.ts index 578e1b6215..1b84daf1e9 100644 --- a/defi/src/utils/normalizeChain.ts +++ b/defi/src/utils/normalizeChain.ts @@ -4957,6 +4957,16 @@ export const chainCoingeckoIds = { github: ["gatechain"], chainId: 10088, }, + "Xone Chain": { + geckoId: "xoc", + symbol: "XOC", + cmcId: null, + categories: [], + twitter: "xone_chain", + url: "https://xone.org/", + github: ["hello-xone"], + chainId: 3721, + }, } as unknown as ChainCoinGekcoIds // We are creating the list here because, later in the code, we include historical chain labels with the same chain metadata, so, chainCoingeckoIds will have duplicate keys @@ -5171,7 +5181,8 @@ const chainLabelMap = { "off_chain": "Off Chain", "zklighter": "zkLighter", "goat": "Goat", - "gatelayer": "GateLayer" + "gatelayer": "GateLayer", + "xone": "Xone Chain" } as { [key: string]: string } // When we decide to change the display name of a chain, we add the mapping for the new name here From 9b96ad5c3d5df185535935a17c809c8d83c6c858 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 6 Oct 2025 21:42:58 +0200 Subject: [PATCH 128/398] delist ibc tvl --- defi/src/protocols/data3.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 2394c570a2..3dd0625d7d 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -55576,7 +55576,8 @@ const data3_2: Protocol[] = [ category: "Bridge", chains: ["Cosmos"], forkedFrom: [], - module: "osmosis-ibc/index.js", + // module: "osmosis-ibc/index.js", + module: "dummy.js", // we are not tracking bridged assets as tvl for any other ibc chain, why do it only for osmosis? twitter: "IBCProtocol", listedAt: 1724778968 }, From 80f71a824ecf9777b6fe4f86863c33e661edf279 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 7 Oct 2025 00:15:02 +0100 Subject: [PATCH 129/398] Coins + Malformed DB script (#10765) * leadBTC * fix malformed db tvls * bluefin * stsupra * change script dir * euler filter * pendle filter * remove fluid entry * bad keys tvl write patch * LSULP * ubtc * third party patch * comments * hourly records --- coins/src/adapters/markets/bluefin.ts | 37 ++++++++++++++-- .../src/adapters/markets/fluidSmartLending.ts | 4 +- .../adapters/moneyMarkets/euler/eulerV2.ts | 17 +++++++- coins/src/adapters/tokenMapping.json | 22 +++++----- coins/src/adapters/yield/apiDerivs.ts | 11 +++++ coins/src/adapters/yield/pendle/pendle.ts | 31 ++++++-------- .../src/adapters/zeroDecimalTokenMapping.json | 17 ++++++++ defi/l2/adapters/thirdParty.ts | 4 +- defi/src/cli/removeBadTvlKeys.ts | 42 +++++++++++++++++++ defi/src/storeTvlInterval/getAndStoreTvl.ts | 2 +- 10 files changed, 146 insertions(+), 41 deletions(-) create mode 100644 defi/src/cli/removeBadTvlKeys.ts diff --git a/coins/src/adapters/markets/bluefin.ts b/coins/src/adapters/markets/bluefin.ts index d83930e424..ea8a488aba 100644 --- a/coins/src/adapters/markets/bluefin.ts +++ b/coins/src/adapters/markets/bluefin.ts @@ -27,6 +27,21 @@ type Pool = { price: number; }; +const metadatas: { [coinType: string]: { symbol: string; decimals: number } } = { + '0x66629328922d609cf15af779719e248ae0e63fe0b9d9739623f763b33a9c97da::esui::ESUI': { + symbol: 'eSUI', + decimals: 9, + }, + '0x244b98d29bd0bba401c7cfdd89f017c51759dad615e15a872ddfe45af079bb1d::ebtc::EBTC': { + symbol: 'eBTC', + decimals: 8, + }, + '0x68532559a19101b58757012207d82328e75fde7a696d20a59e8307c1a7f42ad7::egusdc::EGUSDC': { + symbol: 'eGUSDC', + decimals: 6, + }, +}; + export async function bluefin(timestamp: number) { if (timestamp !== 0) throw new Error("Can't fetch historical data"); @@ -104,7 +119,23 @@ export async function bluefin(timestamp: number) { ); } - return writes; -} -bluefin(0); // ts-node coins/src/adapters/markets/bluefin.ts + const { data: vaultsData } = await axios.get("https://vaults.api.sui-prod.bluefin.io/api/v1/vaults/coins/price"); + vaultsData.forEach(({ coinType, priceE9 }: { coinType: string; priceE9: number }) => { + const metadata = metadatas[coinType] + if (!metadata) return; + addToDBWritesList( + writes, + chain, + coinType, + priceE9 / 1e9, + metadata.decimals, + metadata.symbol, + timestamp, + "bluefin-vaults", + 0.8, + ); + }); + + return writes; +} \ No newline at end of file diff --git a/coins/src/adapters/markets/fluidSmartLending.ts b/coins/src/adapters/markets/fluidSmartLending.ts index 6e456a4d49..bb5486a65c 100644 --- a/coins/src/adapters/markets/fluidSmartLending.ts +++ b/coins/src/adapters/markets/fluidSmartLending.ts @@ -40,6 +40,4 @@ export async function fluidSmartLending(timestamp: number = 0) { ); return writes; -} - -fluidSmartLending(); // ts-node coins/src/adapters/markets/fluidSmartLending.ts +} \ No newline at end of file diff --git a/coins/src/adapters/moneyMarkets/euler/eulerV2.ts b/coins/src/adapters/moneyMarkets/euler/eulerV2.ts index 766b96a8ca..c2db6a6ad4 100644 --- a/coins/src/adapters/moneyMarkets/euler/eulerV2.ts +++ b/coins/src/adapters/moneyMarkets/euler/eulerV2.ts @@ -43,7 +43,7 @@ async function getEulerV2Tokens( return vaultDeploy.args[0]; // proxy }); - const [assets, sharePrice, symbols, dTokens] = await Promise.all([ + const [assets, sharePrice, symbols, dTokens, amounts] = await Promise.all([ sdk.api.abi.multiCall({ calls: vaultAddresses.map((address: any) => ({ target: address, @@ -80,6 +80,14 @@ async function getEulerV2Tokens( chain, permitFailure: true, }), + sdk.api.abi.multiCall({ + calls: vaultAddresses.map((address: any) => ({ + target: address, + })), + abi: vaultAbi.find((m: any) => m.name === "totalAssets"), + chain, + permitFailure: true, + }), ]); const marketData = assets.output.map((asset: any, i: number) => { @@ -89,6 +97,7 @@ async function getEulerV2Tokens( symbol: symbols.output[i].output, sharePrice: sharePrice.output[i].output / 1e18, dToken: dTokens.output[i].output, + amount: amounts.output[i].output, }; }); @@ -106,7 +115,11 @@ function formWrites( const coinData: CoinData | undefined = underlyingPrices[m.underlying.toLowerCase()]; const rate = m.sharePrice; - if (coinData == null || rate == null) return; + if (coinData == null || rate == null || !m.amount) return; + + const tvl = m.amount * coinData.price / 10 ** coinData.decimals; + if (tvl < 1e5) return; // filtering out small markets + const eTokenPrice: number = coinData.price * rate; if (eTokenPrice == 0) return; diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index 0b20218152..c4a633e404 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -1425,6 +1425,11 @@ } }, "bsc": { + "0x7cb8a5abf019983ed053484d5ad17f96fec56f28": { + "decimals": "8", + "symbol": "leadBTC", + "to": "coingecko#bitcoin" + }, "0x4baB31D6c557F8285eccB5167095147a36D9BaFa": { "decimals": "18", "symbol": "SPECTRA", @@ -3191,18 +3196,6 @@ "symbol": "BOLD" } }, - "radixdlt": { - "resource_rdx1tknxxxxxxxxxradxrdxxxxxxxxx009923554798xxxxxxxxxradxrd": { - "decimals": "0", - "symbol": "XRD", - "to": "coingecko#radix" - }, - "resource_rdx1th88qcj5syl9ghka2g9l7tw497vy5x6zaatyvgfkwcfe8n9jt2npww": { - "decimals": "0", - "symbol": "ETH", - "to": "coingecko#ethereum" - } - }, "darwinia": { "0xe7578598aac020abfb918f33a20fad5b71d670b4": { "to": "coingecko#darwinia-network-native-token", @@ -6750,6 +6743,11 @@ } }, "bsquared": { + "0x796e4D53067FF374B89b2Ac101ce0c1f72ccaAc2": { + "decimals": "18", + "symbol": "uBTC", + "to": "coingecko#bitcoin" + }, "0x0000000000000000000000000000000000000000": { "decimals": "18", "symbol": "BTC", diff --git a/coins/src/adapters/yield/apiDerivs.ts b/coins/src/adapters/yield/apiDerivs.ts index a238df6cfa..5ed0e975cd 100644 --- a/coins/src/adapters/yield/apiDerivs.ts +++ b/coins/src/adapters/yield/apiDerivs.ts @@ -301,6 +301,17 @@ const configs: { [adapter: string]: Config } = { decimals: "6", symbol: "ALP", }, + stSUPRA: { + rate: async () => { + const res = await fetch("https://api.solido.money/protocol/metrics").then((r) => r.json()); + return res.pricestSUPRA; + }, + chain: "supra", + address: "0x81846514536430ea934c7270f86cf5b067e2a2faef0e91379b4f284e91c7f53c::vault_core::VaultShare", + underlying: "0x1::supra_coin::SupraCoin", + decimals: "8", + symbol: "stSUPRA", + } }; export async function apiDerivs(timestamp: number) { diff --git a/coins/src/adapters/yield/pendle/pendle.ts b/coins/src/adapters/yield/pendle/pendle.ts index 3d37ae9e3e..beb7e8c440 100644 --- a/coins/src/adapters/yield/pendle/pendle.ts +++ b/coins/src/adapters/yield/pendle/pendle.ts @@ -315,30 +315,25 @@ async function getAllTokenInfos(chainId: number) { return rawAddr.split('-')[1]; } + function filterMarketData(resp: { markets: any[] }) { + const markets = resp.markets.filter((m: any) => (m.details?.liquidity ?? 0) > 1e5); // filtering out small markets + return markets.map((m: any) => ({ + lp: m.address, + sy: formatPendleAddr(m.sy), + pt: formatPendleAddr(m.pt), + yt: formatPendleAddr(m.yt), + lpWrapper: m.lpWrapper ? formatPendleAddr(m.lpWrapper) : undefined, + })); + } + { const resp = await getConfig(`pendle-v2/active-markets-${chainId}`, `https://api-v2.pendle.finance/core/v1/${chainId}/markets/active`) - markets.push( - ...resp.markets.map((m: any) => ({ - lp: m.address, - sy: formatPendleAddr(m.sy), - pt: formatPendleAddr(m.pt), - yt: formatPendleAddr(m.yt), - lpWrapper: m.lpWrapper ? formatPendleAddr(m.lpWrapper) : undefined, - })) - ) + markets.push(...filterMarketData(resp)) } { const resp = await getConfig(`pendle-v2/inactive-markets-${chainId}`, `https://api-v2.pendle.finance/core/v1/${chainId}/markets/inactive`) - markets.push( - ...resp.markets.map((m: any) => ({ - lp: m.address, - sy: formatPendleAddr(m.sy), - pt: formatPendleAddr(m.pt), - yt: formatPendleAddr(m.yt), - lpWrapper: m.lpWrapper ? formatPendleAddr(m.lpWrapper) : undefined, - })) - ) + markets.push(...filterMarketData(resp)) } return markets; } \ No newline at end of file diff --git a/coins/src/adapters/zeroDecimalTokenMapping.json b/coins/src/adapters/zeroDecimalTokenMapping.json index 32731786ca..77977274b1 100644 --- a/coins/src/adapters/zeroDecimalTokenMapping.json +++ b/coins/src/adapters/zeroDecimalTokenMapping.json @@ -47,5 +47,22 @@ "decimals": 0, "symbol": "TBILL" } + }, + "radixdlt": { + "resource_rdx1thksg5ng70g9mmy9ne7wz0sc7auzrrwy7fmgcxzel2gvp8pj0xxfmf": { + "decimals": "0", + "symbol": "LSULP", + "to": "coingecko#caviarnine-lsu-pool-lp" + }, + "resource_rdx1tknxxxxxxxxxradxrdxxxxxxxxx009923554798xxxxxxxxxradxrd": { + "decimals": "0", + "symbol": "XRD", + "to": "coingecko#radix" + }, + "resource_rdx1th88qcj5syl9ghka2g9l7tw497vy5x6zaatyvgfkwcfe8n9jt2npww": { + "decimals": "0", + "symbol": "ETH", + "to": "coingecko#ethereum" + } } } \ No newline at end of file diff --git a/defi/l2/adapters/thirdParty.ts b/defi/l2/adapters/thirdParty.ts index d60407c7cd..7d9cca888e 100644 --- a/defi/l2/adapters/thirdParty.ts +++ b/defi/l2/adapters/thirdParty.ts @@ -143,7 +143,7 @@ const layerzero = async (): Promise => { Object.keys(data[1]).map((chain: string) => { if (chain.endsWith("-testnet")) return; - if (!data[1][chain].chainDetails) return; + if (!data[1][chain].chainDetails || !data[1][chain].tokens) return; const { chainType, chainId, nativeChainId } = data[1][chain].chainDetails; if (chainType != "evm" && !nonEvmMapping[chain]) return @@ -153,7 +153,7 @@ const layerzero = async (): Promise => { if (!allChainKeys.includes(destinationChainSlug)) return; if (!addresses[destinationChainSlug]) addresses[destinationChainSlug] = []; - const tokens = Object.keys(data[1][chain].tokens).filter((t: string) => addresses[chain].indexOf(t.toLowerCase()) == -1 ); + const tokens = Object.keys(data[1][chain].tokens).filter((t: string) => addresses[destinationChainSlug].indexOf(t.toLowerCase()) == -1 ); addresses[destinationChainSlug].push(...tokens); }); diff --git a/defi/src/cli/removeBadTvlKeys.ts b/defi/src/cli/removeBadTvlKeys.ts new file mode 100644 index 0000000000..63e62ab917 --- /dev/null +++ b/defi/src/cli/removeBadTvlKeys.ts @@ -0,0 +1,42 @@ +import { getAllProtocolItems, saveProtocolItem } from "../api2/db"; +import { dailyRawTokensTvl, hourlyRawTokensTvl } from "../utils/getLastRecord"; +import { prefixMalformed } from "../storeTvlInterval/getAndStoreTvl"; +import { PromisePool } from "@supercharge/promise-pool"; + +const protocols = ["1791", "1972", "529", "5773", "6202"]; + +async function process(id: string, tvlFunc: Function) { + const rawTvls = await getAllProtocolItems(tvlFunc, id); + const newTvls: any[] = []; + rawTvls.map((rawTvl: any) => { + const newTvl: any = { SK: rawTvl.SK }; + + Object.keys(rawTvl).map((chain) => { + if (chain == "SK") return; + newTvl[chain] = {}; + + Object.keys(rawTvl[chain]).map((token) => { + if (!prefixMalformed(token)) newTvl[chain][token] = rawTvl[chain][token]; + else console.log(id, rawTvl.SK, chain, token); + }); + }); + + newTvls.push(newTvl); + }); + + await PromisePool.withConcurrency(5) + .for(newTvls) + .process(async (tvl) => { + await saveProtocolItem(tvlFunc, { id, timestamp: tvl.SK, data: tvl, overwriteExistingData: true }) + }) + + return; +} + +async function main() { + await Promise.all(protocols.map(p => process(p, dailyRawTokensTvl))); + await Promise.all(protocols.map(p => process(p, hourlyRawTokensTvl))); + +} + +main(); // ts-node defi/src/cli/removeBadTvlKeys.ts diff --git a/defi/src/storeTvlInterval/getAndStoreTvl.ts b/defi/src/storeTvlInterval/getAndStoreTvl.ts index d6c7d7bdb0..b14b5f4d75 100644 --- a/defi/src/storeTvlInterval/getAndStoreTvl.ts +++ b/defi/src/storeTvlInterval/getAndStoreTvl.ts @@ -159,7 +159,7 @@ function mergeBalances(key: string, storedKeys: string[], balancesObject: tvlsOb } } -function prefixMalformed(address: string) { +export function prefixMalformed(address: string) { const parts = address.split(':') if (parts.length < 3) return false if (address.indexOf(':coingecko:') != -1) return true From 262b64f92ff71132e51e83de9519cf31df72500e Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 6 Oct 2025 17:44:00 -0600 Subject: [PATCH 130/398] add new listings --- defi/src/protocols/data4.ts | 42 +++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 1541a090c8..3c7f2c2ee0 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30185,5 +30185,47 @@ const data4: Protocol[] = [ twitter: "SwapX009", listedAt: 1759774769, }, + { + id: "6813", + name: "Salsadex", + address: null, + symbol: "-", + url: "https://salsadex.com/", + description: "Salsadex is an interface for trading perps via Orderly.", + chain: "Orderly", + logo: `${baseIconsUrl}/salsadex.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Interface", + chains: ["Orderly"], + module: "dummy.js", + forkedFromIds: [], + twitter: "Salsadex_", + dimensions: { + fees: "salsadex" + } + }, + { + id: "6814", + name: "JUMPBOX.ETH", + address: "base:0x5B9957A7459347163881d19a87f6DC13291C2B07", + symbol: "JUMPBOX", + url: "https://www.jumpbox.tech/", + description: "JUMPBOX.ETH is a yield farming protocol on Base offering 124% APY through Uniswap V3 LP staking. Users provide JUMPBOX-WETH liquidity on Uniswap V3, deposit their positions into a Rebase-powered staking wrapper, and earn high yield.", + chain: "Base", + logo: `${baseIconsUrl}/jumpbox.eth.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Yield", + chains: ["Base"], + module: "jumpbox/index.js", + forkedFromIds: [], + twitter: "jumpbox_eth", + listedAt: 1759793858, + }, ]; export default data4; From 28065f89bc43a34a5dc6e4d9ba7904d0dd561b14 Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 6 Oct 2025 19:00:15 -0600 Subject: [PATCH 131/398] add new listings --- defi/src/protocols/data1.ts | 10 ++--- defi/src/protocols/data4.ts | 64 +++++++++++++++++++++++++++ defi/src/protocols/parentProtocols.ts | 12 +++++ 3 files changed, 81 insertions(+), 5 deletions(-) diff --git a/defi/src/protocols/data1.ts b/defi/src/protocols/data1.ts index 2bd48a5d95..22dbd737a1 100644 --- a/defi/src/protocols/data1.ts +++ b/defi/src/protocols/data1.ts @@ -6652,25 +6652,25 @@ const data: Protocol[] = [ }, { id: "397", - name: "ShibaSwap", + name: "ShibaSwap V1", address: "0x9813037ee2218799597d83d4a5b6f3b6778218d9", symbol: "BONE", url: "https://shibaswap.com", description: "SHIB, LEASH, and BONE, come together to create ShibaSwap, the next evolution in DeFi platforms. ShibaSwap gives users the ability to DIG (provide liquidity), BURY (stake), and SWAP tokens to gain WOOF Returns through our sophisticated and innovative passive income reward system.", chain: "Ethereum", - logo: `${baseIconsUrl}/shibaswap.jpg`, + logo: `${baseIconsUrl}/shibaswap-v1.jpg`, audits: "2", audit_note: null, - gecko_id: "bone-shibaswap", - cmcId: "11865", + gecko_id: null, + cmcId: null, category: "Dexs", chains: ["Ethereum"], module: "shibaswap/index.js", twitter: "ShibaSwapDEX", audit_links: ["https://www.certik.org/projects/shib"], forkedFromIds: ["2197"], - governanceID: ["snapshot:shiba-swap.eth"], + parentProtocol: "parent#shibaswap", dimensions: { fees: "shibaswap", dexs: "shibaswap" diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 3c7f2c2ee0..92adfd0679 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30227,5 +30227,69 @@ const data4: Protocol[] = [ twitter: "jumpbox_eth", listedAt: 1759793858, }, + { + id: "6815", + name: "ShibaSwap V2", + address: "0x9813037ee2218799597d83d4a5b6f3b6778218d9", + symbol: "BONE", + url: "https://shibaswap.com", + description: + "SHIB, LEASH, and BONE, come together to create ShibaSwap, the next evolution in DeFi platforms. ShibaSwap gives users the ability to DIG (provide liquidity), BURY (stake), and SWAP tokens to gain WOOF Returns through our sophisticated and innovative passive income reward system.", + chain: "Ethereum", + logo: `${baseIconsUrl}/shibaswap-v2.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Ethereum", "Shibarium"], + module: "shibaswap-v2/index.js", + twitter: "ShibaSwapDEX", + audit_links: ["https://www.certik.org/projects/shib"], + forkedFromIds: ["2198"], + parentProtocol: "parent#shibaswap", + listedAt: 1759797783, + }, + { + id: "6816", + name: "Solid Yield", + address: null, + symbol: "-", + url: "https://solid.xyz", + description: "Decentralized banking platform that converts deposits into SoUSD, a yield-bearing digital dollar that automatically earns returns across trusted DeFi protocols.", + chain: "Ethereum", + logo: `${baseIconsUrl}/solid-yield.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Yield", + chains: ["Ethereum", "Fuse"], + module: "solid-yield/index.js", + forkedFromIds: ["5825"], + twitter: "SolidYield", + audit_links: ["https://docs.solid.xyz/safety-and-trust/security-and-audits#audits"], + listedAt: 1759797789, + }, + { + id: "6817", + name: "PunkStrategy", + address: "0xc50673edb3a7b94e8cad8a7d4e0cd68864e33edf", + symbol: "PNKSTR", + url: "https://www.punkstrategy.fun/", + description: "PunkStrategy is an automated NFT-linked protocol where trading fees in PNKSTR fuel the purchase of CryptoPunks, which are relisted and, upon sale, recycled ETH to buy and burn PNKSTR, creating perpetual exposure to the Punk floor.", + chain: "Ethereum", + logo: `${baseIconsUrl}/punkstrategy.jpg`, + audits: "0", + audit_note: null, + gecko_id: "punkstrategy", + cmcId: null, + category: "NFT Automated Strategies", + chains: ["Ethereum"], + module: "punk-strategy/index.js", + forkedFromIds: [], + twitter: "token_works", + listedAt: 1759798239, + }, ]; export default data4; diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index 6d51dbfe73..2e203ba229 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8109,6 +8109,18 @@ const parentProtocols: IParentProtocol[] = [ chains: [], twitter: "woofswap", }, + { + id: "parent#shibaswap", + name: "ShibaSwap", + url: "https://www.shibaswap.com/", + description: "SHIB, LEASH, and BONE, come together to create ShibaSwap, the next evolution in DeFi platforms. ShibaSwap gives users the ability to DIG (provide liquidity), BURY (stake), and SWAP tokens to gain WOOF Returns through our sophisticated and innovative passive income reward system..", + logo: `${baseIconsUrl}/shibaswap.jpg`, + gecko_id: "bone-shibaswap", + cmcId: "11865", + chains: [], + twitter: "ShibaSwapDEX", + governanceID: ["snapshot:shiba-swap.eth"], + }, ]; export default parentProtocols; From 9e24b7fe5948d26c11b2699bd1cd3703ffb040cf Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 6 Oct 2025 19:01:05 -0600 Subject: [PATCH 132/398] enable fees for punkstrategy --- defi/src/protocols/data4.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 92adfd0679..ebcf91bfca 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30290,6 +30290,9 @@ const data4: Protocol[] = [ forkedFromIds: [], twitter: "token_works", listedAt: 1759798239, + dimensions: { + fees: "punk-strategy" + } }, ]; export default data4; From 6dbc256af833810972a6c2b4fd5e75709873ecec Mon Sep 17 00:00:00 2001 From: Deantoshi <141426562+Deantoshi@users.noreply.github.com> Date: Tue, 7 Oct 2025 00:48:27 -0400 Subject: [PATCH 133/398] Updated Arrow Markets description (#10769) Co-authored-by: DeanToshi <0xdeantoshi@gmail.com> --- defi/src/protocols/data3.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 3dd0625d7d..d86bab7fe4 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -53247,7 +53247,7 @@ const data3_2: Protocol[] = [ symbol: "ARROW", url: "https://arrow.markets", description: - "Arrow Markets is a cutting-edge options platform that revolutionizes trading by seamlessly integrating an innovative RFQ system", + "We are the first Hybrid Options platform, seamlessly fusing CeFi convenience with DeFi transparency. NO complexity, ALL opportunity #CatchTheArrow", chain: "Avalanche", logo: `${baseIconsUrl}/arrow-markets.png`, audits: "0", From 2232dc63b93b1a36dee3e70ef52988cd147222b6 Mon Sep 17 00:00:00 2001 From: Sid Date: Tue, 7 Oct 2025 10:19:41 +0530 Subject: [PATCH 134/398] add eOracle to Telos Consilium on Plasma (#10766) * chore: add eOracle to Telos Consilium on Plasma * add proof link --------- Co-authored-by: Real Shaman <85087525+realdealshaman@users.noreply.github.com> --- defi/src/protocols/data4.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index ebcf91bfca..2cb2a9dff0 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29564,6 +29564,14 @@ const data4: Protocol[] = [ chains: ["Plasma"], module: "telosc/index.js", twitter: "TelosConsilium", + oraclesBreakdown: [ + { + name: "eOracle", + type: "Primary", + proof: ["https://github.com/DefiLlama/defillama-server/pull/10766], + chains: [{ chain: "Plasma" }], + }, + ], forkedFromIds: [], listedAt: 1759244012 }, From 68aa452951a8cea6ea2b98339d279c8e05c54976 Mon Sep 17 00:00:00 2001 From: tree Date: Tue, 7 Oct 2025 10:22:47 +0530 Subject: [PATCH 135/398] delist aster fees (#10762) * delist aster fees there is no way to verify the fees atm, so delisting them until we can find some way to get the fees data. * add description --------- Co-authored-by: Real Shaman <85087525+realdealshaman@users.noreply.github.com> --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 2cb2a9dff0..d097c82f70 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -28238,7 +28238,7 @@ const data4: Protocol[] = [ oraclesBreakdown: [ { name: "Pyth", type: "Primary", proof: [] } ], parentProtocol: "parent#astherus", dimensions: { - fees: "apollox", + // fees: "apollox", atm there is no way to verify the fees, so delisting them until we can find some way to get the fees data // derivatives: "apollox", "open-interest": "apollox" } From e7be67bb5cffe61ed8e3337892bffd978cbf570d Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 6 Oct 2025 22:57:47 -0600 Subject: [PATCH 136/398] fix proof link --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index d097c82f70..284b186084 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29568,7 +29568,7 @@ const data4: Protocol[] = [ { name: "eOracle", type: "Primary", - proof: ["https://github.com/DefiLlama/defillama-server/pull/10766], + proof: ["https://github.com/DefiLlama/defillama-server/pull/10766"], chains: [{ chain: "Plasma" }], }, ], From 8be2f52c9d50bf53d415ecdeb97d1547d1bc4ca1 Mon Sep 17 00:00:00 2001 From: tree Date: Tue, 7 Oct 2025 13:30:31 +0530 Subject: [PATCH 137/398] Revert "delist aster fees (#10762)" (#10771) This reverts commit 68aa452951a8cea6ea2b98339d279c8e05c54976. --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 284b186084..79087bea7a 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -28238,7 +28238,7 @@ const data4: Protocol[] = [ oraclesBreakdown: [ { name: "Pyth", type: "Primary", proof: [] } ], parentProtocol: "parent#astherus", dimensions: { - // fees: "apollox", atm there is no way to verify the fees, so delisting them until we can find some way to get the fees data + fees: "apollox", // derivatives: "apollox", "open-interest": "apollox" } From 02ce6c9cd143fbeb8b5e5006395a7f0e3679811d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 7 Oct 2025 11:16:03 +0200 Subject: [PATCH 138/398] update @defillama/sdk --- defi/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/defi/package-lock.json b/defi/package-lock.json index 9a6161160a..7a319c480b 100644 --- a/defi/package-lock.json +++ b/defi/package-lock.json @@ -3376,9 +3376,9 @@ "link": true }, "node_modules/@defillama/sdk": { - "version": "5.0.172", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.172.tgz", - "integrity": "sha512-0ICEIle3TvV8DNMytrssNRnjFKwLgK54hpypsCrgEGZ4O+f6U4fq7D09M9kJmfk44XTCVgEUWFWnQX4ODVogiA==", + "version": "5.0.173", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.173.tgz", + "integrity": "sha512-gU9wq5Pepjv32fmJe0Z6ZzrIynzUPGVxxglo8WdA2hwbCjcbGjCA0Ee433qzVeNROaZOUOMBc/TMulwrfc45pQ==", "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", From 061a16d5d06320d9778d0583484e10c3ee42f06a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 7 Oct 2025 11:16:35 +0200 Subject: [PATCH 139/398] update @defillama/sdk --- coins/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/coins/package-lock.json b/coins/package-lock.json index b32f019f08..244b126bf3 100644 --- a/coins/package-lock.json +++ b/coins/package-lock.json @@ -2697,9 +2697,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.172", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.172.tgz", - "integrity": "sha512-0ICEIle3TvV8DNMytrssNRnjFKwLgK54hpypsCrgEGZ4O+f6U4fq7D09M9kJmfk44XTCVgEUWFWnQX4ODVogiA==", + "version": "5.0.173", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.173.tgz", + "integrity": "sha512-gU9wq5Pepjv32fmJe0Z6ZzrIynzUPGVxxglo8WdA2hwbCjcbGjCA0Ee433qzVeNROaZOUOMBc/TMulwrfc45pQ==", "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", From a771755ad96fbad0ef617691d45c7191cb726dc1 Mon Sep 17 00:00:00 2001 From: Define101 Date: Tue, 7 Oct 2025 10:43:11 +0100 Subject: [PATCH 140/398] morpho new names --- defi/src/protocols/data2.ts | 10 ++++++---- defi/src/protocols/data3.ts | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/defi/src/protocols/data2.ts b/defi/src/protocols/data2.ts index 1d0553eb59..6901e27a06 100644 --- a/defi/src/protocols/data2.ts +++ b/defi/src/protocols/data2.ts @@ -14370,14 +14370,15 @@ const data2: Protocol[] = [ }, { id: "1997", - name: "Morpho Compound", + name: "Morpho V0 CompoundV2", + previousNames: ["Morpho Compound"], address: "0x58D97B57BB95320F9a05dC918Aef65434969c2B2", symbol: "MORPHO", url: "https://compound.morpho.org/?network=mainnet", description: "Morpho Compound is an on-chain peer-to-peer layer on top of lending pools. Rates are seamlessly improved for borrowers and lenders while preserving the same guarantees.", chain: "Ethereum", - logo: `${baseIconsUrl}/morpho-compound.png`, + logo: `${baseIconsUrl}/morpho-v0-compoundv2.png`, audits: "2", audit_note: null, gecko_id: null, @@ -18446,14 +18447,15 @@ const data2: Protocol[] = [ }, { id: "2168", - name: "Morpho Aave", + name: "Morpho V0 AaveV2", + previousNames: ["Morpho Aave"], address: "0x58D97B57BB95320F9a05dC918Aef65434969c2B2", symbol: "MORPHO", url: "https://aavev2.morpho.org/?network=mainnet", description: "Morpho AaveV2 is an on-chain peer-to-peer layer on top of lending pools. Rates are seamlessly improved for borrowers and lenders while preserving the same guarantees.", chain: "Ethereum", - logo: `${baseIconsUrl}/morpho-aave.png`, + logo: `${baseIconsUrl}/morpho-v0-aavev2.png`, audits: "2", audit_note: null, gecko_id: null, diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index d86bab7fe4..cc0b26f7c3 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -7384,14 +7384,15 @@ const data3_1: Protocol[] = [ }, { id: "3014", - name: "Morpho AaveV3", + name: "Morpho V0 AaveV3", + previousNames: ["Morpho AaveV3"], address: "0x58D97B57BB95320F9a05dC918Aef65434969c2B2", symbol: "MORPHO", url: "https://aavev3.morpho.org/", description: "Morpho's AaveV3-ETH Optimizer allows WETH-only transactions in ETH efficiency mode. It offers high-leverage WETH borrowing using stETH, USDC, WBTC, and DAI as collateral", chain: "Ethereum", - logo: `${baseIconsUrl}/morpho-aavev3.png`, + logo: `${baseIconsUrl}/morpho-v0-aavev3.png`, audits: "2", audit_note: null, gecko_id: null, @@ -31115,13 +31116,14 @@ const data3_1: Protocol[] = [ }, { id: "4025", - name: "Morpho Blue", + name: "Morpho V1", + previousNames: ["Morpho Blue"], address: "0x58D97B57BB95320F9a05dC918Aef65434969c2B2", symbol: "MORPHO", url: "https://app.morpho.org", description: "Morpho Blue is a trustless and efficient lending primitive with permissionless market creation", chain: "Ethereum", - logo: `${baseIconsUrl}/morpho-blue.png`, + logo: `${baseIconsUrl}/morpho-v1.png`, audits: "2", audit_note: null, gecko_id: null, From 39808ba351eba1f838acd188bcd5290db81cf5b5 Mon Sep 17 00:00:00 2001 From: Thomas Sileghem Date: Tue, 7 Oct 2025 12:48:13 +0100 Subject: [PATCH 141/398] add SolvBTC.JUP to BOB (#10543) --- coins/src/adapters/tokenMapping.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index c4a633e404..37530fffe7 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -6990,6 +6990,11 @@ "to": "coingecko#babylon", "decimals": 6, "symbol": "BABY" + }, + "0x6b062aa7f5fc52b530cb13967ae2e6bc0d8dd3e4": { + "to": "coingecko#solv-protocol-solvbtc-jupiter", + "decimals": 18, + "symbol": "SolvBTC.JUP" } }, "xlayer": { From 943fe14ef692b259ae67778447082ee05d7a2fc0 Mon Sep 17 00:00:00 2001 From: petuchi-fi <153811298+petuchi-fi@users.noreply.github.com> Date: Tue, 7 Oct 2025 14:49:43 +0300 Subject: [PATCH 142/398] fix: correct coin decimals when calculating the pool TVL (#10705) --- .../src/adapters/markets/crosscurve/index.ts | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/coins/src/adapters/markets/crosscurve/index.ts b/coins/src/adapters/markets/crosscurve/index.ts index 2c04bf72eb..3b5e1b1d5c 100644 --- a/coins/src/adapters/markets/crosscurve/index.ts +++ b/coins/src/adapters/markets/crosscurve/index.ts @@ -84,6 +84,11 @@ export async function crosscurve(timestamp: number = 0) { > = {}; const allTokens = Object.values(config).flatMap((chain) => chain.tokens); + const chainTokens: Record> = {}; + allTokens.forEach((token) => { + chainTokens[token.chainId] ??= {}; + chainTokens[token.chainId][token.address.toLowerCase()] = token; + }); await Promise.all( Object.values(config).map(async (chainConfig) => { @@ -269,26 +274,34 @@ export async function crosscurve(timestamp: number = 0) { let tvl = 0; for (let j = 0; j < coins.length; j++) { - const coin = coins[j]; + const coin = coins[j].toLowerCase(); const balance = balances[i][j]; + const token = chainTokens[chainId][coin]; + + if (!token) { + console.warn( + `Token not found for coin: ${coin} on chain ${chainId}` + ); + return; + } let price = prices.find( - (data) => data.address.toLowerCase() === coin.toLowerCase() + (data) => data.address.toLowerCase() === coin )?.price; if (!price) { - price = synthPrices[chainId]?.[coin.toLowerCase()]; + price = synthPrices[chainId]?.[coin]; } if (!price) { - price = lpPrices[chainId]?.[coin.toLowerCase()]; + price = lpPrices[chainId]?.[coin]; } if (!price) { return; } - tvl += (balance / 10 ** lp.decimals) * price; + tvl += (balance / 10 ** token.decimals) * price; } const price = tvl / (supplies[i] / 10 ** lp.decimals); From 70486db0ee804c1c5948ef68de91f0f4e90ad006 Mon Sep 17 00:00:00 2001 From: oromp1812 <154218438+oromp1812@users.noreply.github.com> Date: Tue, 7 Oct 2025 18:50:41 +0700 Subject: [PATCH 143/398] add BtcUsd token mapping (#10772) --- coins/src/adapters/tokenMapping.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index 37530fffe7..216c7c0ab7 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -10310,6 +10310,11 @@ "to": "coingecko#usd-coin", "decimals": 6, "symbol": "USDC" + }, + "0x4Cda2D683E3AF90ea50855008BdB15D9454527B7": { + "to": "coingecko#bitcoin-usd-btcfi", + "decimals": 18, + "symbol": "BtcUSD" } }, "hsk": { @@ -12210,7 +12215,7 @@ "decimals": 8, "symbol": "0x4548a3bcb3c2b5ce42bf0559b1cf2f1ec97a51d0" } - }, + }, "gatelayer": { "0x6803b8e93b13941f6b73b82e324b80251b3de338": { "to": "coingecko#gatechain-token", From abcfe2a2cd3a9b7324a86b105c573d1660270246 Mon Sep 17 00:00:00 2001 From: Define101 Date: Tue, 7 Oct 2025 14:20:22 +0100 Subject: [PATCH 144/398] remove PunkStrategy fees --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 79087bea7a..6c4cc0b603 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30299,7 +30299,7 @@ const data4: Protocol[] = [ twitter: "token_works", listedAt: 1759798239, dimensions: { - fees: "punk-strategy" + // fees: "punk-strategy" } }, ]; From 86cb1f74b0c06a775821867cbb1144a558133add Mon Sep 17 00:00:00 2001 From: Define101 Date: Tue, 7 Oct 2025 14:52:50 +0100 Subject: [PATCH 145/398] remove PunkStrategy listing --- defi/src/protocols/data4.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 6c4cc0b603..a588e1ad1d 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30279,6 +30279,7 @@ const data4: Protocol[] = [ audit_links: ["https://docs.solid.xyz/safety-and-trust/security-and-audits#audits"], listedAt: 1759797789, }, + /* { id: "6817", name: "PunkStrategy", @@ -30302,5 +30303,6 @@ const data4: Protocol[] = [ // fees: "punk-strategy" } }, + */ ]; export default data4; From b99f61c03eca466f5de313e1f6ae29ee8866bff1 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 7 Oct 2025 15:20:49 +0100 Subject: [PATCH 146/398] 7 Oct Commits (#10773) * remove osmosis from bridged TVL * USD1 * fUSDe * goblin * goblin support mappings * comments --- coins/src/adapters/index.ts | 1 + coins/src/adapters/markets/goblin.ts | 86 +++++++++++++++++++ coins/src/adapters/tokenMapping.json | 20 +++++ coins/src/adapters/yield/misc4626/tokens.json | 3 +- defi/l2/constants.ts | 2 +- 5 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 coins/src/adapters/markets/goblin.ts diff --git a/coins/src/adapters/index.ts b/coins/src/adapters/index.ts index da384bdfe1..f3d643f109 100644 --- a/coins/src/adapters/index.ts +++ b/coins/src/adapters/index.ts @@ -170,4 +170,5 @@ export default { fluidSmartLending: require("./markets/fluidSmartLending"), rhea: require("./markets/rhea"), bracket: require("./yield/bracket"), + goblin: require("./markets/goblin"), }; diff --git a/coins/src/adapters/markets/goblin.ts b/coins/src/adapters/markets/goblin.ts new file mode 100644 index 0000000000..918bd21ff7 --- /dev/null +++ b/coins/src/adapters/markets/goblin.ts @@ -0,0 +1,86 @@ +import axios from "axios"; +import { + addToDBWritesList, + getTokenAndRedirectDataMap, +} from "../utils/database"; +import { Write } from "../utils/dbInterfaces"; +import { PromisePool } from "@supercharge/promise-pool"; + +const decimals = 8; +const supplyQuery = 1000000; + +export async function goblin(timestamp: number = 0) { + if (timestamp != 0) + throw new Error("Goblin adapter only supports timestamp = 0"); + + const { + data: { + data: { vault }, + }, + } = await axios.post("https://api.hyperion.xyz/v1/graphql", { + query: `query fetchAllVaultQuery { + vault { tokenA tokenB vaultId vaultName } + }`, + }); + + const underlyingAssets: string[] = []; + vault.map((v: any) => { + underlyingAssets.push(v.tokenA, v.tokenB); + }); + + const underlyingTokenData = await getTokenAndRedirectDataMap( + underlyingAssets, + "aptos", + timestamp + ); + + const writes: Write[] = []; + await PromisePool.withConcurrency(5) + .for(vault) + .process(async (v: any) => { + const balances = await fetch( + `https://api.mainnet.aptoslabs.com/v1/view`, + { + method: "POST", + body: JSON.stringify({ + function: `0x19bcbcf8e688fd5ddf52725807bc8bf455a76d4b5a6021cfdc4b5b2652e5cd55::vaults::get_token_amount_by_share`, + type_arguments: [], + arguments: [v.vaultId, supplyQuery.toString()], + }), + headers: { + "Content-Type": "application/json", + }, + } + ).then((res) => res.json()); + + if (!balances.length) return; + + if (!underlyingTokenData[v.tokenA] || !underlyingTokenData[v.tokenB]) + return; + + const aumA = + (balances[0] * underlyingTokenData[v.tokenA].price) / + 10 ** underlyingTokenData[v.tokenA].decimals; + const aumB = + (balances[1] * underlyingTokenData[v.tokenB].price) / + 10 ** underlyingTokenData[v.tokenB].decimals; + + const price = (aumA + aumB) / (supplyQuery / 10 ** decimals); + + addToDBWritesList( + writes, + "aptos", + v.vaultId, + price, + decimals, + `GoblinLP-${underlyingTokenData[v.tokenA].symbol}-${ + underlyingTokenData[v.tokenB].symbol + }-${v.vaultName}`, + timestamp, + "goblin", + 0.9 + ); + }); + + return writes; +} \ No newline at end of file diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index 216c7c0ab7..40e66df9b0 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -2808,6 +2808,26 @@ } }, "aptos": { + "0x000000000000000000000000000000000000000000000000000000000000000a": { + "decimals": "8", + "symbol": "APT", + "to": "coingecko#aptos" + }, + "0xf764dbfd6999067ac052a8e722ae359bec389bd7dba19ead586801b99b81b075": { + "decimals": "8", + "symbol": "uniBTC", + "to": "coingecko#universal-btc" + }, + "0xf599112bc3a5b6092469890d6a2f353f485a6193c9d36626b480704467d3f4c8": { + "decimals": "8", + "symbol": "aBTC", + "to": "coingecko#abtc" + }, + "0x5fabd1b12e39967a3c24e91b7b8f67719a6dacee74f3c8b9fb7d93e855437d2": { + "decimals": "6", + "symbol": "USD1", + "to": "coingecko#usd1-wlfi" + }, "0x6dba1728c73363be1bdd4d504844c40fbb893e368ccbeff1d1bd83497dbc756d": { "decimals": "8", "symbol": "PROPS", diff --git a/coins/src/adapters/yield/misc4626/tokens.json b/coins/src/adapters/yield/misc4626/tokens.json index 037f0a1b7e..2cb349838b 100644 --- a/coins/src/adapters/yield/misc4626/tokens.json +++ b/coins/src/adapters/yield/misc4626/tokens.json @@ -262,6 +262,7 @@ "fUSDT0": "0x1dd4b13fcae900c60a350589be8052959d2ed27b", "k3USDT": "0xe818ad0d20d504c55601b9d5e0e137314414dec4", "Re7USDT0Core": "0xa5eed1615cd883dd6883ca3a385f525e3beb4e79", - "hyperEulerUSDT": "0x66bE42a0BdA425A8C3b3c2cF4F4Cb9EDfcAEd21d" + "hyperEulerUSDT": "0x66bE42a0BdA425A8C3b3c2cF4F4Cb9EDfcAEd21d", + "fUSDe": "0xd8f824d4252caE7d5E49B95d47B0EfAfe6f2d570" } } \ No newline at end of file diff --git a/defi/l2/constants.ts b/defi/l2/constants.ts index af5ff67917..2f3f24a7c4 100644 --- a/defi/l2/constants.ts +++ b/defi/l2/constants.ts @@ -82,7 +82,7 @@ export const canonicalBridgeIds: { [id: string]: Chain } = { "4124": "merlin", "4937": "reya", // "5011": "lisk l2", - "5055": "osmosis", + // "5055": "osmosis", "5011": "lisk", "5232": "sui", "5218": "mint", From 731e6568b73f581f79179bbfffda0670054b1760 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 7 Oct 2025 08:51:38 -0600 Subject: [PATCH 147/398] add rooster v2 listing and parent --- defi/DefiLlama-Adapters | 2 +- defi/src/protocols/data4.ts | 29 +++++++++++++++++++++++++-- defi/src/protocols/parentProtocols.ts | 11 ++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/defi/DefiLlama-Adapters b/defi/DefiLlama-Adapters index 88e0ba6535..89e23794ff 160000 --- a/defi/DefiLlama-Adapters +++ b/defi/DefiLlama-Adapters @@ -1 +1 @@ -Subproject commit 88e0ba6535f339437dba4c20119e75d4d18594b1 +Subproject commit 89e23794ff383b865f80d89f2c6870776a71c39b diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index a588e1ad1d..bf91b1bfb7 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -3491,7 +3491,7 @@ const data4: Protocol[] = [ }, { id: "5704", - name: "Rooster Protocol", + name: "Rooster Protocol V1", address: null, // none (pre-tge) symbol: "-", @@ -3499,7 +3499,7 @@ const data4: Protocol[] = [ description: "Rooster Protocol is the liquidity hub for real-world assets on Plume Network. Built with the innovative Dynamic Distribution AMM by Maverick Protocol and a ve(3,3) Flywheel, Rooster enables efficient liquidity with built-in on-chain rewards", chain: "Plume (Deprecated)", - logo: `${baseIconsUrl}/rooster-protocol.png`, + logo: `${baseIconsUrl}/rooster-protocol-v1.jpg`, audits: "2", audit_note: null, gecko_id: null, @@ -3513,6 +3513,7 @@ const data4: Protocol[] = [ ], forkedFromIds: ["4752"], listedAt: 1738203899, + parentProtocol: "parent#rooster-protocol", dimensions: { fees: "rooster", dexs: "rooster" @@ -30304,5 +30305,29 @@ const data4: Protocol[] = [ } }, */ + { + id: "6818", + name: "Rooster Protocol V2", + address: null, + // none (pre-tge) + symbol: "-", + url: "https://www.rooster-protocol.xyz/", + description: + "Rooster Protocol is the liquidity hub for real-world assets on Plume Network. Built with the innovative Dynamic Distribution AMM by Maverick Protocol and a ve(3,3) Flywheel, Rooster enables efficient liquidity with built-in on-chain rewards", + chain: "Plume Mainnet", + logo: `${baseIconsUrl}/rooster-protocol-v2.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Plume Mainnet"], + module: "rooster/index.js", + twitter: "roosterprotocol", + audit_links: [], + forkedFromIds: ["3710"], + listedAt: 1759848161, + parentProtocol: "parent#rooster-protocol", + }, ]; export default data4; diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index 2e203ba229..726c17baed 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8121,6 +8121,17 @@ const parentProtocols: IParentProtocol[] = [ twitter: "ShibaSwapDEX", governanceID: ["snapshot:shiba-swap.eth"], }, + { + id: "parent#rooster-protocol", + name: "Rooster Protocol", + url: "https://www.rooster-protocol.xyz/", + description: "SHIB, LEASH, and BONE, come together to create ShibaSwap, the next evolution in DeFi platforms. ShibaSwap gives users the ability to DIG (provide liquidity), BURY (stake), and SWAP tokens to gain WOOF Returns through our sophisticated and innovative passive income reward system..", + logo: `${baseIconsUrl}/rooster-protocol.png`, + gecko_id: null, + cmcId: null, + chains: [], + twitter: "roosterprotocol", + }, ]; export default parentProtocols; From f1e497d9d010014f56aefc11e774d3982e62ba81 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 7 Oct 2025 15:40:13 -0600 Subject: [PATCH 148/398] enable fees --- defi/src/protocols/data3.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index cc0b26f7c3..d379f0a6c1 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -65055,7 +65055,10 @@ const data3_2: Protocol[] = [ module: "upshift/index.js", twitter: "upshift_fi", audit_links: ["https://docs.upshift.finance/architecture/smart-contract-audits"], - listedAt: 1733311923 + listedAt: 1733311923, + dimensions: { + fees: "upshift" + } }, { id: "5461", From 75c5fc6b60e5fc7c255b9294a683f933b7f63e25 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 7 Oct 2025 15:40:53 -0600 Subject: [PATCH 149/398] enable fees --- defi/src/protocols/data4.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index bf91b1bfb7..a411cffea3 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29899,7 +29899,10 @@ const data4: Protocol[] = [ twitter: "LeadFiOfficial", forkedFromIds: [], github: ["leadfi"], - listedAt: 1759340419 + listedAt: 1759340419, + dimensions: { + fees: "LeadFi-leadBTC" + } }, { id: "6800", From f7ab63fe17610cb6892e58bca8627c0a83a8359d Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 7 Oct 2025 15:45:03 -0600 Subject: [PATCH 150/398] enable dimensions adapters --- defi/src/protocols/data2.ts | 6 +++++- defi/src/protocols/data4.ts | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data2.ts b/defi/src/protocols/data2.ts index 6901e27a06..1bfbb3a85e 100644 --- a/defi/src/protocols/data2.ts +++ b/defi/src/protocols/data2.ts @@ -3558,7 +3558,8 @@ const data2: Protocol[] = [ }, ], dimensions: { - derivatives: "01-exchange" + derivatives: "01-exchange", + fees: "o1-exchange" }, }, { @@ -26806,6 +26807,9 @@ const data2: Protocol[] = [ forkedFrom: [], governanceID: ["eip155:1:0x6f3E6272A167e8AcCb32072d08E0957F9c79223d"], github: ["nounsDAO"], + dimensions: { + fees: "nouns" + } }, { id: "2523", diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index a411cffea3..1b3d65d31c 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30261,6 +30261,9 @@ const data4: Protocol[] = [ forkedFromIds: ["2198"], parentProtocol: "parent#shibaswap", listedAt: 1759797783, + dimensions: { + dexs: "shibaswap-v2" + } }, { id: "6816", From 17394dc55dc8e16391813d453058dab0798337c3 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 7 Oct 2025 16:29:46 -0600 Subject: [PATCH 151/398] add new listings --- defi/src/protocols/data4.ts | 54 +++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 1b3d65d31c..d62e053e85 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30335,5 +30335,59 @@ const data4: Protocol[] = [ listedAt: 1759848161, parentProtocol: "parent#rooster-protocol", }, + { + id: "6819", + name: "Quanto", + address: null, + symbol: "-", + url: "https://quanto.trade/en", + description: + "Quanto is a derivatives exchange for memecoin futures and perpetuals, allowing up to 100x leverage and denominate/settle trades entirely using its native token QTO", + chain: "Solana", + logo: `${baseIconsUrl}/quanto.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Derivatives", + chains: ["Solana"], + module: "dummy.js", + twitter: "quanto", + audit_links: [], + forkedFromIds: [], + dimensions: { + fees: "quanto" + } + }, + { + id: "6820", + name: "BitFire", + address: null, + symbol: "-", + url: "https://bit-fire.xyz/", + description: + "Institutional BTC & Tokenized Stocks Yield & Lending Protocol for DATs (Digital Asset Treasuries)", + chain: "Mezo", + logo: `${baseIconsUrl}/bitfire.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Lending", + chains: ["Mezo"], + module: "bitfire/index.js", + twitter: "bit_fire_", + audit_links: ["https://github.com/BitFire-Lending/BitFire-audit-report"], + forkedFromIds: ["1599"], + github: ["BitFire-Lending"], + oraclesBreakdown: [ + { + name: "Pyth", + type: "Primary", + proof: ["https://bitfire.gitbook.io/bitcoin-backed-loan"], + }, + ], + listedAt: 1759875947 + }, ]; export default data4; From 3ed838b1acad6105a8d80896af8b2b0c82572f25 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 7 Oct 2025 16:42:29 -0600 Subject: [PATCH 152/398] add new listings --- defi/src/protocols/data4.ts | 48 +++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index d62e053e85..b9ad2274f2 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30126,12 +30126,13 @@ const data4: Protocol[] = [ cmcId: null, category: "NFT Automated Strategies", chains: ["Ethereum"], - module: "dummy.js", + module: "tokenworks/index.js", twitter: "token_works", forkedFromIds: [], dimensions: { fees: "token-works" - } + }, + listedAt: 1759876225 }, { id: "6810", @@ -30389,5 +30390,48 @@ const data4: Protocol[] = [ ], listedAt: 1759875947 }, + { + id: "6821", + name: "Giza", + address: null, + symbol: "-", + url: "https://www.gizatech.xyz/", + description: + "Giza is the infrastructure powering autonomous financial markets by enabling non-custodial algorithmic agents that execute sophisticated DeFi strategies around the clock", + chain: "Base", + logo: `${baseIconsUrl}/giza.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "AI Agents", + chains: ["Base", "Arbitrum", "Plasma"], + module: "giza/index.js", + twitter: "gizatechxyz", + audit_links: ["https://docs.usepulse.xyz/audit"], + forkedFromIds: [], + listedAt: 1759876671 + }, + { + id: "6822", + name: "Bitget bgBTC", + address: null, + symbol: "-", + url: "https://www.bitget.com/", + description: + "Backed 1:1 by Bitcoin (BTC) on Bitget, BGBTC is designed to help you earn more while keeping your assets flexible and secure. By staking BTC, you can earn stable returns and collect BGPoints, which can be used to claim airdrops from various Bitcoin ecosystem projects", + chain: "Bitcoin", + logo: `${baseIconsUrl}/bitget-bgbtc.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Bridge", + chains: ["Bitcoin"], + module: "bitget-btc/index.js", + twitter: "bitgetglobal", + forkedFromIds: [], + listedAt: 1759876842 + }, ]; export default data4; From 14e1d080834202bd090e6ac291d02718f61a174b Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 7 Oct 2025 16:52:22 -0600 Subject: [PATCH 153/398] add new listing --- defi/src/protocols/data4.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index b9ad2274f2..6ec58c2fb3 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30433,5 +30433,29 @@ const data4: Protocol[] = [ forkedFromIds: [], listedAt: 1759876842 }, + { + id: "6823", + name: "BabyDoge Perps", + address: null, + symbol: "-", + url: "https://perps.babydoge.com", + description: + "BabyDoge Perps is a Perps protocol built on Orderly", + chain: "Orderly", + logo: `${baseIconsUrl}/babydoge-perps.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Interface", + chains: ["Orderly"], + module: "dummy.js", + twitter: "BabyDogeCoin", + forkedFromIds: [], + dimensions: { + dexs: "babydoge-perps" + }, + parentProtocol: "parent#babydogecoin", + }, ]; export default data4; From 85b9423e0fb27463dcc91236d49d7f028888d030 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 7 Oct 2025 16:52:47 -0600 Subject: [PATCH 154/398] fix dimensions entry --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 6ec58c2fb3..416bc2b8d9 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30453,7 +30453,7 @@ const data4: Protocol[] = [ twitter: "BabyDogeCoin", forkedFromIds: [], dimensions: { - dexs: "babydoge-perps" + dexs: "bd-perps" }, parentProtocol: "parent#babydogecoin", }, From 985562ce06d525a2e68ff147676364db554756c7 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 7 Oct 2025 17:25:37 -0600 Subject: [PATCH 155/398] add new aspecta listing and fees --- defi/src/protocols/data4.ts | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 416bc2b8d9..e600c059c3 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30263,7 +30263,8 @@ const data4: Protocol[] = [ parentProtocol: "parent#shibaswap", listedAt: 1759797783, dimensions: { - dexs: "shibaswap-v2" + dexs: "shibaswap-v2", + fees: "shibaswap-v2" } }, { @@ -30457,5 +30458,30 @@ const data4: Protocol[] = [ }, parentProtocol: "parent#babydogecoin", }, + { + id: "6824", + name: "Aspecta BuildKey", + address: "bsc:0xad8c787992428cD158E451aAb109f724B6bc36de", + symbol: "ASP", + url: "https://aspecta.ai/", + description: + "Aspecta is the blockchain infrastructure that facilitates intelligent attestation and price discovery for trillion illiquid assets. Unlock lifecycle liquidity for pre-TGE shares, locked tokens, private equities, RWAs and more", + chain: "Binance", + logo: `${baseIconsUrl}/aspecta-buildkey.jpg`, + audits: "2", + audit_note: null, + gecko_id: "aspecta", + cmcId: "37453", + category: "SoFi", + chains: ["Binance"], + module: "dummy.js", + twitter: "aspecta_ai", + forkedFromIds: [], + audit_links: ["https://github.com/aspecta-ai/audit-report"], + dimensions: { + fees: "aspecta-ai" + }, + github: ["aspecta-ai"], + }, ]; export default data4; From edcf282a7081eb42e470e8ef0982f169f5b9e086 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 7 Oct 2025 17:29:26 -0600 Subject: [PATCH 156/398] fix module --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index e600c059c3..d3c058ded4 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30330,7 +30330,7 @@ const data4: Protocol[] = [ cmcId: null, category: "Dexs", chains: ["Plume Mainnet"], - module: "rooster/index.js", + module: "rooster-protocol/index.js", twitter: "roosterprotocol", audit_links: [], forkedFromIds: ["3710"], From 92ba5eba50ceafa5d12a5c3c6a29a075e5c8e0ca Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 7 Oct 2025 19:48:34 -0600 Subject: [PATCH 157/398] update category of luck games --- defi/src/protocols/data.test.ts | 3 ++- defi/src/protocols/data1.ts | 2 +- defi/src/protocols/data2.ts | 12 ++++++------ defi/src/protocols/data3.ts | 18 +++++++++--------- defi/src/protocols/data4.ts | 10 +++++----- 5 files changed, 23 insertions(+), 22 deletions(-) diff --git a/defi/src/protocols/data.test.ts b/defi/src/protocols/data.test.ts index 5032ef627d..cca98f23fa 100644 --- a/defi/src/protocols/data.test.ts +++ b/defi/src/protocols/data.test.ts @@ -302,7 +302,8 @@ test("no surprise category", async () => { "Dual-Token Stablecoin", "Physical TCG", "Mining Pools", - "NFT Automated Strategies" + "NFT Automated Strategies", + "Luck Games" ] for (const protocol of protocols) { expect(whitelistedCategories).toContain(protocol.category); diff --git a/defi/src/protocols/data1.ts b/defi/src/protocols/data1.ts index 22dbd737a1..cae20a3c03 100644 --- a/defi/src/protocols/data1.ts +++ b/defi/src/protocols/data1.ts @@ -10524,7 +10524,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the audit_note: null, gecko_id: "sunrise", cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["Ethereum"], module: "sunrise-gaming-by-dao/index.js", twitter: "SunriseGaming_d", diff --git a/defi/src/protocols/data2.ts b/defi/src/protocols/data2.ts index 1bfbb3a85e..f5aca6a9ba 100644 --- a/defi/src/protocols/data2.ts +++ b/defi/src/protocols/data2.ts @@ -1073,7 +1073,7 @@ const data2: Protocol[] = [ audit_note: null, gecko_id: "croissant-games", cmcId: "17465", - category: "Prediction Market", + category: "Luck Games", chains: ["Cronos"], forkedFrom: [], module: "croissant/index.js", @@ -2160,7 +2160,7 @@ const data2: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["EOS"], oracles: ["Internal"], forkedFrom: [], @@ -4384,7 +4384,7 @@ const data2: Protocol[] = [ audit_note: null, gecko_id: "luckychip", cmcId: "20170", - category: "Prediction Market", + category: "Luck Games", chains: ["Binance"], oraclesBreakdown: [ { name: "Chainlink", type: "Primary", proof: []} ], forkedFrom: [], @@ -17681,7 +17681,7 @@ const data2: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["EthereumPoW"], forkedFrom: [], module: "Fliperino/index.js", @@ -21526,7 +21526,7 @@ const data2: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["CSC"], module: "crypto-lottery/index.js", twitter: "__cryptolottery", @@ -23759,7 +23759,7 @@ const data2: Protocol[] = [ audit_note: null, gecko_id: "freebie-life-finance", cmcId: "20870", - category: "Prediction Market", + category: "Yield Lottery", chains: ["Avalanche"], module: "freebie/index.js", twitter: "freebielifeme", diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index d379f0a6c1..72d71bcf3f 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -10499,7 +10499,7 @@ const data3_1: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["Polygon"], module: "megamoon/index.js", twitter: "0xMegaMoon", @@ -31719,7 +31719,7 @@ const data3_1: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["Avalanche", "Base"], oraclesBreakdown: [ { name: "Chainlink", type: "Primary", proof: []} ], forkedFrom: [], @@ -32604,7 +32604,7 @@ const data3_1: Protocol[] = [ audit_note: null, gecko_id: "ninjaroll", cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["Injective"], forkedFrom: [], module: "ninjaroll/index.js", @@ -40080,7 +40080,7 @@ const data3_2: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["Ethereum"], forkedFrom: [], module: "etherflip/index.js", @@ -43500,7 +43500,7 @@ const data3_2: Protocol[] = [ audit_note: null, gecko_id: "ridotto", cmcId: "12465", - category: "Prediction Market", + category: "Luck Games", chains: ["Binance"], forkedFrom: [], module: "ridotto/index.js", @@ -44140,7 +44140,7 @@ const data3_2: Protocol[] = [ audit_note: null, gecko_id: "tg-casino", cmcId: "28919", - category: "Prediction Market", + category: "Luck Games", chains: ["Ethereum"], forkedFrom: [], module: "tgcasino/index.js", @@ -46655,7 +46655,7 @@ const data3_2: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["Binance"], module: "rollspace/index.js", twitter: "rollspacecom", @@ -52558,7 +52558,7 @@ const data3_2: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["Mode"], module: "betmode/index.js", twitter: "BetMode_io", @@ -64642,7 +64642,7 @@ const data3_2: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["Neutron"], module: "ngmizone/index.js", twitter: "beam_dex", diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index d3c058ded4..00d78ef541 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -9536,7 +9536,7 @@ const data4: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["WINR"], module: "justbet/index.js", forkedFrom: [], @@ -19669,7 +19669,7 @@ const data4: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["Cronos"], forkedFromIds: [], module: "crovegas/index.js", @@ -20019,7 +20019,7 @@ const data4: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["Cronos"], module: "cronosbet/index.js", twitter: "CronosBetAI", @@ -20208,7 +20208,7 @@ const data4: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["Matchain"], module: "p2pflip/index.js", forkedFromIds: [], @@ -27529,7 +27529,7 @@ const data4: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["Binance"], module: "dummy.js", twitter: "PancakeSwap", From eaf5da1d16f61abc5b30398650ef36317b0011d1 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 7 Oct 2025 20:00:17 -0600 Subject: [PATCH 158/398] enable nodeops fees --- defi/src/protocols/data4.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 00d78ef541..1d619bdc07 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30483,5 +30483,28 @@ const data4: Protocol[] = [ }, github: ["aspecta-ai"], }, + { + id: "6825", + name: "NodeOps", + address: "0x2f714d7b9a035d4ce24af8d9b6091c07e37f43fb", + symbol: "NODE", + url: "https://nodeops.network/", + description: + "The leading AI-powered DePIN Orchestration Layer", + chain: "Arbitrum", + logo: `${baseIconsUrl}/nodeops.jpg`, + audits: "0", + audit_note: null, + gecko_id: "node-2", + cmcId: "36977", + category: "DePIN", + chains: ["Arbitrum", "Binance", "Base", "Polygon"], + module: "dummy.js", + twitter: "NodeOpsHQ", + forkedFromIds: [], + dimensions: { + fees: "node-ops" + }, + }, ]; export default data4; From f44cf8da218fbd6e0a6b36d110460e8b66820276 Mon Sep 17 00:00:00 2001 From: Define101 Date: Wed, 8 Oct 2025 09:20:15 +0100 Subject: [PATCH 159/398] divide GRVT --- defi/src/protocols/data4.ts | 31 ++++++++++++++++++++++++--- defi/src/protocols/parentProtocols.ts | 11 ++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 1d619bdc07..26472b2c50 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -966,23 +966,24 @@ const data4: Protocol[] = [ }, { id: "5599", - name: "GRVT", + name: "GRVT Bridge", // previous name GRVT address: null, symbol: "-", url: "https://grvt.io", description: "World's first licensed DEX, redesigning finance. Building true CeDeFi. Mainnet Alpha LIVE.", chain: "Ethereum", - logo: `${baseIconsUrl}/grvt.jpg`, + logo: `${baseIconsUrl}/grvt-bridge.jpg`, audits: "0", audit_note: null, gecko_id: null, cmcId: null, - category: "Derivatives", + category: "Bridge", chains: ["Ethereum"], forkedFrom: [], module: "grvt-io/index.js", twitter: "grvt_io", listedAt: 1736334414, + parentProtocol: "parent#grvt", dimensions: { derivatives: "grvt-perps", //"open-interest": "grvt-perps" too high @@ -30506,5 +30507,29 @@ const data4: Protocol[] = [ fees: "node-ops" }, }, + { + id: "6826", + name: "GRVT Perps", + address: null, + symbol: "-", + url: "https://grvt.io", + description: + "World's first licensed DEX, redesigning finance. Building true CeDeFi. Mainnet Alpha LIVE.", + chain: "Ethereum", + logo: `${baseIconsUrl}/grvt-perps.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Derivatives", + chains: ["Ethereum"], + module: "dummy.js", + twitter: "grvt_io", + forkedFromIds: [], + parentProtocol: "parent#grvt", + dimensions: { + derivatives: "grvt-perps", + } + }, ]; export default data4; diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index 726c17baed..5721cb4890 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8132,6 +8132,17 @@ const parentProtocols: IParentProtocol[] = [ chains: [], twitter: "roosterprotocol", }, + { + id: "parent#grvt", + name: "GRVT", + url: "https://grvt.io", + description: "World's first licensed DEX, redesigning finance. Building true CeDeFi. Mainnet Alpha LIVE.", + logo: `${baseIconsUrl}/grvt.jpg`, + gecko_id: null, + cmcId: null, + chains: [], + twitter: "grvt_io", + }, ]; export default parentProtocols; From ef7969f05fe6825707b3f7688513c123bfa8ada8 Mon Sep 17 00:00:00 2001 From: Define101 Date: Wed, 8 Oct 2025 09:44:40 +0100 Subject: [PATCH 160/398] four.meme ref code --- defi/src/protocols/data3.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 72d71bcf3f..ead5d47ac4 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -58364,7 +58364,8 @@ const data3_2: Protocol[] = [ name: "four.meme", address: null, symbol: "-", - url: "https://four.meme/", + url: "https://four.meme?code=DZ9DF74J64FA", +  referralUrl: "https://four.meme?code=DZ9DF74J64FA", description: "Four.meme is a premier fair launch platform for meme coins on the BSC chain. Our platform is dedicated to empowering creators and communities to launch successful meme coin projects with ease.", chain: "Binance", From 4447491c4d6c888b1459c7d722917e86d9e21433 Mon Sep 17 00:00:00 2001 From: tree Date: Wed, 8 Oct 2025 14:26:43 +0530 Subject: [PATCH 161/398] add check for dune dependecies, only run after 6 AM UTC for v1 adapters (#10757) * add check for dune dependecies, only run after 6 AM UTC for v1 adapters * refactor DUNE adapter logic to refresh data between 6-7 AM UTC for version 1 adapters * add logic to add incomplete data from yesterday for v2 and better dune v1 reload logic * moved logic to storeAll * add console error --- defi/src/adaptors/db-utils/db2.ts | 2 +- .../handlers/storeAdaptorData/index.ts | 1 - .../handlers/storeAdaptorData/storeAll.ts | 74 ++++++++++++++++++- 3 files changed, 73 insertions(+), 4 deletions(-) diff --git a/defi/src/adaptors/db-utils/db2.ts b/defi/src/adaptors/db-utils/db2.ts index d93e0c84ac..f6a2effe83 100644 --- a/defi/src/adaptors/db-utils/db2.ts +++ b/defi/src/adaptors/db-utils/db2.ts @@ -158,7 +158,7 @@ export async function getAllDimensionsRecordsOnDate({ adapterType, date }: { ada const result: any = await Tables.DIMENSIONS_DATA.findAll({ where: { type: adapterType, timeS: date }, - attributes: ['timestamp', 'id', 'timeS'], + attributes: ['timestamp', 'id', 'timeS', 'updatedAt'], raw: true, }) diff --git a/defi/src/adaptors/handlers/storeAdaptorData/index.ts b/defi/src/adaptors/handlers/storeAdaptorData/index.ts index 846cc99bf0..762e1fa469 100644 --- a/defi/src/adaptors/handlers/storeAdaptorData/index.ts +++ b/defi/src/adaptors/handlers/storeAdaptorData/index.ts @@ -177,7 +177,6 @@ export const handler2 = async (event: IStoreAdaptorDataHandlerEvent) => { if (!isRunFromRefillScript) console.log(`[${adapterType}] - ${index + 1}/${protocols.length} - ${protocol.module}`) - const startTime = getUnixTimeNow() const metadata = { application: "dimensions", diff --git a/defi/src/adaptors/handlers/storeAdaptorData/storeAll.ts b/defi/src/adaptors/handlers/storeAdaptorData/storeAll.ts index 5c34e13496..f8d5ab3ee4 100644 --- a/defi/src/adaptors/handlers/storeAdaptorData/storeAll.ts +++ b/defi/src/adaptors/handlers/storeAdaptorData/storeAll.ts @@ -3,9 +3,11 @@ import '../../../api2/utils/failOnError' import { handler2 } from "."; import { AdapterType } from '@defillama/dimension-adapters/adapters/types'; import { getUnixTimeNow } from '../../../api2/utils/time'; +import { getTimestampAtStartOfDayUTC } from '../../../utils/date'; import { elastic } from '@defillama/sdk'; import { getAllDimensionsRecordsOnDate } from '../../db-utils/db2'; import { ADAPTER_TYPES } from '../../data/types'; +import loadAdaptorsData from '../../data'; async function run() { const startTimeAll = getUnixTimeNow() @@ -29,16 +31,84 @@ async function run() { let yesterdayIdSet: Set = new Set() let todayIdSet: Set = new Set() + let yesterdayDataMap: Map = new Map() + let todayDataMap: Map = new Map() try { const yesterdayData = await getAllDimensionsRecordsOnDate({ adapterType, date: getYesterdayTimeS() }); const todayData = await getAllDimensionsRecordsOnDate({ adapterType, date: getTodayTimeS() }); - yesterdayIdSet = new Set(yesterdayData.map((d: any) => d.id)); + + // Create maps + yesterdayDataMap = new Map(yesterdayData.map((d: any) => [d.id, d])); + todayDataMap = new Map(todayData.map((d: any) => [d.id, d])); todayIdSet = new Set(todayData.map((d: any) => d.id)); + + // Load adaptor data to check dependencies and versions + const dataModule = loadAdaptorsData(adapterType); + const { protocolAdaptors, importModule } = dataModule; + + // Smart filtering: Build yesterdayIdSet by checking each protocol (similar to handler2 logic) + const now = new Date(); + const currentHour = now.getUTCHours(); + const startOfTodayTimestamp = getTimestampAtStartOfDayUTC(Math.floor(Date.now() / 1000)); // 00:00 UTC today + const isAfter1AM = currentHour >= 1; + const isAfter8AM = currentHour >= 8; + + // Process each protocol to determine if it should be in yesterdayIdSet + for (const protocol of protocolAdaptors) { + const id2 = protocol.id2; + const yesterdayRecord = yesterdayDataMap.get(id2); + + // If no yesterday data exists, don't add to set (will trigger refill) + if (!yesterdayRecord) { + continue; + } + + let includeInSet = true; + + try { + const adaptor = await importModule(protocol.module); + const version = adaptor.version ?? 1; + const runAtCurrTime = adaptor.runAtCurrTime ?? false; + const hasDuneDependency = adaptor.dependencies?.includes('dune' as any) ?? false; + const isV1 = version === 1; + const isV2 = !isV1; + + // Edge case 1: V2 adapters (not runAtCurrTime) with incomplete yesterday data + // Only applies to V2 adapters that don't run at current time + // Remove from set to trigger refill for incomplete data after 01:00 UTC + if (isV2 && !runAtCurrTime && yesterdayRecord.updatedAt && yesterdayRecord.updatedAt < startOfTodayTimestamp && isAfter1AM) { + includeInSet = false; + console.log(`Removing ${id2} from yesterdayIdSet - incomplete V2 data (last update: ${new Date(yesterdayRecord.updatedAt * 1000).toISOString()})`) + } + + // Edge case 2: V1 DUNE adapters with data updated before 08:00 UTC + // Only applies to V1 adapters with DUNE dependencies + // Remove from set to trigger refill after 08:00 UTC + if (includeInSet && isV1 && hasDuneDependency && yesterdayRecord.updatedAt && isAfter8AM) { + const lastUpdateDate = new Date(yesterdayRecord.updatedAt * 1000); + const lastUpdateHourUTC = lastUpdateDate.getUTCHours(); + + if (lastUpdateHourUTC < 8) { + includeInSet = false; + console.log(`Removing ${id2} from yesterdayIdSet - V1 DUNE adapter needs refresh (last update: ${lastUpdateDate.toISOString()}, before 08:00 UTC)`) + } + } + } catch (e) { + console.error(`importModule error for ${id2} - ${protocol.module}: ${e}`) + // If we can't load module, include by default to avoid breaking existing adapters + includeInSet = true; + } + + if (includeInSet) { + yesterdayIdSet.add(id2); + } + } + } catch (e) { console.error("Error in getAllDimensionsRecordsOnDate", e) } - await handler2({ adapterType, yesterdayIdSet, runType: 'store-all', todayIdSet, }) + await handler2({ adapterType, yesterdayIdSet, runType: 'store-all', todayIdSet }) } catch (e) { console.error("error", e) From 49a53d864211286ade59f2a13ecbc4e82fa043f4 Mon Sep 17 00:00:00 2001 From: Nghia Pham <57862573+ngfam@users.noreply.github.com> Date: Wed, 8 Oct 2025 18:37:11 +0700 Subject: [PATCH 162/398] [PENDLE] Added crosschain-pt prices (#10775) --- coins/src/adapters/yield/pendle/crosschain.ts | 95 +++++++++++++++++++ coins/src/adapters/yield/pendle/index.ts | 6 +- 2 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 coins/src/adapters/yield/pendle/crosschain.ts diff --git a/coins/src/adapters/yield/pendle/crosschain.ts b/coins/src/adapters/yield/pendle/crosschain.ts new file mode 100644 index 0000000000..f4b8d30067 --- /dev/null +++ b/coins/src/adapters/yield/pendle/crosschain.ts @@ -0,0 +1,95 @@ +import axios from "axios"; +import { Write } from "../../utils/dbInterfaces"; +import { getConfig } from "../../../utils/cache"; +import { addToDBWritesList } from "../../utils/database"; +import { getApi } from "../../utils/sdk"; + +export async function addPendleCrosschainPrices( + writes: Write[][], + timestamp: number = 0 +): Promise { + const response: { + hubPtChainId: number; + hubPtAddress: string; + spokePts: { + spokeChainId: number; + spokeAddress: string; + }[]; + }[] = (await getConfig( + 'pendle/v2-crosschain-pt', + "https://api-v2.pendle.finance/core/v1/cross-pt/all" + )).result; + + const flat = writes.flat(); + + async function addToWrite(chainId: number, address: string, price: number) { + const chain = getChainFromChainId(chainId); + if (!chain) return; + + let foundWs: Write[] | null = null; + + for (const ws of writes) { + if (ws.length === 0) continue; + if (ws[0].PK.startsWith(`asset#${chain}:`)) { + foundWs = ws; + } + } + if (!foundWs) { + writes.push([]); + foundWs = writes[writes.length - 1]; + } + + const api = await getApi(chain, timestamp); + const [decimals, symbol] = await api.batchCall([ + { + target: address, + abi: 'erc20:decimals', + }, + { + target: address, + abi: 'erc20:symbol', + } + ]) + + addToDBWritesList( + foundWs, + chain, + address, + price, + decimals, + symbol, + timestamp, + 'pendle-crosschain', + 0.9 + ) + return; + } + + for (const item of response) { + for (const w of flat) { + if (w.PK.includes(item.hubPtAddress.toLowerCase())) { + for(const spoke of item.spokePts) { + await addToWrite(spoke.spokeChainId, spoke.spokeAddress, w.price!); + } + break; + } + } + } +} + +function getChainFromChainId(chainId: number): string | null { + switch (chainId) { + case 1: return "ethereum"; + case 10: return "optimism"; + case 56: return "bsc"; + case 42161: return "arbitrum"; + case 5000: return "mantle"; + case 146: return "sonic"; + case 8453: return "base"; + case 80094: return "berachain"; + case 999: return "hyperliquid"; + case 9745: return "plasma"; + case 43114: return "avax"; + } + return null; +} \ No newline at end of file diff --git a/coins/src/adapters/yield/pendle/index.ts b/coins/src/adapters/yield/pendle/index.ts index ef2364bc1d..0988b1503f 100644 --- a/coins/src/adapters/yield/pendle/index.ts +++ b/coins/src/adapters/yield/pendle/index.ts @@ -1,5 +1,6 @@ import getTokenPrices from "./pendle"; import { getPenpiePrices } from "./penpie"; +import { addPendleCrosschainPrices } from "./crosschain" const config: { [chain: string]: { pendleOracle: string } } = { ethereum: { @@ -35,12 +36,13 @@ const config: { [chain: string]: { pendleOracle: string } } = { }; export async function pendle(timestamp: number = 0) { - return Promise.all([ + const ws = await Promise.all([ ...Object.keys(config).map((chain: string) => getTokenPrices(timestamp, chain, config[chain]), ), - // getApiPrices(timestamp), ]); + await addPendleCrosschainPrices(ws, timestamp); + return ws; } const masters: { [chain: string]: { target: string; fromBlock: number } } = { From c01ff139b6fd3dd714706e06979f7357dcc808af Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 8 Oct 2025 15:38:12 +0200 Subject: [PATCH 163/398] add support to deploy any git branch --- defi/src/api2/scripts/docker_prod_start.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/defi/src/api2/scripts/docker_prod_start.sh b/defi/src/api2/scripts/docker_prod_start.sh index d8fcc68951..33f3b3be36 100644 --- a/defi/src/api2/scripts/docker_prod_start.sh +++ b/defi/src/api2/scripts/docker_prod_start.sh @@ -5,6 +5,18 @@ ROOT_DIR=$SCRIPT_DIR/../../.. CURRENT_COMMIT_HASH=$(git rev-parse HEAD) echo "$CURRENT_COMMIT_HASH" > $ROOT_DIR/.current_commit_hash + +# Check if CUSTOM_GIT_BRANCH_DEPLOYMENT environment variable is set +if [ -n "$CUSTOM_GIT_BRANCH_DEPLOYMENT" ]; then + echo "***WARNING***: Custom branch deployment requested: $CUSTOM_GIT_BRANCH_DEPLOYMENT" + # Checkout the specified branch + git checkout "$CUSTOM_GIT_BRANCH_DEPLOYMENT" + # Pull latest code from the branch + git pull origin "$CUSTOM_GIT_BRANCH_DEPLOYMENT" +else + # echo "Using default branch deployment: $(git branch --show-current)" +fi + git pull git submodule update --init --recursive git submodule update --remote --merge From cc02ec327e437485b65bdfbcf305878fa9649cec Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 8 Oct 2025 16:03:07 +0200 Subject: [PATCH 164/398] reduce debug logs --- defi/src/api2/scripts/docker_prod_start.sh | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/defi/src/api2/scripts/docker_prod_start.sh b/defi/src/api2/scripts/docker_prod_start.sh index 33f3b3be36..b19e43d5cb 100644 --- a/defi/src/api2/scripts/docker_prod_start.sh +++ b/defi/src/api2/scripts/docker_prod_start.sh @@ -13,23 +13,22 @@ if [ -n "$CUSTOM_GIT_BRANCH_DEPLOYMENT" ]; then git checkout "$CUSTOM_GIT_BRANCH_DEPLOYMENT" # Pull latest code from the branch git pull origin "$CUSTOM_GIT_BRANCH_DEPLOYMENT" -else +# else # echo "Using default branch deployment: $(git branch --show-current)" fi -git pull -git submodule update --init --recursive -git submodule update --remote --merge +git pull -q +git submodule update --init --recursive --quiet +git submodule update --remote --merge --quiet -time npm i +time npm i > /dev/null git checkout HEAD -- package-lock.json # reset any changes to package-lock.json - -time npm run prebuild -time npm run cron-raises -time npm run api2-cron-task -time npm run cron-dimensions -time npm run cron-app-metadata +time npm run --silent prebuild +time npm run --silent cron-raises +time npm run --silent api2-cron-task +time npm run --silent cron-dimensions +time npm run --silent cron-app-metadata # start API2 server timeout 6m npx pm2 startOrReload src/api2/ecosystem.config.js From c0d6cc3bae95f95e80cbfd956970346d9120c33e Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 8 Oct 2025 08:51:31 -0600 Subject: [PATCH 165/398] update nodeops listing info --- defi/src/protocols/data4.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 26472b2c50..b570688e24 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30491,10 +30491,10 @@ const data4: Protocol[] = [ symbol: "NODE", url: "https://nodeops.network/", description: - "The leading AI-powered DePIN Orchestration Layer", + "NodeOps Network is a decentralized infrastructure stack powering compute and AI workloads. It enables developers and enterprises to deploy, manage, and monetize compute services seamlessly. The protocol generates on-chain revenue from product subscriptions, deployment fees, and automated $NODE-to-credits conversions for workloads", chain: "Arbitrum", logo: `${baseIconsUrl}/nodeops.jpg`, - audits: "0", + audits: "2", audit_note: null, gecko_id: "node-2", cmcId: "36977", @@ -30503,6 +30503,18 @@ const data4: Protocol[] = [ module: "dummy.js", twitter: "NodeOpsHQ", forkedFromIds: [], + audit_links: [ + "https://github.com/oak-security/audit-reports/blob/main/NodeOps/2025-06-25%20Audit%20Report%20-%20NodeOps%20Network.pdf", + "https://www.halborn.com/audits/nodeops", + "https://drive.google.com/file/d/1mzRyqBnhNraU3CLebJxRU5Qm_ZhGbodo/view?usp=sharing" + ], + oraclesBreakdown: [ + { + name: "Chainlink", + type: "Primary", + proof: ["https://docs.nodeops.network","https://github.com/NodeOps-app"] + } + ], dimensions: { fees: "node-ops" }, From 9809015d3c9c9dea62c0244524fb26be4d843278 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 8 Oct 2025 19:32:06 +0200 Subject: [PATCH 166/398] fix grvt bug --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index b570688e24..2743e4a4bd 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -985,7 +985,7 @@ const data4: Protocol[] = [ listedAt: 1736334414, parentProtocol: "parent#grvt", dimensions: { - derivatives: "grvt-perps", + // derivatives: "grvt-perps", // moved to new perps listing //"open-interest": "grvt-perps" too high } }, From 1ee304d64ff93032f2118c468f6800449a18c49d Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 8 Oct 2025 11:49:03 -0600 Subject: [PATCH 167/398] fix dimensions entry: bd-perps --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 2743e4a4bd..da295f8e0a 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30455,7 +30455,7 @@ const data4: Protocol[] = [ twitter: "BabyDogeCoin", forkedFromIds: [], dimensions: { - dexs: "bd-perps" + fees: "bd-perps" }, parentProtocol: "parent#babydogecoin", }, From a30a93fa6c84304d73918a99fce6d34ed9460c85 Mon Sep 17 00:00:00 2001 From: eden Date: Thu, 9 Oct 2025 02:40:39 +0700 Subject: [PATCH 168/398] delist rolldex pepr vol (#10779) * delist rolldex pepr vol * add cmt --- defi/src/protocols/data4.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index da295f8e0a..bb299ae3da 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -10116,7 +10116,10 @@ const data4: Protocol[] = [ audit_links: ["https://skynet.certik.com/zh-CN/projects/rolldex"], listedAt: 1743442067, dimensions: { - derivatives: "rollx" + // fake trades to pump metrics, check these addresses + // https://basescan.org/address/0x9393a4c8b46a4f796af876a7b782f9400862ff1f + // https://basescan.org/address/b62ee1e0ad72e1dc0a0bd41c9488de3327c41712 + // derivatives: "rollx" } }, { From 0a7fe49482b0a8b7aec6347ff9035284d93cb053 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 8 Oct 2025 22:53:03 +0100 Subject: [PATCH 169/398] surf liquid description and category (#10781) * surf liquid description and category * sfrxUSD sei * curve etlk * pendle exceptions patch --- coins/src/adapters/markets/curve/contracts.json | 5 +++++ coins/src/adapters/markets/curve/index.ts | 12 +++++++++++- coins/src/adapters/tokenMapping.json | 4 ++-- coins/src/adapters/yield/pendle/pendle.ts | 8 +++++++- defi/src/protocols/data4.ts | 4 ++-- 5 files changed, 27 insertions(+), 6 deletions(-) diff --git a/coins/src/adapters/markets/curve/contracts.json b/coins/src/adapters/markets/curve/contracts.json index b7ebd2999b..0265d72720 100644 --- a/coins/src/adapters/markets/curve/contracts.json +++ b/coins/src/adapters/markets/curve/contracts.json @@ -158,5 +158,10 @@ "addressProvider": "0x4574921eb950d3Fd5B01562162EC566Cb8bc3648", "gasTokenDummy": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "wrapped": "0x6100E367285b01F48D07953803A2d8dCA5D19873" + }, + "etlk": { + "addressProvider": "0x4574921eb950d3Fd5B01562162EC566Cb8bc3648", + "gasTokenDummy": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "wrapped": "0xc9B53AB2679f573e480d01e0f49e2B5CFB7a3EAb" } } \ No newline at end of file diff --git a/coins/src/adapters/markets/curve/index.ts b/coins/src/adapters/markets/curve/index.ts index 3751fdb88b..443fc631c7 100644 --- a/coins/src/adapters/markets/curve/index.ts +++ b/coins/src/adapters/markets/curve/index.ts @@ -208,6 +208,15 @@ export function curve16(timestamp: number = 0) { ]), ]); } +export function curve17(timestamp: number = 0) { + return Promise.all([ + getTokenPrices2("etlk", [], timestamp, "eth-custom", [ + "0x0714027E44802b2Ff76389daF5371990CC3a4C24", + '0x5D37F9B272ca7cdA2A05245b9a503746EefAC88f', + "0x942644106B073E30D72c2C5D7529D5C296ea91ab" + ]), + ]); +} export const adapters = { curve, @@ -226,5 +235,6 @@ export const adapters = { curve13, curve14, curve15, - curve16 + curve16, + curve17 }; diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index 40e66df9b0..6cfc8dfc9b 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -6583,8 +6583,8 @@ }, "0x5Bff88cA1442c2496f7E475E9e7786383Bc070c0": { "decimals": "18", - "symbol": "sFRAX", - "to": "coingecko#staked-frax" + "symbol": "sfrxUSD", + "to": "coingecko#staked-frax-usd" }, "0xDD7d5e4Ea2125d43C16eEd8f1FFeFffa2F4b4aF6": { "decimals": "18", diff --git a/coins/src/adapters/yield/pendle/pendle.ts b/coins/src/adapters/yield/pendle/pendle.ts index beb7e8c440..8640c79a92 100644 --- a/coins/src/adapters/yield/pendle/pendle.ts +++ b/coins/src/adapters/yield/pendle/pendle.ts @@ -183,7 +183,13 @@ export default async function getTokenPrices( const syPrice = allSyPrices[i] const lpRate = allLpRates0[i] ?? allLpRates1800[i] ?? allLpRates3600[i] if (!syPrice || !lpRate) return; - const lpPrice = syPrice * (lpRate / (10 ** allSyDecimals[i])); + + const asset = allAssetInfos[i].assetAddress + const assetPrice = yieldTokenDataMap[asset]?.price + if (assetExceptions.includes(info.sy) && !assetPrice) return; + const syRate = assetExceptions.includes(info.sy) ? syPrice / assetPrice : syPrice + + const lpPrice = syRate * (lpRate / (10 ** allSyDecimals[i])); addToDBWritesList( writes, diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index bb299ae3da..c547067e20 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29128,14 +29128,14 @@ const data4: Protocol[] = [ symbol: "-", url: "https://surfliquid.com/", description: - "Liquid staking protocol on Base chain.", + "SurfLiquid is an AI-powered DeFi platform designed to automate and optimise yield generation across the most profitable opportunities in decentralised finance.", chain: "Base", logo: `${baseIconsUrl}/surf-liquid.jpg`, audits: "0", audit_note: null, gecko_id: null, cmcId: null, - category: "Liquid Staking", + category: "Yield", chains: ["Base"], forkedFromIds: [], module: "surf-liquid/index.js", From 271ddd5465b442711fa898db132ba554fda5a225 Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 8 Oct 2025 16:51:25 -0600 Subject: [PATCH 170/398] add new listings --- defi/src/protocols/data4.ts | 47 ++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index c547067e20..610e7987f9 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -11457,8 +11457,9 @@ const data4: Protocol[] = [ category: "NFT Marketplace", chains: ["Solana"], forkedFrom: [], - module: "dummy.js", + module: "magic-eden/index.js", twitter: "MagicEden", + listedAt: 1759954535 }, { id: "6030", @@ -30546,5 +30547,49 @@ const data4: Protocol[] = [ derivatives: "grvt-perps", } }, + { + id: "6827", + name: "Friendly Market", + address: null, + symbol: "-", + url: "https://lending.friendly.market/", + description: + "Friendly Market is a decentralized lending protocol offering native markets on Nibiru Chain alongside cross-chain markets, enabling seamless borrowing and lending of assets across multiple blockchains with unified liquidity and efficient capital utilization", + chain: "Nibiru", + logo: `${baseIconsUrl}/friendly-market.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Lending", + chains: ["Nibiru"], + module: "friendly-market/index.js", + twitter: "friendlymarkets", + forkedFromIds: [], + listedAt: 1759961274 + }, + { + id: "6829", + name: "Swap.io CLMM", + address: null, + symbol: "-", + url: "https://swap.io", + description: + "Concentrated or Full Range Liquidity on Solana at lower fees for the LPs.", + chain: "Solana", + logo: `${baseIconsUrl}/swap.io-clmm.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Solana"], + module: "Swap-io/index.js", + twitter: "swapdotio", + forkedFromIds: [], + audit_links: ["https://github.com/swap-dot-io/swap-io/blob/main/audit/swap-io-clmm/2025-Zenith/Swap.io-CLMM-Zenith-Audit-Report-April-2025.pdf"], + github: ["swap-dot-io"], + listedAt: 1759963801 + }, ]; export default data4; From f2d686d963d3d2a2b449fe1766791e6ec3a05060 Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 8 Oct 2025 18:56:04 -0600 Subject: [PATCH 171/398] update anvil ca --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 610e7987f9..379963ec82 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -10356,7 +10356,7 @@ const data4: Protocol[] = [ { id: "5984", name: "Anvil", - address: "0x2Ca9242c1810029Efed539F1c60D68B63AD01BFc", + address: "0xAEEAa594e7dc112D67b8547fe9767a02c15B5597", // new CA after passed proposal symbol: "ANVL", url: "https://anvil.xyz/", description: From c167da353bb39298fcbecb2fb51da2c941ec67dc Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 8 Oct 2025 19:11:27 -0600 Subject: [PATCH 172/398] remove cgid until new info is ready --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 379963ec82..119c14b39f 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -10365,7 +10365,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/anvil.jpg`, audits: "2", audit_note: null, - gecko_id: "anvil", + gecko_id: null, cmcId: null, category: "Collateral Management", chains: ["Ethereum"], From 804c7bfe43254fd57ea34c003d6130b4a736889b Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 8 Oct 2025 19:14:47 -0600 Subject: [PATCH 173/398] enable new dimensions adapters --- defi/src/protocols/data1.ts | 3 ++- defi/src/protocols/data3.ts | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data1.ts b/defi/src/protocols/data1.ts index cae20a3c03..40efeaf1c5 100644 --- a/defi/src/protocols/data1.ts +++ b/defi/src/protocols/data1.ts @@ -9842,7 +9842,8 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the ], github: ["thales-markets"], dimensions: { - options: "thales" + options: "thales", + fees: "thales" } }, { diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index ead5d47ac4..8219e3ea4e 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -26703,6 +26703,10 @@ const data3_1: Protocol[] = [ module: "dyorswap/index.js", twitter: "dyorswap", listedAt: 1700767143, + dimensions: { + dexs: "dyorswap", + fees: "dyorswap" + } }, { id: "3838", From d82a2bedf01120b179418be9506dfaee83cd9325 Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 8 Oct 2025 20:54:11 -0600 Subject: [PATCH 174/398] add new listings for metamask perps --- defi/src/protocols/data3.ts | 8 ++++---- defi/src/protocols/data4.ts | 28 ++++++++++++++++++++++++++- defi/src/protocols/parentProtocols.ts | 12 ++++++++++++ 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 8219e3ea4e..c11bef9c3e 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -7786,14 +7786,14 @@ const data3_1: Protocol[] = [ }, { id: "3031", - name: "MetaMask", + name: "MetaMask Wallet", address: null, symbol: "-", url: "https://metamask.io/", description: "MetaMask is the leading self-custodial wallet. A simple way to access blockchain applications and web3", chain: "Ethereum", - logo: `${baseIconsUrl}/metamask.png`, + logo: `${baseIconsUrl}/metamask-wallet.jpg`, audits: "0", audit_note: null, gecko_id: null, @@ -7803,11 +7803,11 @@ const data3_1: Protocol[] = [ module: "dummy.js", twitter: "MetaMask", forkedFrom: [], - github: ["MetaMask"], dimensions: { fees: "metamask", aggregators: "metamask" - } + }, + parentProtocol: "parent#metamask", }, { id: "3032", diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 119c14b39f..c3ebe241fa 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29929,7 +29929,8 @@ const data4: Protocol[] = [ forkedFromIds: [], dimensions: { fees: "metamask-musd" - } + }, + parentProtocol: "parent#metamask", }, { id: "6801", @@ -30591,5 +30592,30 @@ const data4: Protocol[] = [ github: ["swap-dot-io"], listedAt: 1759963801 }, + { + id: "6830", + name: "MetaMask Perps", + address: null, + symbol: "-", + url: "https://metamask.io/", + description: + "MetaMask Perps is an interface for trading perps via Hyperliquid.", + chain: "Hyperliquid L1", + logo: `${baseIconsUrl}/metamask-perps.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Interface", + chains: ["Hyperliquid L1"], + module: "dummy.js", + twitter: "MetaMask", + forkedFrom: [], + dimensions: { + fees: "metamask-perps", + derivatives: "metamask-perps" + }, + parentProtocol: "parent#metamask", + }, ]; export default data4; diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index 5721cb4890..0bd1694374 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8143,6 +8143,18 @@ const parentProtocols: IParentProtocol[] = [ chains: [], twitter: "grvt_io", }, + { + id: "parent#metamask", + name: "MetaMask", + url: "https://metamask.io", + description: "MetaMask is the leading self-custodial wallet. A simple way to access blockchain applications and web3", + logo: `${baseIconsUrl}/metamask.png`, + gecko_id: null, + cmcId: null, + chains: [], + twitter: "MetaMask", + github: ["MetaMask"], + }, ]; export default parentProtocols; From 07b550cec58f9b950a4a756603e74e76f30fbb78 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 9 Oct 2025 10:07:12 +0100 Subject: [PATCH 175/398] NEST (#10787) --- coins/src/adapters/other/distressed.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/coins/src/adapters/other/distressed.ts b/coins/src/adapters/other/distressed.ts index d53eecfa96..961081a6ab 100644 --- a/coins/src/adapters/other/distressed.ts +++ b/coins/src/adapters/other/distressed.ts @@ -57,6 +57,7 @@ export const contracts: { [chain: string]: { [token: string]: string } } = { // "crvCRVETH-gauge": "0x1cebdb0856dd985fae9b8fea2262469360b8a3a6", crvCRVETH: "0xed4064f376cb8d68f770fb1ff088a3d0f3ff5c4d", SFUND: "0x560363bda52bc6a44ca6c8c9b4a5fadbda32fa60", + NEST: "0x04abEdA201850aC0124161F037Efd70c74ddC74C" }, // beam: { // WMC: '0xd51bfa777609213a653a2cd067c9a0132a2d316a' @@ -140,6 +141,7 @@ export const contracts: { [chain: string]: { [token: string]: string } } = { coBTC: "0x918b3aa73e2D42D96CF64CBdB16838985992dAbc", // TO SUS , BACKING 2 TOKENS, BEING USED ON YIELDNEST + KERNEL ITS PUMPINP METRICS ynCoBTCk: "0x132376b153d3cFf94615fe25712DB12CaAADf547", // SAME , backing 2 tokens and aparently also loop MBTC: "0x7c1cca5b25fa0bc9af9275fb53cba89dc172b878", + NEST: "0x98f8669f6481ebb341b522fcd3663f79a3d1a6a7" }, cronos: { CRK: "0x065de42e28e42d90c2052a1b49e7f83806af0e1f", From 1298a62287761ee433368085967177b9b4ce7216 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 9 Oct 2025 11:10:05 +0200 Subject: [PATCH 176/398] update @defillama/sdk --- defi/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/defi/package-lock.json b/defi/package-lock.json index 7a319c480b..22b1e22c0c 100644 --- a/defi/package-lock.json +++ b/defi/package-lock.json @@ -3376,9 +3376,9 @@ "link": true }, "node_modules/@defillama/sdk": { - "version": "5.0.173", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.173.tgz", - "integrity": "sha512-gU9wq5Pepjv32fmJe0Z6ZzrIynzUPGVxxglo8WdA2hwbCjcbGjCA0Ee433qzVeNROaZOUOMBc/TMulwrfc45pQ==", + "version": "5.0.175", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.175.tgz", + "integrity": "sha512-o6ZiDxEi7ev9C74c8FgSPqc1f+EGi/H+HMz5FJRlTCAeBOiLkMo6N9NfY6Xwhs+nrBqN7PyFR8hXD3tgXQprTQ==", "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", From c19f8aacbd5cc8cb71dd4472039aa18e30cc6a17 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 9 Oct 2025 11:10:52 +0200 Subject: [PATCH 177/398] update @defillama/sdk --- coins/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/coins/package-lock.json b/coins/package-lock.json index 244b126bf3..d80c495721 100644 --- a/coins/package-lock.json +++ b/coins/package-lock.json @@ -2697,9 +2697,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.173", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.173.tgz", - "integrity": "sha512-gU9wq5Pepjv32fmJe0Z6ZzrIynzUPGVxxglo8WdA2hwbCjcbGjCA0Ee433qzVeNROaZOUOMBc/TMulwrfc45pQ==", + "version": "5.0.175", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.175.tgz", + "integrity": "sha512-o6ZiDxEi7ev9C74c8FgSPqc1f+EGi/H+HMz5FJRlTCAeBOiLkMo6N9NfY6Xwhs+nrBqN7PyFR8hXD3tgXQprTQ==", "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", From 35fd5be7ceba16c255bbdeab63599756b2c38600 Mon Sep 17 00:00:00 2001 From: tree Date: Thu, 9 Oct 2025 14:56:13 +0530 Subject: [PATCH 178/398] enable salsadex derivatives volume (#10788) --- defi/src/protocols/data4.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index c3ebe241fa..e4fce1efb5 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30223,7 +30223,8 @@ const data4: Protocol[] = [ forkedFromIds: [], twitter: "Salsadex_", dimensions: { - fees: "salsadex" + fees: "salsadex", + derivatives: "salsadex" } }, { From 4e7992b690b190f787b0498bfc4af73daea43526 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 9 Oct 2025 11:36:22 +0200 Subject: [PATCH 179/398] dimensions: remove 2 hour delay in v2 data pulls --- defi/src/adaptors/handlers/storeAdaptorData/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/adaptors/handlers/storeAdaptorData/index.ts b/defi/src/adaptors/handlers/storeAdaptorData/index.ts index 762e1fa469..24cd48b70e 100644 --- a/defi/src/adaptors/handlers/storeAdaptorData/index.ts +++ b/defi/src/adaptors/handlers/storeAdaptorData/index.ts @@ -42,7 +42,7 @@ const ONE_DAY_IN_SECONDS = 24 * 60 * 60 export const handler2 = async (event: IStoreAdaptorDataHandlerEvent) => { const defaultMaxConcurrency = 13 - let { timestamp = timestampAnHourAgo, adapterType, protocolNames, maxConcurrency = defaultMaxConcurrency, isDryRun = false, isRunFromRefillScript = false, + let { timestamp = timestampAtStartofHour, adapterType, protocolNames, maxConcurrency = defaultMaxConcurrency, isDryRun = false, isRunFromRefillScript = false, runType = 'default', yesterdayIdSet = new Set(), todayIdSet = new Set(), throwError = false, checkBeforeInsert = false, @@ -81,7 +81,7 @@ export const handler2 = async (event: IStoreAdaptorDataHandlerEvent) => { } } } else if (runType === 'store-all') { - fromTimestamp = timestampAnHourAgo - ONE_DAY_IN_SECONDS + fromTimestamp = timestampAtStartofHour - ONE_DAY_IN_SECONDS toTimestamp = fromTimestamp + ONE_DAY_IN_SECONDS - 1 } From 1388a7c944a4e206297d578808f53d503c7baff0 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 9 Oct 2025 13:06:06 +0200 Subject: [PATCH 180/398] fix: correct attribute casing for updatedAt in getAllDimensionsRecordsOnDate --- defi/src/adaptors/db-utils/db2.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/adaptors/db-utils/db2.ts b/defi/src/adaptors/db-utils/db2.ts index f6a2effe83..ddb2327d39 100644 --- a/defi/src/adaptors/db-utils/db2.ts +++ b/defi/src/adaptors/db-utils/db2.ts @@ -158,7 +158,7 @@ export async function getAllDimensionsRecordsOnDate({ adapterType, date }: { ada const result: any = await Tables.DIMENSIONS_DATA.findAll({ where: { type: adapterType, timeS: date }, - attributes: ['timestamp', 'id', 'timeS', 'updatedAt'], + attributes: ['timestamp', 'id', 'timeS', 'updatedat'], raw: true, }) From 5e2932734154ce5b6e86337e0d45112823ca5a49 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 9 Oct 2025 15:09:19 +0200 Subject: [PATCH 181/398] manually store nodeops data --- .../api2/scripts/dimChangeProtocolChain.ts | 72 +++++++++++++++++-- 1 file changed, 65 insertions(+), 7 deletions(-) diff --git a/defi/src/api2/scripts/dimChangeProtocolChain.ts b/defi/src/api2/scripts/dimChangeProtocolChain.ts index 4260e3c79a..9f991b3f34 100644 --- a/defi/src/api2/scripts/dimChangeProtocolChain.ts +++ b/defi/src/api2/scripts/dimChangeProtocolChain.ts @@ -15,7 +15,7 @@ let action = () => changeProtocolChain({ oldChain: 'ethereum', newChain: 'paradex' }) -action = insertRecord +action = storeFromFile async function changeProtocolChain({ oldId, newId, oldChain, newChain, @@ -142,7 +142,7 @@ async function createUpdateOIData() { function getCSVData() { - const filePath = '/data.csv'; + const filePath = '/nodeops.csv'; // Read the file content const fileContent = fs.readFileSync(__dirname + filePath, 'utf8'); @@ -175,14 +175,54 @@ function getCSVData() { } console.log(`Successfully parsed ${data.length} rows from CSV`); - return data; + + const resMap: any = {} as any + data.forEach(row => { + const usdValue = Math.floor(+row.usd_amount) + const timeS = row.timestamp.slice(0, 10) + const value = resMap[timeS] ?? { + value: 0, + chains: {} + } + value.value += usdValue + let hash = row.tx_hash + let chain = 'off_chain' + if (!hash.startsWith('https://')) { + chain = 'off_chain' + } else if (hash.includes('optimism')) { + chain = 'optimism' + } else if (hash.includes('arbiscan')) { + chain = 'arbitrum' + } else if (hash.includes('etherscan')) { + chain = 'ethereum' + } else if (hash.includes('bscscan')) { + chain = 'bscs' + } else if (hash.includes('basescan')) { + chain = 'base' + } else if (hash.includes('solscan')) { + chain = 'solana' + } else if (hash.includes('copperx')) { + chain = 'off_chain' + } else if (hash.includes('polygonscan')) { + chain = 'polygon' + } else { + console.log('unknown chain for hash', hash) + } + if (!value.chains[chain]) value.chains[chain] = 0 + value.chains[chain] += usdValue + + resMap[timeS] = value + }) + + return Object.entries(resMap) + // return data; } async function storeFromFile() { // Path to the CSV file (in the same folder as the script) - const protocolId = '6751' - const adapterType = AdapterType.OPEN_INTEREST + const protocolId = '6825' + const adapterType = AdapterType.FEES const protocolType = ProtocolType.PROTOCOL try { @@ -196,7 +236,23 @@ async function storeFromFile() { const protocol = protocolAdaptors.find(p => p.id === protocolId) const adapterRecords = csvData.map(row => { - const value = Math.floor(row['total_open_interest'] || '0') + const zeroValues = JSON.parse(JSON.stringify(row[1])) + Object.keys(zeroValues.chains).forEach(k => zeroValues.chains[k] = 0) + zeroValues.value = 0 + + return AdapterRecord2.formAdaptarRecord2({ + jsonData: { + timestamp: getTimestampAtStartOfDay(+(new Date(row[0])) / 1000), + aggregated: { + df: row[1], + dr: row[1], + dssr: zeroValues, + dpr: row[1], + dhr: zeroValues, + } + }, protocolType, adapterType, protocol: protocol!, + }) + return AdapterRecord2.formAdaptarRecord2({ jsonData: { timestamp: getTimestampAtStartOfDay(+(new Date(row['day'])) / 1000), @@ -212,12 +268,14 @@ async function storeFromFile() { }) }) + console.log(adapterRecords.length, 'records to store') + for (const rec of adapterRecords) { if (!rec) { console.error('Skipping invalid record'); continue; } - console.log('Storing record for date:', new Date(rec.timestamp * 1000).toISOString().split('T')[0], 'value:', rec.data.aggregated.doi.value) + console.log('Storing record for date:', new Date(rec.timestamp * 1000).toISOString().split('T')[0], 'value:', rec.data.aggregated.df.value) await storeAdapterRecord(rec as any) } From d71380cd36770f3b2e428e516068b9d8e511efc8 Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 9 Oct 2025 08:02:12 -0600 Subject: [PATCH 182/398] update the parallel parent --- defi/src/protocols/parentProtocols.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index 0bd1694374..ee4ed07279 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -7602,12 +7602,12 @@ const parentProtocols: IParentProtocol[] = [ url: "https://parallel.best/", description: "Parallel is an over-collateralized, decentralized, modular & capital-efficient stablecoins protocol deployed on several chains. Each stablecoin can be minted against an approved basket of yield generating correlated assets at the oracle price and redeemed for it without cooldown", logo: `${baseIconsUrl}/parallel-protocol.jpg`, - gecko_id: null, + gecko_id: "mimo-parallel-governance-token", cmcId: null, chains: [], twitter: "ParallelMoney", github: ["parallel-protocol","mimo-capital"], - governanceID: ["snapshot:mimo.eth"], + governanceID: ["snapshot:mimo.eth","https://vote.parallel.best/#/"], stablecoins: ["parallel", "parallel-usdp"], treasury: "mimo-protocol.js", }, From d09d45aa3e163f256b2231b4347148128bd96941 Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 9 Oct 2025 08:04:30 -0600 Subject: [PATCH 183/398] add chain to chain map --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index e4fce1efb5..b4406d0b4d 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -22956,7 +22956,7 @@ const data4: Protocol[] = [ gecko_id: null, cmcId: null, category: "CDP", - chains: ["Hyperliquid L1", "Base", "Sonic", "Ethereum"], + chains: ["Hyperliquid L1", "Base", "Sonic", "Ethereum", "Avalanche"], forkedFromIds: ["756"], module: "parallel-protocol-v3/index.js", twitter: "ParallelMoney", From 70e487db7a4c7d820c46295bdbd667a95d9d75d0 Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 9 Oct 2025 09:11:41 -0600 Subject: [PATCH 184/398] enable dimensions adapters --- defi/src/protocols/data1.ts | 3 +++ defi/src/protocols/data3.ts | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data1.ts b/defi/src/protocols/data1.ts index 40efeaf1c5..1c703ecd6b 100644 --- a/defi/src/protocols/data1.ts +++ b/defi/src/protocols/data1.ts @@ -2827,6 +2827,9 @@ const data: Protocol[] = [ "https://callisto.network/idex-security-audit/", ], parentProtocol: "parent#idex", + dimensions: { + dexs: "idex-classic" + } }, { id: "231", diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index c11bef9c3e..a87e2e4b72 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -66448,7 +66448,8 @@ const data3_2: Protocol[] = [ twitter: "vanadatadex", listedAt: 1734619406, dimensions: { - dexs: "datadex" + dexs: "datadex", + fees: "datadex" } }, { From 53dc440c9c1ada4b34e3e617a948e2c37a1a731c Mon Sep 17 00:00:00 2001 From: Define101 Date: Thu, 9 Oct 2025 17:07:27 +0100 Subject: [PATCH 185/398] rebrand Coinbase walleyt --- defi/src/protocols/data4.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index b4406d0b4d..889c189761 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -655,13 +655,14 @@ const data4: Protocol[] = [ }, { id: "5587", - name: "Coinbase Wallet", + name: "Base App", + previousNames: ["Coinbase Wallet"], address: null, symbol: "-", url: "https://wallet.coinbase.com/", description: "Crypto wallet and dapp browser", chain: "Ethereum", - logo: `${baseIconsUrl}/coinbase-wallet.jpg`, + logo: `${baseIconsUrl}/base-app.jpg`, audits: "0", audit_note: null, gecko_id: null, @@ -670,7 +671,7 @@ const data4: Protocol[] = [ chains: ["Ethereum", "Arbitrum", "Optimism", "Polygon", "Base", "Avalanche", "Binance"], forkedFrom: [], module: "dummy.js", - twitter: "CoinbaseWallet", + twitter: "baseapp", dimensions: { fees: "coinbase-wallet" } From 0bbb4e316b5d2e2e27e80b003f98a43c1455505f Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 9 Oct 2025 12:27:18 -0600 Subject: [PATCH 186/398] add new listings --- defi/src/protocols/data4.ts | 42 +++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 889c189761..f568fe9061 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30619,5 +30619,47 @@ const data4: Protocol[] = [ }, parentProtocol: "parent#metamask", }, + { + id: "6831", + name: "BitKan", + address: "0x1410434b0346f5be678d0fb554e5c7ab620f8f4a", + symbol: "KAN", + url: "https://bitkan.com/", + description: + "BitKan is a centralized exchange and brokerage aggregator offering spot and derivatives trading by routing liquidity across major CEXs, powered by its native KAN token", + chain: "Ethereum", + logo: `${baseIconsUrl}/bitkan.jpg`, + audits: "0", + audit_note: null, + gecko_id: "kan", + cmcId: "2934", + category: "CEX", + chains: ["Ethereum", "Bitcoin", "Polygon", "Tron", "Binance", "Solana"], + module: "bitkan/index.js", + twitter: "BitKanOfficial", + forkedFrom: [], + listedAt: 1760033298 + }, + { + id: "6832", + name: "OSL", + address: null, + symbol: "-", + url: "https://www.osl.com/en", + description: + "OSL is a regulated, Hong Kong-based digital asset platform offering exchange, custody, brokerage, OTC, and RWA tokenization services under institutional-grade compliance and infrastructure.", + chain: "Ethereum", + logo: `${baseIconsUrl}/osl.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Interface", + chains: ["Ethereum", "Bitcoin", "Solana", "Avalanche", "Tron", "Litecoin", "TON", "Ripple", "Binance", "Doge"], + module: "osl/index.js", + twitter: "OSLdotcom", + forkedFrom: [], + listedAt: 1760034403 + }, ]; export default data4; From 33d03d52052850f698bd71ef1979e523929f9d40 Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 9 Oct 2025 12:30:15 -0600 Subject: [PATCH 187/398] add new cex listings --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index f568fe9061..acd06c6be5 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30654,7 +30654,7 @@ const data4: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Interface", + category: "CEX", chains: ["Ethereum", "Bitcoin", "Solana", "Avalanche", "Tron", "Litecoin", "TON", "Ripple", "Binance", "Doge"], module: "osl/index.js", twitter: "OSLdotcom", From 50b0b320ee1f67a6c5bd705ec23d919c0a41017d Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 9 Oct 2025 15:41:48 -0600 Subject: [PATCH 188/398] add cexes --- defi/src/getCexs.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/defi/src/getCexs.ts b/defi/src/getCexs.ts index beb1149d19..7924361a06 100644 --- a/defi/src/getCexs.ts +++ b/defi/src/getCexs.ts @@ -585,6 +585,20 @@ export const cexsData: Array = [ slug: "valr", coin: null, walletsLink: null, + }, + { + name: "BitKan", + cgId: "bitkan", + slug: "bitkan", + coin: "KAN", + coinSymbol: "KAN", + walletsLink: null, + }, + { + name: "OSL", + slug: "osl", + coin: null, + walletsLink: null, } ]; @@ -697,6 +711,7 @@ const cg_volume_cexs = Object.values({ "Foxbit": "foxbit", "ZBX": "zbx", "zipmex": "zipmex", + "OSL": "osl", }); export async function getCexs(_req: HyperExpress.Request, res: HyperExpress.Response) { From dde1de10b042cf5f65fe153bfcdab8c6c16e546e Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 9 Oct 2025 18:50:31 -0600 Subject: [PATCH 189/398] update twitter handle --- defi/src/protocols/data3.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index a87e2e4b72..f1db37d72a 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -26701,7 +26701,7 @@ const data3_1: Protocol[] = [ chains: ["Mode"], forkedFromIds: ["2197"], module: "dyorswap/index.js", - twitter: "dyorswap", + twitter: "DYORSWAPDEX", listedAt: 1700767143, dimensions: { dexs: "dyorswap", From 0242c759031ff7520ceace5f2a233d66c66b2b05 Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 9 Oct 2025 19:40:44 -0600 Subject: [PATCH 190/398] enable perp volume --- defi/src/protocols/data4.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index acd06c6be5..cf9586ce80 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29527,7 +29527,10 @@ const data4: Protocol[] = [ module: "symm-io/index.js", twitter: "symm_io", forkedFromIds: [], - listedAt: 1759188001 + listedAt: 1759188001, + dimensions: { + derivatives: "symmio" + } }, { id: "6784", From be2516fbe2b48c8ed29554370f3626fd04889c22 Mon Sep 17 00:00:00 2001 From: Define101 Date: Fri, 10 Oct 2025 09:42:43 +0100 Subject: [PATCH 191/398] deprecate dappOS IntentEX --- defi/src/protocols/data4.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index cf9586ce80..63fa5edd2c 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -937,6 +937,7 @@ const data4: Protocol[] = [ chains: ["Op_Bnb"], forkedFrom: [], module: "dummy.js", + deprecated: true, twitter: "dappOS_com", dimensions: { fees: "dappos-intentEx", From f96830bb345a74edeac762fcb46464d0ab97be6b Mon Sep 17 00:00:00 2001 From: Define101 Date: Fri, 10 Oct 2025 10:08:47 +0100 Subject: [PATCH 192/398] add reya parent --- defi/src/protocols/data3.ts | 2 ++ defi/src/protocols/parentProtocols.ts | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index f1db37d72a..eb2d0efcb5 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -52794,6 +52794,7 @@ const data3_2: Protocol[] = [ forkedFrom: [], module: "reya-bridge/index.js", twitter: "reya_xyz", + parentProtocol: "parent#reya", listedAt: 1722510263, }, { @@ -53767,6 +53768,7 @@ const data3_2: Protocol[] = [ twitter: "reya_xyz", audit_links: ["https://docs.reya.network/more-resources/technical-resources"], listedAt: 1723560145, + parentProtocol: "parent#reya", dimensions: { fees: "reya-dex", derivatives: "reya-dex", diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index ee4ed07279..024445b416 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8155,6 +8155,17 @@ const parentProtocols: IParentProtocol[] = [ twitter: "MetaMask", github: ["MetaMask"], }, + { + id: "parent#reya", + name: "Reya", + url: "https://reya.network", + description: "The only trading-optimised modular L2. Giving you instant liquidity, lightning fast transactions, superior APYs and the smartest margining.", + logo: `${baseIconsUrl}/reya.jpg`, + gecko_id: null, + cmcId: null, + chains: [], + twitter: "reya_xyz", + }, ]; export default parentProtocols; From bc80d08289bd5a9dbf3603766dab45e3f5623e39 Mon Sep 17 00:00:00 2001 From: Define101 Date: Fri, 10 Oct 2025 10:13:22 +0100 Subject: [PATCH 193/398] reya dex to reya perps --- defi/src/protocols/data3.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index eb2d0efcb5..b8ab1d39a7 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -53748,13 +53748,14 @@ const data3_2: Protocol[] = [ }, { id: "4978", - name: "Reya DEX", + name: "Reya Perps", + previousNames: ["Reya DEX"], address: null, symbol: "-", url: "https://app.reya.xyz/", description: "Reya DEX is a perpetual futures exchange on the Reya Network", chain: "Reya Network", - logo: `${baseIconsUrl}/reya-dex.jpg`, + logo: `${baseIconsUrl}/reya-perps.jpg`, audits: "2", audit_note: null, gecko_id: null, From 3710befd07ef54d51a0869e08dac74e3f16b2529 Mon Sep 17 00:00:00 2001 From: Define101 Date: Fri, 10 Oct 2025 12:25:20 +0100 Subject: [PATCH 194/398] category NEAR Intents --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 63fa5edd2c..45fb76653e 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -16268,7 +16268,7 @@ const data4: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "AI Agents", + category: "Cross Chain Bridge", chains: ["Near"], forkedFrom: [], module: "dummy.js", From ea5b70ec56b4f477ee8f1fb003e5f2c60455c07d Mon Sep 17 00:00:00 2001 From: Define101 Date: Fri, 10 Oct 2025 13:58:24 +0100 Subject: [PATCH 195/398] category DoubleUp --- defi/src/protocols/data3.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index b8ab1d39a7..95edd9aba6 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -48074,7 +48074,7 @@ const data3_2: Protocol[] = [ audit_note: null, gecko_id: "doubleup", cmcId: null, - category: "Prediction Market", + category: "Luck Games", chains: ["Sui"], // previous dummy.js module: "doubleup/index.js", From 10832076bcc173c02126ad5e6b3fc162360f4cfb Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 10 Oct 2025 14:16:21 +0100 Subject: [PATCH 196/398] vyETH (#10790) * vyETH * supervaults tokens * comment maxbtc --- coins/src/adapters/tokenMapping.json | 37 ++++++++++++++++++- coins/src/adapters/yield/misc4626/tokens.json | 6 ++- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index 6cfc8dfc9b..a577d949ca 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -356,6 +356,11 @@ } }, "neutron": { + "factory:neutron1frc0p5czd9uaaymdkug2njz7dc7j65jxukp9apmt9260a8egujkspms2t2:udntrn": { + "to": "coingecko#drop-staked-ntrn", + "decimals": 6, + "symbol": "dNTRN" + }, "untrn": { "decimals": "6", "symbol": "NTRN", @@ -1703,7 +1708,12 @@ "0xF4F447E6AFa04c9D11Ef0e2fC0d7f19C24Ee55de": { "decimals": "18", "symbol": "vyUSD", - "to": "asset#ethereum:0x2e3C5e514EEf46727DE1FE44618027A9b70D92FC" + "to": "asset#ethereum:0x2e3c5e514eef46727de1fe44618027a9b70d92fc" + }, + "0x8c93a6752Bfe29FDA26EbA8df4390c642e6A7f90": { + "decimals": "18", + "symbol": "vyETH", + "to": "asset#arbitrum:0x1f52edf2815bfa625890b61d6bf43ddc24671fe8" }, "0x437cc33344a0b27a429f795ff6b469c72698b291": { "decimals": "6", @@ -2169,6 +2179,11 @@ } }, "base": { + "0x8c93a6752Bfe29FDA26EbA8df4390c642e6A7f90": { + "decimals": "18", + "symbol": "vyETH", + "to": "asset#base:0x1f52edf2815bfa625890b61d6bf43ddc24671fe8" + }, "0x9bba915f036158582c20b51113b925f243a1a1a1": { "decimals": "18", "symbol": "IMGN", @@ -4054,6 +4069,26 @@ } }, "ibc": { + "3F1D988D9EEA19EB0F3950B4C19664218031D8BCE68CE7DE30F187D5ACEA0463": { + "to": "coingecko#universal-btc", + "decimals": 8, + "symbol": "uniBTC" + }, + "C0F284F165E6152F6DDDA900537C1BC8DA1EA00F03B9C9EC1841FA7E004EF7A3": { + "to": "coingecko#solv-btc", + "decimals": 18, + "symbol": "solvBTC" + }, + "E2A000FD3EDD91C9429B473995CE2C7C555BCC8CFC1D0A3D02F514392B7A80E8": { + "to": "coingecko#ether-fi-staked-btc", + "decimals": 8, + "symbol": "eBTC" + }, + "B7BF60BB54433071B49D586F54BD4DED5E20BEFBBA91958E87488A761115106B": { + "to": "coingecko#lombard-staked-btc", + "decimals": 8, + "symbol": "LBTC" + }, "05D299885B07905B6886F554B39346EA6761246076A1120B1950049B92B922DD": { "to": "coingecko#wrapped-bitcoin", "decimals": 8, diff --git a/coins/src/adapters/yield/misc4626/tokens.json b/coins/src/adapters/yield/misc4626/tokens.json index 2cb349838b..bf11ca9bf2 100644 --- a/coins/src/adapters/yield/misc4626/tokens.json +++ b/coins/src/adapters/yield/misc4626/tokens.json @@ -105,7 +105,8 @@ "soUSDC": "0x2514A2Ce842705EAD703d02fABFd8250BfCfb8bd", "MCUSDC": "0xa60643c90A542A95026C0F1dbdB0615fF42019Cf", "hyperUSDC": "0x4B6F1C9E5d470b97181786b26da0d0945A7cf027", - "bbqUSDC": "0x5c0C306Aaa9F877de636f4d5822cA9F2E81563BA" + "bbqUSDC": "0x5c0C306Aaa9F877de636f4d5822cA9F2E81563BA", + "yETH": "0x1F52Edf2815BfA625890B61d6bf43dDC24671Fe8" }, "polygon": { "maxETH": "0xA02aA8774E8C95F5105E33c2f73bdC87ea45BD29", @@ -168,7 +169,8 @@ "gtUSDCc": "0xc0c5689e6f4D256E861F65465b691aeEcC0dEb12", "gtUSDCf": "0x236919F11ff9eA9550A4287696C2FC9e18E6e890", "exmUSDC": "0x23479229e52Ab6aaD312D0B03DF9F33B46753B5e", - "steakUSDC": "0xbeeF010f9cb27031ad51e3333f9aF9C6B1228183" + "steakUSDC": "0xbeeF010f9cb27031ad51e3333f9aF9C6B1228183", + "yETH": "0x1F52Edf2815BfA625890B61d6bf43dDC24671Fe8" }, "sapphire": { "wstRose": "0x3cabbe76ea8b4e7a2c0a69812cbe671800379ec8" From 412f21d7fe1a4afceae61f52b8a10513b7a1f34a Mon Sep 17 00:00:00 2001 From: tree Date: Fri, 10 Oct 2025 18:56:44 +0530 Subject: [PATCH 197/398] make near-intents category to bridge-aggregators (#10794) --- defi/src/protocols/data4.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 45fb76653e..03da775e20 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -16268,13 +16268,13 @@ const data4: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Cross Chain Bridge", + category: "Bridge Aggregator", chains: ["Near"], forkedFrom: [], module: "dummy.js", twitter: "NEARProtocol", dimensions: { - dexs: "near-intents" + "bridge-aggregators": "near-intents" } }, { From e1cc33c3789fd3758f728120e47317d8d31b0d13 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 10 Oct 2025 08:36:39 -0600 Subject: [PATCH 198/398] update stablecoins info --- defi/src/protocols/parentProtocols.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index 024445b416..7162bb4736 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -7608,7 +7608,7 @@ const parentProtocols: IParentProtocol[] = [ twitter: "ParallelMoney", github: ["parallel-protocol","mimo-capital"], governanceID: ["snapshot:mimo.eth","https://vote.parallel.best/#/"], - stablecoins: ["parallel", "parallel-usdp"], + stablecoins: ["parallel-usdp", "parallel"], treasury: "mimo-protocol.js", }, { From 8c682a1ab72ecff61b1ea7d895b383cfc393d505 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 10 Oct 2025 09:09:26 -0600 Subject: [PATCH 199/398] add parent and four listings --- defi/src/protocols/data4.ts | 88 +++++++++++++++++++++++++++ defi/src/protocols/parentProtocols.ts | 11 ++++ 2 files changed, 99 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 03da775e20..2a2d6194b8 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30665,5 +30665,93 @@ const data4: Protocol[] = [ forkedFrom: [], listedAt: 1760034403 }, + { + id: "6833", + name: "Echo Movement Bridge", + address: null, + symbol: "-", + url: "https://vault.echo-protocol.xyz/bridges/Movement", + description: + "Echo is a Bitcoin liquidity aggregation and yield infrastructure layer designed to address the fragmentation of BTC liquidity across various forms.", + chain: "Bitcoin", + logo: `${baseIconsUrl}/echo-movement-bridge.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Bridge", + chains: ["Bitcoin"], + module: "echo-mBTC/index.js", + twitter: "EchoProtocol_", + forkedFrom: [], + listedAt: 1760108133, + parentProtocol: "parent#echo-protocol", + }, + { + id: "6834", + name: "Invariant Group", + address: null, + symbol: "-", + url: "https://invariant.group/", + description: + "Invariant Group is a Swiss-based digital assets manager focused on niche opportunities.", + chain: "Ethereum", + logo: `${baseIconsUrl}/invariant-group.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Risk Curators", + chains: ["Ethereum", "Plasma"], + module: "invariant-group/index.js", + twitter: "invariantgroup", + forkedFrom: [], + listedAt: 1760108145 + }, + { + id: "6835", + name: "Aborigen AMM", + address: "abstract:0x4c68e4102c0f120cce9f08625bd12079806b7c4d", + symbol: "ABX", + url: "https://aborean.finance", + description: + "Aborean Finance is a decentralized exchange (DEX) and liquidity hub built on the Abstract blockchain, designed to power on-chain trading, liquidity incentives, and ecosystem growth through ABX, its native governance and reward token.", + chain: "Abstract", + logo: `${baseIconsUrl}/aborean-amm.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Abstract"], + module: "aborean/index.js", + twitter: "AboreanFi", + forkedFrom: ["2197"], + audit_links: ["https://threesigma.xyz/case-studies/dex/aborean-finance-audit"], + listedAt: 1760108148, + parentProtocol: "parent#aborean-finance", + }, + { + id: "6836", + name: "Aborean CL", + address: "abstract:0x4c68e4102c0f120cce9f08625bd12079806b7c4d", + symbol: "ABX", + url: "https://aborean.finance", + description: + "Aborean Finance is a decentralized exchange (DEX) and liquidity hub built on the Abstract blockchain, designed to power on-chain trading, liquidity incentives, and ecosystem growth through ABX, its native governance and reward token.", + chain: "Abstract", + logo: `${baseIconsUrl}/aborean-cl.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Abstract"], + module: "aborean-CL/index.js", + twitter: "AboreanFi", + forkedFrom: ["2198"], + listedAt: 1760108151, + parentProtocol: "parent#aborean-finance", + }, ]; export default data4; diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index 7162bb4736..20c15e9623 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8166,6 +8166,17 @@ const parentProtocols: IParentProtocol[] = [ chains: [], twitter: "reya_xyz", }, + { + id: "parent#aborean-finance", + name: "Aborian Finance", + url: "https://aborean.finance", + description: "Aborean Finance is a decentralized exchange (DEX) and liquidity hub built on the Abstract blockchain, designed to power on-chain trading, liquidity incentives, and ecosystem growth through ABX, its native governance and reward token.", + logo: `${baseIconsUrl}/aborean-finance.jpg`, + gecko_id: "aborean", + cmcId: null, + chains: [], + twitter: "AboreanFi", + }, ]; export default parentProtocols; From c3121477892fbd66ed63204b06930f10a9f48705 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 10 Oct 2025 09:35:52 -0600 Subject: [PATCH 200/398] add new listings --- defi/src/protocols/data4.ts | 89 +++++++++++++++++++++++++++ defi/src/protocols/parentProtocols.ts | 11 ++++ 2 files changed, 100 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 2a2d6194b8..bc9bd64fda 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30753,5 +30753,94 @@ const data4: Protocol[] = [ listedAt: 1760108151, parentProtocol: "parent#aborean-finance", }, + { + id: "6837", + name: "Ferra CLMM", + address: null, + symbol: "-", + url: "https://ferra.ag", + description: + "Ferra is a dynamic liquidity platform on the SUI network, offering advanced AMM engines and tools for DeFi projects to efficiently launch, manage, and grow liquidity.", + chain: "Sui", + logo: `${baseIconsUrl}/ferra-clmm.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Sui"], + module: "ferra-clmm/index.js", + twitter: "ferra_protocol", + forkedFrom: [], + audit_links: ["https://docs.ferra.ag/resources/audit"], + listedAt: 1760109413, + parentProtocol: "parent#ferra", + }, + { + id: "6838", + name: "Ferra DLMM", + address: null, + symbol: "-", + url: "https://ferra.ag", + description: + "Ferra is a dynamic liquidity platform on the SUI network, offering advanced AMM engines and tools for DeFi projects to efficiently launch, manage, and grow liquidity.", + chain: "Sui", + logo: `${baseIconsUrl}/ferra-dlmm.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Sui"], + module: "ferra-dlmm/index.js", + twitter: "ferra_protocol", + forkedFrom: [], + audit_links: ["https://docs.ferra.ag/resources/audit"], + listedAt: 1760109421, + parentProtocol: "parent#ferra", + }, + { + id: "6839", + name: "Liqi", + address: null, + symbol: "-", + url: "https://www.liqi.com.br/", + description: + "TIDC is a digital securitization protocol that automates the issuance and management of financial instruments such as CRs, Debentures, and FIDCs.", + chain: "XDC", + logo: `${baseIconsUrl}/liqi.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + tags: ["Private Credit"], + chains: ["XDC"], + module: "tidc-vault/index.js", + twitter: "liqibr", + forkedFrom: [], + listedAt: 1760109429, + }, + { + id: "6840", + name: "Lorenzo sUSD1+", + address: null, + symbol: "-", + url: "https://lorenzo-protocol.xyz/home", + description: + "sUSD1+ is a value-accruing yield-generating stablecoin developed by Lorenzo Labs. Users can mint sUSD1+ by depositing major stablecoins such as USD1, USDT, or USDC", + chain: "Binance", + logo: `${baseIconsUrl}/lorenzo-susd1+.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Yield", + chains: ["Binance"], + module: "lorenzo-susd1plus/index.js", + twitter: "LorenzoProtocol", + forkedFrom: [], + parentProtocol: "parent#lorenzo-protocol", + listedAt: 1760109435, + }, ]; export default data4; diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index 20c15e9623..197c69b19c 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8177,6 +8177,17 @@ const parentProtocols: IParentProtocol[] = [ chains: [], twitter: "AboreanFi", }, + { + id: "parent#ferra", + name: "Ferra", + url: "https://ferra.ag", + description: "Ferra is a dynamic liquidity platform on the SUI network, offering advanced AMM engines and tools for DeFi projects to efficiently launch, manage, and grow liquidity.", + logo: `${baseIconsUrl}/ferra.jpg`, + gecko_id: null, + cmcId: null, + chains: [], + twitter: "ferra_protocol", + }, ]; export default parentProtocols; From 191085a44d35761ba2776a9e08fa06fb099818ac Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 10 Oct 2025 09:37:29 -0600 Subject: [PATCH 201/398] enable dimensions adapters for aborean --- defi/src/protocols/data4.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index bc9bd64fda..4de4b007e9 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30730,6 +30730,10 @@ const data4: Protocol[] = [ audit_links: ["https://threesigma.xyz/case-studies/dex/aborean-finance-audit"], listedAt: 1760108148, parentProtocol: "parent#aborean-finance", + dimensions: { + dexs: "aborean", + fees: "aborean", + }, }, { id: "6836", @@ -30752,6 +30756,10 @@ const data4: Protocol[] = [ forkedFrom: ["2198"], listedAt: 1760108151, parentProtocol: "parent#aborean-finance", + dimensions: { + dexs: "aborean-cl", + fees: "aborean-cl", + }, }, { id: "6837", From 29b747032a11161e22589daf75c4fec9d58f95fa Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 10 Oct 2025 09:45:09 -0600 Subject: [PATCH 202/398] add dyorswap launchpad listing and enable dimensions --- defi/src/protocols/data3.ts | 11 ++++++----- defi/src/protocols/data4.ts | 25 +++++++++++++++++++++++++ defi/src/protocols/parentProtocols.ts | 11 +++++++++++ 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 95edd9aba6..e8405a02d7 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -26686,17 +26686,17 @@ const data3_1: Protocol[] = [ }, { id: "3837", - name: "DyorSwap", + name: "DyorSwap AMM", address: "mode:0x097de1ADe6D7b46540637935C88B489860D310A2", symbol: "DYOR", url: "https://dyorswap.finance/?chainId=34443", description: "Decentralized exchange on Mode Mainnet", chain: "Mode", - logo: `${baseIconsUrl}/dyorswap.png`, + logo: `${baseIconsUrl}/dyorswap-amm.jpg`, audits: "0", audit_note: null, - gecko_id: "dyor", - cmcId: "13987", + gecko_id: null, + cmcId: null, category: "Dexs", chains: ["Mode"], forkedFromIds: ["2197"], @@ -26706,7 +26706,8 @@ const data3_1: Protocol[] = [ dimensions: { dexs: "dyorswap", fees: "dyorswap" - } + }, + parentProtocol: "parent#dyorswap", }, { id: "3838", diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 4de4b007e9..e3072857c4 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30850,5 +30850,30 @@ const data4: Protocol[] = [ parentProtocol: "parent#lorenzo-protocol", listedAt: 1760109435, }, + { + id: "6841", + name: "DyorSwap Launchpad", + address: "mode:0x097de1ADe6D7b46540637935C88B489860D310A2", + symbol: "DYOR", + url: "https://dyorswap.finance/?chainId=34443", + description: "Decentralized exchange on Mode Mainnet", + chain: "Mode", + logo: `${baseIconsUrl}/dyorswap-launchpad.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Launchpad", + chains: ["Mode"], + forkedFromIds: [], + module: "dummy.js", + twitter: "DYORSWAPDEX", + listedAt: 1700767143, + parentProtocol: "parent#dyorswap", + dimensions: { + dexs: "dyorswap-launchpad", + fees: "dyorswap-launchpad" + } + }, ]; export default data4; diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index 197c69b19c..44cb63c9e4 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8188,6 +8188,17 @@ const parentProtocols: IParentProtocol[] = [ chains: [], twitter: "ferra_protocol", }, + { + id: "parent#dyorswap", + name: "DyorSwap", + url: "https://dyorswap.finance/?chainId=34443", + description: "Decentralized exchange on Mode Mainnet", + logo: `${baseIconsUrl}/dyorswap.png`, + gecko_id: "dyor", + cmcId: "13987", + chains: [], + twitter: "DYORSWAPDEX", + }, ]; export default parentProtocols; From 9e9cbb61b68ca42b8a836b28e654dab81f1dd52b Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 10 Oct 2025 09:46:04 -0600 Subject: [PATCH 203/398] enable autopilot fees --- defi/src/protocols/data4.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index e3072857c4..df4b3c72cb 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -24494,6 +24494,9 @@ const data4: Protocol[] = [ forkedFromIds: [], audit_links: ["https://autopilot-5.gitbook.io/autopilot/protocol/audit-and-security"], listedAt: 1754929597, + dimensions: { + fees: "autopilot" + } }, { id: "6566", From 7f718ed4f10c32db48b604dee0e398a79df4ba76 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 10 Oct 2025 18:04:05 +0100 Subject: [PATCH 204/398] USDH (#10795) --- coins/src/adapters/tokenMapping.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index a577d949ca..7f393ec95e 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -1618,6 +1618,11 @@ } }, "stacks": { + "SPN5AKG35QZSK2M8GAMR4AFX45659RJHDW353HSG.usdh-token-v1::usdh": { + "decimals": "8", + "symbol": "USDH", + "to": "coingecko#hermetica-usdh" + }, "SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.ststxbtc-token-v2::ststxbtc": { "decimals": "6", "symbol": "stSTXbtc", From 237f2a69c46e45aa549a1bdc1209644d7caea256 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 10 Oct 2025 11:11:26 -0600 Subject: [PATCH 205/398] fix name --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index df4b3c72cb..0debc9e2db 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30713,7 +30713,7 @@ const data4: Protocol[] = [ }, { id: "6835", - name: "Aborigen AMM", + name: "Aborean AMM", address: "abstract:0x4c68e4102c0f120cce9f08625bd12079806b7c4d", symbol: "ABX", url: "https://aborean.finance", From 629875480dc290ff4f25c3f7c245ba97f3fdfb3d Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 10 Oct 2025 11:23:43 -0600 Subject: [PATCH 206/398] update listing --- defi/src/protocols/parentProtocols.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index 44cb63c9e4..ce72892e19 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8168,7 +8168,7 @@ const parentProtocols: IParentProtocol[] = [ }, { id: "parent#aborean-finance", - name: "Aborian Finance", + name: "Aborean Finance", url: "https://aborean.finance", description: "Aborean Finance is a decentralized exchange (DEX) and liquidity hub built on the Abstract blockchain, designed to power on-chain trading, liquidity incentives, and ecosystem growth through ABX, its native governance and reward token.", logo: `${baseIconsUrl}/aborean-finance.jpg`, From 291e05e5343fdd39ba54ba3464bcfb1cb6c4590d Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 10 Oct 2025 11:32:47 -0600 Subject: [PATCH 207/398] remove timestamp from dummy listing --- defi/src/protocols/data4.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 0debc9e2db..ca99c93b1d 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30871,7 +30871,6 @@ const data4: Protocol[] = [ forkedFromIds: [], module: "dummy.js", twitter: "DYORSWAPDEX", - listedAt: 1700767143, parentProtocol: "parent#dyorswap", dimensions: { dexs: "dyorswap-launchpad", From d44153ef520aa4a41dbde5628ba6274b05572858 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 10 Oct 2025 11:41:18 -0600 Subject: [PATCH 208/398] update category --- defi/src/protocols/data3.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index e8405a02d7..f6f3deb21d 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -8030,7 +8030,7 @@ const data3_1: Protocol[] = [ audit_note: null, gecko_id: "houdini-swap", cmcId: "23396", - category: "DEX Aggregator", + category: "Privacy", chains: ["Ethereum"], module: "houdiniswap/index.js", twitter: "HoudiniSwap", From 2a17d3aeed4a1a99d4f4d2336ec25094e87fe142 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 10 Oct 2025 11:45:48 -0600 Subject: [PATCH 209/398] rebrand project --- defi/src/protocols/data3.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index f6f3deb21d..4d87a31a31 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -46982,14 +46982,14 @@ const data3_2: Protocol[] = [ }, { id: "4690", - name: "Lorenzo", // previous lorenzo-protocol + name: "Lorenzo stBTC", // previous lorenzo-protocol address: null, symbol: "-", url: "https://www.lorenzo-protocol.xyz", description: "Lorenzo is the Bitcoin Liquidity Finance Layer, creates an efficient market in which Bitcoin holders can easily find the best opportunities to invest their unused Bitcoin liquidity and serves as the premier DeFi ecosystem in which to finance Bitcoin restaking tokens.", chain: "Bitcoin", - logo: `${baseIconsUrl}/lorenzo.jpg`, + logo: `${baseIconsUrl}/lorenzo-stbtc.jpg`, audits: "2", audit_note: null, gecko_id: null, From fec22db6a47d06d44c68890085a08fd88db55e1d Mon Sep 17 00:00:00 2001 From: RohanNero <100052099+RohanNero@users.noreply.github.com> Date: Fri, 10 Oct 2025 17:25:34 -0400 Subject: [PATCH 210/398] update ease url (#10796) --- defi/src/protocols/data2.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data2.ts b/defi/src/protocols/data2.ts index f5aca6a9ba..38d2d585a9 100644 --- a/defi/src/protocols/data2.ts +++ b/defi/src/protocols/data2.ts @@ -18306,7 +18306,7 @@ const data2: Protocol[] = [ name: "Ease.org", address: "0xEa5eDef1287AfDF9Eb8A46f9773AbFc10820c61c", symbol: "EASE", - url: "https://ease.org", + url: "https://easedefi.org", description: "Ease is a decentralized coverage protocol that enables users to protect their DeFi tokens without a premium while earning compounding yield.", chain: "Ethereum", From d9e6fc03a873d054b5633bc956554bf5b26d91f6 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 10 Oct 2025 15:29:07 -0600 Subject: [PATCH 211/398] update ease listing --- defi/src/protocols/data2.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data2.ts b/defi/src/protocols/data2.ts index 38d2d585a9..e191ddfa04 100644 --- a/defi/src/protocols/data2.ts +++ b/defi/src/protocols/data2.ts @@ -18303,14 +18303,14 @@ const data2: Protocol[] = [ }, { id: "2162", - name: "Ease.org", + name: "Easedefi.org", address: "0xEa5eDef1287AfDF9Eb8A46f9773AbFc10820c61c", symbol: "EASE", url: "https://easedefi.org", description: "Ease is a decentralized coverage protocol that enables users to protect their DeFi tokens without a premium while earning compounding yield.", chain: "Ethereum", - logo: `${baseIconsUrl}/ease.org.png`, + logo: `${baseIconsUrl}/easedefi.org.jpg`, audits: "2", audit_note: null, gecko_id: "ease", From 096d01fba6e805d22c5c6d4f1351b5c78f774b8e Mon Sep 17 00:00:00 2001 From: aakib08 <165257027+aakib08@users.noreply.github.com> Date: Sat, 11 Oct 2025 03:01:59 +0530 Subject: [PATCH 212/398] Hyperpie Rebranded to SpinUp (#10792) Co-authored-by: Aakib --- defi/src/protocols/data4.ts | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index ca99c93b1d..33c1793955 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -9776,12 +9776,12 @@ const data4: Protocol[] = [ }, { id: "5960", - name: "Hyperpie", + name: "SpinUp", address: null, symbol: "-", - url: "https://www.hyperliquid.magpiexyz.io/stake", + url: "https://www.spinup.zone/", description: - "Hyperpie is an integrated DeFi ecosystem built on Hyperliquid, composed of a Liquid Staking platform, a MEME launchpad, and a MEME DEX. Designed around a ve(3,3) tokenomics model, it aligns incentives across HYPE stakers, meme project creators, liquidity providers, and HPP token holders. HPP is the governance token of Hyperpie", + "SpinUp is a DeFi ecosystem built on HyperEVM, bringing together liquid staking, a Meme Launchpad, a Meme DEX, and driving memes into perpetual market fire.", chain: "Hyperliquid L1", logo: `${baseIconsUrl}/hyperpie.jpg`, audits: "2", @@ -9796,17 +9796,22 @@ const data4: Protocol[] = [ { name: "Pyth", type: "Primary", - proof: ["https://docs.hyperpiexyz.io/tech-stack-and-media-kit/oracle/pyth"], - startDate: "2025-05-19", + proof: ["https://docs.spinup.zone/tech-stack-and-media-kit/oracle/pyth"], + startDate: "2025-05-19" + }, + { + name: "Chainlink", + type: "Secondary", + proof: ["https://docs.spinup.zone/tech-stack-and-media-kit/oracle/chainlink"], + startDate: "2025-06-05" }, ], - twitter: "Hyperpiexyz_io", + twitter: "SpinUpZone", audit_links: [ - "https://github.com/astrasecai/audit-reports/blob/main/AstraSec-AuditReport-Hyperpie.pdf", - "https://github.com/SupremacyTeam/publications/blob/main/Magpie/Supremacy-Audit-Report-Hyperpie-v1.0.pdf", + "https://github.com/astrasecai/audit-reports/blob/main/AstraSec-AuditReport-SpinUp.pdf", + "https://github.com/SupremacyTeam/publications/blob/main/SpinUp/Supremacy-Audit-Report-SpinUp-v1.6.pdf" ], - parentProtocol: "parent#magpie-ecosystem", - listedAt: 1743107407, + listedAt: 1743107407 }, { id: "5961", From d562adc47e92464112231da5fe9064c44c67cdec Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 10 Oct 2025 15:32:42 -0600 Subject: [PATCH 213/398] add previous name --- defi/src/protocols/data4.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 33c1793955..4095a91be8 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -9777,6 +9777,7 @@ const data4: Protocol[] = [ { id: "5960", name: "SpinUp", + previousNames: ["Hyperpie"], address: null, symbol: "-", url: "https://www.spinup.zone/", From d7756fe70e5fb34fbb38ca8cee6827c1b8f7a59c Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 10 Oct 2025 15:33:53 -0600 Subject: [PATCH 214/398] add spinup icon --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 4095a91be8..562d6e00ad 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -9784,7 +9784,7 @@ const data4: Protocol[] = [ description: "SpinUp is a DeFi ecosystem built on HyperEVM, bringing together liquid staking, a Meme Launchpad, a Meme DEX, and driving memes into perpetual market fire.", chain: "Hyperliquid L1", - logo: `${baseIconsUrl}/hyperpie.jpg`, + logo: `${baseIconsUrl}/spinup.jpg`, audits: "2", audit_note: null, gecko_id: null, From 75b1429cf33531aaedec1f4ccd6fe811a6f39ddf Mon Sep 17 00:00:00 2001 From: mike stone <166530234+clmikestone@users.noreply.github.com> Date: Fri, 10 Oct 2025 17:38:28 -0400 Subject: [PATCH 215/398] Add Edge Oracle to EtherFi Cash protocols (#10784) --- defi/src/protocols/data4.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 562d6e00ad..a12cb68870 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -19881,6 +19881,13 @@ const data4: Protocol[] = [ Scroll: ["LIQUIDETH", "LIQUIDUSD", "LIQUIDBTC", "EBTC"], }, listedAt: 1751313277, + oraclesBreakdown: [ + { + name: "Edge", + type: "Primary", + proof: ["https://etherfi.gitbook.io/etherfi/contracts-and-integrations/integrations"], + }, + ], }, { id: "6373", @@ -19902,6 +19909,13 @@ const data4: Protocol[] = [ forkedFrom: [], parentProtocol: "parent#etherfi-cash", listedAt: 1751313285, + oraclesBreakdown: [ + { + name: "Edge", + type: "Primary", + proof: ["https://etherfi.gitbook.io/etherfi/contracts-and-integrations/integrations"], + }, + ], }, { id: "6374", From 9a407f994a1870fc152924d3b327d18e6893b661 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 10 Oct 2025 15:39:21 -0600 Subject: [PATCH 216/398] add additional proof link --- defi/src/protocols/data4.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index a12cb68870..60af4a7268 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -19885,7 +19885,7 @@ const data4: Protocol[] = [ { name: "Edge", type: "Primary", - proof: ["https://etherfi.gitbook.io/etherfi/contracts-and-integrations/integrations"], + proof: ["https://etherfi.gitbook.io/etherfi/contracts-and-integrations/integrations","https://github.com/DefiLlama/defillama-server/pull/10407"], }, ], }, @@ -19913,7 +19913,7 @@ const data4: Protocol[] = [ { name: "Edge", type: "Primary", - proof: ["https://etherfi.gitbook.io/etherfi/contracts-and-integrations/integrations"], + proof: ["https://etherfi.gitbook.io/etherfi/contracts-and-integrations/integrations","https://github.com/DefiLlama/defillama-server/pull/10407"], }, ], }, From 27708e925e32179b83d4c80c3defed381c7e0bfa Mon Sep 17 00:00:00 2001 From: mike stone <166530234+clmikestone@users.noreply.github.com> Date: Fri, 10 Oct 2025 17:52:37 -0400 Subject: [PATCH 217/398] Add Edge Oracle to Pendle Boros (#10782) * Add Edge Oracle to Pendle Boros * add second proof link * fix syntax --------- Co-authored-by: Real Shaman <85087525+realdealshaman@users.noreply.github.com> --- defi/src/protocols/data4.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 60af4a7268..3936807855 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -23844,7 +23844,14 @@ const data4: Protocol[] = [ adapter: "boros", genuineSpikes: ["1759449600"], }, - } + }, + oraclesBreakdown: [ + { + name: "Edge", + type: "Primary", + proof: ["https://arbiscan.io/address/0x7b09d87945102d25069c173ee45db397c6e055b3#readContract#F4","https://github.com/DefiLlama/defillama-server/pull/10782"], + }, + ], }, { id: "6537", From fedb11323080cf9fcb98dbe02215029cec926c87 Mon Sep 17 00:00:00 2001 From: Sid Date: Sat, 11 Oct 2025 03:25:25 +0530 Subject: [PATCH 218/398] add eOracle re7 plasma (#10780) * chore: add eoracle re7 plasma * fix the way second chain is added and add proof --------- Co-authored-by: Real Shaman <85087525+realdealshaman@users.noreply.github.com> --- defi/src/protocols/data4.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 3936807855..65073c6e10 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -15885,8 +15885,9 @@ const data4: Protocol[] = [ proof: [ "https://app.euler.finance/?governor=re7-labs&network=tac", "https://github.com/DefiLlama/defillama-server/pull/10515", + "https://github.com/DefiLlama/defillama-server/pull/10780" // plasma chain ], - chains: [{ chain: "TAC" }], + chains: [{ chain: "TAC" },{chain: "Plasma"}], }, { name: "Chainlink", From 2a31702a9f374cca8ee99607d690dd0c23d1db0f Mon Sep 17 00:00:00 2001 From: Sid Date: Sat, 11 Oct 2025 03:27:13 +0530 Subject: [PATCH 219/398] add eOracle to Edge Capital TAC (#10777) * chore: add edge capital * add reference link for proof --------- Co-authored-by: Real Shaman <85087525+realdealshaman@users.noreply.github.com> --- defi/src/protocols/data4.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 65073c6e10..e9bef5f4a0 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -23649,12 +23649,21 @@ const data4: Protocol[] = [ category: "Risk Curators", chains: ["TAC"], module: "edge-capital/index.js", + oraclesBreakdown: [ + { + name: "eOracle", + type: "Primary", + proof: ["https://github.com/DefiLlama/defillama-server/pull/10777"], + chains: [{ chain: "TAC" }], + }, + ], forkedFromIds: [], twitter: "EdgeCapitalMgmt", listedAt: 1754418907, dimensions: { fees: "edge-capital" - } + }, + }, { id: "6529", From 83db8aaf9c876d5428237ee4577814752e1490d6 Mon Sep 17 00:00:00 2001 From: KPHEMRAJ <65623621+KPHEMRAJ@users.noreply.github.com> Date: Sat, 11 Oct 2025 03:28:01 +0530 Subject: [PATCH 220/398] add mapping for rysk fees (#10776) --- defi/src/protocols/data4.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index e9bef5f4a0..349b670c64 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -20937,7 +20937,8 @@ const data4: Protocol[] = [ parentProtocol: "parent#rysk-finance", listedAt: 1752225071, dimensions: { - derivatives: "rysk-v12" + derivatives: "rysk-v12", + fees: "rysk-v12", } }, { From 8881f95dd71095e8e9cc1c9b7b37fd504b381d47 Mon Sep 17 00:00:00 2001 From: realshaman Date: Sat, 11 Oct 2025 00:51:18 -0600 Subject: [PATCH 221/398] add new listings and parents --- defi/src/protocols/data3.ts | 10 +++++----- defi/src/protocols/data4.ts | 21 +++++++++++++++++++++ defi/src/protocols/parentProtocols.ts | 12 ++++++++++++ 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 4d87a31a31..4598399ceb 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -38764,24 +38764,24 @@ const data3_2: Protocol[] = [ }, { id: "4339", - name: "Velar Protocol", + name: "Velar AMM", address: "stacks:SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.velar-token", symbol: "VELAR", url: "https://www.velar.co", description: `DeFi Liquidity Protocol on Bitcoin`, chain: "Stacks", - logo: `${baseIconsUrl}/velar-protocol.jpg`, + logo: `${baseIconsUrl}/velar-amm.jpg`, audits: "0", audit_note: null, - gecko_id: "velar", - cmcId: "30074", + gecko_id: null, + cmcId: null, category: "Dexs", chains: ["Stacks"], forkedFrom: [], module: "velar-amm/index.js", twitter: "VelarBTC", - github: ["Velar-co"], listedAt: 1711031250, + parentProtocol: "parent#velar-protocol", dimensions: { fees: "velar", dexs: "velar" diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 349b670c64..fd14510a9e 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30915,5 +30915,26 @@ const data4: Protocol[] = [ fees: "dyorswap-launchpad" } }, + { + id: "6842", + name: "Velar Perps", + address: "stacks:SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.velar-token", + symbol: "VELAR", + url: "https://www.velar.co", + description: `DeFi Liquidity Protocol on Bitcoin`, + chain: "Stacks", + logo: `${baseIconsUrl}/velar-perps.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Derivatives", + chains: ["Stacks"], + forkedFrom: [], + module: "velar-perps/index.js", + twitter: "VelarBTC", + listedAt: 1760165283, + parentProtocol: "parent#velar-protocol", + }, ]; export default data4; diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index ce72892e19..c1d9cb7800 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8199,6 +8199,18 @@ const parentProtocols: IParentProtocol[] = [ chains: [], twitter: "DYORSWAPDEX", }, + { + id: "parent#velar-protocol", + name: "Velar Protocol", + url: "https://www.velar.co", + description: "Decentralized exchange on Mode Mainnet", + logo: `${baseIconsUrl}/velar-protocol.jpg`, + gecko_id: "velar", + cmcId: "30074", + chains: [], + twitter: "VelarBTC", + github: ["Velar-co"], + }, ]; export default parentProtocols; From c12670d0a3c91c6325ce3cba82a43e96519d52bf Mon Sep 17 00:00:00 2001 From: tree Date: Sat, 11 Oct 2025 17:17:44 +0530 Subject: [PATCH 222/398] Fix legit spikes (#10797) --- defi/src/protocols/data3.ts | 4 ++-- defi/src/protocols/data4.ts | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 4598399ceb..5ad6fb264c 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -16296,7 +16296,7 @@ const data3_1: Protocol[] = [ dimensions: { fees: "sanctum", dexs: { - genuineSpikes: ["1704240000"], + genuineSpikes: ["1704240000", "1760054400"], adapter: "sanctum" } } @@ -55564,7 +55564,7 @@ const data3_2: Protocol[] = [ listedAt: 1724762254, dimensions: { "aggregator-derivatives": { - genuineSpikes: ["1749686400"], + genuineSpikes: ["1749686400", "1760054400"], adapter: "mux-protocol-agge" } } diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index fd14510a9e..6dcaf80b16 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -6079,7 +6079,10 @@ const data4: Protocol[] = [ audit_links: [], github: ["flashbots"], dimensions: { - fees: "flashbot" + fees: { + adapter: "flashbot", + genuineSpikes: ["1760054400"] + } } }, { @@ -20792,7 +20795,10 @@ const data4: Protocol[] = [ twitter: "CarbonTerminal", dimensions: { fees: "carbon", - derivatives: "carbon" + derivatives: { + adapter: "carbon", + genuineSpikes: ["1760054400"] + } } }, { From 66cb89be3be01dd8ba01bbaf7374ce3b1986487d Mon Sep 17 00:00:00 2001 From: realshaman Date: Sat, 11 Oct 2025 07:24:23 -0600 Subject: [PATCH 223/398] rebrand kana labs to xyra --- defi/src/protocols/data3.ts | 6 +++--- defi/src/protocols/data4.ts | 6 +++--- defi/src/protocols/parentProtocols.ts | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 5ad6fb264c..2a248690f7 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -30922,14 +30922,14 @@ const data3_1: Protocol[] = [ }, { id: "4016", - name: "Kana Labs Aggregator", + name: "Xyra Labs Aggregator", //previousNames: ["Kana Labs"], address: null, symbol: "-", - url: "https://kanalabs.io", + url: "https://app.xyralabs.io/swap", description: "Swap, Stake, Trade, Invest and more across 40 liquidity sources.", chain: "Arbitrum", - logo: `${baseIconsUrl}/kana-labs-aggregator.jpg`, + logo: `${baseIconsUrl}/xyra-labs-aggregator.jpg`, audits: "0", audit_note: null, gecko_id: null, diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 6dcaf80b16..fa52c14c13 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -14865,13 +14865,13 @@ const data4: Protocol[] = [ }, { id: "6175", - name: "Kana Labs Perps", + name: "Xyra Labs Perps", address: null, symbol: "-", - url: "https://www.kana.trade/?market=APT-PERP", + url: "https://www.xyra.trade/?market=BTC-PERP", description: "Swap, Stake, Trade, Invest and more across 40 liquidity sources.", chain: "Aptos", - logo: `${baseIconsUrl}/kana-labs-perps.jpg`, + logo: `${baseIconsUrl}/xyra-labs-perps.jpg`, audits: "0", audit_note: null, gecko_id: null, diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index c1d9cb7800..4a0b47b6d2 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -7169,10 +7169,10 @@ const parentProtocols: IParentProtocol[] = [ }, { id: "parent#kana-labs", - name: "Kana Labs", - url: "https://kanalabs.io", + name: "Xyra Labs", + url: "https://www.xyralabs.io/", description: "Liquid stake. Swap tokens. Trade collectibles.", - logo: `${baseIconsUrl}/kana-labs.png`, + logo: `${baseIconsUrl}/xyra-labs.jpg`, gecko_id: null, cmcId: null, chains: [], From 9514b4a3cbe909b8b8f257058c190fd930a1ec12 Mon Sep 17 00:00:00 2001 From: realshaman Date: Sat, 11 Oct 2025 07:51:46 -0600 Subject: [PATCH 224/398] add ekubo gecko id and cmc id --- defi/src/protocols/data3.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 2a248690f7..466200d816 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -18805,8 +18805,8 @@ const data3_1: Protocol[] = [ logo: `${baseIconsUrl}/ekubo.png`, audits: "2", audit_note: null, - gecko_id: null, - cmcId: null, + gecko_id: "ekubo-protocol" as any, + cmcId: "32416" as any, category: "Dexs", chains: ["Starknet"], module: "ekubo/index.js", From 097b54c4923d9c2eb3cc6d0ba7b9818669d6cf1a Mon Sep 17 00:00:00 2001 From: realshaman Date: Sat, 11 Oct 2025 08:00:35 -0600 Subject: [PATCH 225/398] update url --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index fa52c14c13..89f3f67992 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30926,7 +30926,7 @@ const data4: Protocol[] = [ name: "Velar Perps", address: "stacks:SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.velar-token", symbol: "VELAR", - url: "https://www.velar.co", + url: "https://perpdex.velar.com/trades", description: `DeFi Liquidity Protocol on Bitcoin`, chain: "Stacks", logo: `${baseIconsUrl}/velar-perps.jpg`, From 10b03c042c939c5d0f1f1c6828d2a7b7eeb79853 Mon Sep 17 00:00:00 2001 From: eden Date: Sat, 11 Oct 2025 21:01:32 +0700 Subject: [PATCH 226/398] Update por check (#10799) * add whitelisted spikes * update por checking adapters --- defi/proof-of-reserves/adapters/lorenzo-enzobtc.ts | 2 +- .../adapters/{lorenzo.ts => lorenzo-stbtc.ts} | 2 +- defi/proof-of-reserves/adapters/pumpbtc.ts | 8 ++++---- defi/src/protocols/data3.ts | 5 ++++- defi/src/protocols/data4.ts | 5 ++++- 5 files changed, 14 insertions(+), 8 deletions(-) rename defi/proof-of-reserves/adapters/{lorenzo.ts => lorenzo-stbtc.ts} (93%) diff --git a/defi/proof-of-reserves/adapters/lorenzo-enzobtc.ts b/defi/proof-of-reserves/adapters/lorenzo-enzobtc.ts index 36e45818f1..a2c8592818 100644 --- a/defi/proof-of-reserves/adapters/lorenzo-enzobtc.ts +++ b/defi/proof-of-reserves/adapters/lorenzo-enzobtc.ts @@ -7,7 +7,7 @@ const mintedTokens = [ { chain: 'bsc', address: '0x6A9A65B84843F5fD4aC9a0471C4fc11AFfFBce4a' }, { chain: 'goat', address: '0x6A9A65B84843F5fD4aC9a0471C4fc11AFfFBce4a' }, { chain: 'sei', address: '0x6A9A65B84843F5fD4aC9a0471C4fc11AFfFBce4a' }, - { chain: 'morph', address: '0x6A9A65B84843F5fD4aC9a0471C4fc11AFfFBce4a' }, + // { chain: 'morph', address: '0x6A9A65B84843F5fD4aC9a0471C4fc11AFfFBce4a' }, { chain: 'hemi', address: '0x6A9A65B84843F5fD4aC9a0471C4fc11AFfFBce4a' }, { chain: 'plume_mainnet', address: '0x6A9A65B84843F5fD4aC9a0471C4fc11AFfFBce4a' }, ] diff --git a/defi/proof-of-reserves/adapters/lorenzo.ts b/defi/proof-of-reserves/adapters/lorenzo-stbtc.ts similarity index 93% rename from defi/proof-of-reserves/adapters/lorenzo.ts rename to defi/proof-of-reserves/adapters/lorenzo-stbtc.ts index 798ca80937..eedd3e8cb6 100644 --- a/defi/proof-of-reserves/adapters/lorenzo.ts +++ b/defi/proof-of-reserves/adapters/lorenzo-stbtc.ts @@ -1,7 +1,7 @@ import { getBitcoinReservesAdapter } from '../utils/bitcoin'; // lorenzo stBTC -const protocolId = 'lorenzo'; +const protocolId = 'lorenzo-stbtc'; const mintedTokens = [ { diff --git a/defi/proof-of-reserves/adapters/pumpbtc.ts b/defi/proof-of-reserves/adapters/pumpbtc.ts index 6a8741283c..e5b788508c 100644 --- a/defi/proof-of-reserves/adapters/pumpbtc.ts +++ b/defi/proof-of-reserves/adapters/pumpbtc.ts @@ -27,10 +27,10 @@ const mintedTokens = [ chain: 'arbitrum', address: '0xF469fBD2abcd6B9de8E169d128226C0Fc90a012e', }, - { - chain: 'morph', - address: '0x1fCca65fb6Ae3b2758b9b2B394CB227eAE404e1E', - }, + // { + // chain: 'morph', + // address: '0x1fCca65fb6Ae3b2758b9b2B394CB227eAE404e1E', + // }, { chain: 'sei', address: '0xb45aB56AafB1fFb21eE36C9Dee3B7D8ec5779fC8', diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 466200d816..f51c647cf7 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -24613,7 +24613,10 @@ const data3_1: Protocol[] = [ listedAt: 1700881008, dimensions: { fees: "intent-x", - derivatives: "intent-x" + derivatives: { + adapter: "intent-x", + genuineSpikes: ["1760054400"], + } } }, { diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 89f3f67992..8b890de7c1 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -496,7 +496,10 @@ const data4: Protocol[] = [ listedAt: 1735971859, dimensions: { fees: "SwapX-algebra", - dexs: "SwapX-algebra" + dexs: { + adapter: "SwapX-algebra", + genuineSpikes: ["1760054400"], + }, } }, { From e6c493ba20c61dea36bcc2d0e051258ae7d86a2f Mon Sep 17 00:00:00 2001 From: eden Date: Sat, 11 Oct 2025 21:02:07 +0700 Subject: [PATCH 227/398] add whitelisted spikes (#10798) From 0caff2e6fda36a14ac5f1f4a967062cb0d0e71d3 Mon Sep 17 00:00:00 2001 From: tree Date: Sat, 11 Oct 2025 19:56:39 +0530 Subject: [PATCH 228/398] genuine eth and usual spike (#10800) --- defi/src/protocols/data3.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index f51c647cf7..a35117c404 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -42310,6 +42310,12 @@ const data3_2: Protocol[] = [ module: "dummy.js", twitter: "ethereum", listedAt: 1713453599, + dimensions: { + fees: { + adapter: "ethereum", + genuineSpikes: ["1760054400"], + } + } }, { id: "4489", @@ -51548,7 +51554,10 @@ const data3_2: Protocol[] = [ audit_links: ["https://tech.usual.money/security-and-audits/audits "], listedAt: 1721046229, dimensions: { - fees: "usual" + fees: { + adapter: "usual", + genuineSpikes: ["1760054400"], + } } }, { From f65c29bad07945bbc12530a942cb5057cf690608 Mon Sep 17 00:00:00 2001 From: realshaman Date: Sat, 11 Oct 2025 09:20:32 -0600 Subject: [PATCH 229/398] enable liquidmesh agg volume --- defi/src/protocols/data4.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 8b890de7c1..77a4688113 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30945,5 +30945,27 @@ const data4: Protocol[] = [ listedAt: 1760165283, parentProtocol: "parent#velar-protocol", }, + { + id: "6843", + name: "LiquidMesh", + address: null, + symbol: "-", + url: "https://liquidmesh.io/", + description: `LiquidMesh is a cutting-edge decentralized exchange aggregator, engineered for unparalleled speed, flexibility, and seamless crypto trading`, + chain: "Binance", + logo: `${baseIconsUrl}/liquidmesh.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "DEX Aggregator", + chains: ["Binance", "Solana", "Ethereum", "Base", "Sonic", "Tron"], + forkedFrom: [], + module: "dummy.js", + twitter: "liquidmesh_io", + dimensions: { + aggregators: "liquidmesh" + } + }, ]; export default data4; From 27dfeda92fbb31d36406b88ae8b5ffb4f8d9a8d3 Mon Sep 17 00:00:00 2001 From: realshaman Date: Sat, 11 Oct 2025 17:15:40 -0600 Subject: [PATCH 230/398] add symmio powered perps listings --- defi/src/protocols/data2.ts | 3 +- defi/src/protocols/data4.ts | 101 ++++++++++++++++++++++++-- defi/src/protocols/parentProtocols.ts | 12 +++ 3 files changed, 110 insertions(+), 6 deletions(-) diff --git a/defi/src/protocols/data2.ts b/defi/src/protocols/data2.ts index e191ddfa04..87b539a39d 100644 --- a/defi/src/protocols/data2.ts +++ b/defi/src/protocols/data2.ts @@ -3305,7 +3305,8 @@ const data2: Protocol[] = [ }, { id: "1521", - name: "Horizon Protocol", + name: "Horizon Protocol", // rebrand to Xpanse + previousNames: ["Horizon Protocol"], address: "bsc:0xc0eff7749b125444953ef89682201fb8c6a917cd", symbol: "HZN", url: "https://horizonprotocol.com/", diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 77a4688113..b5a242189b 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -2457,24 +2457,24 @@ const data4: Protocol[] = [ }, { id: "5659", - name: "Treble", + name: "Treble Spot", address: "base:0xb96450dcb16e4a30b999cb5f4087bae9c0ffac4e", symbol: "TREB", url: "https://trebleswap.com", description: "Treble is the first modular V4 DEX on Base with a full-suite DeFi Hub offering cross-chain swaps, fiat on/off ramps, CEX onramps, no-KYC crypto spending, DeFAI integrations and passive income through farming and staking, bringing seamless accessibility to the Base ecosystem", chain: "Base", - logo: `${baseIconsUrl}/treble.png`, + logo: `${baseIconsUrl}/treble-spot.jpg`, audits: "0", audit_note: null, - gecko_id: "treble", - cmcId: "35456", + gecko_id: null, + cmcId: null, + parentProtocol: "parent#treble", category: "Dexs", chains: ["Base"], module: "trebleswap/index.js", twitter: "TrebleSwap", forkedFromIds: ["3710"], - github: ["trebleswap"], listedAt: 1737647275, }, { @@ -30967,5 +30967,96 @@ const data4: Protocol[] = [ aggregators: "liquidmesh" } }, + { + id: "6844", + name: "SpookySwap Perps", + address: "fantom:0x841fad6eae12c286d1fd18d1d525dffa75c7effe", + symbol: "BOO", + url: "https://perps.spooky.fi/trade/SUSDT", + description: "SpookySwap Perps is a cutting edge “Intent-Based” perpetual DEX powered by SYMMIO and hosted by SpookySwap that gives users access to (up to) 60x leverage trading over a range of more than 150 crypto assets", + chain: "Sonic", + logo: `${baseIconsUrl}/spookyswap-perps.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Interface", + chains: ["Sonic"], + forkedFromIds: [], + module: "dummy.js", + twitter: "SpookySwap", + parentProtocol: "parent#spookyswap", + dimensions: { + derivatives: "spooky-perps" + } + }, + /*{ // need to fix this if Horizon Protocol is rebranded to Xpanse + id: "6845", + name: "Xpanse Perps", + address: "bsc:0xc0eff7749b125444953ef89682201fb8c6a917cd", + symbol: "HZN", + url: "https://xpanse.trade/", + description: "Xpanse is an AI-powered, multi-layered liquidity perpetual exchange designed to empower traders for their various trading strategies.", + chain: "Base", + logo: `${baseIconsUrl}/xpanse-perps.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Interface", + chains: ["Base", "Mode", "Arbitrum"], + forkedFromIds: [], + module: "dummy.js", + twitter: "XpanseTrade", + dimensions: { + derivatives: "xpanse-perps" + } + },*/ + { + id: "6846", + name: "LODE", + address: null, + symbol: "-", + url: "https://www.lode.trade/", + description: "Intents-Based Perps on Berachain", + chain: "Berachain", + logo: `${baseIconsUrl}/lode.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Interface", + chains: ["Berachain"], + forkedFromIds: [], + module: "dummy.js", + twitter: "LodeTrade", + dimensions: { + derivatives: "lode-perps" + } + }, + { + id: "6847", + name: "Treble Perps", + address: "base:0xb96450dcb16e4a30b999cb5f4087bae9c0ffac4e", + symbol: "TREB", + url: "https://perps.trebleswap.com/trade", + description: + "Treble Perps is an perps platform powered by Symmio on Base.", + chain: "Base", + logo: `${baseIconsUrl}/treble-perps.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + parentProtocol: "parent#treble", + category: "Interface", + chains: ["Base"], + module: "dummy.js", + twitter: "TrebleSwap", + forkedFromIds: [], + dimensions: { + derivatives: "treble-perps" + } + }, ]; export default data4; diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index 4a0b47b6d2..9fb5b4f5db 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8211,6 +8211,18 @@ const parentProtocols: IParentProtocol[] = [ twitter: "VelarBTC", github: ["Velar-co"], }, + { + id: "parent#treble", + name: "Treble", + url: "https://trebleswap.com", + description: "Treble is the first modular V4 DEX on Base with a full-suite DeFi Hub offering cross-chain swaps, fiat on/off ramps, CEX onramps, no-KYC crypto spending, DeFAI integrations and passive income through farming and staking, bringing seamless accessibility to the Base ecosystem", + logo: `${baseIconsUrl}/treble.png`, + gecko_id: "treble", + cmcId: "35456", + chains: [], + twitter: "TrebleSwap", + github: ["trebleswap"], + }, ]; export default parentProtocols; From 451794d7f422bcb6999d0a87b40af32b47eeb10c Mon Sep 17 00:00:00 2001 From: realshaman Date: Sat, 11 Oct 2025 17:20:15 -0600 Subject: [PATCH 231/398] fix --- defi/dimension-adapters | 2 +- defi/src/protocols/data2.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/dimension-adapters b/defi/dimension-adapters index fbfad6e756..b284b28ba8 160000 --- a/defi/dimension-adapters +++ b/defi/dimension-adapters @@ -1 +1 @@ -Subproject commit fbfad6e7560bae9d6a1813f5bdd73b24f6f32dbf +Subproject commit b284b28ba8f936347467944cede0beaba89e1e4a diff --git a/defi/src/protocols/data2.ts b/defi/src/protocols/data2.ts index 87b539a39d..e961f7ae58 100644 --- a/defi/src/protocols/data2.ts +++ b/defi/src/protocols/data2.ts @@ -3306,7 +3306,7 @@ const data2: Protocol[] = [ { id: "1521", name: "Horizon Protocol", // rebrand to Xpanse - previousNames: ["Horizon Protocol"], + //previousNames: ["Horizon Protocol"], address: "bsc:0xc0eff7749b125444953ef89682201fb8c6a917cd", symbol: "HZN", url: "https://horizonprotocol.com/", From 8a5be2e6ac2727bfe885b55f6ec45777d99b59fa Mon Sep 17 00:00:00 2001 From: realshaman Date: Sun, 12 Oct 2025 10:58:58 -0600 Subject: [PATCH 232/398] update category --- defi/src/protocols/data2.ts | 4 ++-- defi/src/protocols/data3.ts | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/defi/src/protocols/data2.ts b/defi/src/protocols/data2.ts index e961f7ae58..c97353b9dd 100644 --- a/defi/src/protocols/data2.ts +++ b/defi/src/protocols/data2.ts @@ -28609,7 +28609,7 @@ const data2: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Options", + category: "Options Vault", chains: ["Polygon"], oraclesBreakdown: [ { name: "Chainlink", type: "Primary", proof: []} ], forkedFrom: [], @@ -28978,7 +28978,7 @@ const data2: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Options", + category: "Options Vault", chains: ["Ethereum"], oraclesBreakdown: [ { name: "Chainlink", type: "Primary", proof: []} ], forkedFrom: [], diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index a35117c404..985eb102f4 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -12200,7 +12200,7 @@ const data3_1: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Options", + category: "Options Vault", chains: ["Ergo"], module: "sigmao/index.js", twitter: "SigmaOptions", @@ -18855,7 +18855,7 @@ const data3_1: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Options", + category: "Options Vault", chains: ["Arbitrum"], module: "valorem/index.js", forkedFrom: [], @@ -49115,7 +49115,7 @@ const data3_2: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Options", + category: "Options Vault", chains: ["zkSync Era"], oraclesBreakdown: [ { name: "Chainlink", type: "Primary", proof: []} ], forkedFrom: [], From ed8835ff6cd851921a48d5fdbd87f05002c0aee6 Mon Sep 17 00:00:00 2001 From: realshaman Date: Sun, 12 Oct 2025 11:09:42 -0600 Subject: [PATCH 233/398] update categories --- defi/src/protocols/data1.ts | 4 ++-- defi/src/protocols/data3.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/defi/src/protocols/data1.ts b/defi/src/protocols/data1.ts index 1c703ecd6b..847fb2b992 100644 --- a/defi/src/protocols/data1.ts +++ b/defi/src/protocols/data1.ts @@ -13012,7 +13012,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the audit_note: null, gecko_id: "fodl-finance", cmcId: "12767", - category: "Options", + category: "Leveraged Farming", chains: ["Ethereum"], module: "fodl/index.js", twitter: "FODLfi", @@ -17847,7 +17847,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the audit_note: null, gecko_id: "everest-token", cmcId: "12154", - category: "Options", + category: "DAO Service Provider", chains: ["Avalanche"], module: "everestdao/index.js", twitter: "EverestDAO", diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 985eb102f4..50b67793a7 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -27988,7 +27988,7 @@ const data3_1: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Options", + category: "Options Vault", forkedFrom: [], chains: ["Binance"], module: "dvol/index.js", @@ -53420,7 +53420,7 @@ const data3_2: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Options", + category: "Synthetics", chains: ["Arbitrum"], forkedFrom: [], module: "umoja/index.js", From d05ce313ea72379357024c66d43fc353889195f9 Mon Sep 17 00:00:00 2001 From: realshaman Date: Sun, 12 Oct 2025 11:12:04 -0600 Subject: [PATCH 234/398] update category --- defi/src/protocols/data1.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data1.ts b/defi/src/protocols/data1.ts index 847fb2b992..ce32886772 100644 --- a/defi/src/protocols/data1.ts +++ b/defi/src/protocols/data1.ts @@ -16815,7 +16815,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the audit_note: null, gecko_id: "risq-protocol", cmcId: "12467", - category: "Options", + category: "Prediction Market", chains: ["Binance"], module: "risq.js", twitter: "risqprotocol", From 8a1132818b04ddc528842d9b0effcdc61e294d8f Mon Sep 17 00:00:00 2001 From: realshaman Date: Sun, 12 Oct 2025 12:15:13 -0600 Subject: [PATCH 235/398] add new listings --- defi/src/protocols/data4.ts | 71 +++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index b5a242189b..12b395d4af 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31058,5 +31058,76 @@ const data4: Protocol[] = [ derivatives: "treble-perps" } }, + { + id: "6848", + name: "BeFi Perps", + address: "0x8b9b95292f890df47fff5ac9cbe93d5fc242bd51", + symbol: "BEFI", + url: "https://perps.befilabs.com/", + description: + "Perps platform powered by Symmio on Base.", + chain: "Base", + logo: `${baseIconsUrl}/befi-perps.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Interface", + chains: ["Base"], + module: "dummy.js", + twitter: "BefiLabs", + forkedFromIds: [], + dimensions: { + derivatives: "befy-perps" + } + }, + { + id: "6849", + name: "Gryps", + address: null, + symbol: "-", + url: "http://gryps.trade/", + description: + "Perps platform powered by Symmio on Arbitrum.", + chain: "Arbitrum", + logo: `${baseIconsUrl}/gryps.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Interface", + chains: ["Arbitrum"], + module: "dummy.js", + twitter: "gryps_trade", + forkedFromIds: [], + dimensions: { + derivatives: "gryps-perps" + }, + deadUrl: true + }, + { + id: "6850", + name: "Vibe Trading", + address: null, + symbol: "-", + url: "https://vibe.trading/", + description: + "Perps platform powered by Symmio on Base & Arbitrum.", + chain: "Base", + logo: `${baseIconsUrl}/vibe-trading.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Interface", + chains: ["Base","Arbitrum"], + module: "dummy.js", + twitter: "vibe_trading", + forkedFromIds: [], + dimensions: { + derivatives: "vibe-perps" + }, + deadUrl: true + }, ]; export default data4; From f4f8512c8cdbea68d095c1b448df5df656d239fe Mon Sep 17 00:00:00 2001 From: realshaman Date: Sun, 12 Oct 2025 12:22:58 -0600 Subject: [PATCH 236/398] add basedmarkets listing --- defi/src/protocols/data4.ts | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 12b395d4af..6e4e14aa38 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31127,7 +31127,29 @@ const data4: Protocol[] = [ dimensions: { derivatives: "vibe-perps" }, - deadUrl: true + }, + { + id: "6851", + name: "basedmarkets", + address: null, + symbol: "-", + url: "https://trade.based.markets/", + description: + "Perps platform powered by Symmio on Base.", + chain: "Base", + logo: `${baseIconsUrl}/basedmarkets.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Interface", + chains: ["Base"], + module: "dummy.js", + twitter: "basedmarkets", + forkedFromIds: [], + dimensions: { + derivatives: "based-perps" + }, }, ]; export default data4; From c87ab69d4b89ca63ffdcd901912432e40277e942 Mon Sep 17 00:00:00 2001 From: realshaman Date: Sun, 12 Oct 2025 22:45:59 -0600 Subject: [PATCH 237/398] comment dup --- defi/src/protocols/data4.ts | 46 ++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 6e4e14aa38..774b87a7f4 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31128,28 +31128,28 @@ const data4: Protocol[] = [ derivatives: "vibe-perps" }, }, - { - id: "6851", - name: "basedmarkets", - address: null, - symbol: "-", - url: "https://trade.based.markets/", - description: - "Perps platform powered by Symmio on Base.", - chain: "Base", - logo: `${baseIconsUrl}/basedmarkets.jpg`, - audits: "0", - audit_note: null, - gecko_id: null, - cmcId: null, - category: "Interface", - chains: ["Base"], - module: "dummy.js", - twitter: "basedmarkets", - forkedFromIds: [], - dimensions: { - derivatives: "based-perps" - }, - }, + // { + // id: "6851", + // name: "basedmarkets", + // address: null, + // symbol: "-", + // url: "https://trade.based.markets/", + // description: + // "Perps platform powered by Symmio on Base.", + // chain: "Base", + // logo: `${baseIconsUrl}/basedmarkets.jpg`, + // audits: "0", + // audit_note: null, + // gecko_id: null, + // cmcId: null, + // category: "Interface", + // chains: ["Base"], + // module: "dummy.js", + // twitter: "basedmarkets", + // forkedFromIds: [], + // dimensions: { + // derivatives: "based-perps" + // }, + // }, ]; export default data4; From 4d3088ecae03e0bdcd2ebc3e650d943fe7cac9c6 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 13 Oct 2025 10:34:32 +0200 Subject: [PATCH 238/398] use table for outdated message --- .../handlers/storeAdaptorData/index.ts | 2 +- defi/src/utils/findOutdated.ts | 81 +++++++++++-------- 2 files changed, 47 insertions(+), 36 deletions(-) diff --git a/defi/src/adaptors/handlers/storeAdaptorData/index.ts b/defi/src/adaptors/handlers/storeAdaptorData/index.ts index 24cd48b70e..15e806a648 100644 --- a/defi/src/adaptors/handlers/storeAdaptorData/index.ts +++ b/defi/src/adaptors/handlers/storeAdaptorData/index.ts @@ -475,7 +475,7 @@ async function getRecentData(adapterType: AdapterType) { const dataItem = recentData[protocolId] const { dimStats, records } = dataItem let hasSignificantData = false - if (dataItem.records.length < 5) { + if (dataItem.records.length < 3) { dataItem.tooFewRecords = true delete dataItem.records continue; // too little data diff --git a/defi/src/utils/findOutdated.ts b/defi/src/utils/findOutdated.ts index a75b932a36..357d64360c 100644 --- a/defi/src/utils/findOutdated.ts +++ b/defi/src/utils/findOutdated.ts @@ -6,14 +6,14 @@ import { util } from "@defillama/sdk"; import { importAdapter } from "./imports/importAdapter"; import { getLatestProtocolItems, initializeTVLCacheDB } from "../api2/db"; -const { humanizeNumber: { humanizeNumber, } } = util +const { humanizeNumber: { humanizeNumber, }, tableToString } = util function humanizeTimeDifference(timeDelta: number) { const hours = (timeDelta) / 3600 if (hours <= 24) { - return `(${Math.round(hours)} hours ago)` + return `${Math.round(hours)} hours` } else { - return `(${Math.round(hours / 24)} days ago)` + return `${Math.round(hours / 24)} days` } } @@ -22,32 +22,43 @@ type InfoProtocol = { tvl: number } | null -function printOutdated(outdated: [string, InfoProtocol, boolean, number][], maxLengthProtocolName: number, now: number) { - return outdated.sort((a, b) => { - if (a[1] === null) { +function printOutdated(outdated: OutdatedData[], { title, now = toUNIXTimestamp(Date.now()), maxLengthProtocolName = 31 }: { title?: string, now?: number, maxLengthProtocolName?: number } = {}) { + const sorted = outdated.sort((a, b) => { + if (!a.lastUpdate) { return 1 - } else if (b[1] === null) { + } else if (!b.lastUpdate) { return -1 } else { - return a[1].time - b[1].time + return a!.lastUpdate - b!.lastUpdate } - }).map(line => { - line[0] = line[0].padEnd(maxLengthProtocolName); - let text: string - if (line[1] === null) { - text = "No TVL" - } else { - text = `Last update: ${new Date(line[1].time * 1000).toDateString()} ${humanizeTimeDifference(now - line[1].time)} - ${humanizeNumber(line[1].tvl)}` - } - return `${line[0]} - ${text}`; - }).join('\n') + }) + const tableData = sorted.map((data) => { + const res: any = {} + if (data.protocolName.length > maxLengthProtocolName) data.protocolName = data.protocolName.slice(0, maxLengthProtocolName - 3) + '...' + res.Name = data.protocolName + res['Last Update'] = data.lastUpdate ? humanizeTimeDifference(now - data.lastUpdate) : '-' + res['Tvl'] = data.tvl ? humanizeNumber(data.tvl) : 'No TVL' + return res + }) + + return tableToString(tableData, { title, columns: ['Name', 'Last Update', 'Tvl'] }) } const _getLatestTvl = async (protocol: any) => getLastRecord(hourlyTvl(protocol.id)) -export async function getOutdated(maxDrift: number, getLatestTvl = _getLatestTvl, options: { categories?: string[] } = {}) { +type OutdatedData = { + protocolName: string, + lastUpdate?: number, // unix timestamp + tvl?: number, + refillable: boolean, + runIndex: number, // not used anywhere +} + +export async function getOutdated(maxDrift: number, getLatestTvl: any, options: { categories?: string[] } = {}) { + if (!getLatestTvl) throw new Error("getLatestTvl is required") + const now = toUNIXTimestamp(Date.now()); - const outdated = [] as [string, InfoProtocol, boolean, number][]; + const outdated = [] as OutdatedData[]; await Promise.all(protocols.concat(treasuries).map(async (protocol, index) => { if (options.categories && protocol.category && !options.categories.includes(protocol.category)) { return @@ -67,36 +78,36 @@ export async function getOutdated(maxDrift: number, getLatestTvl = _getLatestTvl } else { return } - const module = await importAdapter(protocol) + const module = importAdapter(protocol) if (module.deadFrom) { return } const refillable = !(module.fetch || module.timetravel === false) - outdated.push([protocol.name, text, refillable, index]) + outdated.push({ + protocolName: protocol.name, + lastUpdate: text?.time, + tvl: text?.tvl, + refillable, + runIndex: index, + }) })) return outdated } -export function buildOutdatedMessage(outdated: [string, InfoProtocol, boolean, number][]) { - const now = toUNIXTimestamp(Date.now()); +export function buildOutdatedMessage(outdated: OutdatedData[]) { if (outdated.length === 0) { return null } - const maxLengthProtocolName = outdated.reduce((max, line) => Math.max(max, line[0].length), 0) const maxDisplay = 101 const logViewer = process.env.LOG_VIEWER_URL - return `REFILLABLE -${printOutdated(outdated.filter(p => p[2]).slice(0, maxDisplay), maxLengthProtocolName, now)} -${outdated.filter(p => p[2]).length > maxDisplay ? `... and ${outdated.filter(p => p[2]).length - maxDisplay} more` : ""} - -CAN'T BE REFILLED (needs fixing asap) -${printOutdated(outdated.filter(p => !p[2]).slice(0, maxDisplay), maxLengthProtocolName, now)} -${outdated.filter(p => !p[2]).length > maxDisplay ? `... and ${outdated.filter(p => !p[2]).length - maxDisplay} more` : ""} - -${logViewer ? `Check error logs at ${logViewer}` : ""} -` + const responseStrings = [ + printOutdated(outdated.slice(0, maxDisplay)), + outdated.length > maxDisplay ? `... and ${outdated.length - maxDisplay} more` : "", + logViewer ? `Check error logs at ${logViewer}` : "" + ] + return responseStrings.filter(i => i?.length).join('\n') } export default async function findOutdated(maxDrift: number) { From cc999f34f9223ecc0c1d1951548ca7bb24644df4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 13 Oct 2025 13:54:17 +0200 Subject: [PATCH 239/398] add distressed tokens --- coins/src/adapters/other/distressed.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/coins/src/adapters/other/distressed.ts b/coins/src/adapters/other/distressed.ts index 961081a6ab..e36dc6a808 100644 --- a/coins/src/adapters/other/distressed.ts +++ b/coins/src/adapters/other/distressed.ts @@ -359,6 +359,10 @@ export const contracts: { [chain: string]: { [token: string]: string } } = { BTC: "0x935765ad27a1af00f73097c998a9fb721d2d7790", ETH: "0xb4373ebb073a4dcba47e567d075a9583fa3c763e", }, + plume_mainnet: { + BTC: '0xCfEc8129ecf97e56F106392c04eD02BC20fC7FeC', // dunno the source/backing of these tokens + pUSDT: '0xCCA84731C19EB911C985E9d1892E0935C104Abce', // dunno the source/backing of these tokens + } }; export const distressedAssets = Object.fromEntries( From 9e4b6c13c0ab85c06f556c816f8ae03cbb5dcfbf Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 13 Oct 2025 12:56:20 +0100 Subject: [PATCH 240/398] 13oct coins (#10806) * wxpl * remove plume BTC --- coins/src/adapters/tokenMapping.json | 20 +++++++++++++++----- common/chainToCoingeckoId.ts | 3 ++- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index 7f393ec95e..575d22609f 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -61,6 +61,11 @@ } }, "berachain": { + "0xDeadf18CB9233770FE8874c78D7483b4A126B34a": { + "to": "coingecko#berachain-bera", + "decimals": 18, + "symbol": "pBERA" + }, "0x118D2cEeE9785eaf70C15Cd74CD84c9f8c3EeC9a": { "decimals": "18", "symbol": "sWBERA", @@ -10592,11 +10597,6 @@ "symbol": "pUSDT", "to": "coingecko#tether" }, - "0xCfEc8129ecf97e56F106392c04eD02BC20fC7FeC": { - "decimals": "18", - "symbol": "BTC", - "to": "coingecko#bitcoin" - }, "0x4772D2e014F9fC3a820C444e3313968e9a5C8121": { "decimals": "18", "symbol": "yUSD", @@ -10989,6 +10989,11 @@ } }, "katana": { + "0xcA52d08737E6Af8763a2bF6034B3B03868f24DDA": { + "to": "coingecko#dtrinity-usd", + "decimals": 18, + "symbol": "dUSD" + }, "0xb77f1a8cb126d8567f226f990f84e2f698cc30f8": { "decimals": "18", "symbol": "SPECTRA", @@ -12151,6 +12156,11 @@ } }, "plasma": { + "0x6100E367285b01F48D07953803A2d8dCA5D19873": { + "to": "coingecko#wrapped-xpl", + "decimals": 18, + "symbol": "WXPL" + }, "0xC4374775489CB9C56003BF2C9b12495fC64F0771": { "decimals": 6, "symbol": "syrupUSDT", diff --git a/common/chainToCoingeckoId.ts b/common/chainToCoingeckoId.ts index f7ada597cc..80822c971c 100644 --- a/common/chainToCoingeckoId.ts +++ b/common/chainToCoingeckoId.ts @@ -237,7 +237,8 @@ export const chainToCoingeckoId = { zero_network: "zero-network", astrzk: "astar-zkevm", tac: "tac", - btnx: "botanix" + btnx: "botanix", + plasma: 'plasma' }; export const cgPlatformtoChainId: { [key: string]: string } = Object.entries(chainToCoingeckoId).reduce( From 1dccfcbd3e46593593cbd397ff0b9d6e264d1039 Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Mon, 13 Oct 2025 14:17:27 +0200 Subject: [PATCH 241/398] Add eos-evm as deadChains (#10804) * add eos-evm as deadChains * prettier * Fix deadChains set by replacing hyphen with underscore --------- Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- defi/src/storeTvlInterval/getAndStoreTvl.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/storeTvlInterval/getAndStoreTvl.ts b/defi/src/storeTvlInterval/getAndStoreTvl.ts index b14b5f4d75..db91ed7b30 100644 --- a/defi/src/storeTvlInterval/getAndStoreTvl.ts +++ b/defi/src/storeTvlInterval/getAndStoreTvl.ts @@ -177,7 +177,7 @@ type StoreTvlOptions = { isRunFromUITool?: boolean } -const deadChains = new Set(['heco', 'astrzk', 'real', 'milkomeda', 'milkomeda_a1']) +const deadChains = new Set(['heco', 'astrzk', 'real', 'milkomeda', 'milkomeda_a1', 'eos_evm']) export type storeTvl2Options = StoreTvlOptions & { unixTimestamp: number, From f69b8866383b792a733dac5956d5551113cd492e Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 13 Oct 2025 13:23:14 +0100 Subject: [PATCH 242/398] Bridged TVL third party fix (#10783) * canonical LZ asset filter bridged TVL * promise pool * mUSD --- defi/l2/adapters/manual.ts | 1 + defi/l2/adapters/thirdParty.ts | 67 +++++++++++++++------------------- 2 files changed, 30 insertions(+), 38 deletions(-) diff --git a/defi/l2/adapters/manual.ts b/defi/l2/adapters/manual.ts index 5b989da4af..2a5b2b129b 100644 --- a/defi/l2/adapters/manual.ts +++ b/defi/l2/adapters/manual.ts @@ -128,6 +128,7 @@ export const additional: { [chain: string]: string[] } = { ], unichain: ["0x078D782b760474a361dDA0AF3839290b0EF57AD6"], reya: ["0x162B78e827A8DB8173D13735C08c8D40Cb5cCdAB"], + linea: ["0xaca92e438df0b2401ff60da7e4337b687a2435da"] // mUSD }; export const excluded: { [chain: string]: string[] } = { optimism: [ diff --git a/defi/l2/adapters/thirdParty.ts b/defi/l2/adapters/thirdParty.ts index 7d9cca888e..b6828f5114 100644 --- a/defi/l2/adapters/thirdParty.ts +++ b/defi/l2/adapters/thirdParty.ts @@ -6,6 +6,7 @@ import { bridgedTvlMixedCaseChains } from "../../src/utils/shared/constants"; import fetch from "node-fetch"; import { additional, excluded } from "./manual"; import axios from "axios"; +import PromisePool from "@supercharge/promise-pool"; let bridgePromises: { [bridge: string]: Promise } = {}; const addresses: { [chain: Chain]: Address[] } = {}; @@ -123,7 +124,7 @@ const layerzero = async (): Promise => { "https://gist.githubusercontent.com/vrtnd/02b1125edf1afe2baddbf1027157aa31/raw/5cab2009357b1acb8982e6a80e66b64ab7ea1251/mappings.json" ).then((r) => r.json()), fetch("https://metadata.layerzero-api.com/v1/metadata").then((r) => r.json()), - ]) + ]); } const data = await bridgePromises[bridge]; @@ -134,26 +135,28 @@ const layerzero = async (): Promise => { }); const nonEvmMapping: { [key: string]: string } = { - solana: "solana", - aptos: "aptos", - ton: "ton", - movement: "move", + "solana": "solana", + "aptos": "aptos", + "ton": "ton", + "movement": "move", "sui-mainnet": "sui", }; Object.keys(data[1]).map((chain: string) => { if (chain.endsWith("-testnet")) return; if (!data[1][chain].chainDetails || !data[1][chain].tokens) return; - + const { chainType, chainId, nativeChainId } = data[1][chain].chainDetails; - if (chainType != "evm" && !nonEvmMapping[chain]) return - const destinationChainSlug = - chainIdMap[chainId] ?? chainIdMap[nativeChainId] ?? nonEvmMapping[chain]; + if (chainType != "evm" && !nonEvmMapping[chain]) return; + const destinationChainSlug = chainIdMap[chainId] ?? chainIdMap[nativeChainId] ?? nonEvmMapping[chain]; if (!destinationChainSlug) return; if (!allChainKeys.includes(destinationChainSlug)) return; if (!addresses[destinationChainSlug]) addresses[destinationChainSlug] = []; - const tokens = Object.keys(data[1][chain].tokens).filter((t: string) => addresses[destinationChainSlug].indexOf(t.toLowerCase()) == -1 ); + const tokens = Object.keys(data[1][chain].tokens).filter( + (t: string) => + addresses[destinationChainSlug].indexOf(t.toLowerCase()) == -1 && !data[1][chain].tokens[t].canonicalAsset + ); addresses[destinationChainSlug].push(...tokens); }); @@ -214,51 +217,39 @@ const unit = async (): Promise => { doneAdapters.push(bridge); }; -const adapters = [ - axelar().catch((e) => { - throw new Error(`Axelar fails with: ${e}`); - }), - wormhole().catch((e) => { - throw new Error(`Wormhole fails with: ${e}`); - }), - celer().catch((e) => { - throw new Error(`Celer fails with: ${e}`); - }), - hyperlane().catch((e) => { - throw new Error(`Hyperlane fails with: ${e}`); - }), - layerzero().catch((e) => { - throw new Error(`Layerzero fails with: ${e}`); - }), - flow().catch((e) => { - throw new Error(`flow fails with: ${e}`); - }), - unit().catch((e) => { - throw new Error(`unit fails with: ${e}`); - }), -]; +const adapters = { axelar, wormhole, celer, hyperlane, layerzero, flow, unit }; + const filteredAddresses: { [chain: Chain]: Address[] } = {}; const tokenAddresses = async (): Promise<{ [chain: Chain]: Address[] }> => { - await Promise.all(adapters); - if (adapters.length == doneAdapters.length && mappingDone) return filteredAddresses; + await PromisePool.withConcurrency(5) + .for(Object.entries(adapters)) + .process(async ([key, adapter]: any) => { + try { + await adapter(); + } catch (e: any) { + throw new Error(`${key} fails with ${e.message}`); + } + }); + + if (Object.keys(adapters).length == doneAdapters.length && mappingDone) return filteredAddresses; Object.keys(addresses).map((chain: string) => { let chainAddresses = chain in excluded ? addresses[chain].filter((t: string) => !excluded[chain].includes(t)) : addresses[chain]; if (!bridgedTvlMixedCaseChains.includes(chain)) chainAddresses = chainAddresses.map((t: string) => t.toLowerCase()); if (!(chain in additional)) { - filteredAddresses[chain] = chainAddresses; + filteredAddresses[chain] = [...new Set(chainAddresses)]; return; } const additionalTokens = bridgedTvlMixedCaseChains.includes(chain) ? additional[chain] : additional[chain].map((t: string) => t.toLowerCase()); - filteredAddresses[chain] = [...chainAddresses, ...additionalTokens]; + filteredAddresses[chain] = [...new Set([...chainAddresses, ...additionalTokens])]; }); mappingDone = true; return filteredAddresses; }; -export default tokenAddresses; +export default tokenAddresses; \ No newline at end of file From cbae6afc0845f35a72f13abe2cb64ed52a8905fc Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 13 Oct 2025 08:15:09 -0600 Subject: [PATCH 243/398] add gecko id --- defi/src/protocols/data4.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 774b87a7f4..feecc49391 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -10370,7 +10370,7 @@ const data4: Protocol[] = [ { id: "5984", name: "Anvil", - address: "0xAEEAa594e7dc112D67b8547fe9767a02c15B5597", // new CA after passed proposal + address: "0xAEEAa594e7dc112D67b8547fe9767a02c15B5597", symbol: "ANVL", url: "https://anvil.xyz/", description: @@ -10379,7 +10379,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/anvil.jpg`, audits: "2", audit_note: null, - gecko_id: null, + gecko_id: "anvil", cmcId: null, category: "Collateral Management", chains: ["Ethereum"], From 9485d8327bd287a8386b9c0f35c428e1ce0b7d0e Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 13 Oct 2025 17:00:32 +0200 Subject: [PATCH 244/398] deprecate setEnvSecrets --- coins/src/adapters/bridges/layerzero.ts | 2 -- coins/src/adapters/markets/xlpt.ts | 2 -- coins/src/adapters/moneyMarkets/aries.ts | 2 -- coins/src/cli/refill.ts | 5 ----- coins/src/scripts/checkRpcBlocks.ts | 2 -- coins/src/scripts/defiCoins.ts | 2 -- defi/l2/cli/backfillAll.ts | 2 -- defi/l2/cli/backfillSingle.ts | 2 -- defi/l2/index.ts | 2 -- defi/l2/v2/index.ts | 12 ++++++------ defi/src/cli/backfillEmissions.ts | 2 -- defi/src/utils/shared/setEnvSecrets.ts | 1 + 12 files changed, 7 insertions(+), 29 deletions(-) diff --git a/coins/src/adapters/bridges/layerzero.ts b/coins/src/adapters/bridges/layerzero.ts index 15f6618930..a8f3e8f6a3 100644 --- a/coins/src/adapters/bridges/layerzero.ts +++ b/coins/src/adapters/bridges/layerzero.ts @@ -3,7 +3,6 @@ import { getSymbolAndDecimals, } from "../../scripts/coingeckoUtils"; import { chainsThatShouldNotBeLowerCased } from "../../utils/shared/constants"; -import setEnvSecrets from "../../utils/shared/setEnvSecrets"; import { fetch } from "../utils"; import { multiCall } from "@defillama/sdk/build/abi/abi2"; import { chainIdMap } from "./celer"; @@ -112,7 +111,6 @@ export default async function main() { } async function getMoreLayerZeroMappings(mappings: any[]) { - await setEnvSecrets(); const solanaTokensPromise = cacheSolanaTokens(); const res = await fetch( diff --git a/coins/src/adapters/markets/xlpt.ts b/coins/src/adapters/markets/xlpt.ts index ecc2647a0d..aa04596e92 100644 --- a/coins/src/adapters/markets/xlpt.ts +++ b/coins/src/adapters/markets/xlpt.ts @@ -1,7 +1,6 @@ import fetch from "node-fetch"; import getWrites from "../utils/getWrites"; import { Write } from "../utils/dbInterfaces"; -import setEnvSecrets from "../../utils/shared/setEnvSecrets"; const assets: { [symbol: string]: string } = { "sUSDE/USDC.x": @@ -17,7 +16,6 @@ const assets: { [symbol: string]: string } = { }; export async function xlpt(timestamp: number = 0): Promise { - await setEnvSecrets(); const pricesObject: any = {}; await Promise.all( Object.keys(assets).map(async (symbol) => { diff --git a/coins/src/adapters/moneyMarkets/aries.ts b/coins/src/adapters/moneyMarkets/aries.ts index 2a59d39b32..057e7cf3cb 100644 --- a/coins/src/adapters/moneyMarkets/aries.ts +++ b/coins/src/adapters/moneyMarkets/aries.ts @@ -1,13 +1,11 @@ import { Write } from "../utils/dbInterfaces"; import fetch from "node-fetch"; import { addToDBWritesList } from "../utils/database"; -import setEnvSecrets from "../../utils/shared/setEnvSecrets"; const chain = "aptos"; const url = "https://api-v2.ariesmarkets.xyz/coinInfo.currentInfo"; export async function aries(timestamp: number = 0) { - await setEnvSecrets(); if (timestamp != 0) throw new Error(`Aries adapter only works for current time`); const writes: Write[] = []; diff --git a/coins/src/cli/refill.ts b/coins/src/cli/refill.ts index ec34a9b5d5..923e276eb8 100644 --- a/coins/src/cli/refill.ts +++ b/coins/src/cli/refill.ts @@ -1,13 +1,9 @@ import adapters from "../adapters/index"; import { - batchGet, batchWrite, - DELETE, - getHistoricalValues, } from "../utils/shared/dynamodb"; import { filterWritesWithLowConfidence } from "../adapters/utils/database"; import { withTimeout } from "../utils/shared/withTimeout"; -import setEnvSecrets from "../utils/shared/setEnvSecrets"; import PromisePool from "@supercharge/promise-pool"; import { getCurrentUnixTimestamp } from "../utils/date"; @@ -83,7 +79,6 @@ async function handler(adapterTorefill: string, timestamp: number) { } } // ts-node coins/src/cli/refill.ts async function main() { - await setEnvSecrets(); const timestampArray = createTimestampArray(); for (let i of timestampArray) { await PromisePool.withConcurrency(10) diff --git a/coins/src/scripts/checkRpcBlocks.ts b/coins/src/scripts/checkRpcBlocks.ts index 569242bd2a..28954dfda8 100644 --- a/coins/src/scripts/checkRpcBlocks.ts +++ b/coins/src/scripts/checkRpcBlocks.ts @@ -1,6 +1,5 @@ import { getProvider } from "@defillama/sdk"; import PromisePool from "@supercharge/promise-pool"; -import setEnvSecrets from "../utils/shared/setEnvSecrets"; import { adaptersRepoChainsJson as chains } from "../getChains"; import { sendMessage } from "../../../defi/src/utils/discord"; @@ -68,7 +67,6 @@ async function logErrors(results: Results) { } async function main() { - // await setEnvSecrets(); const results: { [chain: string]: Rpc[] } = {}; await collectHeights(results); const errors = await logErrors(results); diff --git a/coins/src/scripts/defiCoins.ts b/coins/src/scripts/defiCoins.ts index 8765b01068..0a7139579f 100644 --- a/coins/src/scripts/defiCoins.ts +++ b/coins/src/scripts/defiCoins.ts @@ -8,7 +8,6 @@ console.log(process.version); import adapters from "../adapters/index"; console.log("adapters imported"); import { PromisePool } from "@supercharge/promise-pool"; -// import setEnvSecrets from "../utils/shared/setEnvSecrets"; console.log("imports successful"); @@ -23,7 +22,6 @@ const step = 2000; const timeout = process.env.LLAMA_RUN_LOCAL ? 8400000 : 1740000; //29mins async function storeDefiCoins() { - // await setEnvSecrets(); process.env.tableName = "prod-coins-table"; const adaptersArray = Object.entries(adapters); const protocolIndexes: number[] = Array.from( diff --git a/defi/l2/cli/backfillAll.ts b/defi/l2/cli/backfillAll.ts index 547130281f..dd682ef76b 100644 --- a/defi/l2/cli/backfillAll.ts +++ b/defi/l2/cli/backfillAll.ts @@ -2,7 +2,6 @@ import { getCurrentUnixTimestamp, secondsInDay } from "../../src/utils/date"; import PromisePool from "@supercharge/promise-pool"; import findTvls from "../tvl"; import { overwrite } from "../storeToDb"; -import setEnvSecrets from "../../src/utils/shared/setEnvSecrets"; const end = getCurrentUnixTimestamp(); const start = getStart("2024-01-01"); @@ -28,7 +27,6 @@ async function proc(timestamp: number) { await overwrite(res); } async function backfill() { - await setEnvSecrets(); const errors: number[] = []; let successCount: number = 0; await PromisePool.withConcurrency(1) diff --git a/defi/l2/cli/backfillSingle.ts b/defi/l2/cli/backfillSingle.ts index 03811e04f8..ee2bf409a0 100644 --- a/defi/l2/cli/backfillSingle.ts +++ b/defi/l2/cli/backfillSingle.ts @@ -2,7 +2,6 @@ import { getCurrentUnixTimestamp, secondsInDay } from "../../src/utils/date"; import PromisePool from "@supercharge/promise-pool"; import findTvls from "../tvl"; import { overwrite, parsePgData } from "../storeToDb"; -import setEnvSecrets from "../../src/utils/shared/setEnvSecrets"; import postgres from "postgres"; import { queryPostgresWithRetry } from "../../src/utils/shared/bridgedTvlPostgres"; import { ChartData } from "../types"; @@ -16,7 +15,6 @@ const chain: string = "Tron"; let auth: string[] = []; async function iniDbConnection() { - await setEnvSecrets(); auth = process.env.PG_AUTH?.split(",") ?? []; if (!auth || auth.length != 3) throw new Error("there aren't 3 auth params"); diff --git a/defi/l2/index.ts b/defi/l2/index.ts index 32bf113c81..de91263723 100644 --- a/defi/l2/index.ts +++ b/defi/l2/index.ts @@ -2,10 +2,8 @@ import chainAssets from "../l2/tvl"; import { storeR2JSONString } from "../src/utils/r2"; import { getCurrentUnixTimestamp } from "../src/utils/date"; import storeHistorical from "../l2/storeToDb"; -// import setEnvSecrets from "./utils/shared/setEnvSecrets"; export default async function storeChainAssets(override: boolean) { - // await setEnvSecrets(); const res: any = await chainAssets(override); res.timestamp = getCurrentUnixTimestamp(); // let a = JSON.stringify(res); diff --git a/defi/l2/v2/index.ts b/defi/l2/v2/index.ts index e51bb7f804..0d922b3e9b 100644 --- a/defi/l2/v2/index.ts +++ b/defi/l2/v2/index.ts @@ -261,14 +261,14 @@ async function fetchLstSymbols() { } function fetchRwaSymbols() { - const allSymbols: {[symbol: string]: boolean } = {}; + const allSymbols: { [symbol: string]: boolean } = {}; Object.values(rwaMetadata).map(({ matchExact, symbols }: { matchExact: boolean; symbols: string[] }) => { symbols.map((symbol) => allSymbols[symbol] = matchExact) }); return allSymbols; } -function isRwaSymbol(symbol: string, rwaSymbols: {[symbol: string]: boolean }) { +function isRwaSymbol(symbol: string, rwaSymbols: { [symbol: string]: boolean }) { if (rwaSymbols[symbol]) return true; Object.keys(rwaSymbols).map((s) => { if (!rwaSymbols[s] && symbol.startsWith(s)) return true; @@ -478,9 +478,6 @@ async function main() { }); }); - const rawDataJson = JSON.parse(JSON.stringify(rawData)); - const symbolDataJson = JSON.parse(JSON.stringify(symbolData)); - await verifyChanges(symbolData); await Promise.all([ @@ -490,4 +487,7 @@ async function main() { ]); } -main(); // ts-node defi/l2/v2/index.ts +main().catch((e) => { + console.error(e); + process.exit(1); +}).then(() => process.exit(0)); // ts-node defi/l2/v2/index.ts diff --git a/defi/src/cli/backfillEmissions.ts b/defi/src/cli/backfillEmissions.ts index cd9d2d93c6..995177347f 100644 --- a/defi/src/cli/backfillEmissions.ts +++ b/defi/src/cli/backfillEmissions.ts @@ -1,13 +1,11 @@ import adapters from "../utils/imports/emissions_adapters"; import { processSingleProtocol } from "../storeEmissionsUtils"; -import setEnvSecrets from "../utils/shared/setEnvSecrets"; async function main() { const protocolName = process.argv[2] ?? ""; const protocolIndex = Object.keys(adapters).indexOf(protocolName); if (protocolIndex == -1) throw new Error(`${protocolName} is not a valid adapter`); - await setEnvSecrets(); const adapterCode = Object.values(adapters)[protocolIndex].default; await processSingleProtocol(adapterCode, protocolName, {}, true).catch((err: Error) => { console.log(err.message ? `${err.message}: \n storing ${protocolName}` : err); diff --git a/defi/src/utils/shared/setEnvSecrets.ts b/defi/src/utils/shared/setEnvSecrets.ts index 70145d1b47..381e3d8117 100644 --- a/defi/src/utils/shared/setEnvSecrets.ts +++ b/defi/src/utils/shared/setEnvSecrets.ts @@ -1,6 +1,7 @@ import dynamodb from './dynamodb' let envSecretsRes: any +// WARNING: This is deprecated, it is no longer used, set the secret in each pod that you use async function setEnvSecrets() { try { if (!envSecretsRes) envSecretsRes = dynamodb.getEnvSecrets() From 8ef6f7eb5daf47b4a37293b72c13bafbfc1d2d64 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 13 Oct 2025 17:01:37 +0200 Subject: [PATCH 245/398] deprecate setEnvSecrets --- defi/l2/v2/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/defi/l2/v2/index.ts b/defi/l2/v2/index.ts index 0d922b3e9b..cf62ef7d93 100644 --- a/defi/l2/v2/index.ts +++ b/defi/l2/v2/index.ts @@ -12,7 +12,6 @@ import { McapsApiData } from "../types"; import { getBlock } from "@defillama/sdk/build/util/blocks"; import { multiCall } from "@defillama/sdk/build/abi/abi2"; import BigNumber from "bignumber.js"; -import setEnvSecrets from "../../src/utils/shared/setEnvSecrets"; import { bridgedTvlMixedCaseChains, chainsThatShouldNotBeLowerCased } from "../../src/utils/shared/constants"; import { getR2JSONString, storeR2JSONString } from "../../src/utils/r2"; import { additional, excluded } from "../adapters/manual"; @@ -298,7 +297,6 @@ function isOwnToken(chain: string, symbol: string) { } async function main() { - await setEnvSecrets(); const timestamp = 0; const { sourceChainAmounts, protocolAmounts, destinationChainAmounts } = await fetchOutgoingAmountsFromDB(timestamp); const incomingAssets = await fetchIncomingAssetsList(); From 9904d12a215afd7e8ae1677fc5d0956525120293 Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 13 Oct 2025 11:47:09 -0600 Subject: [PATCH 246/398] add new listings --- defi/src/protocols/data4.ts | 64 +++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index feecc49391..874ed93496 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31151,5 +31151,69 @@ const data4: Protocol[] = [ // derivatives: "based-perps" // }, // }, + { + id: "6852", + name: "INFINIT", + address: "0x61fac5f038515572d6f42d4bcb6b581642753d50", + symbol: "IN", + url: "https://infinit.tech/", + description: + "Navigate DeFi with INFINIT - Discover, evaluate, and execute DeFi with AI agents.", + chain: "Binance", + logo: `${baseIconsUrl}/infinit.jpg`, + audits: "2", + audit_note: null, + gecko_id: "infinit", + cmcId: "37609", + category: "Yield", + chains: ["Binance","Arbitrum", "Ethereum", "Base", "Optimism", "Sonic", "Hyperliquid L1", "Mantle", "Plasma", "Berachain"], + module: "infinit/index.js", + twitter: "Infinit_Labs", + forkedFromIds: [], + audit_links: ["https://github.com/infinit-xyz/in-token-contract-audit"], + listedAt: 1760377213, + }, + { + id: "6853", + name: "Pharaoh V3 Legacy", + address: "avax:0x13A466998Ce03Db73aBc2d4DF3bBD845Ed1f28E7", + symbol: "PHAR", + url: "https://pharaoh.exchange/swap/", + description: `Pharaoh is a concentrated liquidity layer and exchange built on the Avalanche C-Chain, powered by the latest metaDEX x(3,3) methodology—a more fluid and accessible version of the popular ve(3,3) model`, + chain: "Avalanche", + logo: `${baseIconsUrl}/pharaoh-v3-legacy.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Avalanche"], + forkedFromIds: ["1407"], + module: "pharaoh-exchange-v3-legacy/index.js", + twitter: "PharaohExchange", + parentProtocol: "parent#pharaoh-exchange", + listedAt: 1702603157, + }, + { + id: "6854", + name: "Pharaoh V3", + address: "avax:0x13A466998Ce03Db73aBc2d4DF3bBD845Ed1f28E7", + symbol: "PHAR", + url: "https://pharaoh.exchange/swap/", + description: `Pharaoh is a concentrated liquidity layer and exchange built on the Avalanche C-Chain, powered by the latest metaDEX x(3,3) methodology—a more fluid and accessible version of the popular ve(3,3) model.`, + chain: "Avalanche", + logo: `${baseIconsUrl}/pharaoh-v3.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Avalanche"], + forkedFromIds: ["2198"], + module: "pharaoh-exchange-v3/index.js", + twitter: "PharaohExchange", + parentProtocol: "parent#pharaoh-exchange", + listedAt: 1702603157, + }, ]; export default data4; From 71cae171a81852d1210d6dbe4fe5c8c15410ce32 Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 13 Oct 2025 11:48:21 -0600 Subject: [PATCH 247/398] add timestamps --- defi/src/protocols/data4.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 874ed93496..c50f3350ab 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31171,7 +31171,7 @@ const data4: Protocol[] = [ twitter: "Infinit_Labs", forkedFromIds: [], audit_links: ["https://github.com/infinit-xyz/in-token-contract-audit"], - listedAt: 1760377213, + listedAt: 1760377663, }, { id: "6853", @@ -31192,7 +31192,7 @@ const data4: Protocol[] = [ module: "pharaoh-exchange-v3-legacy/index.js", twitter: "PharaohExchange", parentProtocol: "parent#pharaoh-exchange", - listedAt: 1702603157, + listedAt: 1760377677, }, { id: "6854", @@ -31213,7 +31213,7 @@ const data4: Protocol[] = [ module: "pharaoh-exchange-v3/index.js", twitter: "PharaohExchange", parentProtocol: "parent#pharaoh-exchange", - listedAt: 1702603157, + listedAt: 1760377684, }, ]; export default data4; From 72ab466c060275c57f4f8bbd54e93ac4854f584f Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 13 Oct 2025 11:59:27 -0600 Subject: [PATCH 248/398] add new listings --- defi/src/protocols/data4.ts | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index c50f3350ab..84a7d95708 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31215,5 +31215,46 @@ const data4: Protocol[] = [ parentProtocol: "parent#pharaoh-exchange", listedAt: 1760377684, }, + { + id: "6855", + name: "Supervaults", + address: null, + symbol: "-", + url: "https://app.neutron.org/bitcoin-summer", + description: `Automated liquidity management vaults for concentrated liquidity pools on Neutron, managing positions across Bitcoin LSTs and major crypto assets.`, + chain: "Neutron", + logo: `${baseIconsUrl}/supervaults.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Liquidity manager", + chains: ["Neutron"], + forkedFromIds: [], + module: "supervaults/index.js", + twitter: "neutron_org", + listedAt: 1760378111, + }, + { + id: "6856", + name: "Oro Finance", + address: null, + symbol: "-", + url: "https://app.oro.finance/", + description: `Yield-generating digital gold on Solana.`, + chain: "Solana", + logo: `${baseIconsUrl}/oro-finance.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + tags: ["Commodities"], + chains: ["Solana"], + forkedFromIds: [], + module: "oro-finance/index.js", + twitter: "orogoldapp", + audit_links: ["https://cantina.xyz/portfolio/ef5a3868-95f7-4259-84a2-9b394ef4a5eb"], + listedAt: 1760378121, + }, ]; export default data4; From 0008d3723e1ef63dea25e9de71a7d384bf3334ca Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 13 Oct 2025 11:59:55 -0600 Subject: [PATCH 249/398] enable giza fees --- defi/src/protocols/data4.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 84a7d95708..f3de73dbbe 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -30473,7 +30473,10 @@ const data4: Protocol[] = [ twitter: "gizatechxyz", audit_links: ["https://docs.usepulse.xyz/audit"], forkedFromIds: [], - listedAt: 1759876671 + listedAt: 1759876671, + dimensions: { + fees: "giza" + } }, { id: "6822", From cd0eb66177709178505b6185b3faf4e226d38888 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 13 Oct 2025 20:29:54 +0100 Subject: [PATCH 250/398] Usd1 sol (#10808) * USD1 * jup mcap to 1M * GOLD on whitelist --- coins/src/adapters/solana/jupAg.ts | 3 ++- coins/src/adapters/tokenMapping.json | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/coins/src/adapters/solana/jupAg.ts b/coins/src/adapters/solana/jupAg.ts index 2ad9cd3c26..7bae71d95d 100644 --- a/coins/src/adapters/solana/jupAg.ts +++ b/coins/src/adapters/solana/jupAg.ts @@ -17,7 +17,8 @@ const whitelistedTokens = new Set([ 'B8GKqTDGYc7F6udTHjYeazZ4dFCRkrwK2mBQNS4igqTv', 'ALTP6gug9wv5mFtx2tSU1YYZ1NrEc2chDdMPoJA8f8pu', 'AVw2QGVkXJPRPRjLAceXVoLqU5DVtJ53mdgMXp14yGit', - 'FJug3z58gssSTDhVNkTse5fP8GRZzuidf9SRtfB2RhDe' + 'FJug3z58gssSTDhVNkTse5fP8GRZzuidf9SRtfB2RhDe', + 'GoLDppdjB1vDTPSGxyMJFqdnj134yH6Prg9eqsGDiw6A' ]) async function getTokensWithCGMapping() { diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index 575d22609f..0e367d0cbc 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -2853,6 +2853,11 @@ "symbol": "USD1", "to": "coingecko#usd1-wlfi" }, + "0x05fabd1b12e39967a3c24e91b7b8f67719a6dacee74f3c8b9fb7d93e855437d2": { + "decimals": "6", + "symbol": "USD1", + "to": "coingecko#usd1-wlfi" + }, "0x6dba1728c73363be1bdd4d504844c40fbb893e368ccbeff1d1bd83497dbc756d": { "decimals": "8", "symbol": "PROPS", From cb7eaa0b2d44779599e1dec32e976fd6113144a6 Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 13 Oct 2025 19:33:54 -0600 Subject: [PATCH 251/398] remove timestamp --- defi/src/protocols/data4.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index f3de73dbbe..791a70618e 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31174,7 +31174,6 @@ const data4: Protocol[] = [ twitter: "Infinit_Labs", forkedFromIds: [], audit_links: ["https://github.com/infinit-xyz/in-token-contract-audit"], - listedAt: 1760377663, }, { id: "6853", From 84eed46107217e3ab18f2b448476bbf2fb3cc3aa Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 13 Oct 2025 23:01:19 -0600 Subject: [PATCH 252/398] add chainlink to oraclesbreakdown --- defi/src/protocols/data4.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 791a70618e..8fb7ff1874 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -23871,6 +23871,11 @@ const data4: Protocol[] = [ type: "Primary", proof: ["https://arbiscan.io/address/0x7b09d87945102d25069c173ee45db397c6e055b3#readContract#F4","https://github.com/DefiLlama/defillama-server/pull/10782"], }, + { + name: "Chainlink", + type: "Primary", + proof: ["https://arbiscan.io/address/0x7b09d87945102d25069c173ee45db397c6e055b3#readContract#F4"], + }, ], }, { From b87d6ead72ebba1ac384d1edeec9e3c67af62a5f Mon Sep 17 00:00:00 2001 From: realshaman Date: Mon, 13 Oct 2025 23:13:55 -0600 Subject: [PATCH 253/398] include tweet in proof link --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 8fb7ff1874..084ef39ff8 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -23874,7 +23874,7 @@ const data4: Protocol[] = [ { name: "Chainlink", type: "Primary", - proof: ["https://arbiscan.io/address/0x7b09d87945102d25069c173ee45db397c6e055b3#readContract#F4"], + proof: ["https://arbiscan.io/address/0x7b09d87945102d25069c173ee45db397c6e055b3#readContract#F4", "https://x.com/boros_fi/status/1957854003422707940"], }, ], }, From 02b815ded7d5e50e4f701315bc26be0757293422 Mon Sep 17 00:00:00 2001 From: Define101 Date: Tue, 14 Oct 2025 09:24:41 +0100 Subject: [PATCH 254/398] add referal --- defi/src/protocols/data4.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 084ef39ff8..2f389fcf4f 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -22065,7 +22065,8 @@ const data4: Protocol[] = [ name: "Loopscale", address: null, symbol: "-", - url: "https://loopscale.com", + url: "https://loop.sl/i/AVxMN", +  referralUrl: "https://loop.sl/i/AVxMN", description: "Loopscale is a modular lending platform for the next-generation of onchain assets. Markets for any asset, at the best rate, with less risk", chain: "Solana", From d86cbffa447ae32bbd672906e665191a6900cd30 Mon Sep 17 00:00:00 2001 From: Define101 Date: Tue, 14 Oct 2025 10:02:04 +0100 Subject: [PATCH 255/398] category near --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 2f389fcf4f..e110a1365c 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -16281,7 +16281,7 @@ const data4: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Bridge Aggregator", + category: "Cross Chain Bridge", chains: ["Near"], forkedFrom: [], module: "dummy.js", From 517398aea7f79ae0051f1bf734d7d0b1c78a84a8 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 14 Oct 2025 12:00:16 +0200 Subject: [PATCH 256/398] update yield basis --- defi/src/protocols/data4.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index e110a1365c..2b989d98ec 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -29330,9 +29330,9 @@ const data4: Protocol[] = [ module: "yield-basis/index.js", twitter: "yieldbasis", forkedFromIds: [], - parentProtocol: "parent#curve-finance", + // parentProtocol: "parent#curve-finance", // they have their own token listedAt: 1758821541, - excludeTvlFromParent: true, // tokens are deposited into curve pools + // excludeTvlFromParent: true, // tokens are deposited into curve pools }, { id: "6772", From 6ceee38d51b27e2c8d1b85321ed61da616a7d52b Mon Sep 17 00:00:00 2001 From: eden Date: Tue, 14 Oct 2025 18:16:48 +0700 Subject: [PATCH 257/398] update oi names (#10814) --- defi/src/protocols/data3.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 50b67793a7..e198a687d5 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -6665,7 +6665,7 @@ const data3_1: Protocol[] = [ genuineSpikes: ["1691625600"], adapter: "satori" }, - "open-interest": "satori" + "open-interest": "satori-oi" } }, { @@ -53786,7 +53786,7 @@ const data3_2: Protocol[] = [ dimensions: { fees: "reya-dex", derivatives: "reya-dex", - "open-interest": "reya-dex" + "open-interest": "reya-dex-oi" } }, { From bedfd055ed447cc2d52b95e60f19a3833c750b6f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 14 Oct 2025 13:18:55 +0200 Subject: [PATCH 258/398] ensure that we log results before the timeout kills the script (#10810) * ensure that we log results before the timeout kills the script * minor fix * add more debug logging --- .../handlers/storeAdaptorData/index.ts | 115 ++++++++++++------ .../handlers/storeAdaptorData/storeAll.ts | 5 +- defi/src/notifyOutdated.ts | 6 +- 3 files changed, 84 insertions(+), 42 deletions(-) diff --git a/defi/src/adaptors/handlers/storeAdaptorData/index.ts b/defi/src/adaptors/handlers/storeAdaptorData/index.ts index 15e806a648..800b5f4e04 100644 --- a/defi/src/adaptors/handlers/storeAdaptorData/index.ts +++ b/defi/src/adaptors/handlers/storeAdaptorData/index.ts @@ -36,6 +36,7 @@ export type IStoreAdaptorDataHandlerEvent = { runType?: 'store-all' | 'refill-all' | 'default' | 'refill-yesterday' throwError?: boolean checkBeforeInsert?: boolean + maxRunTime?: number // in milliseconds } const ONE_DAY_IN_SECONDS = 24 * 60 * 60 @@ -44,7 +45,7 @@ export const handler2 = async (event: IStoreAdaptorDataHandlerEvent) => { const defaultMaxConcurrency = 13 let { timestamp = timestampAtStartofHour, adapterType, protocolNames, maxConcurrency = defaultMaxConcurrency, isDryRun = false, isRunFromRefillScript = false, runType = 'default', yesterdayIdSet = new Set(), todayIdSet = new Set(), - throwError = false, checkBeforeInsert = false, + throwError = false, checkBeforeInsert = false, maxRunTime, } = event @@ -116,14 +117,24 @@ export const handler2 = async (event: IStoreAdaptorDataHandlerEvent) => { ); // const timeTable: any = [] - const { errors, results } = await PromisePool + const results: any = [] + const errors: any = [] + let onCompleteCalled = false + + let runPromise = PromisePool .withConcurrency(maxConcurrency) .for(protocols) - .onTaskFinished((item: any, _: any) => { + .process(async (protocol: ProtocolAdaptor, index: number) => { + try { + const result = await runAndStoreProtocol(protocol, index) + results.push(result) + } catch (e) { + errors.push(e) + } if (!isRunFromRefillScript) - console.log(`[${adapterType}] - ${item.module} done!`) + console.log(`[${adapterType}] - ${protocol.module} done!`) + }) - .process(runAndStoreProtocol) const shortenString = (str: string, length: number = 250) => { if (typeof str !== 'string') str = JSON.stringify(str) @@ -131,46 +142,77 @@ export const handler2 = async (event: IStoreAdaptorDataHandlerEvent) => { return str.length > length ? str.slice(0, length) + '...' : str } - const errorObjects = errors.map(({ raw, item, message }: any) => { - return { - adapter: `${item.name}`, - message: shortenString(message), - chain: raw.chain, - // stack: raw.stack?.split('\n').slice(1, 2).join('\n') + async function onComplete() { + if (onCompleteCalled) return results; + onCompleteCalled = true; + + const errorObjects = errors.map(({ raw, item, message }: any) => { + return { + adapter: item.name, + message: shortenString(message), + chain: raw.chain, + // stack: raw.stack?.split('\n').slice(1, 2).join('\n') + } + }) + + + const debugTimeEnd = Date.now() + const notificationType = 'dimensionLogs' + const timeTakenSeconds = Math.floor((debugTimeEnd - _debugTimeStart) / 1000) + + if (!isRunFromRefillScript) { + console.log(`Success: ${results.length} Errors: ${errors.length} Time taken: ${timeTakenSeconds}s`) + await sendDiscordAlert(`[${adapterType}] Success: ${results.length} Errors: ${errors.length} Time taken: ${timeTakenSeconds}`, notificationType) } - }) + if (errorObjects.length) { + const logs = errorObjects.map(({ adapter, message, chain }: any, i: any) => ({ i, adapter, error: message, chain })) - const debugTimeEnd = Date.now() - const notificationType = 'dimensionLogs' - const timeTakenSeconds = Math.floor((debugTimeEnd - _debugTimeStart) / 1000) + if (!isRunFromRefillScript) + await sendDiscordAlert(sdk.util.tableToString(logs), notificationType, true) - if (!isRunFromRefillScript) { - console.log(`Success: ${results.length} Errors: ${errors.length} Time taken: ${timeTakenSeconds}s`) - await sendDiscordAlert(`[${adapterType}] Success: ${results.length} Errors: ${errors.length} Time taken: ${timeTakenSeconds}`, notificationType) - } + if (errorObjects.length > 1) + console.table(errorObjects) + else + console.log('dim run error:', `${errorObjects[0].adapter} - ${errorObjects[0].message} - ${errorObjects[0].chain}`) + } + if (throwError && errorObjects.length) + throw new Error('Errors found') - if (errorObjects.length) { - const logs = errorObjects.map(({ adapter, message, chain }, i) => `${i} ${adapter} - ${message} - ${chain}`) - const headers = ['Adapter', 'Error Message', 'Chain'].join(' - ') - logs.unshift(headers) + if (isRunFromRefillScript) + return results + // console.log(JSON.stringify(errorObjects, null, 2)) + /* console.log(` ${adapterType} Success: ${results.length} Errors: ${errors.length} Time taken: ${timeTakenSeconds}s`) + console.table(timeTable) */ + + console.log(`**************************`) - if (!isRunFromRefillScript) - await sendDiscordAlert(logs.join('\n'), notificationType, true) - console.table(errorObjects) } - if (throwError && errorObjects.length) - throw new Error('Errors found') + // if the maxRunTime is not set, we just run the promise and wait for it to complete + if (typeof maxRunTime !== 'number' || !maxRunTime) { + await runPromise + return onComplete() + } - if (isRunFromRefillScript) - return results - // console.log(JSON.stringify(errorObjects, null, 2)) - /* console.log(` ${adapterType} Success: ${results.length} Errors: ${errors.length} Time taken: ${timeTakenSeconds}s`) - console.table(timeTable) */ + // if the maxRunTime is set, we run the promise with a timeout + // i.e we log the results we have so far and exit + return new Promise(async (resolve, reject) => { + const timeout = setTimeout(() => { + console.log(`Max run time exceeded: ${maxRunTime / 1000}s`) + resolve(onComplete()) + }, maxRunTime) - console.log(`**************************`) + try { + await runPromise + resolve(onComplete()) + } catch (error) { + reject(error) + } finally { + clearTimeout(timeout) + } + }) async function runAndStoreProtocol(protocol: ProtocolAdaptor, index: number) { // if (protocol.module !== 'mux-protocol') return; @@ -347,9 +389,10 @@ export const handler2 = async (event: IStoreAdaptorDataHandlerEvent) => { // validate against recent data if available if (checkAgainstRecentData) { - const validationError = adapterRecord.validateWithRecentData({ recentData: recentData[adapterRecord.id], getSignificantValueThreshold, getSpikeThreshold, }) + const protocolRecentData = recentData[adapterRecord.id] + const validationError = adapterRecord.validateWithRecentData({ recentData: protocolRecentData, getSignificantValueThreshold, getSpikeThreshold, }) if (validationError) { - sdk.log('[validation error]', `[${adapterRecord.name}]`, validationError.message, 'skipping this record') + sdk.log('[validation error]', `[${adapterRecord.name}]`, validationError.message, 'skipping this record', protocolRecentData?.tooFewRecords, protocolRecentData?.hasSignificantData, protocolRecentData?.records?.length, protocolRecentData?.dimStats) await elastic.writeLog('dimension-blocked', validationError) return; // skip storing possible invalid data } diff --git a/defi/src/adaptors/handlers/storeAdaptorData/storeAll.ts b/defi/src/adaptors/handlers/storeAdaptorData/storeAll.ts index f8d5ab3ee4..0ef3b116cb 100644 --- a/defi/src/adaptors/handlers/storeAdaptorData/storeAll.ts +++ b/defi/src/adaptors/handlers/storeAdaptorData/storeAll.ts @@ -8,6 +8,7 @@ import { elastic } from '@defillama/sdk'; import { getAllDimensionsRecordsOnDate } from '../../db-utils/db2'; import { ADAPTER_TYPES } from '../../data/types'; import loadAdaptorsData from '../../data'; +const MAX_RUNTIME = 1000 * 60 * 50; // 50 minutes async function run() { const startTimeAll = getUnixTimeNow() @@ -108,7 +109,7 @@ async function run() { } catch (e) { console.error("Error in getAllDimensionsRecordsOnDate", e) } - await handler2({ adapterType, yesterdayIdSet, runType: 'store-all', todayIdSet }) + await handler2({ adapterType, yesterdayIdSet, runType: 'store-all', todayIdSet, maxRunTime: MAX_RUNTIME - 60 * 1000 }) } catch (e) { console.error("error", e) @@ -156,7 +157,7 @@ run().catch((e) => { setTimeout(() => { console.error("Timeout reached, exiting from dimensions-store-all...") process.exit(1) -}, 1000 * 60 * 50) // 50 minutes +}, MAX_RUNTIME) function getYesterdayTimeS() { diff --git a/defi/src/notifyOutdated.ts b/defi/src/notifyOutdated.ts index be393f1530..388dcaa19d 100644 --- a/defi/src/notifyOutdated.ts +++ b/defi/src/notifyOutdated.ts @@ -130,15 +130,13 @@ async function notifyBlockedDimensionUpdates() { let message = tableToString(blockedDataSinceLastNotification.slice(0, 42), ['adapterType', 'name', 'id', 'type', 'timeS', 'message',]) let trimmedMessage = '' if (blockedDataSinceLastNotification.length > 42) { - trimmedMessage = `\n... and ${blockedDataSinceLastNotification.length - 42} more` + trimmedMessage = `... and ${blockedDataSinceLastNotification.length - 42} more` } message = `These are the blocked dimension updates since the last notification: ${message} - - ${trimmedMessage} ${linkToKibana} - ` + ${trimmedMessage} ${linkToKibana}` await sendMessage(message, process.env.DIM_CHANNEL_WEBHOOK!) const timeNow = Math.floor(Date.now() / 1000) From e246de40a0ef700925a693e1dfdb25f7763e027f Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 14 Oct 2025 08:44:06 -0600 Subject: [PATCH 259/398] add token ticker, address and cgid --- defi/src/protocols/data3.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index e198a687d5..af99cb77c0 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -58828,8 +58828,8 @@ const data3_2: Protocol[] = [ { id: "5193", name: "Suzaku", - address: null, - symbol: "-", + address: "avax:0x451532f1c9eb7e4dc2d493db52b682c0acf6f5ef", + symbol: "SUZ", url: "https://www.suzaku.network/", description: "Suzaku is the (re)staking protocol for sovereign networks. Stakers can help secure networks by providing them with cryptoeconomic security, either by (liquid) staking L1 native tokens or by restaking blue-chip tokens", @@ -58837,7 +58837,7 @@ const data3_2: Protocol[] = [ logo: `${baseIconsUrl}/suzaku.png`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "suzaku-token", cmcId: null, category: "Restaking", chains: ["Avalanche"], From 2091ebca46c04375bff79f50d06a8d3477d93522 Mon Sep 17 00:00:00 2001 From: Define101 Date: Tue, 14 Oct 2025 17:16:25 +0100 Subject: [PATCH 260/398] descruiptionb Atrium --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 2b989d98ec..8b36292b73 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -25111,7 +25111,7 @@ const data4: Protocol[] = [ symbol: "-", url: "https://atrium.io/", description: - "Atrium offers smart contract powered staking baskets, enabling users to delegate their stake to multiple stake pool operators simultaneously", + "Atrium is a distributed staking protocol on Cardano that enables users to delegate stake across multiple pools via smart contract powered staking baskets. The Diffusion basket, Cardano's first staking basket, allows simultaneous delegation to 50 community-selected stake pool operators while earning ADA rewards and ATMA tokens.", chain: "Cardano", logo: `${baseIconsUrl}/atrium.jpg`, audits: "0", From 0e9580bafbb14f4fa62dd9ceded622a32b38536f Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 14 Oct 2025 19:14:53 +0100 Subject: [PATCH 261/398] mUSD (#10817) --- defi/l2/adapters/index.ts | 2 +- defi/l2/adapters/manual.ts | 2 +- defi/l2/constants.ts | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/defi/l2/adapters/index.ts b/defi/l2/adapters/index.ts index 589b0b6b79..946151338f 100644 --- a/defi/l2/adapters/index.ts +++ b/defi/l2/adapters/index.ts @@ -59,7 +59,7 @@ export const linea = async (): Promise => { const data = await fetch( "https://raw.githubusercontent.com/Consensys/linea-token-list/main/json/linea-mainnet-token-shortlist.json" ); - addresses.linea = data.tokens.map((t: any) => t.address.toLowerCase()); + addresses.linea = data.tokens.filter((t: any) => !t.tokenType.includes("native")).map((t: any) => t.address.toLowerCase()); return addresses.linea; }; export const metis = async (): Promise => { diff --git a/defi/l2/adapters/manual.ts b/defi/l2/adapters/manual.ts index 2a5b2b129b..e1a803d992 100644 --- a/defi/l2/adapters/manual.ts +++ b/defi/l2/adapters/manual.ts @@ -128,7 +128,6 @@ export const additional: { [chain: string]: string[] } = { ], unichain: ["0x078D782b760474a361dDA0AF3839290b0EF57AD6"], reya: ["0x162B78e827A8DB8173D13735C08c8D40Cb5cCdAB"], - linea: ["0xaca92e438df0b2401ff60da7e4337b687a2435da"] // mUSD }; export const excluded: { [chain: string]: string[] } = { optimism: [ @@ -168,4 +167,5 @@ export const nativeWhitelist: { [chain: string]: string[] } = { unichain: ["0x078D782b760474a361dDA0AF3839290b0EF57AD6"], osmosis: ["uosmo"], degen: ["degen-base"], + linea: ["0xaca92e438df0b2401ff60da7e4337b687a2435da"] }; diff --git a/defi/l2/constants.ts b/defi/l2/constants.ts index 2f3f24a7c4..5007b0f11a 100644 --- a/defi/l2/constants.ts +++ b/defi/l2/constants.ts @@ -256,4 +256,5 @@ export const ownTokens: { [chain: Chain]: { ticker: string; address: string } } "hemi-l2": { ticker: "HEMI", address: "coingecko:hemi" }, "somnia": { ticker: "SOMI", address: "coingecko:somnia" }, "plasma": { ticker: "XPL", address: "coingecko:plasma" }, + "linea": { ticker: "LINEA", address: "coingecko:linea" }, }; From 181d26c9fe8cd16c62d7fd13c71dc1bcd85d1551 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 14 Oct 2025 20:40:37 +0200 Subject: [PATCH 262/398] get missing gas tokens price list --- .../scripts/getMissingChainGasTokenList.ts | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 coins/src/scripts/getMissingChainGasTokenList.ts diff --git a/coins/src/scripts/getMissingChainGasTokenList.ts b/coins/src/scripts/getMissingChainGasTokenList.ts new file mode 100644 index 0000000000..5ad5dc4602 --- /dev/null +++ b/coins/src/scripts/getMissingChainGasTokenList.ts @@ -0,0 +1,37 @@ +import * as sdk from "@defillama/sdk" +import allChains from '../../../defi/DefiLlama-Adapters/projects/helper/chains.json' +import axios from "axios"; + +const evmChains = allChains.filter((i: any) => { + const provider = sdk.getProvider(i) + // if (!provider) console.log(i, 'is not an evm chain') + return !!provider +}) + +console.log('# of chains:', allChains.length) +console.log('# of evm chains:', evmChains.length) + +async function run() { + const nullAddress = '0x0000000000000000000000000000000000000000' + + const chunks = sdk.util.sliceIntoChunks(evmChains, 40) + let missingTokens: string[] = [] + for (let i = 0; i < chunks.length; i++) { + const chunk = chunks[i] + const tokens = chunk.map((i: any) => `${i}:${nullAddress}`) + console.log('checking chunk', i + 1, 'of', chunks.length, '...') + const res = (await axios.get('https://coins.llama.fi/prices/current/'+tokens.join(','))).data + const missingInChunk = tokens.filter((k: string) => { + // console.log(k, res.coins[k]?.symbol) + return !res.coins[k] + }) + console.log('# of missing tokens in this chunk:', missingInChunk.length) + missingTokens.push(...missingInChunk) + } + console.log('ALL MISSING TOKENS:') + console.log(JSON.stringify(missingTokens)) + console.table(missingTokens) + console.log('# of missing tokens:', missingTokens.length) +} + +run().catch(console.error).then(() => process.exit(0)) \ No newline at end of file From 80835a8451bbaf19c143895fddace8b080f27083 Mon Sep 17 00:00:00 2001 From: Define101 Date: Tue, 14 Oct 2025 19:41:41 +0100 Subject: [PATCH 263/398] LumenSwap rug link --- defi/src/protocols/data1.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/defi/src/protocols/data1.ts b/defi/src/protocols/data1.ts index ce32886772..e6273ab2e1 100644 --- a/defi/src/protocols/data1.ts +++ b/defi/src/protocols/data1.ts @@ -17407,6 +17407,8 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the twitter: "lumenswap", listedAt: 1637392233, github: ["lumenswap"], + rugged: true, + deadUrl: true, dimensions: { dexs: "lumenswap" } From a52852960e90de91fc07df04d36c797861298d51 Mon Sep 17 00:00:00 2001 From: Define101 Date: Tue, 14 Oct 2025 19:56:12 +0100 Subject: [PATCH 264/398] fix server --- defi/src/protocols/data3.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index af99cb77c0..51d55ebb5e 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -871,7 +871,7 @@ const data3_1: Protocol[] = [ gecko_id: null, cmcId: null, category: "Lending", - chains: ["Ethereum", "Polygon"], + chains: ["Ethereum"], forkedFrom: [], module: "teller/index.js", twitter: "useteller", From 829a1818329cc300fe3c16160b63e57223b29d12 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 14 Oct 2025 14:49:43 -0600 Subject: [PATCH 265/398] add new parent and listings --- defi/src/protocols/data3.ts | 6 +++--- defi/src/protocols/data4.ts | 22 ++++++++++++++++++++++ defi/src/protocols/parentProtocols.ts | 12 ++++++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 51d55ebb5e..91bad207f1 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -7949,13 +7949,13 @@ const data3_1: Protocol[] = [ }, { id: "3038", - name: "Rainbow", + name: "Rainbow Wallet", address: null, symbol: "-", url: "https://rainbow.me", description: "The fun, simple, & secure way to explore Web3, NFTs, & Ethereum", chain: "Ethereum", - logo: `${baseIconsUrl}/rainbow.png`, + logo: `${baseIconsUrl}/rainbow-wallet.jpg`, audits: "0", audit_note: null, gecko_id: null, @@ -7964,7 +7964,7 @@ const data3_1: Protocol[] = [ chains: ["Ethereum"], module: "dummy.js", twitter: "rainbowdotme", - github: ["rainbow-me"], + parentProtocol: "parent#rainbow", dimensions: { fees: "rainbow-wallet" } diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 8b36292b73..ed985fcf95 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31264,5 +31264,27 @@ const data4: Protocol[] = [ audit_links: ["https://cantina.xyz/portfolio/ef5a3868-95f7-4259-84a2-9b394ef4a5eb"], listedAt: 1760378121, }, + { + id: "6857", + name: "Rainbow Perps", + address: null, + symbol: "-", + url: "https://rainbow.me", + description: "Platform for trading perps via Hyperliquid.", + chain: "Hyperliquid L1", + logo: `${baseIconsUrl}/rainbow-perps.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Interface", + chains: ["Hyperliquid L1"], + module: "dummy.js", + twitter: "rainbowdotme", + parentProtocol: "parent#rainbow", + dimensions: { + fees: "rainbow-perps" + } + }, ]; export default data4; diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index 9fb5b4f5db..90eee4daac 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8223,6 +8223,18 @@ const parentProtocols: IParentProtocol[] = [ twitter: "TrebleSwap", github: ["trebleswap"], }, + { + id: "parent#rainbow", + name: "Rainbow", + url: "https://rainbow.me", + description: "The fun, simple, & secure way to explore Web3, NFTs, & Ethereum", + logo: `${baseIconsUrl}/rainbow.png`, + gecko_id: null, + cmcId: null, + chains: [], + twitter: "rainbowdotme", + github: ["rainbow-me"], + }, ]; export default parentProtocols; From 671fe651a2ae8ec27d84ab54d13039a54384f176 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 14 Oct 2025 14:56:14 -0600 Subject: [PATCH 266/398] enable derive dimensions and add listing --- defi/src/protocols/data3.ts | 6 ++++-- defi/src/protocols/data4.ts | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 91bad207f1..a4ee30b37b 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -28694,7 +28694,8 @@ const data3_1: Protocol[] = [ dimensions: { fees: "lyra-v2", derivatives: "lyra", - options: "lyra-v2" + options: "lyra-v2", + "open-interest": "lyra-v2" } }, { @@ -55718,7 +55719,8 @@ const data3_2: Protocol[] = [ parentProtocol: "parent#lyra", listedAt: 1724835641, dimensions: { - options: "lyra" + options: "lyra", + "open-interest": "derive-options" } }, { diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index ed985fcf95..c3caddc532 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31286,5 +31286,26 @@ const data4: Protocol[] = [ fees: "rainbow-perps" } }, + { + id: "6858", + name: "Fluxa", + address: null, + symbol: "-", + url: "https://fluxa.ag/", + description: "Fluxa is the premier decentralized exchange aggregator on the Sei Network, engineered to harness the chain's native infrastructure for superior trade execution. By leveraging Sei's parallel processing and industry-leading transaction finality, Fluxa's routing engine performs instantaneous, simultaneous liquidity checks across every major DEX on the network.", + chain: "Sei", + logo: `${baseIconsUrl}/fluxa.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "DEX Aggregator", + chains: ["Sei"], + module: "dummy.js", + twitter: "fluxaexchange", + dimensions: { + aggregators: "fluxa" + } + }, ]; export default data4; From 305271d224c1d8b22b20c24d10a3b97ffafb3e51 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 14 Oct 2025 15:08:57 -0600 Subject: [PATCH 267/398] add new listings --- defi/src/protocols/data4.ts | 73 +++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index c3caddc532..887e66f878 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31307,5 +31307,78 @@ const data4: Protocol[] = [ aggregators: "fluxa" } }, + { + id: "6859", + name: "Uncap Finance", + address: null, + symbol: "-", + url: "https://uncap.finance/", + description: "Overcollaterized BTC-backed stablecoin on Starknet.", + chain: "Starknet", + logo: `${baseIconsUrl}/uncap-finance.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "CDP", + chains: ["Starknet"], + module: "uncap-finance/index.js", + twitter: "uncapfinance", + audit_links: ["https://www.chainsecurity.com/security-audit/uncap-finance"], + oraclesBreakdown: [ + { + name: "Pragma", + type: "Primary", + proof: ["https://github.com/DefiLlama/DefiLlama-Adapters/pull/16624"], + }, + { + name: "Chainlink", + type: "Fallback", + proof: ["https://github.com/DefiLlama/DefiLlama-Adapters/pull/16624"], + }, + ], + github: ["uncaplabs"], + listedAt: 1760475689, + }, + { + id: "6860", + name: "Punk.Coffee", + address: null, + symbol: "-", + url: "https://punk.coffee/", + description: "Punk.Coffee is an open, permissionless prediction market protocol for the crypto-native community.", + chain: "Binance", + logo: `${baseIconsUrl}/punk.coffee.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Prediction Market", + chains: ["Binance"], + module: "punk_coffee/index.js", + twitter: "punkdotcoffee", + github: ["0xPunkcoffee"], + listedAt: 1760475695, + }, + { + id: "6861", + name: "ZenFinance", + address: "cronos:0x41bc026dABe978bc2FAfeA1850456511ca4B01bc", + symbol: "ARY", + url: "https://www.zenfinance.space/", + description: "ZenFinance - Swap, Stake & Earn , Sophisticated technology made simple Your DeFi Experience on Cronos.", + chain: "Cronos", + logo: `${baseIconsUrl}/zenfinance.jpg`, + audits: "0", + audit_note: null, + gecko_id: "aryoshin", + cmcId: null, + category: "Yield", + chains: ["Cronos"], + module: "zenfinance/index.js", + twitter: "CronosAry", + github: ["Aryioshin"], + listedAt: 1760475992, + }, ]; export default data4; From d09c464bc27c4c3c4bae39a194ca0ecc1f5cdc9c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 15 Oct 2025 00:35:31 +0200 Subject: [PATCH 268/398] dim runner: bugfix --- defi/src/adaptors/handlers/storeAdaptorData/index.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/defi/src/adaptors/handlers/storeAdaptorData/index.ts b/defi/src/adaptors/handlers/storeAdaptorData/index.ts index 800b5f4e04..4427ae0fc8 100644 --- a/defi/src/adaptors/handlers/storeAdaptorData/index.ts +++ b/defi/src/adaptors/handlers/storeAdaptorData/index.ts @@ -129,7 +129,7 @@ export const handler2 = async (event: IStoreAdaptorDataHandlerEvent) => { const result = await runAndStoreProtocol(protocol, index) results.push(result) } catch (e) { - errors.push(e) + errors.push({ raw: e, item: protocol }) } if (!isRunFromRefillScript) console.log(`[${adapterType}] - ${protocol.module} done!`) @@ -146,11 +146,13 @@ export const handler2 = async (event: IStoreAdaptorDataHandlerEvent) => { if (onCompleteCalled) return results; onCompleteCalled = true; - const errorObjects = errors.map(({ raw, item, message }: any) => { + const errorObjects = errors.map(({ raw, item, }: any) => { + let message = raw?.message || (raw && raw.toString()) || 'Unknown error' + return { - adapter: item.name, - message: shortenString(message), - chain: raw.chain, + adapter: item?.name, + message: shortenString(typeof message === 'string' ? message : ''), + chain: raw?.chain, // stack: raw.stack?.split('\n').slice(1, 2).join('\n') } }) From 4122d0dedf6b53940fa125a79ec9333d549e8338 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 14 Oct 2025 20:08:03 -0600 Subject: [PATCH 269/398] add new listings --- defi/src/protocols/data4.ts | 77 +++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 887e66f878..cef494a565 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31380,5 +31380,82 @@ const data4: Protocol[] = [ github: ["Aryioshin"], listedAt: 1760475992, }, + { + id: "6862", + name: "Syntropia", + address: null, + symbol: "-", + url: "https://syntropia.ai/", + description: "Capture the best risk adjusted yield on stablecoins across DeFi protocols while maintaining full transparency.", + chain: "Ethereum", + logo: `${baseIconsUrl}/syntropia.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Yield Aggregator", + chains: ["Ethereum"], + module: "syntropia/index.js", + twitter: "syntropia_ai", + listedAt: 1760493151, + }, + { + id: "6863", + name: "Bidask", + address: null, + symbol: "-", + url: "https://bidask.finance/en/app", + description: "The first DLMM DEX architected natively for TON Blockchain – optimized for speed, scalability, and efficiency.", + chain: "TON", + logo: `${baseIconsUrl}/bidask.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["TON"], + module: "bidask/index.js", + twitter: "BidaskProtocol", + listedAt: 1760493157, + }, + { + id: "6864", + name: "mStable V2", + address: "0xca1207647ff814039530d7d35df0e1dd2e91fa84", + symbol: "DHT", + url: "https://mstable.org/", + description: "mStable V2.", + chain: "Ethereum", + logo: `${baseIconsUrl}/mstable-v2.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "CDP", + chains: ["Ethereum"], + module: "mstable-v2/index.js", + twitter: "mstable_", + parentProtocol: "parent#dhedge", + listedAt: 1760493167, + }, + { + id: "6865", + name: "foxify", + address: "sonic:0x3725B740b33E75898e4e2E616E9BB519884edd37", + symbol: "FoxifyMAXI", + url: "https://www.foxify.trade/", + description: "Foxify is an on-chain proprietary trading platform offering leveraged trading (up to 100x) on 100+ crypto pairs. It supports bot usage, multi-account management, and integrates with Vertex, ApeX, and Orderly Network.", + chain: "Sonic", + logo: `${baseIconsUrl}/foxify.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Derivatives", + chains: ["Sonic", "Arbitrum"], + module: "foxify/index.js", + twitter: "foxifytrade", + listedAt: 1760475992, + }, ]; export default data4; From 42ab44f16ad01444fa8497d7c443c79a3b8f83c0 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 14 Oct 2025 21:48:42 -0600 Subject: [PATCH 270/398] add listings --- defi/src/protocols/data4.ts | 49 +++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index cef494a565..dec7db186a 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31457,5 +31457,54 @@ const data4: Protocol[] = [ twitter: "foxifytrade", listedAt: 1760475992, }, + { + id: "6866", + name: "Cetus DLMM", + address: "sui:0x6864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS", + symbol: "CETUS", + url: "https://www.cetus.zone", + description: + "Cetus is a pioneer DEX and concentrated liquidity protocol focusing on Move-based ecosystems like Aptos and Sui. It works as a crucial part of the ecosystem infrastructure to satisfy the comprehensive needs of traders, LPs, upper applications and an increasing DeFi population.", + chain: "Aptos", + logo: `${baseIconsUrl}/cetus-dlmm.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Aptos"], + module: "cetus-dlmm/index.js", + twitter: "CetusProtocol", + forkedFrom: [], + parentProtocol: "parent#cetus", + listedAt: 1760499842, + }, + { + id: "6867", + name: "Enjoyoors", + address: "sui:0x6864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS", + symbol: "CETUS", + url: "http://enjoyoors.xyz", + description: + "Enjoyoors is a novel omniasset liquidity primitive. Stake anything, earn yield, and, for DeFi products, tap into a rich source of liquidity.", + chain: "Ethereum", + logo: `${baseIconsUrl}/enjoyoors.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Algo-Stables", + chains: ["Ethereum"], + module: "enjoyoors/index.js", + twitter: "enjoyoorsxyz", + forkedFrom: [], + audit_links: [ + "https://github.com/mixbytes/audits_public/tree/master/Enjoyoors/EVM%20Vaults", + "https://github.com/Quillhash/QuillAudit_Reports/blob/master/Enjoyoors%20Smart%20Contract%20Audit%20Report%20-%20QuillAudits.pdf", + "https://movebit.xyz/reports/Enjoyoors-Audit-Report.pdf" + ], + github: ["eq-lab"], + listedAt: 1760500073 + }, ]; export default data4; From b6875d9beabb6559eddce8456788e6d48694bc20 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 14 Oct 2025 22:09:20 -0600 Subject: [PATCH 271/398] add cheapgm listing and treasury --- defi/DefiLlama-Adapters | 2 +- defi/src/protocols/data4.ts | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/defi/DefiLlama-Adapters b/defi/DefiLlama-Adapters index 89e23794ff..9e47edf20d 160000 --- a/defi/DefiLlama-Adapters +++ b/defi/DefiLlama-Adapters @@ -1 +1 @@ -Subproject commit 89e23794ff383b865f80d89f2c6870776a71c39b +Subproject commit 9e47edf20dca4a474b7318bf37bfc920962dbba5 diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index dec7db186a..55fe48359b 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -11919,6 +11919,9 @@ const data4: Protocol[] = [ twitter: "MoonwellDeFi", parentProtocol: "parent#moonwell", listedAt: 1744712150, + dimensions: { + fees: "moonwell-vaults" + } }, { id: "6051", @@ -31506,5 +31509,31 @@ const data4: Protocol[] = [ github: ["eq-lab"], listedAt: 1760500073 }, + { + id: "6868", + name: "CheapGM", + address: null, + symbol: "-", + url: "https://www.gm.cheap/", + description: + "GM is a minimalist on-chain “gm/mint” service with referral logic and a fixed fee in the native token.", + chain: "Ethereum", + logo: `${baseIconsUrl}/cheapgm.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Payments", + chains: ["Base", "Optimism", "Arbitrum", "Ethereum", "Binance", "Polygon", "Scroll", "Mantle", "Linea", "zkSync Era", "Taiko", "Blast", "Mode", "Zora", "Metis", "Cronos", "Celo", "Conflux", "Ronin", "Lisk", "Berachain", "CORE", "BOB", "Abstract", "Soneium", "Ink", "Unichain", "Sonic", "Plume Mainnet"], + module: "dummy.js", + twitter: "gmcheap", + forkedFrom: [], + audit_links: ["https://app.solidproof.io/projects/cheap-gm"], + github: ["CheapGM"], + treasury: "cheapgm.js", + dimensions: { + fees: "cheapgm" + } + }, ]; export default data4; From e400c0e6147e3aaedda242da3e7ab555ea3de113 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 14 Oct 2025 22:36:24 -0600 Subject: [PATCH 272/398] enable upheaval spot fees --- defi/src/protocols/data4.ts | 33 +++++++++++++++++++++++---- defi/src/protocols/parentProtocols.ts | 2 +- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 55fe48359b..e2eb13b1a8 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -26059,8 +26059,8 @@ const data4: Protocol[] = [ { id: "6632", name: "Upheaval V2", - address: null, - symbol: "-", + address: "hyperliquid:0x9c3bcc457862dd6d8907ba11f8c7fe7e43a8c08b", + symbol: "UPHL", url: "https://upheaval.fi/portfolio?ref=674574", referralUrl: "https://upheaval.fi/portfolio?ref=674574", description: `AMM DEX on Hyperliquid L1`, @@ -26086,8 +26086,8 @@ const data4: Protocol[] = [ { id: "6633", name: "Upheaval V3", - address: null, - symbol: "-", + address: "hyperliquid:0x9c3bcc457862dd6d8907ba11f8c7fe7e43a8c08b", + symbol: "UPHL", url: "https://upheaval.fi/portfolio?ref=674574", referralUrl: "https://upheaval.fi/portfolio?ref=674574", description: `CLMM DEX on Hyperliquid L1`, @@ -31535,5 +31535,30 @@ const data4: Protocol[] = [ fees: "cheapgm" } }, + { + id: "6869", + name: "Upheaval Spot AMM", + address: "hyperliquid:0x9c3bcc457862dd6d8907ba11f8c7fe7e43a8c08b", + symbol: "UPHL", + url: "https://upheaval.fi/portfolio?ref=674574", + referralUrl: "https://upheaval.fi/portfolio?ref=674574", + description: `AMM DEX and liquidity layer on Hyperliquid L1 where users earn spot fees in UP, the native token deployed by Upheaval`, + chain: "Hyperliquid L1", + logo: `${baseIconsUrl}/upheaval-spot-amm.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Hyperliquid L1"], + forkedFromIds: [], + module: "dummy.js", + twitter: "Upheavalfi", + parentProtocol: "parent#upheaval-finance", + audit_links: [], + dimensions: { + fees: "upheaval-spot", + } + }, ]; export default data4; diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index 90eee4daac..fb75c59d46 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -7803,7 +7803,7 @@ const parentProtocols: IParentProtocol[] = [   referralUrl: "https://upheaval.fi/portfolio?ref=674574", description: "Upheaval is a DeFi platform on HyperliquidEVM, featuring a Hyper efficient AMM DEX", logo: `${baseIconsUrl}/upheaval-finance.jpg`, - gecko_id: null, + gecko_id: "upheaval", cmcId: null, chains: [], twitter: "Upheavalfi", From 370e4ce3d6f6e6cd507a987c1eafeefd0d453835 Mon Sep 17 00:00:00 2001 From: Josh-DIA Date: Tue, 14 Oct 2025 22:58:09 -0600 Subject: [PATCH 273/398] Update data4.ts (#10818) --- defi/src/protocols/data4.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index e2eb13b1a8..6ae33ebf9e 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -23000,6 +23000,12 @@ const data4: Protocol[] = [ audit_links: ["https://docs.parallel.best/resources/security-audits"], parentProtocol: "parent#parallel-protocol", listedAt: 1753821437, + oraclesBreakdown: [ + { + name: "DIA", + type: "Primary", + proof: ["https://gov.parallel.best/t/pgp-34-l-launch-parallel-stablecoins-price-feeds-using-dia/488"] + } }, { id: "6501", From e249af11dcc539d5aecca15aff23fc3e821dc83e Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 14 Oct 2025 23:01:25 -0600 Subject: [PATCH 274/398] add coingecko id --- defi/src/protocols/data1.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data1.ts b/defi/src/protocols/data1.ts index e6273ab2e1..3f514dfdcb 100644 --- a/defi/src/protocols/data1.ts +++ b/defi/src/protocols/data1.ts @@ -13517,7 +13517,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the id: "693", name: "Superfluid", address: null, - symbol: "-", + symbol: "SUP", url: "https://www.superfluid.finance/home", description: "Programmable Cashflows. Handle subscriptions, salaries, rewards and any composable stream of value, with continuous settlement and per-second netting for extreme capital efficiency.", @@ -13525,7 +13525,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the logo: `${baseIconsUrl}/superfluid.png`, audits: "2", audit_note: null, - gecko_id: null, + gecko_id: "superfluid", cmcId: null, category: "Payments", chains: ["Polygon", "xDai"], From b0d7f46aa79bbb37b76670a31f8fbc94874c33de Mon Sep 17 00:00:00 2001 From: Antipas Ben <164266898+AntipasBen23@users.noreply.github.com> Date: Wed, 15 Oct 2025 06:02:26 +0100 Subject: [PATCH 275/398] fix: correct invalid audit values from 6 to 2 (#10812) Fixes #10470 - Changed audits from invalid value '6' to '2' (Yes, fully audited) for: - ACryptoS (data1.ts line 2322) - Api3 (data1.ts line 27597) - Juicebox (data3.ts line 3192) All three protocols have audit_links confirming they are audited. --- defi/src/protocols/data1.ts | 4 ++-- defi/src/protocols/data3.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/defi/src/protocols/data1.ts b/defi/src/protocols/data1.ts index 3f514dfdcb..4609b08d72 100644 --- a/defi/src/protocols/data1.ts +++ b/defi/src/protocols/data1.ts @@ -2319,7 +2319,7 @@ const data: Protocol[] = [ description: "Advanced, Customized Strategies - ACryptoS's Automated Conc. Liquidity Manager (ACLM) for V3 DEXs consistently delivers strong yet sustainable yields, while Single-Token vaults automate leveraging for lending protocol users, growing more tokens with no IL risks.", chain: "Binance", logo: `${baseIconsUrl}/acryptos.jpg`, - audits: "6", + audits: "2", audit_note: null, gecko_id: "acryptos", cmcId: "7844", @@ -27596,7 +27596,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the "Oracles that pay you: Api3 first-party oracles deliver secure, transparent data while also turning data feed updates into a source of revenue for your dApp.", chain: "Ethereum", logo: `${baseIconsUrl}/api3.png`, - audits: "6", + audits: "2", audit_note: null, gecko_id: "api3", cmcId: "7737", diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index a4ee30b37b..a065fbb3b5 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -3189,7 +3189,7 @@ const data3_1: Protocol[] = [ "Join thousands of projects using Juicebox to fund, operate, and scale their ideas & communities transparently on Ethereum.", chain: "Ethereum", logo: `${baseIconsUrl}/juicebox.png`, - audits: "6", + audits: "2", audit_note: null, gecko_id: null, cmcId: null, From 56242585d967ed7ee432e08e4fa57f556c087bd3 Mon Sep 17 00:00:00 2001 From: Sid Date: Wed, 15 Oct 2025 10:36:06 +0530 Subject: [PATCH 276/398] chore: add plasma chain (#10805) --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 6ae33ebf9e..f24805a075 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -15863,7 +15863,7 @@ const data4: Protocol[] = [ gecko_id: null, cmcId: null, category: "Risk Curators", - chains: ["Ethereum", "Base", "Sonic", "Berachain", "Binance", "Plume Mainnet", "TAC"], + chains: ["Ethereum", "Base", "Sonic", "Berachain", "Binance", "Plume Mainnet", "TAC", "Plasma"], forkedFrom: [], oraclesBreakdown: [ { From b28d37762ab20e8c1ff5bb4fde2c0705188417c9 Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 14 Oct 2025 23:07:51 -0600 Subject: [PATCH 277/398] fix syntax --- defi/src/protocols/data4.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index f24805a075..348b6ce0b0 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -23006,6 +23006,7 @@ const data4: Protocol[] = [ type: "Primary", proof: ["https://gov.parallel.best/t/pgp-34-l-launch-parallel-stablecoins-price-feeds-using-dia/488"] } + ] }, { id: "6501", From 98e0ab4a96dc2c72a37833d1e65edd2c6d829464 Mon Sep 17 00:00:00 2001 From: aakib08 <165257027+aakib08@users.noreply.github.com> Date: Wed, 15 Oct 2025 10:42:33 +0530 Subject: [PATCH 278/398] Rebrand Hyperpie Launchpad and Dex to SpinUp Launchpad and Dex (#10803) * Rebrand Hyperpie Launchpad and Dex to SpinUp Launchpad and Dex * keep original parent ID --------- Co-authored-by: Aakib Co-authored-by: Real Shaman <85087525+realdealshaman@users.noreply.github.com> --- defi/src/protocols/data4.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 348b6ce0b0..31e1b461bd 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -27047,13 +27047,13 @@ const data4: Protocol[] = [ }, { id: "6671", - name: "Hyperpie Launchpad", + name: "SpinUp Launchpad", address: null, symbol: "-", - url: "https://www.hyperliquid.magpiexyz.io/meme", + url: "https://www.spinup.zone/meme", description: "One-Click MEME Launch", chain: "Hyperliquid L1", - logo: `${baseIconsUrl}/hyperpie-launchpad.jpg`, + logo: `${baseIconsUrl}/spinup.jpg`, audits: "0", audit_note: null, gecko_id: null, @@ -27062,7 +27062,7 @@ const data4: Protocol[] = [ chains: ["Hyperliquid L1"], module: "hyperpie-launchpad/index.js", forkedFromIds: [], - twitter: "Hyperpiexyz_io", + twitter: "SpinUpZone", parentProtocol: "parent#magpie-ecosystem", listedAt: 1757103078, dimensions: { @@ -27072,13 +27072,13 @@ const data4: Protocol[] = [ }, { id: "6672", - name: "Hyperpie DEX", + name: "SpinUp DEX", address: null, symbol: "-", - url: "https://www.hyperliquid.magpiexyz.io/dex/swap", - description: "Hyperpie DEX is a MEME DEX built on Hyperliquid designed around a ve(3,3) tokenomics model", + url: "https://www.spinup.zone/dex/swap", + description: "SpinUp DEX is a MEME DEX built on Hyperliquid designed around a ve(3,3) tokenomics model.", chain: "Hyperliquid L1", - logo: `${baseIconsUrl}/hyperpie-dex.jpg`, + logo: `${baseIconsUrl}/spinup.jpg`, audits: "0", audit_note: null, gecko_id: null, @@ -27087,7 +27087,7 @@ const data4: Protocol[] = [ chains: ["Hyperliquid L1"], module: "hyperpie-v2-dex/index.js", forkedFromIds: ["1407"], - twitter: "Hyperpiexyz_io", + twitter: "SpinUpZone", parentProtocol: "parent#magpie-ecosystem", listedAt: 1757103085, dimensions: { From 2362e1b86d068dccb4147eaef57b618d1cbd5bcf Mon Sep 17 00:00:00 2001 From: realshaman Date: Tue, 14 Oct 2025 23:14:16 -0600 Subject: [PATCH 279/398] point to correct icon --- defi/src/protocols/data4.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 31e1b461bd..890312ea78 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -27053,7 +27053,7 @@ const data4: Protocol[] = [ url: "https://www.spinup.zone/meme", description: "One-Click MEME Launch", chain: "Hyperliquid L1", - logo: `${baseIconsUrl}/spinup.jpg`, + logo: `${baseIconsUrl}/spinup-launchpad.jpg`, audits: "0", audit_note: null, gecko_id: null, @@ -27078,7 +27078,7 @@ const data4: Protocol[] = [ url: "https://www.spinup.zone/dex/swap", description: "SpinUp DEX is a MEME DEX built on Hyperliquid designed around a ve(3,3) tokenomics model.", chain: "Hyperliquid L1", - logo: `${baseIconsUrl}/spinup.jpg`, + logo: `${baseIconsUrl}/spinup-dex.jpg`, audits: "0", audit_note: null, gecko_id: null, From 67d708a41fefae8cdf40d15d31681be8e1237a5a Mon Sep 17 00:00:00 2001 From: Define101 Date: Wed, 15 Oct 2025 16:08:00 +0100 Subject: [PATCH 280/398] OpenSea description --- defi/src/protocols/parentProtocols.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index fb75c59d46..28448d2377 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -1123,7 +1123,7 @@ const parentProtocols: IParentProtocol[] = [ name: "OpenSea", url: "https://opensea.io/", description: - "OpenSea is the world's first and largest web3 marketplace for NFTs and crypto collectibles.", + "The best place to discover, own, and trade onchain.", logo: `${baseIconsUrl}/opensea.png`, gecko_id: null, cmcId: null, From 05ca8a654714a58949560c6c47b0605a3af5311c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 15 Oct 2025 17:17:27 +0200 Subject: [PATCH 281/398] bugfix --- defi/src/protocols/data.test.ts | 95 ++++++++++++++++++++++++++------- defi/src/protocols/data3.ts | 4 +- 2 files changed, 78 insertions(+), 21 deletions(-) diff --git a/defi/src/protocols/data.test.ts b/defi/src/protocols/data.test.ts index cca98f23fa..a8398ae779 100644 --- a/defi/src/protocols/data.test.ts +++ b/defi/src/protocols/data.test.ts @@ -6,8 +6,9 @@ import parentProtocols from "./parentProtocols"; import treasuries from "./treasury"; import operationalCosts from "../operationalCosts/daos"; import { sluggifyString } from "../utils/sluggify"; -import { AdaptorRecordType } from "../adaptors/data/types"; +import { ADAPTER_TYPES, AdaptorRecordType } from "../adaptors/data/types"; const fs = require("fs"); +import loadAdaptorsData from "../adaptors/data"; test("operational expenses: script has been run", async () => { const outputData = JSON.parse(fs.readFileSync(`${__dirname}/../operationalCosts/output/expenses.json`, 'utf8')); @@ -47,7 +48,7 @@ test("all chains are on chainMap", async () => { test("there are no repeated values in unlock adapters", async () => { const tokens = [] as string[], protocolIds = [] as string[][], notes = [] as string[][], sources = [] as string[][]; for (const [protocolName, protocolFile] of Object.entries(emissionsAdapters)) { - if(protocolName === "daomaker" || protocolName === "streamflow"){ + if (protocolName === "daomaker" || protocolName === "streamflow") { continue } const rawProtocol = protocolFile.default @@ -55,15 +56,15 @@ test("there are no repeated values in unlock adapters", async () => { expect(protocol.token).not.toBe(undefined) expect(tokens).not.toContain(protocol.token); tokens.push(protocol.token); - if(protocol.protocolIds){ + if (protocol.protocolIds) { expect(protocolIds).not.toContain(protocol.protocolIds); protocolIds.push(protocol.protocolIds); } - if(protocol.notes){ + if (protocol.notes) { expect(notes).not.toContain(protocol.notes); notes.push(protocol.notes); } - if(protocol.sources){ + if (protocol.sources) { expect(sources).not.toContain(protocol.sources); sources.push(protocol.sources); } @@ -78,7 +79,7 @@ test("valid treasury fields", async () => { for (const [chain, value] of Object.entries(module)) { if (typeof value !== 'object' || ignoredKeys.has(chain)) continue; for (const [key, _module] of Object.entries(value as Object)) { - if ((typeof _module !== 'function' && _module !== '_lmtf')|| !treasuryKeys.has(key)) + if ((typeof _module !== 'function' && _module !== '_lmtf') || !treasuryKeys.has(key)) throw new Error('Bad module for adapter: ' + protocol.name + ' in chain ' + chain + ' key:' + key) } } @@ -108,7 +109,7 @@ test("Github repo on parent protocol when it exists", async () => { }); test("Github: track only orgs", async () => { - const childs = [...protocols, ...parentProtocols].filter(i => i.github?.find(g=>g.includes('/'))) + const childs = [...protocols, ...parentProtocols].filter(i => i.github?.find(g => g.includes('/'))) if (childs.length) console.log('Update github field to org/user or remove it: ', childs.map(i => i.name)) expect(childs.length).toBeLessThanOrEqual(0) @@ -135,16 +136,16 @@ test("projects have a single chain or each chain has an adapter", async () => { }); test("parentProtocol exists", async () => { - const parentIds = parentProtocols.map(p=>p.id) + const parentIds = parentProtocols.map(p => p.id) for (const protocol of protocols) { - if(protocol.parentProtocol) - expect(parentIds).toContain(protocol.parentProtocol); + if (protocol.parentProtocol) + expect(parentIds).toContain(protocol.parentProtocol); } }); test("no id is repeated", async () => { const ids = []; - for (const protocol of (protocols as {id:string}[]).concat(parentProtocols)) { + for (const protocol of (protocols as { id: string }[]).concat(parentProtocols)) { expect(ids).not.toContain(protocol.id); ids.push(protocol.id); } @@ -152,8 +153,8 @@ test("no id is repeated", async () => { test("no name is repeated", async () => { const names = new Set(); - for (const protocol of (protocols as {name:string, previousNames?:string[]}[]).concat(parentProtocols)) { - for(const name of [protocol.name, ...(protocol.previousNames ?? [])]){ + for (const protocol of (protocols as { name: string, previousNames?: string[] }[]).concat(parentProtocols)) { + for (const name of [protocol.name, ...(protocol.previousNames ?? [])]) { expect(names).not.toContain(name.toLowerCase()); names.add(name.toLowerCase()) } @@ -173,10 +174,10 @@ test("no slug is repeated", async () => { test("all oracle names match exactly", async () => { const oracles = {} as any; for (const protocol of (protocols).concat(parentProtocols as any)) { - for(const oracle of (protocol.oracles ?? [])){ + for (const oracle of (protocol.oracles ?? [])) { const prevOracle = oracles[oracle.toLowerCase()] - if(prevOracle === undefined){ - oracles[oracle.toLowerCase()]=oracle + if (prevOracle === undefined) { + oracles[oracle.toLowerCase()] = oracle } else { expect(prevOracle).toBe(oracle) } @@ -338,6 +339,62 @@ test("icon exists", async () => { const isArrayUnique = (arr: any[]) => Array.isArray(arr) && new Set(arr).size === arr.length; test("No duplicated adapter type", async () => { - const values = Object.values(AdaptorRecordType) - expect(isArrayUnique(values)).toBeTruthy(); -}); \ No newline at end of file + const values = Object.values(AdaptorRecordType) + expect(isArrayUnique(values)).toBeTruthy(); +}); + +test("Dimensions: No two listings share the same module, name or slug", () => { + + const moduleMapFromMetadata = {} as Record>; // adapterType -> protocolName -> module + const allProtocolMetadata = protocols.concat(Object.values(chainCoingeckoIds) as any) + const protocolNamesProcessed = {} as Record + + allProtocolMetadata.forEach((p: any) => { + const name = p.name ? `protocols/${p.name}` : `chain/${p.symbol}` + if (protocolNamesProcessed[name]) throw new Error(`Protocol ${name} is listed more than once in protocols.ts or chainCoingeckoIds.ts`) + protocolNamesProcessed[name] = true; + + if (!p.dimensions) return; + + for (const adaptorTypeKey of Object.keys(p.dimensions)) { + if (!moduleMapFromMetadata[adaptorTypeKey]) moduleMapFromMetadata[adaptorTypeKey] = {} + const existingMap = moduleMapFromMetadata[adaptorTypeKey] + + const moduleField = typeof p.dimensions[adaptorTypeKey] === 'string' ? p.dimensions[adaptorTypeKey] : p.dimensions[adaptorTypeKey]?.adapter + if (!moduleField) { + throw new Error(`No adapter field found for protocol ${name} for adapter type ${adaptorTypeKey}`) + } + + if (existingMap[moduleField]) { + throw new Error(`Duplicate module ${moduleField} found in metadata for ${name} and ${existingMap[moduleField]} for adapter type ${adaptorTypeKey}`); + } + existingMap[moduleField] = name + } + }) + + for (const adapterType of Object.values(ADAPTER_TYPES)) { + const { protocolAdaptors } = loadAdaptorsData(adapterType) + + const moduleMap = {} as Record; + const nameMap = {} as Record; + const slugMap = {} as Record; + + + for (const adaptor of protocolAdaptors) { + // we might not catch module this way because we sort of do a reverse mapping, get all imports file, then map from there to a protocol/chain + if (moduleMap[adaptor.module]) { + throw new Error(`Duplicate module ${adaptor.module} found in ${adaptor.name} and ${moduleMap[adaptor.module]} for adapter type ${adapterType}`); + } + moduleMap[adaptor.module] = adaptor.name; + if (nameMap[adaptor.name]) { + throw new Error(`Duplicate name ${adaptor.name} found in ${adaptor.module} and ${nameMap[adaptor.name]} for adapter type ${adapterType}`); + } + nameMap[adaptor.name] = adaptor.module; + const slug = sluggifyString(adaptor.name); + if (slugMap[slug]) { + throw new Error(`Duplicate slug ${slug} found in ${adaptor.name} and ${slugMap[slug]} for adapter type ${adapterType}`); + } + slugMap[slug] = adaptor.name; + } + } +}) \ No newline at end of file diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index a065fbb3b5..a7e9b94136 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -42291,7 +42291,7 @@ const data3_2: Protocol[] = [ aggregators: "hinkal" } }, - { +/* { // this is a chain listing, should only be in normalizeChain.ts id: "4488", name: "Ethereum", address: null, @@ -42317,7 +42317,7 @@ const data3_2: Protocol[] = [ genuineSpikes: ["1760054400"], } } - }, + }, */ { id: "4489", name: "GammaSwap", From 658821eaee080a6b2946be1f98c76ce947080b5c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 15 Oct 2025 17:54:12 +0200 Subject: [PATCH 282/398] ui-tool: bugfix --- defi/src/adaptors/handlers/storeAdaptorData/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/adaptors/handlers/storeAdaptorData/index.ts b/defi/src/adaptors/handlers/storeAdaptorData/index.ts index 4427ae0fc8..3fbf61bce8 100644 --- a/defi/src/adaptors/handlers/storeAdaptorData/index.ts +++ b/defi/src/adaptors/handlers/storeAdaptorData/index.ts @@ -251,7 +251,7 @@ export const handler2 = async (event: IStoreAdaptorDataHandlerEvent) => { recordTimestamp = fromTimestamp // when we are storing data, irrespective of version, store at start timestamp while running from refill script? const todayStartOfDay = getTimestampAtStartOfDayUTC(Math.floor(Date.now() / 1000)) if (toTimestamp >= todayStartOfDay) { - if (isAdapterVersionV1) throw new Error(`V1 adapters cannot be run for today as they pull data for the previous day`) + if (isAdapterVersionV1 && !runAtCurrTime) throw new Error(`V1 adapters cannot be run for today as they pull data for the previous day`) recordTimestamp = toTimestamp } } From 1148b91f1d77bfda7a6f26f41e0c092437c786f2 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 15 Oct 2025 17:55:38 +0200 Subject: [PATCH 283/398] ui-tool: bugfix --- defi/src/adaptors/handlers/storeAdaptorData/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/adaptors/handlers/storeAdaptorData/index.ts b/defi/src/adaptors/handlers/storeAdaptorData/index.ts index 3fbf61bce8..8a5420bb07 100644 --- a/defi/src/adaptors/handlers/storeAdaptorData/index.ts +++ b/defi/src/adaptors/handlers/storeAdaptorData/index.ts @@ -274,8 +274,8 @@ export const handler2 = async (event: IStoreAdaptorDataHandlerEvent) => { if (isRunFromRefillScript && runAtCurrTime) { - if (Date.now() - fromTimestamp * 1000 > 1000 * 60 * 60 * 24) { - throw new Error(`${adapterType} - ${module} - runAtCurrTime is set, but the refill script is running for more than 24 hours`) + if (Date.now() - fromTimestamp * 1000 > 1000 * 60 * 60 * 24 * 2) { + throw new Error(`${adapterType} - ${module} - runAtCurrTime is set, but the refill script is running for more than 48 hours`) } } From 29d87dc45a347215df55869d08ab3e71b82e485d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 15 Oct 2025 18:05:53 +0200 Subject: [PATCH 284/398] add eth spike --- defi/src/utils/normalizeChain.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/defi/src/utils/normalizeChain.ts b/defi/src/utils/normalizeChain.ts index 1b84daf1e9..c8f6436096 100644 --- a/defi/src/utils/normalizeChain.ts +++ b/defi/src/utils/normalizeChain.ts @@ -104,7 +104,10 @@ export const chainCoingeckoIds = { url: "https://ethereum.foundation/", dimensions: { fees: { - genuineSpikes: ["1651449600"], + genuineSpikes: [ + "1651449600", + "1760054400", // 2025-10-10 - sharp drop in the market - Black Friday + ], adapter: "ethereum" } } From 655852070dd7dbeb92735bf0765dd9bd2dc24215 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 15 Oct 2025 19:46:20 +0200 Subject: [PATCH 285/398] ui-tool: tvl fill old bugfix --- defi/ui-tool/src/tvl.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/ui-tool/src/tvl.ts b/defi/ui-tool/src/tvl.ts index c0dd940c6f..c31f7e1838 100644 --- a/defi/ui-tool/src/tvl.ts +++ b/defi/ui-tool/src/tvl.ts @@ -103,7 +103,7 @@ async function fillOld(ws: any, protocol: IProtocol, options: any) { if (!skipBlockFetch) { - if (adapter.timetravel === false) { + if (adapter.timetravel === false && !chains?.length) { // if we are delibrately passing chains, we assume user knows what they are doing console.error("Adapter doesn't support refilling"); return; } From cf3b476f5b6d9cfd176b3d3ae0afa6117b749fc7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 15 Oct 2025 20:41:39 +0200 Subject: [PATCH 286/398] fix unit test --- defi/src/protocols/data.test.ts | 34 ++++++++++++++++++++++++++++----- defi/src/protocols/data3.ts | 10 ++-------- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/defi/src/protocols/data.test.ts b/defi/src/protocols/data.test.ts index a8398ae779..cd41d20411 100644 --- a/defi/src/protocols/data.test.ts +++ b/defi/src/protocols/data.test.ts @@ -1,7 +1,7 @@ import emissionsAdapters from "../utils/imports/emissions_adapters"; import { importAdapter, importAdapterDynamic } from "../utils/imports/importAdapter"; import { chainCoingeckoIds, getChainDisplayName, normalizeChain, transformNewChainName } from "../utils/normalizeChain"; -import protocols, { protocolsById } from "./data"; +import protocols from "./data"; import parentProtocols from "./parentProtocols"; import treasuries from "./treasury"; import operationalCosts from "../operationalCosts/daos"; @@ -343,18 +343,42 @@ test("No duplicated adapter type", async () => { expect(isArrayUnique(values)).toBeTruthy(); }); -test("Dimensions: No two listings share the same module, name or slug", () => { +test.only("Dimensions: No two listings share the same module, name or slug", () => { const moduleMapFromMetadata = {} as Record>; // adapterType -> protocolName -> module - const allProtocolMetadata = protocols.concat(Object.values(chainCoingeckoIds) as any) + + // we have duplicate chains in chainCoingeckoIds as we maintain the same config for old and new chain names + const addedChains = new Set(); + const chainMetadata = Object.entries(chainCoingeckoIds).map(([symbol, data]) => { + if (addedChains.has(data)) { + // console.log("Duplicate chain found: ", symbol); + return; + } + + addedChains.add(data); + + return { + ...data, + name: symbol, + } + }).filter(Boolean) + + const allProtocolMetadata = protocols.concat(chainMetadata as any) const protocolNamesProcessed = {} as Record allProtocolMetadata.forEach((p: any) => { - const name = p.name ? `protocols/${p.name}` : `chain/${p.symbol}` + if (!p.dimensions) return; + + const name = p.name + + if (!name) { + console.log(p) + return; + } + if (protocolNamesProcessed[name]) throw new Error(`Protocol ${name} is listed more than once in protocols.ts or chainCoingeckoIds.ts`) protocolNamesProcessed[name] = true; - if (!p.dimensions) return; for (const adaptorTypeKey of Object.keys(p.dimensions)) { if (!moduleMapFromMetadata[adaptorTypeKey]) moduleMapFromMetadata[adaptorTypeKey] = {} diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index a7e9b94136..dd7c1a025e 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -42291,7 +42291,7 @@ const data3_2: Protocol[] = [ aggregators: "hinkal" } }, -/* { // this is a chain listing, should only be in normalizeChain.ts + { id: "4488", name: "Ethereum", address: null, @@ -42311,13 +42311,7 @@ const data3_2: Protocol[] = [ module: "dummy.js", twitter: "ethereum", listedAt: 1713453599, - dimensions: { - fees: { - adapter: "ethereum", - genuineSpikes: ["1760054400"], - } - } - }, */ + }, { id: "4489", name: "GammaSwap", From 49cf19df56a39cc7eba07cd10ec1e9d4a5a43063 Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 15 Oct 2025 14:40:02 -0600 Subject: [PATCH 287/398] remove timestamp of dummy listing --- defi/DefiLlama-Adapters | 2 +- defi/src/protocols/data3.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/defi/DefiLlama-Adapters b/defi/DefiLlama-Adapters index 9e47edf20d..130c4a1cf8 160000 --- a/defi/DefiLlama-Adapters +++ b/defi/DefiLlama-Adapters @@ -1 +1 @@ -Subproject commit 9e47edf20dca4a474b7318bf37bfc920962dbba5 +Subproject commit 130c4a1cf8d75f76b1039945b38374cf917cdaa4 diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index dd7c1a025e..38399cf38a 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -42310,7 +42310,6 @@ const data3_2: Protocol[] = [ forkedFrom: [], module: "dummy.js", twitter: "ethereum", - listedAt: 1713453599, }, { id: "4489", From 30e9d08403f55f7341fc91d319f8d9c8321cd7bd Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 15 Oct 2025 15:59:09 -0600 Subject: [PATCH 288/398] enable dimensions adapters --- defi/src/protocols/data4.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 890312ea78..25f580d991 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31369,6 +31369,10 @@ const data4: Protocol[] = [ twitter: "punkdotcoffee", github: ["0xPunkcoffee"], listedAt: 1760475695, + dimensions: { + fees: "punk.coffee", + dexs: "punk.coffee" + } }, { id: "6861", @@ -31488,6 +31492,10 @@ const data4: Protocol[] = [ forkedFrom: [], parentProtocol: "parent#cetus", listedAt: 1760499842, + dimensions: { + fees: "cetus-dlmm", + dexs: "cetus-dlmm" + } }, { id: "6867", From 9656ff53aeef3e74a36f41d4725d168d5911fd55 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 16 Oct 2025 00:24:43 +0200 Subject: [PATCH 289/398] move notification to a new channel --- defi/src/api2/cron-task/dimensions.ts | 9 +++++---- defi/src/api2/cron-task/index.ts | 9 +++++---- defi/src/notifyOutdated.ts | 4 ++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/defi/src/api2/cron-task/dimensions.ts b/defi/src/api2/cron-task/dimensions.ts index 95eec824d3..c3e750aeb7 100644 --- a/defi/src/api2/cron-task/dimensions.ts +++ b/defi/src/api2/cron-task/dimensions.ts @@ -74,18 +74,18 @@ async function run() { // generate summaries for all types ADAPTER_TYPES.map(generateSummaries) - if (NOTIFY_ON_DISCORD) { + if (NOTIFY_ON_DISCORD && process.env.DIM_ERROR_CHANNEL_WEBHOOK) { if (spikeRecords.length) { await sendMessage(` Spikes detected and removed: ${spikeRecords.join('\n')} - `, process.env.DIM_CHANNEL_WEBHOOK!) + `, process.env.DIM_ERROR_CHANNEL_WEBHOOK!) } if (invalidDataRecords.length) { await sendMessage(` Invalid records detected and removed: ${invalidDataRecords.join('\n')} - `, process.env.DIM_CHANNEL_WEBHOOK!) + `, process.env.DIM_ERROR_CHANNEL_WEBHOOK!) } } @@ -734,7 +734,8 @@ runWithRuntimeLogging(run, { .catch(async e => { console.error(e) const errorMessage = (e as any)?.message ?? (e as any)?.stack ?? JSON.stringify(e) - await sendMessage(errorMessage, process.env.DIM_CHANNEL_WEBHOOK!) + if (process.env.DIM_ERROR_CHANNEL_WEBHOOK) + await sendMessage(errorMessage, process.env.DIM_ERROR_CHANNEL_WEBHOOK!) }) .then(() => process.exit(0)) diff --git a/defi/src/api2/cron-task/index.ts b/defi/src/api2/cron-task/index.ts index b349d08f66..cc0acd18ec 100644 --- a/defi/src/api2/cron-task/index.ts +++ b/defi/src/api2/cron-task/index.ts @@ -415,13 +415,14 @@ async function storeRWAStats() { runWithRuntimeLogging(run, { - application: "cron-task", - type: 'tvl-data', - }) + application: "cron-task", + type: 'tvl-data', +}) .then(genFormattedChains) .catch(async e => { console.error(e) const errorMessage = (e as any)?.message ?? (e as any)?.stack ?? JSON.stringify(e) - await sendMessage(errorMessage, process.env.DIM_CHANNEL_WEBHOOK!) + if (process.env.DIM_ERROR_CHANNEL_WEBHOOK) + await sendMessage(errorMessage, process.env.DIM_ERROR_CHANNEL_WEBHOOK!) }) .then(() => process.exit(0)) \ No newline at end of file diff --git a/defi/src/notifyOutdated.ts b/defi/src/notifyOutdated.ts index 388dcaa19d..2b393d19da 100644 --- a/defi/src/notifyOutdated.ts +++ b/defi/src/notifyOutdated.ts @@ -98,7 +98,7 @@ async function notifyBlockedDimensionUpdates() { try { const esClient = elastic.getClient() const aDayAgo = Math.floor(Date.now() / 1000) - 24 * 3600 - let { lastCheckTS } = (await cache.readExpiringJsonCache('lastBlockedDimensionCheck')) || { lastCheckTS: 0 } + let { lastCheckTS } = (await cache.readExpiringJsonCache('lastBlockedDimensionCheck-v1')) || { lastCheckTS: 0 } if (!lastCheckTS || lastCheckTS < aDayAgo) lastCheckTS = aDayAgo - 1 @@ -137,7 +137,7 @@ async function notifyBlockedDimensionUpdates() { message = `These are the blocked dimension updates since the last notification: ${message} ${trimmedMessage} ${linkToKibana}` - await sendMessage(message, process.env.DIM_CHANNEL_WEBHOOK!) + await sendMessage(message, process.env.DIM_ERROR_CHANNEL_WEBHOOK!) const timeNow = Math.floor(Date.now() / 1000) await cache.writeExpiringJsonCache('lastBlockedDimensionCheck', { lastCheckTS: timeNow }, { expireAfter: 7 * 24 * 3600 }) From e18dbd0f8f1497d32b2708725d607f0bb201f9e1 Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 15 Oct 2025 17:47:14 -0600 Subject: [PATCH 290/398] fix symbol --- coins/src/adapters/tokenMapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index 0e367d0cbc..2b2600791a 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -11601,7 +11601,7 @@ }, "0x51A30E647D33A044967FA3DBb04d6ED6F45455F6": { "decimals": "18", - "symbol": "USDN", + "symbol": "USN", "to": "coingecko#noon-usn" }, "0x5Ced7F73B76A555CCB372cc0F0137bEc5665F81E": { From 1ba9143d20e6d77cb7be7180acedb0e98d9ffced Mon Sep 17 00:00:00 2001 From: Archie Date: Thu, 16 Oct 2025 02:58:33 +0300 Subject: [PATCH 291/398] Update Enjoyoors category (#10821) --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 25f580d991..afd78adb22 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31511,7 +31511,7 @@ const data4: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Algo-Stables", + category: "CDP", chains: ["Ethereum"], module: "enjoyoors/index.js", twitter: "enjoyoorsxyz", From c33b3d90d1b471dfb80018c82345e2db0b47285f Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 15 Oct 2025 19:39:20 -0600 Subject: [PATCH 292/398] add new listings --- defi/src/protocols/data4.ts | 85 +++++++++++++++++++++++++++ defi/src/protocols/parentProtocols.ts | 12 ++++ 2 files changed, 97 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index afd78adb22..00ba492a67 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31575,5 +31575,90 @@ const data4: Protocol[] = [ fees: "upheaval-spot", } }, + { + id: "6870", + name: "Excellion Finance", + address: null, + symbol: "-", + url: "https://excellion.finance/", + description: `Excellion Finance is an investment firm focused on market-neutral strategies across leading EVM and non-EVM chains`, + chain: "Avalanche", + logo: `${baseIconsUrl}/excellion-finance.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Risk Curators", + chains: ["Avalanche"], + forkedFromIds: [], + module: "excellion-finance/index.js", + twitter: "EF_Fund", + audit_links: [], + listedAt: 1760577884 + }, + { + id: "6871", + name: "GateSwap", + address: null, + symbol: "-", + url: "https://web3.gate.com/en/swap", + description: `GateSwap is a decentralized exchange (DEX) platform built on the Gate Layer, a high-performance Layer 2 blockchain powered by the Optimism OP Stack. Designed for seamless token swaps, it supports low-cost, high-speed transactions with EVM compatibility, enabling users to trade meme coins, DeFi assets, and more. Integrated with Gate Wallet and Gate Fun for one-click token creation, GateSwap empowers the Web3 ecosystem by fostering fair launches, community-driven liquidity, and innovative features like dual-buy mechanisms to prevent arbitrage, making it a go-to hub for crypto enthusiasts in the Gate.io universe.`, + chain: "GateLayer", + logo: `${baseIconsUrl}/gateswap.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["GateLayer"], + forkedFromIds: [], + module: "GateSwap/index.js", + twitter: "Gate_Fun", + audit_links: [], + listedAt: 1760577888 + }, + { + id: "6872", + name: "Element NFT Marketplace", + address: null, + symbol: "-", + url: "https://element.market", + description: `Element is the first multi-chain NFT marketplace and aggregator, providing 3 million+ users with real-time data analysis, efficient trading tools, visible cost savings, and customized shopping navigations`, + chain: "Binance", + logo: `${baseIconsUrl}/element-nft-marketplace.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "NFT Marketplace", + chains: ["Binance", "Ethereum", "Base", "Arbitrum", "Polygon"], + forkedFromIds: [], + module: "element/index.js", + twitter: "Element_Market", + audit_links: [], + listedAt: 1760577897 + }, + { + id: "6873", + name: "Strata Tranches", + address: null, + symbol: "-", + url: "https://strata.money", + description: `Strata is a perpetual risk-tranching protocol that offers structured yield products on crypto-native yields. It allows investors to tailor their risk-reward preferences while earning yields through two risk tranches: Senior and Junior`, + chain: "Ethereum", + logo: `${baseIconsUrl}/strata-tranches.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Yield", + chains: ["Ethereum"], + forkedFromIds: [], + module: "strata-tranches/index.js", + twitter: "Strata_Money", + parentProtocol: "parent#strata", + audit_links: ["https://docs.strata.money/security/audits"], + listedAt: 1760577905 + }, ]; export default data4; diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index 28448d2377..c31f672d7f 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8235,6 +8235,18 @@ const parentProtocols: IParentProtocol[] = [ twitter: "rainbowdotme", github: ["rainbow-me"], }, + { + id: "parent#strata", + name: "Strata", + url: "https://strata.money", + description: "Strata is a perpetual risk-tranching protocol that offers structured yield products on crypto-native yields", + logo: `${baseIconsUrl}/strata.jpg`, + gecko_id: null, + cmcId: null, + chains: [], + twitter: "Strata_Money", + github: ["Strata-Money"], + }, ]; export default parentProtocols; From 8086f46c6594841784d7da29ea83ca74f26979f5 Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 15 Oct 2025 19:42:04 -0600 Subject: [PATCH 293/398] add tokens from strata tranches pr --- coins/src/adapters/yield/misc4626/tokens.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/coins/src/adapters/yield/misc4626/tokens.json b/coins/src/adapters/yield/misc4626/tokens.json index bf11ca9bf2..a8c514ff04 100644 --- a/coins/src/adapters/yield/misc4626/tokens.json +++ b/coins/src/adapters/yield/misc4626/tokens.json @@ -78,7 +78,9 @@ "uUSCC++": "0x8245FD9Ae99A482dFe76576dd4298f799c041D61", "ustUSR++": "0x8092cA384D44260ea4feaf7457B629B8DC6f88F0", "MCUSDC": "0xa60643c90A542A95026C0F1dbdB0615fF42019Cf", - "aMUSD": "0x52317a47585A6ACDfbD7a29B494c3E2baAE96aBc" + "aMUSD": "0x52317a47585A6ACDfbD7a29B494c3E2baAE96aBc", + "srUSDe": "0x3d7d6fdf07EE548B939A80edbc9B2256d0cdc003", + "jrUSDe": "0xC58D044404d8B14e953C115E67823784dEA53d8F" }, "arbitrum": { "voltGNS": "0x39ff5098081fbe1ab241c31fe0a9974fe9891d04", From c041cea7d46f458d5cb4b2a774964232ddb73e7e Mon Sep 17 00:00:00 2001 From: wang chun <52391458+ChunWang1998@users.noreply.github.com> Date: Thu, 16 Oct 2025 09:42:41 +0800 Subject: [PATCH 294/398] add Arbitrum in SuperReturn (#10807) --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 00ba492a67..f3e7a8e8ff 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -24775,7 +24775,7 @@ const data4: Protocol[] = [ gecko_id: null, cmcId: null, category: "Onchain Capital Allocator", - chains: ["Ethereum", "Soneium", "Plume Mainnet"], + chains: ["Ethereum", "Soneium", "Plume Mainnet", "Arbitrum"], module: "superReturn/index.js", twitter: "superreturnai", listedAt: 1755108027, From 1a3c08507b91b38661b8823a0e4ac3264e4473c0 Mon Sep 17 00:00:00 2001 From: navi-mark Date: Wed, 15 Oct 2025 21:44:55 -0400 Subject: [PATCH 295/398] Update volo-vsui category to curated risk management/liquid staking (#10791) * Update volo-vsui category to curated risk management/liquid staking * Update Volo category to Risk Curators --------- Co-authored-by: mark1213866 --- defi/src/protocols/data3.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 38399cf38a..e92c489c17 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -23791,7 +23791,7 @@ const data3_1: Protocol[] = [ audit_note: null, gecko_id: null, cmcId: null, - category: "Liquid Staking", + category: "Risk Curators", chains: ["Sui"], module: "volo-vsui/index.js", twitter: "volo_sui", From e75f42db13bda814963286c11044e1fa7fbcaa01 Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 15 Oct 2025 19:50:49 -0600 Subject: [PATCH 296/398] add hallmark for typus exploit --- defi/src/protocols/data4.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index f3e7a8e8ff..4be55e80ff 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -11116,6 +11116,9 @@ const data4: Protocol[] = [ ], parentProtocol: "parent#typus-finance", listedAt: 1744133053, + hallmarks: [ + [1760486400, "TLP contract exploited"], + ], dimensions: { fees: "typus-perp", derivatives: "typus-perp" From 13358e1925e3d9ab5baa2985b2bb8afaeaca2c1c Mon Sep 17 00:00:00 2001 From: realshaman Date: Wed, 15 Oct 2025 20:03:57 -0600 Subject: [PATCH 297/398] add new listings --- defi/src/protocols/data4.ts | 62 +++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 4be55e80ff..41de3919f8 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31663,5 +31663,67 @@ const data4: Protocol[] = [ audit_links: ["https://docs.strata.money/security/audits"], listedAt: 1760577905 }, + { + id: "6874", + name: "StratEx", + address: null, + symbol: "-", + url: "https://www.stratex.finance/", + description: `StratEx is an advanced decentralised finance (DeFi) protocol designed to revolutionise yield optimisation and risk management in the DeFi ecosystem. Built to cater to the needs of investors, StratEx addresses the critical challenges that currently hinder DeFi participation and capital efficiency`, + chain: "Base", + logo: `${baseIconsUrl}/stratex.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Yield Aggregator", + chains: ["Base"], + forkedFromIds: [], + module: "stratex/index.js", + twitter: "StratEx_finance", + oraclesBreakdown: [ + { + name: "Chainlink", + type: "Primary", + proof: ["https://github.com/DefiLlama/DefiLlama-Adapters/pull/16683"], + }, + ], + audit_links: [], + listedAt: 1760579697, + dimensions: { + fees: "stratex" + } + }, + { + id: "6875", + name: "Tydro", + address: null, + symbol: "-", + url: "https://tydro.com/", + description: `Tydro is a non-custodial lending protocol for onchain capital markets. Powered by Aave and built on Ink`, + chain: "Ink", + logo: `${baseIconsUrl}/tydro.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Lending", + chains: ["Ink"], + forkedFromIds: [], + module: "tydro/index.js", + twitter: "tydrohq", + oraclesBreakdown: [ + { + name: "Edge", + type: "Primary", + proof: ["https://docs.tydro.com/primitives/oracle"], + }, + ], + audit_links: [], + listedAt: 1760580111, + dimensions: { + fees: "tydro" + } + }, ]; export default data4; From f6d7d828e260bd562625824a48d89a0ec4d938ff Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 16 Oct 2025 09:17:07 +0200 Subject: [PATCH 298/398] whitelist ethereum spike --- defi/src/utils/normalizeChain.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/defi/src/utils/normalizeChain.ts b/defi/src/utils/normalizeChain.ts index c8f6436096..9a4e039e13 100644 --- a/defi/src/utils/normalizeChain.ts +++ b/defi/src/utils/normalizeChain.ts @@ -106,6 +106,7 @@ export const chainCoingeckoIds = { fees: { genuineSpikes: [ "1651449600", + "1651363200", // otherside mint "1760054400", // 2025-10-10 - sharp drop in the market - Black Friday ], adapter: "ethereum" From 9b2f5bedfb665cb32bb0748ed07c483e432fb76b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 16 Oct 2025 09:31:32 +0200 Subject: [PATCH 299/398] add option to whitelist protocols --- defi/src/adaptors/db-utils/AdapterRecord2.ts | 3 +++ defi/src/adaptors/handlers/storeAdaptorData/index.ts | 8 +++++++- defi/src/notifyOutdated.ts | 6 ++++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/defi/src/adaptors/db-utils/AdapterRecord2.ts b/defi/src/adaptors/db-utils/AdapterRecord2.ts index 06c8b84eae..13aa1b6b7c 100644 --- a/defi/src/adaptors/db-utils/AdapterRecord2.ts +++ b/defi/src/adaptors/db-utils/AdapterRecord2.ts @@ -28,6 +28,7 @@ type ValidationOptions = { getSignificantValueThreshold: (s: string) => number, getSpikeThreshold?: (s: string) => number, recentData: any, + skipDefaultSpikeCheck?: boolean, } export class AdapterRecord2 { @@ -182,6 +183,8 @@ export class AdapterRecord2 { if (hasTooFewDatapoints) { // we dont have enough data to compare with, do general spike check + if (options.skipDefaultSpikeCheck) return; // skip the default spike check for this adapter + for (const dataType of Object.keys(aggData)) { if (dataType.startsWith('t')) continue; // skip accumulative types diff --git a/defi/src/adaptors/handlers/storeAdaptorData/index.ts b/defi/src/adaptors/handlers/storeAdaptorData/index.ts index 8a5420bb07..2f13f45e9c 100644 --- a/defi/src/adaptors/handlers/storeAdaptorData/index.ts +++ b/defi/src/adaptors/handlers/storeAdaptorData/index.ts @@ -24,6 +24,12 @@ const canGetBlock = (chain: Chain) => blockChains.includes(chain) const timestampAtStartofHour = getTimestampAtStartOfHour(Math.trunc((Date.now()) / 1000)) const timestampAnHourAgo = timestampAtStartofHour - 2 * 60 * 60 +// some protocols have high value data from the moment we list, we add their id here to avoid them being blocked by validation +const skipDefaultRecentDataCheckForAdapters = new Set([ + '3923', // derive v2 + '5060', // derive options +]) + export type IStoreAdaptorDataHandlerEvent = { timestamp?: number adapterType: AdapterType @@ -392,7 +398,7 @@ export const handler2 = async (event: IStoreAdaptorDataHandlerEvent) => { // validate against recent data if available if (checkAgainstRecentData) { const protocolRecentData = recentData[adapterRecord.id] - const validationError = adapterRecord.validateWithRecentData({ recentData: protocolRecentData, getSignificantValueThreshold, getSpikeThreshold, }) + const validationError = adapterRecord.validateWithRecentData({ recentData: protocolRecentData, getSignificantValueThreshold, getSpikeThreshold, skipDefaultSpikeCheck: skipDefaultRecentDataCheckForAdapters.has(adapterRecord.id) }) if (validationError) { sdk.log('[validation error]', `[${adapterRecord.name}]`, validationError.message, 'skipping this record', protocolRecentData?.tooFewRecords, protocolRecentData?.hasSignificantData, protocolRecentData?.records?.length, protocolRecentData?.dimStats) await elastic.writeLog('dimension-blocked', validationError) diff --git a/defi/src/notifyOutdated.ts b/defi/src/notifyOutdated.ts index 2b393d19da..247c92e4dd 100644 --- a/defi/src/notifyOutdated.ts +++ b/defi/src/notifyOutdated.ts @@ -95,10 +95,12 @@ export async function notifyOutdatedPG() { } async function notifyBlockedDimensionUpdates() { + const cacheFileName = 'lastBlockedDimensionCheck' + try { const esClient = elastic.getClient() const aDayAgo = Math.floor(Date.now() / 1000) - 24 * 3600 - let { lastCheckTS } = (await cache.readExpiringJsonCache('lastBlockedDimensionCheck-v1')) || { lastCheckTS: 0 } + let { lastCheckTS } = (await cache.readExpiringJsonCache(cacheFileName)) || { lastCheckTS: 0 } if (!lastCheckTS || lastCheckTS < aDayAgo) lastCheckTS = aDayAgo - 1 @@ -140,7 +142,7 @@ async function notifyBlockedDimensionUpdates() { await sendMessage(message, process.env.DIM_ERROR_CHANNEL_WEBHOOK!) const timeNow = Math.floor(Date.now() / 1000) - await cache.writeExpiringJsonCache('lastBlockedDimensionCheck', { lastCheckTS: timeNow }, { expireAfter: 7 * 24 * 3600 }) + await cache.writeExpiringJsonCache(cacheFileName, { lastCheckTS: timeNow }, { expireAfter: 7 * 24 * 3600 }) await esClient?.close() } catch (e) { From 9f14cadaf8d364b0ff58907a59bd19cfd252e3f9 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 16 Oct 2025 10:13:56 +0200 Subject: [PATCH 300/398] move which channel notification is sent --- defi/proof-of-reserves/cli/check.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/proof-of-reserves/cli/check.ts b/defi/proof-of-reserves/cli/check.ts index 73093f8613..b67aea34c0 100644 --- a/defi/proof-of-reserves/cli/check.ts +++ b/defi/proof-of-reserves/cli/check.ts @@ -81,8 +81,8 @@ ${sdk.util.tableToString([...filteredProtocols], printColumns)} Using this script: https://github.com/DefiLlama/defillama-server/blob/master/defi/proof-of-reserves/cli/check.ts` - if (process.env.TEAM_WEBHOOK && filteredProtocols.length > 0) { - await sendMessage(message, process.env.TEAM_WEBHOOK!, true) + if (process.env.DIM_ERROR_CHANNEL_WEBHOOK && filteredProtocols.length > 0) { + await sendMessage(message, process.env.DIM_ERROR_CHANNEL_WEBHOOK!, true) } process.exit(0); From bdc19a548814b33b9cd7582da37d5f7c99807988 Mon Sep 17 00:00:00 2001 From: Define101 Date: Thu, 16 Oct 2025 09:44:04 +0100 Subject: [PATCH 301/398] 1inch new name --- defi/src/protocols/data1.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/defi/src/protocols/data1.ts b/defi/src/protocols/data1.ts index 4609b08d72..b8d1f1b546 100644 --- a/defi/src/protocols/data1.ts +++ b/defi/src/protocols/data1.ts @@ -1895,15 +1895,16 @@ const data: Protocol[] = [ }, { id: "189", - name: "1inch Network", + name: "1inch", + previousNames: ["1inch Network"], address: "0x111111111117dc0aa78b770fa6a738034120c302", symbol: "1INCH", url: "https://1inch.io", referralUrl: "https://app.1inch.io/#/r/0x71a15ac12ee91bf7c83d08506f3a3588143898b5", description: - "The 1inch Network unites decentralized protocols whose synergy enables the most lucrative, fastest and protected operations in the DeFi space.", + "1inch unites decentralized protocols whose synergy enables the most lucrative, fastest and protected operations in the DeFi space.", chain: "Ethereum", - logo: `${baseIconsUrl}/1inch-network.jpg`, + logo: `${baseIconsUrl}/1inch.jpg`, audits: "2", audit_note: null, gecko_id: "1inch", From a16a7c5d041a46bb536e5fd5138fe4063a06ea15 Mon Sep 17 00:00:00 2001 From: Define101 Date: Thu, 16 Oct 2025 09:54:40 +0100 Subject: [PATCH 302/398] description 1inch --- defi/src/protocols/data1.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data1.ts b/defi/src/protocols/data1.ts index b8d1f1b546..69f62559ca 100644 --- a/defi/src/protocols/data1.ts +++ b/defi/src/protocols/data1.ts @@ -1902,7 +1902,7 @@ const data: Protocol[] = [ url: "https://1inch.io", referralUrl: "https://app.1inch.io/#/r/0x71a15ac12ee91bf7c83d08506f3a3588143898b5", description: - "1inch unites decentralized protocols whose synergy enables the most lucrative, fastest and protected operations in the DeFi space.", + "1inch is the DeFi ecosystem building financial freedom for everyone", chain: "Ethereum", logo: `${baseIconsUrl}/1inch.jpg`, audits: "2", From e3422494a4bf72a89be530be2a8f1ed49c0d90ae Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 16 Oct 2025 11:44:37 +0200 Subject: [PATCH 303/398] export protocol metadata --- defi/src/api2/cron-task/index.ts | 4 ++++ defi/src/utils/normalizeChain.ts | 3 +++ 2 files changed, 7 insertions(+) diff --git a/defi/src/api2/cron-task/index.ts b/defi/src/api2/cron-task/index.ts index cc0acd18ec..366d19b112 100644 --- a/defi/src/api2/cron-task/index.ts +++ b/defi/src/api2/cron-task/index.ts @@ -24,6 +24,7 @@ import { RUN_TYPE, runWithRuntimeLogging } from "../utils"; import { genFormattedChains } from "./genFormattedChains"; import { fetchRWAStats } from "../../rwa"; import { sendMessage } from "../../utils/discord"; +import { chainKeyToLabelMap } from "../../utils/normalizeChain"; const protocolDataMap: { [key: string]: any } = {} @@ -299,9 +300,12 @@ async function run() { console.time('write /config') const data = { protocols: cache.metadata.protocols, + parentProtocols: cache.metadata.parentProtocols, chainCoingeckoIds: cache.metadata.chainCoingeckoIds, + chainKeyToLabelMap, } await storeRouteData('configs', data) + await storeRouteData('/_fe/static/configs', data) // this is handled in rest server now diff --git a/defi/src/utils/normalizeChain.ts b/defi/src/utils/normalizeChain.ts index 9a4e039e13..8e901f4f62 100644 --- a/defi/src/utils/normalizeChain.ts +++ b/defi/src/utils/normalizeChain.ts @@ -5301,6 +5301,9 @@ export function getChainDisplayName(normalizedChain: string, useNewChainNames: b } } +// NOTE: this only works if chain key and label are different, else capitalize the first character of the chain key +export const chainKeyToLabelMap = allChainLabelMap + export function getDisplayChain(chains: string[]) { if (chains.length > 1) { return "Multi-Chain"; From a5046c612f0e7e890dafa0c287c354a7cce3976b Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 16 Oct 2025 13:53:00 +0100 Subject: [PATCH 304/398] volumes (#10827) --- coins/src/updateCoin.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/coins/src/updateCoin.ts b/coins/src/updateCoin.ts index 11915f6275..84e4eb9df3 100644 --- a/coins/src/updateCoin.ts +++ b/coins/src/updateCoin.ts @@ -154,6 +154,7 @@ const handler = async (event: any): Promise => { usd_market_cap: mcap, usd: price, last_updated_at: SK, + usd_24h_vol: volume, } = newData[id]; PKTransforms[PK].forEach((coinName) => { @@ -177,6 +178,7 @@ const handler = async (event: any): Promise => { timestamp: SK, symbol, confidence, + volume }, { PK: `coingecko#${id}`, @@ -184,6 +186,7 @@ const handler = async (event: any): Promise => { price, confidence, adapter: "updateCoin", + volume }, ], ); From dd820b8e6aa4852233ba5d6c933eae00c707eb31 Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 16 Oct 2025 17:13:10 -0600 Subject: [PATCH 305/398] add new listings and chain --- defi/DefiLlama-Adapters | 2 +- defi/src/protocols/data3.ts | 3 +- defi/src/protocols/data4.ts | 79 +++++++++++++++++++++++++++++++- defi/src/utils/normalizeChain.ts | 9 ++++ 4 files changed, 89 insertions(+), 4 deletions(-) diff --git a/defi/DefiLlama-Adapters b/defi/DefiLlama-Adapters index 130c4a1cf8..dc7f41675c 160000 --- a/defi/DefiLlama-Adapters +++ b/defi/DefiLlama-Adapters @@ -1 +1 @@ -Subproject commit 130c4a1cf8d75f76b1039945b38374cf917cdaa4 +Subproject commit dc7f41675cc60b53939045d91a8fab2d31376d7e diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index e92c489c17..fdc17eb463 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -34239,11 +34239,12 @@ const data3_1: Protocol[] = [ cmcId: null, category: "Treasury Manager", chains: ["Ethereum"], - module: "dummy.js", + module: "kpk/index.js", treasury: "karpatkey.js", twitter: "kpk_io", forkedFrom: [], github: ["karpatkey"], + listedAt: 1760637747 }, { id: "4147", diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 41de3919f8..c35674f3d1 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -16290,11 +16290,12 @@ const data4: Protocol[] = [ category: "Cross Chain Bridge", chains: ["Near"], forkedFrom: [], - module: "dummy.js", + module: "near-intents/index.js", twitter: "NEARProtocol", dimensions: { "bridge-aggregators": "near-intents" - } + }, + listedAt: 1760656359 }, { id: "6226", @@ -31725,5 +31726,79 @@ const data4: Protocol[] = [ fees: "tydro" } }, + { + id: "6876", + name: "Sharwa.Finance", + address: null, + symbol: "-", + url: "https://sharwa.finance/", + description: `Sharwa is an on-chain portfolio margin trading protocol on Arbitrum. Traders can use any asset as collateral to trade leveraged positions and options in one account. Lenders earn fees from providing liquidity`, + chain: "Arbitrum", + logo: `${baseIconsUrl}/sharwa.finance.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Derivatives", + chains: ["Arbitrum"], + forkedFromIds: [], + module: "sharwa-finance/index.js", + twitter: "SharwaFinance", + audit_links: ["https://sharwa.gitbook.io/sharwa-docs/margin-account/security"], + oraclesBreakdown: [ + { + name: "Chainlink", + type: "Primary", + proof: ["https://github.com/DefiLlama/DefiLlama-Adapters/pull/16700"], + }, + ], + github: ["SharwaFinance"], + listedAt: 1760656075, + }, + { + id: "6877", + name: "ZealousSwap", + address: null, + symbol: "-", + url: "https://app.zealousswap.com/swap", + description: `The first AMM-based DEX on the Kaspa ecosystem`, + chain: "Kasplex", + logo: `${baseIconsUrl}/zealousswap.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Kasplex"], + forkedFromIds: ["2197"], + module: "zealousswap/index.js", + twitter: "zealousswap", + audit_links: ["https://github.com/zealousswap/audits"], + listedAt: 1760656085, + }, + { + id: "6878", + name: "Coinhain", + address: null, + symbol: "-", + url: "https://coinhain.fi/", + description: `Coinhain is a Balancer v3–powered DEX on BNB Chain. It features advanced pool tech that significantly improves the liquidity-provision experience on BNB, including Stable, reCLAMM, and Boosted pools. Beyond the classic AMM experience, a Margin Liquidity protocol is in development to let LPs leverage their positions for greater capital efficiency and flexibility`, + chain: "Binance", + logo: `${baseIconsUrl}/coinhain.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Binance"], + forkedFromIds: ["5491"], + module: "coinhain/index.js", + twitter: "coinhain", + audit_links: [ + "https://github.com/balancer/balancer-v3-monorepo/tree/main/audits", + "https://docs.coinhain.fi/security/audits" + ], + listedAt: 1760656147, + }, ]; export default data4; diff --git a/defi/src/utils/normalizeChain.ts b/defi/src/utils/normalizeChain.ts index 8e901f4f62..40dee725f3 100644 --- a/defi/src/utils/normalizeChain.ts +++ b/defi/src/utils/normalizeChain.ts @@ -4971,6 +4971,15 @@ export const chainCoingeckoIds = { github: ["hello-xone"], chainId: 3721, }, + "Kasplex": { + geckoId: null, + symbol: null, + cmcId: null, + categories: [], + twitter: "kasplex", + url: "https://kasplex.org/", + github: ["kasplex"], + }, } as unknown as ChainCoinGekcoIds // We are creating the list here because, later in the code, we include historical chain labels with the same chain metadata, so, chainCoingeckoIds will have duplicate keys From c239353e8efc75ebfa30d5987c80d7ec2473e8c5 Mon Sep 17 00:00:00 2001 From: realshaman Date: Thu, 16 Oct 2025 17:15:08 -0600 Subject: [PATCH 306/398] enable hyperbeat fees --- defi/src/protocols/data4.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index c35674f3d1..ff7f1f01c9 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -13346,7 +13346,9 @@ const data4: Protocol[] = [ tokensExcludedFromParent: { Hyperliquid: ["BEHYPE"], }, - + dimensions: { + fees: "hyperbeat" + }, oraclesBreakdown: [ { name: "RedStone", @@ -29325,6 +29327,9 @@ const data4: Protocol[] = [ forkedFromIds: [], parentProtocol: "parent#hyperbeat", listedAt: 1758815485, + dimensions: { + fees: "hyperbeat-lst" + } }, { id: "6771", From 09985197ff7d28130e636f43bf2882114e194c88 Mon Sep 17 00:00:00 2001 From: Define101 Date: Fri, 17 Oct 2025 08:30:42 +0100 Subject: [PATCH 307/398] enable Aster Perps --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index ff7f1f01c9..5e92599b08 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -28319,7 +28319,7 @@ const data4: Protocol[] = [ parentProtocol: "parent#astherus", dimensions: { fees: "apollox", - // derivatives: "apollox", + derivatives: "apollox", "open-interest": "apollox" } }, From 38a8c185e80e04aaaad2e960777c41702f2c28ac Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 17 Oct 2025 10:54:46 +0200 Subject: [PATCH 308/398] unlink emissions repo (#10825) --- .github/workflows/defi.yml | 1 - .gitmodules | 3 - defi/package-lock.json | 441 +++++------------- defi/package.json | 1 - defi/src/api2/cron-task/githubMetrics.ts | 4 +- defi/src/cli/buildRequires.ts | 11 - defi/src/storeEmissions.ts | 79 ---- defi/src/storeEmissionsIndex.ts | 17 +- defi/src/storeEmissionsUtils.ts | 545 ----------------------- 9 files changed, 123 insertions(+), 979 deletions(-) delete mode 100644 defi/src/storeEmissions.ts delete mode 100644 defi/src/storeEmissionsUtils.ts diff --git a/.github/workflows/defi.yml b/.github/workflows/defi.yml index 56fc8a1e93..841f5eef4b 100644 --- a/.github/workflows/defi.yml +++ b/.github/workflows/defi.yml @@ -42,7 +42,6 @@ jobs: key: ${{ runner.os }}-jest-${{ env.TODAY }} - run: cd DefiLlama-Adapters && git checkout main && git pull - run: cd dimension-adapters && git checkout master && git pull - - run: cd emissions-adapters && git checkout master && git pull - run: npm ci || npm i - name: Run tests run: npm t data # && npx esbuild src/protocols/import.test.ts --bundle --log-limit=0 --platform=node | node diff --git a/.gitmodules b/.gitmodules index a751aa29a9..477f1d46f9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,6 +5,3 @@ [submodule "defi/dimension-adapters"] path = defi/dimension-adapters url = https://github.com/DefiLlama/dimension-adapters.git -[submodule "defi/emissions-adapters"] - path = defi/emissions-adapters - url = https://github.com/DefiLlama/emissions-adapters.git diff --git a/defi/package-lock.json b/defi/package-lock.json index 22b1e22c0c..6e77a2a6ba 100644 --- a/defi/package-lock.json +++ b/defi/package-lock.json @@ -12,7 +12,6 @@ "@aws-sdk/client-s3": "^3.245.0", "@defillama/adapters": "file:./DefiLlama-Adapters", "@defillama/dimension-adapters": "file:./dimension-adapters", - "@defillama/emissions-adapters": "file:./emissions-adapters", "@defillama/sdk": "^5.0.172", "@elastic/elasticsearch": "^8.13.1", "@supercharge/promise-pool": "^2.3.2", @@ -79,7 +78,6 @@ "@solana/web3.js": "^1.87.6", "@solendprotocol/solend-sdk": "^0.4.3", "@supercharge/promise-pool": "^2.1.0", - "async-retry": "^1.3.3", "axios": "^1.6.5", "bignumber.js": "^9.0.1", "blakejs": "^1.2.1", @@ -96,12 +94,9 @@ "miscreant": "^0.3.2", "p-limit": "^3.1.0", "starknet": "^5.24.3", - "tron-format-address": "^0.1.8", "typescript": "^5.0.0" }, "devDependencies": { - "@types/async-retry": "^1.4.5", - "@types/bn.js": "^5.1.0", "eslint": "^8.32.0", "ts-node": "^10.8.1" } @@ -293,6 +288,7 @@ } }, "emissions-adapters": { + "extraneous": true, "dependencies": { "@clickhouse/client": "^1.11.1", "@defillama/sdk": "^5.0.126", @@ -311,44 +307,6 @@ "ts-node": "^10.9.1" } }, - "emissions-adapters/node_modules/graphql-request": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-5.2.0.tgz", - "integrity": "sha512-pLhKIvnMyBERL0dtFI3medKqWOz/RhHdcgbZ+hMMIb32mEPa5MJSzS4AuXxfI4sRAu6JVVk5tvXuGfCWl9JYWQ==", - "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" - } - }, - "emissions-adapters/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" - } - }, - "emissions-adapters/node_modules/node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - } - }, "node_modules/@adraffy/ens-normalize": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", @@ -3261,24 +3219,6 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@clickhouse/client": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@clickhouse/client/-/client-1.11.1.tgz", - "integrity": "sha512-u9h++h72SmWystijNqfNvMkfA+5+Y1LNfmLL/odCL3VgI3oyAPP9ubSw/Yrt2zRZkLKehMMD1kuOej0QHbSoBA==", - "license": "Apache-2.0", - "dependencies": { - "@clickhouse/client-common": "1.11.1" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@clickhouse/client-common": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@clickhouse/client-common/-/client-common-1.11.1.tgz", - "integrity": "sha512-bme0le2yhDSAh13d2fxhSW5ZrNoVqZ3LTyac8jK6hNH0qkksXnjYkLS6KQalPU6NMpffxHmpI4+/Gi2MnX0NCA==", - "license": "Apache-2.0" - }, "node_modules/@coral-xyz/anchor": { "version": "0.29.0", "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.29.0.tgz", @@ -3371,10 +3311,6 @@ "resolved": "dimension-adapters", "link": true }, - "node_modules/@defillama/emissions-adapters": { - "resolved": "emissions-adapters", - "link": true - }, "node_modules/@defillama/sdk": { "version": "5.0.175", "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.175.tgz", @@ -4805,36 +4741,6 @@ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", "dev": true }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@napi-rs/triples": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.2.0.tgz", @@ -6586,15 +6492,6 @@ "@babel/types": "^7.20.7" } }, - "node_modules/@types/bn.js": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", - "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/cacheable-request": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", @@ -7011,11 +6908,6 @@ "es5-ext": "^0.10.47" } }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -7133,6 +7025,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, "dependencies": { "debug": "4" }, @@ -7318,11 +7211,6 @@ "node": ">= 6.0.0" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, "node_modules/archive-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", @@ -7425,18 +7313,6 @@ "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "dev": true }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -8600,6 +8476,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -8640,20 +8529,6 @@ } ] }, - "node_modules/canvas": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", - "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", - "hasInstallScript": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.17.0", - "simple-get": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -8688,23 +8563,6 @@ "resolved": "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz", "integrity": "sha512-syedaZ9cPe7r3hoQA9twWYKu5AIyCswN5+szkmPBe9ccdLrj4bYaCnLVPTLd2kgVRc7+zoX4tyPgRnFKCj5YjQ==" }, - "node_modules/chart.js": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.9.1.tgz", - "integrity": "sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==" - }, - "node_modules/chartjs-node-canvas": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/chartjs-node-canvas/-/chartjs-node-canvas-4.1.6.tgz", - "integrity": "sha512-UQJbPWrvqB/FoLclGA9BaLQmZbzSYlujF4w8NZd6Xzb+sqgACBb2owDX6m7ifCXLjUW5Nz0Qx0qqrTtQkkSoYw==", - "dependencies": { - "canvas": "^2.8.0", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "chart.js": "^3.5.1" - } - }, "node_modules/child-process-ext": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/child-process-ext/-/child-process-ext-2.1.1.tgz", @@ -8832,6 +8690,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, "engines": { "node": ">=10" } @@ -9300,14 +9159,6 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "bin": { - "color-support": "bin.js" - } - }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -9365,11 +9216,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -10130,25 +9976,12 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, "node_modules/desm": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/desm/-/desm-1.3.1.tgz", "integrity": "sha512-vgTAOosB1aHrmzjGnzFCbjvXbk8QAOC/36JxJhcBkeAuUy8QwRFxAWBHemiDpUB3cbrBruFUdzpUS21aocvaWg==", "dev": true }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "engines": { - "node": ">=8" - } - }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -10244,6 +10077,20 @@ "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==" }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duration": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", @@ -10457,12 +10304,10 @@ "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -10502,9 +10347,10 @@ "peer": true }, "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -10513,13 +10359,15 @@ } }, "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -12165,6 +12013,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -12176,6 +12025,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -12186,7 +12036,8 @@ "node_modules/fs-minipass/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/fs.realpath": { "version": "1.0.0", @@ -12272,25 +12123,6 @@ "node": ">= 0.6.0" } }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -12309,15 +12141,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -12335,6 +12173,19 @@ "node": ">=8.0.0" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stdin": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", @@ -12482,11 +12333,12 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12611,9 +12463,10 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -12635,11 +12488,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -12733,6 +12581,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -16950,6 +16799,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -16975,6 +16825,15 @@ "tmpl": "1.0.5" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -17140,6 +16999,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -17152,6 +17012,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -17162,7 +17023,8 @@ "node_modules/minizlib/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/miscreant": { "version": "0.3.2", @@ -17224,11 +17086,6 @@ "thenify-all": "^1.0.0" } }, - "node_modules/nan": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", - "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==" - }, "node_modules/napi-macros": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", @@ -17412,20 +17269,6 @@ "node": ">=6" } }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -17488,17 +17331,6 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, "node_modules/nssocket": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/nssocket/-/nssocket-0.6.0.tgz", @@ -18873,6 +18705,7 @@ "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", @@ -19165,6 +18998,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -19421,6 +19255,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -20068,11 +19903,6 @@ } } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -20167,57 +19997,6 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "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/simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-get/node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/simple-get/node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/simple-git": { "version": "3.24.0", "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.24.0.tgz", @@ -20490,6 +20269,7 @@ "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" } @@ -20835,6 +20615,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -20866,7 +20647,8 @@ "node_modules/tar/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/terser": { "version": "5.31.0", @@ -22048,7 +21830,8 @@ "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==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "node_modules/uuid": { "version": "9.0.1", @@ -22342,14 +22125,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/widest-line": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", diff --git a/defi/package.json b/defi/package.json index 0f87bada1d..34d9217266 100644 --- a/defi/package.json +++ b/defi/package.json @@ -89,7 +89,6 @@ "@aws-sdk/client-s3": "^3.245.0", "@defillama/adapters": "file:./DefiLlama-Adapters", "@defillama/dimension-adapters": "file:./dimension-adapters", - "@defillama/emissions-adapters": "file:./emissions-adapters", "@defillama/sdk": "^5.0.172", "@elastic/elasticsearch": "^8.13.1", "@supercharge/promise-pool": "^2.3.2", diff --git a/defi/src/api2/cron-task/githubMetrics.ts b/defi/src/api2/cron-task/githubMetrics.ts index 7713aa7a55..c1d24074e9 100644 --- a/defi/src/api2/cron-task/githubMetrics.ts +++ b/defi/src/api2/cron-task/githubMetrics.ts @@ -9,6 +9,8 @@ const cacheDir = path.join(__dirname, '.cache') const lastRunFile = path.join(cacheDir, '.cron-task-github-last-run-v3') export async function pullDevMetricsData() { + return; // we stopped pulling github data + /* try { if (!shouldRunTask()) { console.log('Dev metrics: Task was already run within the last day.') @@ -33,7 +35,7 @@ export async function pullDevMetricsData() { } catch (error) { console.error('Dev metrics: Error pulling data', error) return [] - } + } */ } diff --git a/defi/src/cli/buildRequires.ts b/defi/src/cli/buildRequires.ts index 4be3fa1ea5..45753998cb 100644 --- a/defi/src/cli/buildRequires.ts +++ b/defi/src/cli/buildRequires.ts @@ -20,7 +20,6 @@ async function run() { const buildFunctions = { // 'tvl import': createTVLImportsFile, 'liquidation import': createLiquidationImportsFile, - 'emissions import': createEmissionsImportsFile, 'dimensions import': createDimensionsImports, } @@ -113,16 +112,6 @@ async function createDimensionsImports() { } - -// emissions-adapters -function createEmissionsImportsFile() { - const emission_keys = getDirectories(`./emissions-adapters/protocols`) - writeFileSync(`./src/utils/imports/emissions_adapters.ts`, - `export default { - ${emission_keys.map(k => `"${removeDotTs(k)}":require("@defillama/emissions-adapters/protocols/${k}"),`).join('\n')} -}`) -} - async function createTVLImportsFile() { await writeFile("./src/utils/imports/adapters.ts", `export default { diff --git a/defi/src/storeEmissions.ts b/defi/src/storeEmissions.ts deleted file mode 100644 index fb42cd2e23..0000000000 --- a/defi/src/storeEmissions.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { PromisePool } from "@supercharge/promise-pool"; -import adapters from "./utils/imports/emissions_adapters"; -import { EmissionBreakdown, Protocol } from "../emissions-adapters/types/adapters"; -import { storeR2JSONString } from "./utils/r2"; -import { shuffleArray } from "./utils/shared/shuffleArray"; -import { sendMessage } from "./utils/discord"; -import { withTimeout } from "./utils/shared/withTimeout"; -import { processSingleProtocol } from "./storeEmissionsUtils"; - -export async function processProtocolList() { - let protocolsArray: string[] = []; - let protocolErrors: string[] = []; - let emissionsBrakedown: EmissionBreakdown = {}; - let supplyMetricsBreakdown: Record = {}; - - const protocolAdapters = Object.entries(adapters); - await PromisePool.withConcurrency(5) - .for(shuffleArray(protocolAdapters)) - .process(async ([protocolName, rawAdapter]) => { - let adapters = typeof rawAdapter.default === "function" ? await rawAdapter.default() : rawAdapter.default; - if (!adapters.length) adapters = [adapters]; - await Promise.all( - adapters.map((adapter: Protocol) => - withTimeout(6000000, processSingleProtocol(adapter, protocolName, emissionsBrakedown, supplyMetricsBreakdown), protocolName) - .then((p: string) => protocolsArray.push(p)) - .catch((err: Error) => { - console.log(err.message ? `${err.message}: \n storing ${protocolName}` : err); - protocolErrors.push(protocolName); - }) - ) - ); - }); - - await handlerErrors(protocolErrors); - - await storeR2JSONString("emissionsProtocolsList", JSON.stringify([...new Set(protocolsArray)])); - - await storeR2JSONString("emissionsBreakdown", JSON.stringify(emissionsBrakedown)); - const protocols = Object.values(emissionsBrakedown); - const aggregated = { - protocols, - emission24h: 0, - emission7d: 0, - emission30d: 0, - emissionsMonthlyAverage1y: 0 - }; - protocols.forEach((protocol: any) => { - aggregated.emission24h += protocol.emission24h; - aggregated.emission7d += protocol.emission7d; - aggregated.emission30d += protocol.emission30d; - if (protocol.emissionsMonthlyAverage1y) { - aggregated.emissionsMonthlyAverage1y += protocol.emissionsMonthlyAverage1y; - } - }); - await storeR2JSONString("emissionsBreakdownAggregated", JSON.stringify(aggregated)); - await storeR2JSONString("emissionsSupplyMetrics", JSON.stringify(supplyMetricsBreakdown)); -} - -async function handlerErrors(errors: string[]) { - if (errors.length > 0) { - let errorMessage: string = `storeEmissions errors: \n`; - errors.map((e: string) => (errorMessage += `${e}, `)); - process.env.UNLOCKS_WEBHOOK - ? await sendMessage(errorMessage, process.env.UNLOCKS_WEBHOOK!) - : console.log(errorMessage); - } -} - -export async function handler() { - try { - await withTimeout(8400000, processProtocolList()); - } catch (e) { - process.env.UNLOCKS_WEBHOOK ? await sendMessage(`${e}`, process.env.UNLOCKS_WEBHOOK!) : console.log(e); - } - process.exit(); -} - -// export default wrapScheduledLambda(handler); -handler(); // ts-node defi/src/storeEmissions.ts diff --git a/defi/src/storeEmissionsIndex.ts b/defi/src/storeEmissionsIndex.ts index b4f3798d87..5b48fee319 100644 --- a/defi/src/storeEmissionsIndex.ts +++ b/defi/src/storeEmissionsIndex.ts @@ -1,6 +1,7 @@ import fetch from "node-fetch"; import { getR2, storeR2JSONString } from "./utils/r2"; import { sendMessage } from "./utils/discord"; +import PromisePool from "@supercharge/promise-pool"; type ProtocolData = { token: string; @@ -29,8 +30,7 @@ const fetchProtocolData = async (protocols: string[]): Promise = const protocolsData: ProtocolData[] = []; const now: number = Math.floor(Date.now() / 1000); - await Promise.all( - protocols.map(async (protocol: string) => { + async function fetchData(protocol: string) { let res: any; try { res = await getR2(`emissions/${protocol}`).then((res) => (res.body ? JSON.parse(res.body) : null)); @@ -120,11 +120,18 @@ const fetchProtocolData = async (protocols: string[]): Promise = nextEvent, unlocksPerDay, }); + } + await PromisePool + .withConcurrency(10) + .for(protocols) + .handleError(async (error, protocol) => { + console.error(`Error processing ${protocol}: ${error}`); }) - ); + .process(fetchData); return protocolsData; }; + const fetchCoinsApiData = async (protocols: ProtocolData[]): Promise => { const step: number = 25; for (let i = 0; i < protocols.length; i = i + step) { @@ -158,7 +165,7 @@ const fetchCoinsApiData = async (protocols: ProtocolData[]): Promise => { }); } }; -const fetchProtocolEmissionData = async (protocol: ProtocolData) => { +const fetchProtocolEmissionData = (protocol: ProtocolData) => { let price = protocol.tokenPrice ? protocol.tokenPrice[0] : undefined; if (price) price = price.price; @@ -171,7 +178,7 @@ export default async function handler(): Promise { const allProtocols = (await getR2(`emissionsProtocolsList`).then((res) => JSON.parse(res.body!))) as string[]; const data: ProtocolData[] = await fetchProtocolData(allProtocols); await fetchCoinsApiData(data); - await Promise.all(data.map((d: ProtocolData) => fetchProtocolEmissionData(d))); + data.forEach(fetchProtocolEmissionData) await storeR2JSONString("emissionsIndex", JSON.stringify({ data: data.sort((a, b) => b.mcap - a.mcap) })); console.log("done"); } catch (e) { diff --git a/defi/src/storeEmissionsUtils.ts b/defi/src/storeEmissionsUtils.ts deleted file mode 100644 index 1b99741887..0000000000 --- a/defi/src/storeEmissionsUtils.ts +++ /dev/null @@ -1,545 +0,0 @@ -import fetch from "node-fetch"; -import { createChartData, mapToServerData, nullFinder } from "../emissions-adapters/utils/convertToChartData"; -import { createRawSections } from "../emissions-adapters/utils/convertToRawData"; -import { createCategoryData, createSectionData } from "../emissions-adapters/utils/categoryData"; -import { ChartSection, EmissionBreakdown, Protocol, SectionData, isProtocolV2, ProtocolV2, ProcessedProtocolV2, ComponentResult, AdapterResult } from "../emissions-adapters/types/adapters"; -import { createFuturesData } from "../emissions-adapters/utils/futures"; -import { storeR2JSONString, getR2 } from "./utils/r2"; -import protocols from "./protocols/data"; -import { sluggifyString } from "./utils/sluggify"; -import parentProtocols from "./protocols/parentProtocols"; -import { getDisplayChainNameCached } from "./adaptors/utils/getAllChainsFromAdaptors"; -import { protocolsIncentives } from "../emissions-adapters/no-emissions/incentives"; -import { V2Processor } from "../emissions-adapters/utils/v2-processor"; - -const prefix = "coingecko:"; - -function getCgId(token: string) { - const idStart = token.indexOf(prefix); - if (idStart == -1) return null; - return token.substring(idStart + prefix.length); -} -function findPId(cgId?: string | null, parentId?: string) { - if (!cgId && !parentId) return; - const parent = parentProtocols.find((p) => (parentId ? p.id == parentId : p.gecko_id == cgId)); - if (parent) return { parentProtocol: parent.id, name: parent.name, gecko_id: parent.gecko_id }; - return protocols.find((p) => p.gecko_id == cgId); -} - -async function aggregateMetadata( - protocolName: string, - realTimeChart: ChartSection[], - documentedChart: ChartSection[], - rawData: SectionData, -) { - const pId = rawData.metadata.protocolIds?.[0] ?? null; - const pData0 = protocols.find((p) => p.id == pId); - const cgId = getCgId(rawData.metadata.token) ?? pData0?.gecko_id; - const pData = findPId(cgId, pId?.startsWith("parent#") ? pId : pData0?.parentProtocol) ?? pData0; - const id = pData ? pData.name : cgId ? cgId : protocolName; - let defillamaIds = [rawData.metadata.protocolIds?.[0]].filter(Boolean) - const protocolCategory = protocols.find(p => p.id === pId || p.parentProtocol === pId)?.category; - //transform parent#id to ids - if (pId?.startsWith("parent#")) { - const childIds = protocols - .filter(protocol => protocol.parentProtocol === pId) - .map(protocol => protocol.id); - - defillamaIds = childIds.length ? childIds : []; - } - - - const factories: string[] = ["daomaker"]; - if (factories.includes(protocolName) && !(pData || cgId)) - throw new Error(`no metadata for raw token ${rawData.metadata.token}`); - - let name = id; - let gecko_id = pData?.gecko_id ?? cgId; - - if (pData?.parentProtocol) { - name = parentProtocols.find((p) => p.id === pData.parentProtocol)?.name ?? id; - gecko_id = parentProtocols.find((p) => p.id === pData.parentProtocol)?.gecko_id ?? pData?.gecko_id; - } - - const realTimeTokenAllocation = createCategoryData(realTimeChart, rawData.categories); - const realTimeSectionAllocation = createSectionData(realTimeChart); - const documentedTokenAllocation = createCategoryData(documentedChart, rawData.categories); - const documentedSectionAllocation = createSectionData(documentedChart); - - const futures = pData && "symbol" in pData ? await createFuturesData(pData.symbol) : undefined; - const chainName = getDisplayChainNameCached(rawData.metadata?.chain ?? ""); - - let documentedData; - let realTimeData; - if (documentedChart.length) { - documentedData = { - data: mapToServerData(documentedChart), - tokenAllocation: { - ...documentedTokenAllocation, - bySection: documentedSectionAllocation, - }, - }; - realTimeData = { - data: mapToServerData(realTimeChart), - tokenAllocation: { - ...realTimeTokenAllocation, - bySection: realTimeSectionAllocation, - }, - }; - } else { - documentedData = { - data: mapToServerData(realTimeChart), - tokenAllocation: { - ...realTimeTokenAllocation, - bySection: realTimeSectionAllocation, - }, - }; - } - - return { - data: { - realTimeData, - documentedData, - metadata: rawData.metadata, - name, - gecko_id, - futures, - defillamaIds, - categories: rawData.categories, - protocolCategory, - chainName, - pId - }, - id, - }; -} - -async function getPricedUnlockChart(emissionData: Awaited>["data"], v2ProcessedData?: ProcessedProtocolV2, priceCache?: Record) { - try { - const hasIncentives = emissionData.pId ? protocolsIncentives.includes(emissionData.pId) : false; - - if (!hasIncentives && !v2ProcessedData) { - return []; - } - - const unlocksByTimestamp: Record = {}; - const now = new Date().getTime() / 1000; - const currDate = new Date().getTime() / 1000; - - if (v2ProcessedData) { - for (const section of v2ProcessedData.sections) { - for (const componentResult of section.components) { - if (!componentResult.flags.isIncentive) continue; - - componentResult.results.forEach((result: AdapterResult) => { - if (result.type === "cliff" && typeof result.start === 'number') { - if (result.start < now) { - unlocksByTimestamp[result.start] = (unlocksByTimestamp[result.start] || 0) + result.amount; - } - } else if (result.type === "linear" && typeof result.start === 'number' && typeof result.end === 'number') { - const duration = result.end - result.start; - const dailyAmount = result.amount / (duration / (24 * 60 * 60)); - - for (let timestamp = result.start; timestamp < result.end && timestamp < now; timestamp += 24 * 60 * 60) { - unlocksByTimestamp[timestamp] = (unlocksByTimestamp[timestamp] || 0) + dailyAmount; - } - } else if (result.type === "step" && typeof result.start === 'number') { - const stepResult = result as any; - const stepAmount = result.amount; - - for (let i = 0; i < stepResult.steps; i++) { - const stepTimestamp = result.start + (i + 1) * stepResult.stepDuration; - if (stepTimestamp < now) { - unlocksByTimestamp[stepTimestamp] = (unlocksByTimestamp[stepTimestamp] || 0) + stepAmount; - } - } - } - }); - } - } - } else { - //v1 - const incentiveCategories = ["farming"]; - const incentiveSections = incentiveCategories - .map((cat) => emissionData?.categories[cat]) - .flat() - .filter(Boolean); - - const excludedSections = emissionData?.metadata?.excludeFromAdjustedSupply || []; - const allIncentiveSections = [...incentiveSections, ...excludedSections]; - - emissionData.documentedData.data.forEach( - (chart: { data: Array<{ timestamp: number; rawEmission: number }>; label: string }) => { - if (!allIncentiveSections?.includes(chart.label)) return; - - chart.data - .filter((val) => val.timestamp < currDate) - .forEach((val) => { - if (val.timestamp < now) - unlocksByTimestamp[val.timestamp] = (unlocksByTimestamp[val.timestamp] || 0) + val.rawEmission; - }); - } - ); - } - - const timestamps = Object.keys(unlocksByTimestamp); - - if (timestamps.length === 0) { - return []; - } - - let prices: Record = {}; - const token = emissionData?.metadata?.token; - - if (priceCache) { - prices = priceCache; - } else if (token) { - prices = await fetchPricesForTimestamps(token, timestamps); - } - - const chartsWithPrices = Object.entries(unlocksByTimestamp) - .sort((a: any, b: any) => Number(a[0]) - Number(b[0])) - .map(([ts, unlocked]: [string, number], i, arr: any[]) => { - const currentPrice = prices[ts] || 0; - - if (v2ProcessedData) { - const usdValue = unlocked * currentPrice; - return [Number(ts), usdValue]; - } else { - const previousUnlocked = arr?.[i - 1]?.[1] || 0; - const emissionDifference = unlocked - previousUnlocked; - const usdValue = emissionDifference * currentPrice; - return [Number(ts), usdValue]; - } - }); - - const totalUsd = chartsWithPrices.reduce((sum, [_, val]) => sum + Number(val), 0); - - return chartsWithPrices; - } catch (e) { - return []; - } -} - -const getDateByDaysAgo = (days: number) => { - const date = new Date(); - date.setUTCHours(0, 0, 0, 0); - date.setUTCDate(date.getUTCDate() - days); - return date.getTime() / 1000; -}; -const sum = (arr: number[]) => arr.reduce((acc, val) => acc + val, 0); - -async function fetchPricesForTimestamps(token: string, timestamps: string[]): Promise> { - const prices: Record = {}; - - if (!token || timestamps.length === 0) { - return prices; - } - - console.log(`Fetching prices for ${timestamps.length} timestamps for token: ${token}`); - - const pricePromises = timestamps.map(async (ts) => { - try { - const response = await fetch( - `https://coins.llama.fi/prices/historical/${ts}/${token}?apikey=${process.env.APIKEY}` - ); - const price = await response.json(); - const priceValue = price?.coins?.[token]?.price; - if (priceValue) { - prices[ts] = priceValue; - } - return { ts, price: priceValue }; - } catch (error) { - return { ts, price: undefined }; - } - }); - - await Promise.all(pricePromises); - console.log(`Successfully fetched ${Object.keys(prices).length}/${timestamps.length} prices`); - - return prices; -} - -async function generateComponentChartData(componentResult: ComponentResult, protocolToken: string, priceCache?: Record): Promise { - const unlocksByTimestamp: Record = {}; - const now = new Date().getTime() / 1000; - - componentResult.results.forEach((result: AdapterResult) => { - if (result.type === "cliff" && typeof result.start === 'number') { - if (result.start < now) { - unlocksByTimestamp[result.start] = (unlocksByTimestamp[result.start] || 0) + result.amount; - } - } else if (result.type === "linear" && typeof result.start === 'number' && typeof result.end === 'number') { - const duration = result.end - result.start; - const dailyAmount = result.amount / (duration / (24 * 60 * 60)); - - for (let timestamp = result.start; timestamp < result.end && timestamp < now; timestamp += 24 * 60 * 60) { - unlocksByTimestamp[timestamp] = (unlocksByTimestamp[timestamp] || 0) + dailyAmount; - } - } else if (result.type === "step" && typeof result.start === 'number') { - const stepResult = result as any; - const stepAmount = result.amount; - - for (let i = 0; i < stepResult.steps; i++) { - const stepTimestamp = result.start + (i + 1) * stepResult.stepDuration; - if (stepTimestamp < now) { - unlocksByTimestamp[stepTimestamp] = (unlocksByTimestamp[stepTimestamp] || 0) + stepAmount; - } - } - } - }); - - const timestamps = Object.keys(unlocksByTimestamp); - let prices: Record = {}; - const token = componentResult.component.metadata?.token || protocolToken; - - if (priceCache) { - prices = priceCache; - } else if (token) { - prices = await fetchPricesForTimestamps(token, timestamps); - } - - return Object.entries(unlocksByTimestamp) - .sort((a: any, b: any) => Number(a[0]) - Number(b[0])) - .map(([ts, unlocked]: [string, number]) => { - const currentPrice = prices[ts] || 0; - const usdValue = unlocked * currentPrice; - - return [Number(ts), usdValue]; - }); -} - -async function generateComponentData(v2ProcessedData: ProcessedProtocolV2, timePeriods: number[], protocolToken: string, priceCache?: Record) { - const [dayAgo, weekAgo, monthAgo] = timePeriods; - const componentData = { - sections: {} as any - }; - - for (const section of v2ProcessedData.sections) { - const sectionData = { - displayName: section.section.displayName || section.sectionName, - methodology: section.section.methodology, - isIncentive: section.section.isIncentive, - isTBD: section.section.isTBD, - protocols: section.section.protocols, - emission24h: 0, - emission7d: 0, - emission30d: 0, - components: {} as any - }; - - for (const componentResult of section.components) { - const component = componentResult.component; - const componentId = component.id; - - const componentChartData = await generateComponentChartData(componentResult, protocolToken, priceCache); - - const [day, week, month]: number[][] = [[], [], []]; - componentChartData.forEach(([ts, val]) => { - if (Number(val) < 0) return; - const timestamp = Number(ts); - const value = Number(val); - - if (timestamp > monthAgo) month.push(value); - if (timestamp > weekAgo) week.push(value); - if (timestamp >= dayAgo) day.push(value); - }); - - const emission24h = sum(day); - const emission7d = sum(week); - const emission30d = sum(month); - - sectionData.emission24h += emission24h; - sectionData.emission7d += emission7d; - sectionData.emission30d += emission30d; - - sectionData.components[componentId] = { - name: component.name, - methodology: component.methodology, - isIncentive: componentResult.flags.isIncentive, - isTBD: componentResult.flags.isTBD, - protocols: componentResult.flags.protocols, - emission24h, - emission7d, - emission30d, - metadata: component.metadata, - unlockUsdChart: componentChartData - }; - } - - componentData.sections[section.sectionName] = sectionData; - } - - return componentData; -} - -export async function processSingleProtocol( - adapter: Protocol, - protocolName: string, - emissionsBrakedown: EmissionBreakdown, - supplyMetricsBreakdown: Record, - backfill: boolean = false -): Promise { - const rawData = await createRawSections(adapter, backfill); - nullFinder(rawData.rawSections, "rawSections"); - - let v2ProcessedData: ProcessedProtocolV2 | undefined; - if (isProtocolV2(adapter)) { - v2ProcessedData = await V2Processor.processV2Protocol(adapter as ProtocolV2, backfill); - } - - const { realTimeData, documentedData } = await createChartData( - protocolName, - rawData, - adapter.documented?.replaces ?? [], - backfill - ); - nullFinder(realTimeData, "realTimeData"); - const { data, id } = await aggregateMetadata(protocolName, realTimeData, documentedData, rawData); - - let priceCache: Record | undefined; - if (v2ProcessedData && data.metadata.token) { - const globalTimestamps: string[] = []; - const now = new Date().getTime() / 1000; - - for (const section of v2ProcessedData.sections) { - for (const componentResult of section.components) { - if (!componentResult.flags.isIncentive) continue; - - componentResult.results.forEach((result: AdapterResult) => { - if (result.type === "cliff" && typeof result.start === 'number') { - if (result.start < now) { - globalTimestamps.push(result.start.toString()); - } - } else if (result.type === "linear" && typeof result.start === 'number' && typeof result.end === 'number') { - for (let timestamp = result.start; timestamp < result.end && timestamp < now; timestamp += 24 * 60 * 60) { - globalTimestamps.push(timestamp.toString()); - } - } else if (result.type === "step" && typeof result.start === 'number') { - const stepResult = result as any; - for (let i = 0; i < stepResult.steps; i++) { - const stepTimestamp = result.start + (i + 1) * stepResult.stepDuration; - if (stepTimestamp < now) { - globalTimestamps.push(stepTimestamp.toString()); - } - } - } - }); - } - } - - const componentTimestamps: string[] = []; - for (const section of v2ProcessedData.sections) { - for (const componentResult of section.components) { - componentResult.results.forEach((result: AdapterResult) => { - if (result.type === "cliff" && typeof result.start === 'number') { - if (result.start < now) { - componentTimestamps.push(result.start.toString()); - } - } else if (result.type === "linear" && typeof result.start === 'number' && typeof result.end === 'number') { - for (let timestamp = result.start; timestamp < result.end && timestamp < now; timestamp += 24 * 60 * 60) { - componentTimestamps.push(timestamp.toString()); - } - } else if (result.type === "step" && typeof result.start === 'number') { - const stepResult = result as any; - for (let i = 0; i < stepResult.steps; i++) { - const stepTimestamp = result.start + (i + 1) * stepResult.stepDuration; - if (stepTimestamp < now) { - componentTimestamps.push(stepTimestamp.toString()); - } - } - } - }); - } - } - - const allTimestamps = [...globalTimestamps, ...componentTimestamps]; - const uniqueTimestamps = [...new Set(allTimestamps)]; - - - if (uniqueTimestamps.length > 0) { - priceCache = await fetchPricesForTimestamps(data.metadata.token, uniqueTimestamps); - } - } - - const unlockUsdChart = await getPricedUnlockChart(data, v2ProcessedData, priceCache); - const weekAgo = getDateByDaysAgo(7); - const dayAgo = getDateByDaysAgo(1); - const monthAgo = getDateByDaysAgo(30); - const yearAgo = getDateByDaysAgo(365); - - const [day, week, month, year, allTime]: number[][] = [[], [], [], [], []]; - - const sluggifiedId = sluggifyString(id).replace("parent#", ""); - unlockUsdChart.forEach(([ts, val]) => { - if (Number(val) < 0) return; - const timestamp = Number(ts); - const value = Number(val); - - allTime.push(value); - if (timestamp > yearAgo) year.push(value); - if (timestamp > monthAgo) month.push(value); - if (timestamp > weekAgo) week.push(value); - if (timestamp >= dayAgo) day.push(value); - }); - - const emissions1y = sum(year); - const emissionsAllTime = sum(allTime); - const emissionsAverage1y = year.length > 0 ? emissions1y / 12 : 0; - const emissionsMonthlyAverage1y = year.length >= 30 ? (emissions1y / year.length) * 30.44 : null; - - const breakdown = { - name: data.name, - defillamaId: data.defillamaIds[0] || "", - linked: data.defillamaIds.length > 1 ? data.defillamaIds.slice(1) : [], - category: data.protocolCategory, - chain: data.chainName, - emission24h: sum(day), - emission7d: sum(week), - emission30d: sum(month), - emissions1y, - emissionsAllTime, - emissionsAverage1y, - emissionsMonthlyAverage1y, - }; - - //if (sum([breakdown.emission24h, breakdown.emission7d, breakdown.emission30d]) > 0) - emissionsBrakedown[sluggifiedId] = breakdown; - - let supplyMetrics; - if (v2ProcessedData) { - supplyMetrics = v2ProcessedData.supplyMetrics; - } else { - try { - supplyMetrics = await V2Processor.calculateAdjustedSupplyMetrics( - [], - adapter as any, - rawData.categories - ); - } catch (error) { - console.warn(`Could not calculate supply metrics for V1 adapter ${protocolName}:`, error); - supplyMetrics = undefined; - } - } - - if (supplyMetrics) { - supplyMetricsBreakdown[sluggifiedId] = { - name: data.name, - supplyMetrics: supplyMetrics - }; - } - - const finalData = { - ...data, - unlockUsdChart, - ...(supplyMetrics && { supplyMetrics }), - ...(v2ProcessedData && { - version: 2, - componentData: await generateComponentData(v2ProcessedData, [dayAgo, weekAgo, monthAgo], data.metadata.token, priceCache) - }) - }; - - await storeR2JSONString(`emissions/${sluggifiedId}`, JSON.stringify(finalData)); - - return sluggifiedId; -} From 9e2fc0b9c159474c89d49ade3e62ffbf674daab2 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 17 Oct 2025 11:44:52 +0200 Subject: [PATCH 309/398] reduce blocks due to false postives while refilling old data --- defi/src/adaptors/db-utils/AdapterRecord2.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/defi/src/adaptors/db-utils/AdapterRecord2.ts b/defi/src/adaptors/db-utils/AdapterRecord2.ts index 13aa1b6b7c..8e7e0a7e32 100644 --- a/defi/src/adaptors/db-utils/AdapterRecord2.ts +++ b/defi/src/adaptors/db-utils/AdapterRecord2.ts @@ -179,7 +179,7 @@ export class AdapterRecord2 { const { recentData, getSpikeThreshold, getSignificantValueThreshold, } = options const aggData: any = this.data.aggregated const isDatapointOlderThanAMonth = (getUnixTimeNow() - this.timestamp) > 31 * 24 * 60 * 60 - const hasTooFewDatapoints = !recentData || recentData.tooFewRecords || isDatapointOlderThanAMonth + const hasTooFewDatapoints = !recentData || recentData.tooFewRecords if (hasTooFewDatapoints) { // we dont have enough data to compare with, do general spike check @@ -216,8 +216,13 @@ export class AdapterRecord2 { if (dataType.startsWith('t')) continue; // skip accumulative types const { value }: { value: number } = aggData[dataType] - const triggerValue = getSpikeThreshold!(dataType) - const minSignificantValue = getSignificantValueThreshold(dataType) + let triggerValue = getSpikeThreshold!(dataType) + let minSignificantValue = getSignificantValueThreshold(dataType) + + if (isDatapointOlderThanAMonth) { + minSignificantValue *= 5 // for old datapoints, we increase the base level to avoid false positives + triggerValue *= 5 // for old datapoints, we increase the spike trigger level to avoid false positives + } if (value < minSignificantValue) continue; // no need to check for spikes if value is below base level From b48d8d39e573f8cf06ee1cb565116e4c9afb687b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 17 Oct 2025 12:06:04 +0200 Subject: [PATCH 310/398] refactor --- defi/src/adaptors/data/checkDuplicateIds.ts | 2 +- .../helpers/generateProtocolAdaptorsList.ts | 2 +- defi/src/adaptors/data/index.ts | 3 +- defi/src/adaptors/data/types.ts | 12 +- defi/src/adaptors/db-utils/AdapterRecord2.ts | 3 +- defi/src/adaptors/db-utils/db2.ts | 2 +- .../helpers/processEventParameters.ts | 2 +- .../handlers/storeAdaptorData/refillScript.ts | 2 +- .../scripts/storeAllBlockscoutData.ts | 2 +- .../handlers/storeAdaptorData/storeAll.ts | 2 +- .../utils/getAllChainsFromAdaptors.ts | 2 +- defi/src/api2/cron-task/dimensions.ts | 2 +- defi/src/api2/routes/dimensions.ts | 2 +- .../api2/scripts/dimChangeProtocolChain.ts | 2 +- .../scripts/dimensions/checkDimensions.ts | 2 +- .../dimensions/dimensionVersionsStats.ts | 1 - .../dimensions/getProtocolDataTypeRecords.ts | 2 +- .../dimensions/migrateBreakdownData.ts | 310 ------------------ defi/src/api2/scripts/dimensions/renameIds.ts | 2 +- .../scripts/dimensions/testDimensionsPG.ts | 2 +- .../api2/scripts/getDimensionsAdapterStats.ts | 2 +- .../api2/scripts/getFeeChartDefaultView.ts | 2 +- defi/src/api2/utils/dimensionsUtils.ts | 2 +- defi/src/cli/buildRequires.ts | 2 +- defi/src/cli/interactive-dimensions.ts | 2 +- defi/src/utils/csvDataLoader.ts | 2 +- defi/ui-tool/src/dimensions.ts | 2 +- 27 files changed, 31 insertions(+), 342 deletions(-) delete mode 100644 defi/src/api2/scripts/dimensions/migrateBreakdownData.ts diff --git a/defi/src/adaptors/data/checkDuplicateIds.ts b/defi/src/adaptors/data/checkDuplicateIds.ts index 0834335174..1d579041fc 100644 --- a/defi/src/adaptors/data/checkDuplicateIds.ts +++ b/defi/src/adaptors/data/checkDuplicateIds.ts @@ -1,6 +1,6 @@ -import { AdapterType, } from "@defillama/dimension-adapters/adapters/types"; import protocols from "../../protocols/data"; import getAdapterConfig from './index' +import { AdapterType } from "./types"; const _protocolMap = {} as any for (const protocol of protocols) { _protocolMap[protocol.id] = protocol diff --git a/defi/src/adaptors/data/helpers/generateProtocolAdaptorsList.ts b/defi/src/adaptors/data/helpers/generateProtocolAdaptorsList.ts index ea0e5cd2b2..9e1865a572 100644 --- a/defi/src/adaptors/data/helpers/generateProtocolAdaptorsList.ts +++ b/defi/src/adaptors/data/helpers/generateProtocolAdaptorsList.ts @@ -2,7 +2,7 @@ import { Protocol } from "../../../protocols/data"; import { AdaptorsConfig, IJSON } from "../types" import { getMethodologyDataByBaseAdapter } from "../../utils/getAllChainsFromAdaptors"; import { ProtocolAdaptor } from "../types"; -import { Adapter, AdapterType, BaseAdapter, } from "@defillama/dimension-adapters/adapters/types"; +import { Adapter, AdapterType, BaseAdapter, } from "../types"; import { IParentProtocol } from "../../../protocols/types"; export function notUndefined(x: T | undefined): x is T { diff --git a/defi/src/adaptors/data/index.ts b/defi/src/adaptors/data/index.ts index 2cd676255b..81ca06a11b 100644 --- a/defi/src/adaptors/data/index.ts +++ b/defi/src/adaptors/data/index.ts @@ -1,5 +1,4 @@ -import { AdapterType, ProtocolType, } from "@defillama/dimension-adapters/adapters/types"; -import { ADAPTER_TYPES, AdaptorData, AdaptorRecordType, AdaptorRecordTypeMapReverse, IJSON, ProtocolAdaptor } from "./types"; +import { ADAPTER_TYPES, AdapterType, AdaptorData, AdaptorRecordType, AdaptorRecordTypeMapReverse, IJSON, ProtocolAdaptor, ProtocolType } from "./types"; import dimensions_imports from "../../utils/imports/dimensions_adapters.json" import { generateProtocolAdaptorsList2 } from "./helpers/generateProtocolAdaptorsList" import { setModuleDefaults } from "@defillama/dimension-adapters/adapters/utils/runAdapter"; diff --git a/defi/src/adaptors/data/types.ts b/defi/src/adaptors/data/types.ts index 6e72a70521..55bc143135 100644 --- a/defi/src/adaptors/data/types.ts +++ b/defi/src/adaptors/data/types.ts @@ -1,6 +1,8 @@ -import { AdapterType, ProtocolType } from "@defillama/dimension-adapters/adapters/types" +import { AdapterType, ProtocolType, BaseAdapter, Adapter, SimpleAdapter, FetchOptions, FetchResult, } from "@defillama/dimension-adapters/adapters/types" import { Protocol } from "../../protocols/types" +export { AdapterType, ProtocolType, BaseAdapter, Adapter, SimpleAdapter, FetchOptions, FetchResult, } + export interface ICleanRecordsConfig { genuineSpikes: IJSON | boolean } @@ -8,13 +10,13 @@ export interface ICleanRecordsConfig { export type ChartBreakdownOptions = 'daily' | 'weekly' | 'monthly' export type ProtocolDimensionsExtraConfig = { - defaultChartView?: ChartBreakdownOptions; - adapter: string; - genuineSpikes?: string[] // list of unix timestamps with valid spikes, + defaultChartView?: ChartBreakdownOptions; + adapter: string; + genuineSpikes?: string[] // list of unix timestamps with valid spikes, } export type DimensionsConfig = { - [K in AdapterType]?: string | ProtocolDimensionsExtraConfig; + [K in AdapterType]?: string | ProtocolDimensionsExtraConfig; } export interface ProtocolAdaptor extends Protocol { defillamaId: string diff --git a/defi/src/adaptors/db-utils/AdapterRecord2.ts b/defi/src/adaptors/db-utils/AdapterRecord2.ts index 8e7e0a7e32..b965823442 100644 --- a/defi/src/adaptors/db-utils/AdapterRecord2.ts +++ b/defi/src/adaptors/db-utils/AdapterRecord2.ts @@ -1,6 +1,5 @@ -import { AdapterType, ProtocolType } from "@defillama/dimension-adapters/adapters/types" -import { AdaptorRecordType, IJSON, ProtocolAdaptor } from "../data/types" +import { AdapterType, ProtocolType, AdaptorRecordType, IJSON, ProtocolAdaptor } from "../data/types" import { getTimestampString } from "../../api2/utils" import { getUnixTimeNow } from "../../api2/utils/time" import { humanizeNumber } from "@defillama/sdk" diff --git a/defi/src/adaptors/db-utils/db2.ts b/defi/src/adaptors/db-utils/db2.ts index ddb2327d39..6f72fb59a0 100644 --- a/defi/src/adaptors/db-utils/db2.ts +++ b/defi/src/adaptors/db-utils/db2.ts @@ -3,7 +3,7 @@ import { Tables } from "../../api2/db/tables" import dynamodb from "../../utils/shared/dynamodb" import { initializeTVLCacheDB } from "../../api2/db" import { AdapterRecord2 } from "./AdapterRecord2" -import { AdapterType } from "@defillama/dimension-adapters/adapters/types" +import { AdapterType } from "../data/types" import { Op, } from "sequelize" import { sliceIntoChunks } from "@defillama/sdk/build/util" import { IJSON } from "../data/types" diff --git a/defi/src/adaptors/handlers/helpers/processEventParameters.ts b/defi/src/adaptors/handlers/helpers/processEventParameters.ts index 1ee5e558e4..488c1e6e1b 100644 --- a/defi/src/adaptors/handlers/helpers/processEventParameters.ts +++ b/defi/src/adaptors/handlers/helpers/processEventParameters.ts @@ -1,4 +1,4 @@ -import { AdapterType } from "@defillama/dimension-adapters/adapters/types" +import { AdapterType } from "../../data/types" import { sluggifyString } from "../../../utils/sluggify" import { CATEGORIES } from "../../data/helpers/categories" import { normalizeDimensionChainsMap } from "../../utils/getAllChainsFromAdaptors" diff --git a/defi/src/adaptors/handlers/storeAdaptorData/refillScript.ts b/defi/src/adaptors/handlers/storeAdaptorData/refillScript.ts index 89ec9fcd5f..7b9624c701 100644 --- a/defi/src/adaptors/handlers/storeAdaptorData/refillScript.ts +++ b/defi/src/adaptors/handlers/storeAdaptorData/refillScript.ts @@ -1,7 +1,7 @@ require("dotenv").config(); import '../../../api2/utils/failOnError' -import { Adapter, AdapterType } from "@defillama/dimension-adapters/adapters/types" +import { Adapter, AdapterType } from "../../data/types" import loadAdaptorsData from "../../data" import { handler2, IStoreAdaptorDataHandlerEvent } from "." import readline from 'readline'; diff --git a/defi/src/adaptors/handlers/storeAdaptorData/scripts/storeAllBlockscoutData.ts b/defi/src/adaptors/handlers/storeAdaptorData/scripts/storeAllBlockscoutData.ts index fe0e617650..8bb3ef48b1 100644 --- a/defi/src/adaptors/handlers/storeAdaptorData/scripts/storeAllBlockscoutData.ts +++ b/defi/src/adaptors/handlers/storeAdaptorData/scripts/storeAllBlockscoutData.ts @@ -2,7 +2,7 @@ import loadAdaptorsData from "../../../data" import { chainConfigMap, gasData } from '@defillama/dimension-adapters/helpers/blockscoutFees' import { PromisePool } from '@supercharge/promise-pool'; -import { AdapterType, ProtocolType } from "@defillama/dimension-adapters/adapters/types"; +import { AdapterType, ProtocolType } from "../../../data/types" import { getChainDisplayName } from "../../../../utils/normalizeChain"; import { httpGet } from "@defillama/dimension-adapters/utils/fetchURL"; import { handler2, IStoreAdaptorDataHandlerEvent } from ".."; diff --git a/defi/src/adaptors/handlers/storeAdaptorData/storeAll.ts b/defi/src/adaptors/handlers/storeAdaptorData/storeAll.ts index 0ef3b116cb..f2d0a3519a 100644 --- a/defi/src/adaptors/handlers/storeAdaptorData/storeAll.ts +++ b/defi/src/adaptors/handlers/storeAdaptorData/storeAll.ts @@ -1,7 +1,7 @@ import '../../../api2/utils/failOnError' import { handler2 } from "."; -import { AdapterType } from '@defillama/dimension-adapters/adapters/types'; +import { AdapterType } from "../../data/types" import { getUnixTimeNow } from '../../../api2/utils/time'; import { getTimestampAtStartOfDayUTC } from '../../../utils/date'; import { elastic } from '@defillama/sdk'; diff --git a/defi/src/adaptors/utils/getAllChainsFromAdaptors.ts b/defi/src/adaptors/utils/getAllChainsFromAdaptors.ts index 4b632a888c..ce0956ed79 100644 --- a/defi/src/adaptors/utils/getAllChainsFromAdaptors.ts +++ b/defi/src/adaptors/utils/getAllChainsFromAdaptors.ts @@ -1,4 +1,4 @@ -import { Adapter, BaseAdapter, AdapterType, SimpleAdapter } from "@defillama/dimension-adapters/adapters/types"; +import { Adapter, BaseAdapter, AdapterType, SimpleAdapter } from "../data/types" import { CHAIN } from "@defillama/dimension-adapters/helpers/chains"; import { getChainDisplayName, normalizedChainReplacements } from "../../utils/normalizeChain"; import { getMethodologyByType as getDefaultMethodologyByCategory, } from "../data/helpers/methodology"; diff --git a/defi/src/api2/cron-task/dimensions.ts b/defi/src/api2/cron-task/dimensions.ts index c3e750aeb7..8d40eab52a 100644 --- a/defi/src/api2/cron-task/dimensions.ts +++ b/defi/src/api2/cron-task/dimensions.ts @@ -1,7 +1,7 @@ import '../utils/failOnError' require("dotenv").config(); -import { IJSON, AdapterType, ProtocolType, } from "@defillama/dimension-adapters/adapters/types"; +import { IJSON, AdapterType, ProtocolType, } from "../../adaptors/data/types" import loadAdaptorsData from "../../adaptors/data" import { getDimensionsCacheV2, storeDimensionsCacheV2, storeDimensionsMetadata, } from "../utils/dimensionsUtils"; import { getAllItemsUpdatedAfter } from "../../adaptors/db-utils/db2"; diff --git a/defi/src/api2/routes/dimensions.ts b/defi/src/api2/routes/dimensions.ts index 9389f49739..83166ed184 100644 --- a/defi/src/api2/routes/dimensions.ts +++ b/defi/src/api2/routes/dimensions.ts @@ -1,5 +1,5 @@ -import { AdapterType, IJSON } from "@defillama/dimension-adapters/adapters/types"; +import { AdapterType, IJSON } from "../../adaptors/data/types" import * as HyperExpress from "hyper-express"; import { CATEGORIES } from "../../adaptors/data/helpers/categories"; import { formatChainKey, getDisplayChainNameCached, normalizeDimensionChainsMap } from "../../adaptors/utils/getAllChainsFromAdaptors"; diff --git a/defi/src/api2/scripts/dimChangeProtocolChain.ts b/defi/src/api2/scripts/dimChangeProtocolChain.ts index 9f991b3f34..3245f23db3 100644 --- a/defi/src/api2/scripts/dimChangeProtocolChain.ts +++ b/defi/src/api2/scripts/dimChangeProtocolChain.ts @@ -4,7 +4,7 @@ import { TABLES, initializeTVLCacheDB } from '../db/index' import * as fs from 'fs' import { id } from 'ethers'; import loadAdaptorsData from '../../adaptors/data'; -import { AdapterType, ProtocolType } from '@defillama/dimension-adapters/adapters/types'; +import { AdapterType, ProtocolType } from "../../adaptors/data/types" import { AdapterRecord2 } from '../../adaptors/db-utils/AdapterRecord2'; import { getTimestampAtStartOfDay } from '../../utils/date'; import { storeAdapterRecord } from '../../adaptors/db-utils/db2'; diff --git a/defi/src/api2/scripts/dimensions/checkDimensions.ts b/defi/src/api2/scripts/dimensions/checkDimensions.ts index 06d5b2580e..61d1cb6569 100644 --- a/defi/src/api2/scripts/dimensions/checkDimensions.ts +++ b/defi/src/api2/scripts/dimensions/checkDimensions.ts @@ -1,6 +1,6 @@ import '../../utils/failOnError' -import { AdapterType, ProtocolType, } from "@defillama/dimension-adapters/adapters/types"; +import { AdapterType, ProtocolType, } from "../../../adaptors/data/types" import loadAdaptorsData from "../../../adaptors/data" import { getAllItemsAfter, } from "../../../adaptors/db-utils/db2"; import { getTimeSDaysAgo, } from "../../utils/time"; diff --git a/defi/src/api2/scripts/dimensions/dimensionVersionsStats.ts b/defi/src/api2/scripts/dimensions/dimensionVersionsStats.ts index 9d8f60c4df..f2c1794853 100644 --- a/defi/src/api2/scripts/dimensions/dimensionVersionsStats.ts +++ b/defi/src/api2/scripts/dimensions/dimensionVersionsStats.ts @@ -1,5 +1,4 @@ -import { AdapterType } from "@defillama/dimension-adapters/adapters/types" import loadAdaptorsData from "../../../adaptors/data" import { ADAPTER_TYPES } from "../../../adaptors/data/types" diff --git a/defi/src/api2/scripts/dimensions/getProtocolDataTypeRecords.ts b/defi/src/api2/scripts/dimensions/getProtocolDataTypeRecords.ts index 26fbea3e86..64c1c22d40 100644 --- a/defi/src/api2/scripts/dimensions/getProtocolDataTypeRecords.ts +++ b/defi/src/api2/scripts/dimensions/getProtocolDataTypeRecords.ts @@ -5,7 +5,7 @@ import '../../utils/failOnError' import * as fs from 'fs' import path from 'path'; import { getAllItemsAfter } from '../../../adaptors/db-utils/db2'; -import { AdapterType } from '@defillama/dimension-adapters/adapters/types'; +import { AdapterType } from "../../../adaptors/data/types" function getRecordMap(allRecords: any[]) { diff --git a/defi/src/api2/scripts/dimensions/migrateBreakdownData.ts b/defi/src/api2/scripts/dimensions/migrateBreakdownData.ts deleted file mode 100644 index e89e3c3211..0000000000 --- a/defi/src/api2/scripts/dimensions/migrateBreakdownData.ts +++ /dev/null @@ -1,310 +0,0 @@ -import '../../utils/failOnError' - -import loadAdaptorsData from "../../../adaptors/data" -import { getDimensionsCacheV2, } from "../../utils/dimensionsUtils"; - -import { RUN_TYPE, } from "../../utils"; -import * as fs from 'fs' -import * as path from 'path' -import { initializeTVLCacheDB } from '../../db'; -import { AdapterType } from '@defillama/dimension-adapters/adapters/types'; -import { init } from '../../../adaptors/db-utils/db2'; -import { Tables } from '../../db/tables'; -import * as sdk from '@defillama/sdk' -import { PromisePool } from '@supercharge/promise-pool' -import { ADAPTER_TYPES } from '../../../adaptors/data/types'; - - -async function runConfig() { - const overallStats = [] as any - const protocolDataMap = {} as any - // Go over all types - // const allCache = await getDimensionsCacheV2(RUN_TYPE.CRON) - // await initializeTVLCacheDB() - const protocolConfigAll = {} as any - for (const adapterType of ADAPTER_TYPES) { - protocolConfigAll[adapterType] = {} - const { importModule, protocolAdaptors } = loadAdaptorsData(adapterType) - for (const { module, displayName, config } of protocolAdaptors) { - const adaptor = await importModule(module) - if (adaptor.breakdown) console.log(adapterType, module, 'has breakdown', displayName, config?.displayName) - - } - /* const configEntries = Object.entries(config) - for (const [protocolKey, protocolConfig] of configEntries) { - if (!protocolConfig?.protocolsData) continue; - protocolConfigAll[adapterType][protocolKey] = protocolConfig - } */ - } - /* - const replacementConfigMap = {} as any - for (const adapterType of ADAPTER_TYPES) { - // if (adapterType !== AdapterType.OPTIONS) continue; - const { config } = loadAdaptorsData(adapterType) - const configEntries = Object.entries(config) - let newConfig = {} as any - let turnIntoSimpleAdapter = [] - for (const [protocolKey, protocolConfig] of configEntries) { - if (!protocolConfig?.protocolsData) continue; - const subProtocolEntries = Object.entries(protocolConfig.protocolsData) - let otherConfig = {} as any - switch (adapterType) { - case AdapterType.DEXS: otherConfig = protocolConfigAll[AdapterType.DERIVATIVES]; break; - case AdapterType.DERIVATIVES: otherConfig = protocolConfigAll[AdapterType.DEXS]; break; - } - // if (otherConfig[protocolKey]) - // console.log('adapterType', adapterType, 'protocolKey', protocolKey, Object.keys(protocolConfig.protocolsData), 'otherConfig', Object.keys(otherConfig[protocolKey].protocolsData)) - - if (subProtocolEntries.length === 1 && !otherConfig[protocolKey]) { - console.log(adapterType, 'turn this into a simple adapter, dont add new file: ', protocolKey, protocolConfig.id) - turnIntoSimpleAdapter.push(protocolKey) - } else { - const { id, parentId, protocolsData, ...rest } = protocolConfig - for (const [subProtocolKey, subProtocolConfig] of subProtocolEntries) { - let newModuleName = `${protocolKey}-${subProtocolKey}`.replaceAll('.', '_') - newConfig[newModuleName] = { - ...rest, - ...subProtocolConfig, - } - - addSubProtocolAdapterFile(newModuleName + '.ts', { protocolKey, adapterType, subProtocolKey }) - } - } - - } - - replacementConfigMap[adapterType] = { newConfig, turnIntoSimpleAdapter } - // console.log('newConfig', adapterType, newConfig) - - - // console.log('Overall stats:') - // console.table(overallStats) - // console.log('Saving to file:', fileName) - // fs.writeFileSync(path.join(__dirname, 'logs', fileName), JSON.stringify(protocolDataMap, null, 2)) - } - */ - // const fileName = `migrate-breakdown-config-${new Date().toISOString().split('T')[0]}-${Math.floor(Math.random() * 10000)}.log` - // fs.writeFileSync(path.join(__dirname, 'logs', fileName), JSON.stringify(replacementConfigMap, null, 2)) -} - -const runKey = `${new Date().toISOString().split('T')[0]}-${Math.floor(Math.random() * 10000)}` -console.log('runKey: ', runKey) - - -async function runMigrateData() { - // Go over all types - // const allCache = await getDimensionsCacheV2(RUN_TYPE.CRON) - const protocolConfigAll = { - [AdapterType.FEES]: { - '4661-v3': '4661', - 'smbswap-v2': '1632', - 'smbswap-v3': '2895', - }, - [AdapterType.DEXS]: { - '3483-swap': '3483', - '146-dodo': '146', - }, - [AdapterType.AGGREGATORS]: { - '2116-zrx': '4628', - '146-dodo-agg': '5062', - }, - [AdapterType.DERIVATIVES]: { - '3396-derivative': '3396', - }, - [AdapterType.AGGREGATOR_DERIVATIVES]: { - '1833-unidex-agg-derivative': '1833', - '3396-logx-aggregator': '3396', - }, - } as any - for (const adapterType of ADAPTER_TYPES) { - if (!protocolConfigAll[adapterType]) protocolConfigAll[adapterType] = {} - const { config } = loadAdaptorsData(adapterType) - const configEntries = Object.entries(config) - for (const [_protocolKey, protocolConfig] of configEntries) { - if (!protocolConfig?.protocolsData) continue; - const breakdownId = protocolConfig.id - const subProtocolEntries = Object.entries(protocolConfig.protocolsData) - for (const [subProtocolKey, subProtocolConfig] of subProtocolEntries) { - if (!subProtocolConfig.id) throw new Error(`subProtocolConfig.id is missing for ${adapterType} ${_protocolKey} ${subProtocolKey}`) - const subKey = `${breakdownId}-${subProtocolKey}` - if (!protocolConfigAll[adapterType][subKey]) - protocolConfigAll[adapterType][subKey] = subProtocolConfig.id - else - console.log('subProtocolKey already exists', adapterType, subKey, protocolConfigAll[adapterType][subProtocolKey], subProtocolConfig.id) - } - } - - // console.log('migrate data config', adapterType) - // console.table(protocolConfigAll[adapterType]) - } - - - const dbMappingConfigFile = `migrate-db-mapping-config-${runKey}.log` - fs.writeFileSync(path.join(__dirname, 'logs', dbMappingConfigFile), JSON.stringify(protocolConfigAll, null, 2)) - - const newRecordMap: any = {} - - for (const adapterType of ADAPTER_TYPES) { - newRecordMap[adapterType] = {} - const dbMappingConfig = protocolConfigAll[adapterType] - let allData = await getAllAdapterItemsInDB({ adapterType }) - console.log('data fetched', allData.length, 'adapterType', adapterType) - allData = allData.filter((record: any) => record.dataValues.data.breakdown) - console.log('data filtered', allData.length, 'adapterType', adapterType) - if (allData.length === 0) { - console.log('No data to migrate for adapter type', adapterType) - continue - } - const dataKeys = new Set() - const missingDataKeys = new Set() - - allData.forEach((record: any) => { - Object.values(record.dataValues.data.breakdown).forEach((subRecord: any) => { - Object.keys(subRecord).forEach((key: string) => { - const subKey = `${record.dataValues.id}-${key}` - if (dbMappingConfig[subKey]) { - dataKeys.add(subKey) - } else { - missingDataKeys.add(subKey) - } - }) - }) - }) - - console.log('dataKeys', dataKeys.size, 'missingDataKeys', missingDataKeys.size, 'adapterType', adapterType) - const missingDataKeysArray = Array.from(missingDataKeys) - console.log('missing keys', missingDataKeysArray) - - - allData.map(getBreakdownItems) - const newRecords = Object.values(newRecordMap[adapterType]).map((i: any) => i.pgRecord) - console.log('newRecords', newRecords.length, 'adapterType', adapterType) - const fileName = `migrate-breakdown-data-${adapterType}-${runKey}.log` - fs.writeFileSync(path.join(__dirname, 'logs', fileName), JSON.stringify({ newRecords, currentData: allData.map((record: any) => record.dataValues) })) - - // Delete all the filtered records from the database using the sequelize instance - console.log(`Deleting ${allData.length} records with breakdown data for adapter type ${adapterType}...`); - - - const { errors } = await PromisePool.withConcurrency(42) - .for(allData) - .process(async (i: any) => i.destroy()) - - if (errors.length) { - console.error(`[${adapterType}] Failed to delete records: ${errors.length} errors occurred`) - errors.forEach((error: any) => { - console.error(`[${adapterType}] Error:`, error) - }) - } - - console.log(`Successfully deleted ${allData.length} records for adapter type ${adapterType}`); - - await Tables.DIMENSIONS_DATA.bulkCreate(newRecords, { - updateOnDuplicate: ['timestamp', 'data', 'type'] - }); - - console.log(`Successfully inserted ${newRecords.length} records for adapter type ${adapterType}`); - } - - function getBreakdownItems(record: any) { - const { id: parentId, timeS, timestamp, data, type } = record.dataValues - const recordKey = `${type}-${parentId}-${timeS}` - const mapping = protocolConfigAll[type] - const breakdown = data.breakdown - const breakdownByKey = {} as any - Object.entries(breakdown).forEach(([recordKey, breakdownObj]: any) => { - const breakdownEntries = Object.entries(breakdownObj) - breakdownEntries.forEach(([subRecordKey, subRecordValue]: any) => { - if (!breakdownByKey[`${parentId}-${subRecordKey}`]) breakdownByKey[`${parentId}-${subRecordKey}`] = {} - breakdownByKey[`${parentId}-${subRecordKey}`][recordKey] = subRecordValue - }) - }) - for (const [key, value] of Object.entries(breakdownByKey)) { - const id = mapping[key] - if (!id) { - console.log('key not found', key, mapping[key]) - continue - } - const data = { aggregated: value } - const childKey = `${type}-${id}-${timeS}` - const pgRecord = { - id: id, - type, - timeS: timeS, - timestamp: timestamp, - data, - } - - const existingRecord = newRecordMap[type][childKey] - if (!existingRecord) { - newRecordMap[type][childKey] = { pgRecord, parentId: recordKey, parentRecord: record } - } else { - console.log('key already exists', childKey, recordKey, existingRecord.parentId, record.dataValues.updatedat, existingRecord.parentRecord.dataValues.updatedat, record.dataValues.updatedat > existingRecord.parentRecord.dataValues.updatedat) - - // if (recordKey === existingRecord.parentId) { - // console.log(record.dataValues, existingRecord.parentRecord.dataValues) - // } - - if (record.dataValues.updatedat > existingRecord.parentRecord.dataValues.updatedat) { - newRecordMap[type][childKey] = { pgRecord, parentId: recordKey, parentRecord: record } - } - - } - } - } -} - - -runMigrateData() - .catch(console.error) - .then(() => process.exit(0)) - - -function addSubProtocolAdapterFile(fileName: string, { adapterType, protocolKey, subProtocolKey }: { protocolKey: string, adapterType: string, subProtocolKey: string }) { - if (adapterType === AdapterType.DERIVATIVES) adapterType = AdapterType.DEXS - const filePath = path.join(__dirname, '../../../../dimension-adapters', adapterType, fileName) - const fileData = ` -import adapter from './${protocolKey}' -const { breakdown, ...rest } = adapter - -export default { - ...rest, - adapter: breakdown['${subProtocolKey}'], -}` - - fs.writeFileSync(filePath, fileData, 'utf8') -} - - -export async function getAllAdapterItemsInDB({ adapterType, }: { adapterType: AdapterType, }) { - await init() - - const label = `getAllAdapterItemsInDB(${adapterType})` - console.time(label) - - let result: any = [] - let offset = 0 - const limit = 30000 - - while (true) { - const batch: any = await Tables.DIMENSIONS_DATA.findAll({ - where: { type: adapterType, }, - // raw: true, - order: [['timestamp', 'ASC']], - offset, - limit, - }) - // console.log(batch[0]) - // process.exit(0) - - result = result.concat(batch) - sdk.log(`getAllAdapterItemsInDB(${adapterType}) found ${batch.length} total fetched: ${result.length} items`) - if (batch.length < limit) break - offset += limit - } - - sdk.log(`getAllAdapterItemsInDB(${adapterType}) found ${result.length} items`) - console.timeEnd(label) - return result -} - diff --git a/defi/src/api2/scripts/dimensions/renameIds.ts b/defi/src/api2/scripts/dimensions/renameIds.ts index 0339bf1dc0..b8ce100ae9 100644 --- a/defi/src/api2/scripts/dimensions/renameIds.ts +++ b/defi/src/api2/scripts/dimensions/renameIds.ts @@ -1,7 +1,7 @@ // import { Op, col, fn } from "sequelize"; import { init } from "../../../adaptors/db-utils/db2"; import { Tables } from "../../db/tables"; -import { AdapterType, ProtocolType } from "@defillama/dimension-adapters/adapters/types"; +import { AdapterType, ProtocolType } from "../../../adaptors/data/types" import loadAdaptorsData from "../../../adaptors/data" import { ADAPTER_TYPES } from "../../../adaptors/data/types"; diff --git a/defi/src/api2/scripts/dimensions/testDimensionsPG.ts b/defi/src/api2/scripts/dimensions/testDimensionsPG.ts index fefcbe94a5..b88d9a2339 100644 --- a/defi/src/api2/scripts/dimensions/testDimensionsPG.ts +++ b/defi/src/api2/scripts/dimensions/testDimensionsPG.ts @@ -1,6 +1,6 @@ // import { Op, col, fn } from "sequelize"; import { getAllDimensionsRecordsOnDate, init } from "../../../adaptors/db-utils/db2"; -import { AdapterType, } from "@defillama/dimension-adapters/adapters/types"; +import { AdapterType, } from "../../../adaptors/data/types" import loadAdaptorsData from "../../../adaptors/data" import { ADAPTER_TYPES } from "../../../adaptors/data/types"; diff --git a/defi/src/api2/scripts/getDimensionsAdapterStats.ts b/defi/src/api2/scripts/getDimensionsAdapterStats.ts index 6bf2062d7c..7e82a3b074 100644 --- a/defi/src/api2/scripts/getDimensionsAdapterStats.ts +++ b/defi/src/api2/scripts/getDimensionsAdapterStats.ts @@ -1,6 +1,6 @@ import loadAdaptorsData from "../../adaptors/data"; import { ADAPTER_TYPES } from "../../adaptors/data/types"; -import { AdapterType } from "@defillama/dimension-adapters/adapters/types"; +import { AdapterType } from "../../adaptors/data/types" let data: any diff --git a/defi/src/api2/scripts/getFeeChartDefaultView.ts b/defi/src/api2/scripts/getFeeChartDefaultView.ts index 610f9b92e6..acc3d11bcc 100644 --- a/defi/src/api2/scripts/getFeeChartDefaultView.ts +++ b/defi/src/api2/scripts/getFeeChartDefaultView.ts @@ -1,5 +1,5 @@ import loadAdaptorsData from "../../adaptors/data"; -import { AdapterType } from "@defillama/dimension-adapters/adapters/types"; +import { AdapterType } from "../../adaptors/data/types" import { getAllItemsAfter } from "../../adaptors/db-utils/db2"; import { sliceIntoChunks } from "@defillama/sdk/build/util"; import { protocolsById } from "../../protocols/data"; diff --git a/defi/src/api2/utils/dimensionsUtils.ts b/defi/src/api2/utils/dimensionsUtils.ts index aafee754df..d836c93107 100644 --- a/defi/src/api2/utils/dimensionsUtils.ts +++ b/defi/src/api2/utils/dimensionsUtils.ts @@ -1,6 +1,6 @@ import { AdaptorRecordType, ProtocolAdaptor } from "../../adaptors/data/types"; import { readFromPGCache, writeToPGCache } from "../db"; -import { AdapterType } from "@defillama/dimension-adapters/adapters/types"; +import { AdapterType } from "../../adaptors/data/types" import parentProtocols from "../../protocols/parentProtocols"; import { RUN_TYPE } from "."; diff --git a/defi/src/cli/buildRequires.ts b/defi/src/cli/buildRequires.ts index 45753998cb..2c37cf55ed 100644 --- a/defi/src/cli/buildRequires.ts +++ b/defi/src/cli/buildRequires.ts @@ -8,7 +8,7 @@ import { spawn } from "child_process" import entities from "../protocols/entities"; import { setModuleDefaults } from "@defillama/dimension-adapters/adapters/utils/runAdapter"; import { ADAPTER_TYPES } from "../adaptors/data/types"; -import { AdapterType } from "@defillama/dimension-adapters/adapters/types"; +import { AdapterType } from "../adaptors/data/types" import { readdir, writeFile } from "fs/promises"; import { fileExists, getDimensionsRepoCommitHash, readHashFromFile, writeHashToFile } from "../adaptors/utils"; diff --git a/defi/src/cli/interactive-dimensions.ts b/defi/src/cli/interactive-dimensions.ts index 9ccf86c10b..d3129aa5f2 100644 --- a/defi/src/cli/interactive-dimensions.ts +++ b/defi/src/cli/interactive-dimensions.ts @@ -6,7 +6,7 @@ import * as childProcess from 'child_process' import * as sdk from '@defillama/sdk' import inquirerPrompt from 'inquirer-autocomplete-prompt' import loadAdaptorsData from "../adaptors/data" -import { Adapter, AdapterType } from "@defillama/dimension-adapters/adapters/types" +import { Adapter, AdapterType } from "../adaptors/data/types" // @ts-ignore import inquirerSearchPrompt from 'inquirer-search-list' diff --git a/defi/src/utils/csvDataLoader.ts b/defi/src/utils/csvDataLoader.ts index b41712728b..27dbcd0852 100644 --- a/defi/src/utils/csvDataLoader.ts +++ b/defi/src/utils/csvDataLoader.ts @@ -21,7 +21,7 @@ */ import * as fs from 'fs'; import * as path from 'path'; -import { FetchOptions, FetchResult } from '../../dimension-adapters/adapters/types'; +import { FetchOptions, FetchResult } from "../adaptors/data/types" const GLOBAL_CSV_BASE_PATH = ''; // change if you want to use a different folder diff --git a/defi/ui-tool/src/dimensions.ts b/defi/ui-tool/src/dimensions.ts index 53c0a48081..bfc604fe68 100644 --- a/defi/ui-tool/src/dimensions.ts +++ b/defi/ui-tool/src/dimensions.ts @@ -1,5 +1,5 @@ import loadAdaptorsData from "../../src/adaptors/data" -import { AdapterType } from "@defillama/dimension-adapters/adapters/types"; +import { AdapterType } from "../../src/adaptors/data/types"; import { getAllDimensionsRecordsTimeS } from "../../src/adaptors/db-utils/db2"; import { getTimestampString } from "../../src/api2/utils"; import { handler2, IStoreAdaptorDataHandlerEvent } from "../../src/adaptors/handlers/storeAdaptorData"; From eec3fd110d06d0f060e51acb0cb05378b210b0d9 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 17 Oct 2025 12:07:20 +0200 Subject: [PATCH 311/398] remove emissions module --- defi/emissions-adapters | 1 - 1 file changed, 1 deletion(-) delete mode 160000 defi/emissions-adapters diff --git a/defi/emissions-adapters b/defi/emissions-adapters deleted file mode 160000 index 5a21f17d95..0000000000 --- a/defi/emissions-adapters +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5a21f17d952368e80eafbd65978bd6cf479c8db1 From 42bfc2252c0d7cadbea727f571b19c649fb032f4 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 17 Oct 2025 12:11:37 +0200 Subject: [PATCH 312/398] cleanup emissions unlinking --- defi/src/cli/backfillEmissions.ts | 16 ---------------- defi/src/protocols/data.test.ts | 5 ++--- 2 files changed, 2 insertions(+), 19 deletions(-) delete mode 100644 defi/src/cli/backfillEmissions.ts diff --git a/defi/src/cli/backfillEmissions.ts b/defi/src/cli/backfillEmissions.ts deleted file mode 100644 index 995177347f..0000000000 --- a/defi/src/cli/backfillEmissions.ts +++ /dev/null @@ -1,16 +0,0 @@ -import adapters from "../utils/imports/emissions_adapters"; -import { processSingleProtocol } from "../storeEmissionsUtils"; - -async function main() { - const protocolName = process.argv[2] ?? ""; - const protocolIndex = Object.keys(adapters).indexOf(protocolName); - if (protocolIndex == -1) throw new Error(`${protocolName} is not a valid adapter`); - - const adapterCode = Object.values(adapters)[protocolIndex].default; - await processSingleProtocol(adapterCode, protocolName, {}, true).catch((err: Error) => { - console.log(err.message ? `${err.message}: \n storing ${protocolName}` : err); - }); - process.exit(); -} - -main(); // ts-node defi/src/cli/backfillEmissions.ts across diff --git a/defi/src/protocols/data.test.ts b/defi/src/protocols/data.test.ts index cd41d20411..920a189740 100644 --- a/defi/src/protocols/data.test.ts +++ b/defi/src/protocols/data.test.ts @@ -1,4 +1,3 @@ -import emissionsAdapters from "../utils/imports/emissions_adapters"; import { importAdapter, importAdapterDynamic } from "../utils/imports/importAdapter"; import { chainCoingeckoIds, getChainDisplayName, normalizeChain, transformNewChainName } from "../utils/normalizeChain"; import protocols from "./data"; @@ -45,7 +44,7 @@ test("all chains are on chainMap", async () => { } }); -test("there are no repeated values in unlock adapters", async () => { +/* test("there are no repeated values in unlock adapters", async () => { const tokens = [] as string[], protocolIds = [] as string[][], notes = [] as string[][], sources = [] as string[][]; for (const [protocolName, protocolFile] of Object.entries(emissionsAdapters)) { if (protocolName === "daomaker" || protocolName === "streamflow") { @@ -70,7 +69,7 @@ test("there are no repeated values in unlock adapters", async () => { } } }) - + */ test("valid treasury fields", async () => { const treasuryKeys = new Set(['ownTokens', 'tvl']) const ignoredKeys = new Set(['default']) From f5cfbdbd21db08b56a3b775b027fc83feb2bcb01 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 17 Oct 2025 13:15:46 +0200 Subject: [PATCH 313/398] optimize server mode (#10711) --- defi/src/adaptors/utils.ts | 45 ++++++++++++++++- defi/src/cli/buildRequires.ts | 15 +++++- defi/src/protocols/data/genProtocolImport.ts | 51 ++++++++++++++------ 3 files changed, 94 insertions(+), 17 deletions(-) diff --git a/defi/src/adaptors/utils.ts b/defi/src/adaptors/utils.ts index 144c766180..662472438f 100644 --- a/defi/src/adaptors/utils.ts +++ b/defi/src/adaptors/utils.ts @@ -1,6 +1,8 @@ import fs from 'fs'; import crypto from 'crypto'; import path from 'path'; +import * as sdk from '@defillama/sdk' + const { execSync } = require('child_process'); export interface IAdapterInfo { @@ -105,4 +107,45 @@ export function fileExists(filePath: string): boolean { console.error(`Error checking if file exists ${filePath}:`, error?.message || error); return false; } -} \ No newline at end of file +} + + + +export const isBuildServerMode = !!process.env.LLAMA_IS_BUILD_SERVER_MODE + +export async function writeFromCache(hashkey: string, outFile: string, { successMessage = 'cache exists, copying from cache', errorMessage = 'error reading from cache' }: { + successMessage?: string + errorMessage?: string +} = {}) { + if (!isBuildServerMode) return false + + try { + const data = await sdk.cache.readExpiringJsonCache(hashkey) + if (data) { + console.log(successMessage) + fs.writeFileSync(outFile, JSON.stringify(data)) + return true + } + } catch (e) { + console.log(errorMessage) + } + return false +} + +export async function writeToCache(hashkey: string, data: any, { successMessage = 'cache written', errorMessage = 'error writing to cache', expireAfter = 60 * 60 * 24 }: { + successMessage?: string + errorMessage?: string + expireAfter?: number +} = {}) { + + // enable only in build server mode + if (!isBuildServerMode) return; + + + try { + await sdk.cache.writeExpiringJsonCache(hashkey, data, { expireAfter }) + console.log(successMessage) + } catch (e) { + console.log(errorMessage, e) + } +} diff --git a/defi/src/cli/buildRequires.ts b/defi/src/cli/buildRequires.ts index 2c37cf55ed..64525155ca 100644 --- a/defi/src/cli/buildRequires.ts +++ b/defi/src/cli/buildRequires.ts @@ -10,7 +10,8 @@ import { setModuleDefaults } from "@defillama/dimension-adapters/adapters/utils/ import { ADAPTER_TYPES } from "../adaptors/data/types"; import { AdapterType } from "../adaptors/data/types" import { readdir, writeFile } from "fs/promises"; -import { fileExists, getDimensionsRepoCommitHash, readHashFromFile, writeHashToFile } from "../adaptors/utils"; +import * as sdk from '@defillama/sdk' +import { fileExists, getDimensionsRepoCommitHash, readHashFromFile, writeFromCache, writeHashToFile, writeToCache } from "../adaptors/utils"; const extensions = ['ts', 'md', 'js'] @@ -52,6 +53,16 @@ async function createDimensionsImports() { return } + + // check if we already have the data in + const dimHashKey = 'dimensionAdaptersHash_' + dimRepoHash + + const wroteFromCache = await writeFromCache(dimHashKey, outputFile, { + successMessage: '[DIMENSIONS] Using cached dimensions imports, skipping generation', + errorMessage: '[DIMENSIONS] Error reading from cache, proceeding to generate dimensions imports' + }) + if (wroteFromCache) return; + const excludeKeys = new Set(["index", "README", '.gitkeep']) const baseFolderPath = "./dimension-adapters" // path relative to current working directory -> `cd /defi` const basePackagePath = "@defillama/dimension-adapters" // how is defined in package.json @@ -62,6 +73,8 @@ async function createDimensionsImports() { await writeFile(outputFile, JSON.stringify(dimensionsImports)) + + await writeToCache(dimHashKey, dimensionsImports) writeHashToFile('dimensionAdapters', dimRepoHash) async function addAdapterType(folderPath: string) { diff --git a/defi/src/protocols/data/genProtocolImport.ts b/defi/src/protocols/data/genProtocolImport.ts index 0bb38e9ea8..af9d3a314d 100644 --- a/defi/src/protocols/data/genProtocolImport.ts +++ b/defi/src/protocols/data/genProtocolImport.ts @@ -1,31 +1,52 @@ -import { createCombinedHash, fileExists, readHashFromFile, writeHashToFile } from "../../adaptors/utils" +import { createCombinedHash, fileExists, readHashFromFile, writeFromCache, writeHashToFile, writeToCache } from "../../adaptors/utils" import { DATA_FILES } from "../../constants" +const fs = require('fs') console.time('generate protocol imports') const outPath = __dirname + '/../../utils/imports/protocols.json' +const dataHash = createCombinedHash(DATA_FILES.map(f => __dirname + `/../${f}`)) +const tvlHashKey = 'protocolImportsHash_' + dataHash -async function createProtocolImports() { + +async function run() { + const lastHash = readHashFromFile('data.ts') + + + if (dataHash === lastHash && fileExists(outPath)) { + console.log('No changes in data files, skipping protocol imports generation') + return; + } + + const usedCache = await writeFromCache(tvlHashKey, outPath, { + successMessage: '[TVL] Using cached protocol imports, skipping generation', + errorMessage: '[TVL] Error reading from cache, proceeding to generate protocol imports' + }) + + if (usedCache) + return; + + + // read all the data.ts files and create a combined import file + // which a later js script will read and turn into json (and mock all the functions) const allProtocols: any[] = [] const importPromises = DATA_FILES.map(async (file) => { const module = await import(`../${file}`) allProtocols.push(...module.default) }) + await Promise.all(importPromises) - const fs = require('fs') + + // write the generated imports file fs.writeFileSync(outPath, JSON.stringify(allProtocols)) -} -async function run() { - const dataHash = createCombinedHash(DATA_FILES.map(f => __dirname + `/../${f}`)) - const lastHash = readHashFromFile('data.ts') - if (dataHash === lastHash && fileExists(outPath)) { - console.log('No changes in data files, skipping protocol imports generation') - } else { - await createProtocolImports() - writeHashToFile('data.ts', dataHash) - } + // write the new hash + writeHashToFile('data.ts', dataHash) - console.timeEnd('generate protocol imports') + // write to cache, so if some other folder in the same machine can use the same repo + await writeToCache(tvlHashKey, allProtocols) } -run().catch(console.error).then(() => process.exit(0)) \ No newline at end of file +run().catch(console.error).then(() => { + console.timeEnd('generate protocol imports') + process.exit(0) +}) \ No newline at end of file From 728b800aeb851adb993bc249fe7abea47bc28b9a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 17 Oct 2025 14:05:14 +0200 Subject: [PATCH 314/398] minor fix --- defi/src/adaptors/handlers/storeAdaptorData/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/adaptors/handlers/storeAdaptorData/index.ts b/defi/src/adaptors/handlers/storeAdaptorData/index.ts index 2f13f45e9c..2ae8fa6d6b 100644 --- a/defi/src/adaptors/handlers/storeAdaptorData/index.ts +++ b/defi/src/adaptors/handlers/storeAdaptorData/index.ts @@ -1,4 +1,4 @@ -import { Adapter, AdapterType, BaseAdapter, SimpleAdapter, } from "@defillama/dimension-adapters/adapters/types"; +import { AdapterType, SimpleAdapter, } from "../../data/types" import runAdapter from "@defillama/dimension-adapters/adapters/utils/runAdapter"; import { getBlock } from "@defillama/dimension-adapters/helpers/getBlock"; import { elastic } from '@defillama/sdk'; From 06f7918a0c0d91d8343dc1a36442ed49642de292 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 17 Oct 2025 14:43:30 +0200 Subject: [PATCH 315/398] reduce reference to tvl repo --- .../scripts/getMissingChainGasTokenList.ts | 24 ++++++++++--------- defi/l2/utils.ts | 3 +-- defi/proof-of-reserves/utils/getReserves.ts | 16 ++++++------- .../scripts/findMissingBlockscoutChains.ts | 4 ++-- defi/src/cli/checkProtocolsToList.ts | 10 -------- defi/src/cli/customFill.ts | 3 +-- defi/src/cli/customFillAll.ts | 6 +---- 7 files changed, 26 insertions(+), 40 deletions(-) delete mode 100644 defi/src/cli/checkProtocolsToList.ts diff --git a/coins/src/scripts/getMissingChainGasTokenList.ts b/coins/src/scripts/getMissingChainGasTokenList.ts index 5ad5dc4602..c3d6c51415 100644 --- a/coins/src/scripts/getMissingChainGasTokenList.ts +++ b/coins/src/scripts/getMissingChainGasTokenList.ts @@ -1,18 +1,20 @@ import * as sdk from "@defillama/sdk" -import allChains from '../../../defi/DefiLlama-Adapters/projects/helper/chains.json' import axios from "axios"; -const evmChains = allChains.filter((i: any) => { - const provider = sdk.getProvider(i) - // if (!provider) console.log(i, 'is not an evm chain') - return !!provider -}) - -console.log('# of chains:', allChains.length) -console.log('# of evm chains:', evmChains.length) - async function run() { const nullAddress = '0x0000000000000000000000000000000000000000' + const allChains = await fetch('https://raw.githubusercontent.com/DefiLlama/DefiLlama-Adapters/refs/heads/main/projects/helper/chains.json').then(res => res.json()) + console.log('# of all chains from github:', allChains.length) + + const evmChains = allChains.filter((i: any) => { + const provider = sdk.getProvider(i) + // if (!provider) console.log(i, 'is not an evm chain') + return !!provider + }) + + console.log('# of chains:', allChains.length) + console.log('# of evm chains:', evmChains.length) + const chunks = sdk.util.sliceIntoChunks(evmChains, 40) let missingTokens: string[] = [] @@ -20,7 +22,7 @@ async function run() { const chunk = chunks[i] const tokens = chunk.map((i: any) => `${i}:${nullAddress}`) console.log('checking chunk', i + 1, 'of', chunks.length, '...') - const res = (await axios.get('https://coins.llama.fi/prices/current/'+tokens.join(','))).data + const res = (await axios.get('https://coins.llama.fi/prices/current/' + tokens.join(','))).data const missingInChunk = tokens.filter((k: string) => { // console.log(k, res.coins[k]?.symbol) return !res.coins[k] diff --git a/defi/l2/utils.ts b/defi/l2/utils.ts index 570dcc29ad..aaee530fe5 100644 --- a/defi/l2/utils.ts +++ b/defi/l2/utils.ts @@ -10,13 +10,12 @@ import * as incomingAssets from "./adapters"; import { additional, excluded } from "./adapters/manual"; import { Chain } from "@defillama/sdk/build/general"; import PromisePool from "@supercharge/promise-pool"; -import { storeNotTokens } from "../src/utils/shared/bridgedTvlPostgres"; import { getBlock } from "@defillama/sdk/build/util/blocks"; import { Connection, PublicKey } from "@solana/web3.js"; import * as sdk from "@defillama/sdk"; -import { struct, u64 } from "../DefiLlama-Adapters/projects/helper/utils/solana/layouts/layout-base.js"; import fetchThirdPartyTokenList from "./adapters/thirdParty"; import { storeR2JSONString } from "../src/utils/r2"; +import { struct, u64 } from "buffer-layout"; export async function aggregateChainTokenBalances(usdTokenBalances: AllProtocols): Promise { const chainUsdTokenTvls: TokenTvlData = {}; diff --git a/defi/proof-of-reserves/utils/getReserves.ts b/defi/proof-of-reserves/utils/getReserves.ts index 67abe7d5a1..dba14879bf 100644 --- a/defi/proof-of-reserves/utils/getReserves.ts +++ b/defi/proof-of-reserves/utils/getReserves.ts @@ -1,5 +1,4 @@ import {getCoinPrices} from './llamaApis'; -import { getTokenSupplies } from '../../DefiLlama-Adapters/projects/helper/solana'; import { TokenConfig } from '../types'; import * as sdk from '@defillama/sdk'; @@ -27,13 +26,14 @@ export async function getTotalMinted(tokens: Array, getUsdValue: bo for (const token of tokens) { if (token.chain === 'solana') { - const data = await getTokenSupplies([token.address]); - const totalSupply: any = Number((data as any)[token.address]) / (token.decimals ? 10**token.decimals : 1e8); - if (getUsdValue) { - totalMinted += totalSupply * getCoinPrice(coinPrices, token); - } else { - totalMinted += totalSupply; - } + // ignore solana for now + // const data = await getTokenSupplies([token.address]); + // const totalSupply: any = Number((data as any)[token.address]) / (token.decimals ? 10**token.decimals : 1e8); + // if (getUsdValue) { + // totalMinted += totalSupply * getCoinPrice(coinPrices, token); + // } else { + // totalMinted += totalSupply; + // } } else { // evm const supply = await sdk.api2.abi.call({ diff --git a/defi/src/adaptors/handlers/storeAdaptorData/scripts/findMissingBlockscoutChains.ts b/defi/src/adaptors/handlers/storeAdaptorData/scripts/findMissingBlockscoutChains.ts index 15556ddceb..de6e3ba415 100644 --- a/defi/src/adaptors/handlers/storeAdaptorData/scripts/findMissingBlockscoutChains.ts +++ b/defi/src/adaptors/handlers/storeAdaptorData/scripts/findMissingBlockscoutChains.ts @@ -1,5 +1,4 @@ import { chainConfigMap } from '@defillama/dimension-adapters/helpers/blockscoutFees' -import defillamaChains from '@defillama/adapters/projects/helper/chains.json' import { PromisePool } from '@supercharge/promise-pool' const axios = require('axios') @@ -12,10 +11,11 @@ const skippedChainsSet = new Set([ 'soneium', 'ink', ]) -const existingChainSet = new Set(defillamaChains) async function main() { + const allChains = await fetch('https://raw.githubusercontent.com/DefiLlama/DefiLlama-Adapters/refs/heads/main/projects/helper/chains.json').then(res => res.json()) + const existingChainSet = new Set(allChains) let { data: chainlist } = await axios.get(chainlistURL) chainlist = chainlist.filter((i: any) => { diff --git a/defi/src/cli/checkProtocolsToList.ts b/defi/src/cli/checkProtocolsToList.ts deleted file mode 100644 index 479d85fd5d..0000000000 --- a/defi/src/cli/checkProtocolsToList.ts +++ /dev/null @@ -1,10 +0,0 @@ -import fs from "fs" -import protocols from "../protocols/data"; - -const main = async () => { - const files = fs.readdirSync('./DefiLlama-Adapters/projects/'); - const modules = protocols.map(p=>p.module.split('/')[0]) - const unlisted = files.filter(file=>!modules.includes(file)) - console.log(unlisted) -} -main() \ No newline at end of file diff --git a/defi/src/cli/customFill.ts b/defi/src/cli/customFill.ts index 9d8eab2cf9..9b0ff73b41 100644 --- a/defi/src/cli/customFill.ts +++ b/defi/src/cli/customFill.ts @@ -11,10 +11,9 @@ import { getClosestDayStartTimestamp } from "../utils/date"; import { storeTvl } from "../storeTvlInterval/getAndStoreTvl"; import type { Protocol } from "../protocols/data"; import { DocumentClient } from "aws-sdk/clients/dynamodb"; -import { importAdapter } from "./utils/importAdapter"; -import { log } from '../../DefiLlama-Adapters/projects/helper/utils' import axios from 'axios' +const log = console.log const secondsInDay = 24 * 3600; /// ---------------- Protocol specfic code ----------------- diff --git a/defi/src/cli/customFillAll.ts b/defi/src/cli/customFillAll.ts index edfd58f3be..f02f3cce61 100644 --- a/defi/src/cli/customFillAll.ts +++ b/defi/src/cli/customFillAll.ts @@ -1,24 +1,20 @@ require("dotenv").config(); import protocols from "../protocols/data"; -import * as sdk from '@defillama/sdk' import { importAdapterDynamic } from "../utils/imports/importAdapter"; import * as childProcess from 'child_process' import { hourlyTvl, } from "../utils/getLastRecord"; import { getHistoricalValues } from "../utils/shared/dynamodb"; // @ts-ignore -import { ibcChains, caseSensitiveChains, } from "@defillama/adapters/projects/helper/tokenMapping"; -const chainsWithoutRefillSupport = new Set([ibcChains, caseSensitiveChains].flat()) const main = async () => { const protocolCount = +(process.argv[2] ?? 200) // how many protocols to fill const allProtocols = protocols.reverse().slice(0, protocolCount) - const checkRefillSuppport = (adapter: any) => Object.keys(adapter).filter(i => typeof adapter[i] === 'function' && chainsWithoutRefillSupport.has(i)).length === 0 for (const protocol of allProtocols) { const adapter = await importAdapterDynamic(protocol); - if (adapter.timetravel === false || !checkRefillSuppport(adapter)) { + if (adapter.timetravel === false) { console.log("Adapter doesn't support refilling: ", protocol.name, 'skipping'); continue; } From e81dadfc477911dd3d315253e6991268b7a66a24 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 17 Oct 2025 14:47:26 +0200 Subject: [PATCH 316/398] lidquidation metric is deprecated --- defi/serverless.yml | 14 +++++++------- defi/src/cli/buildRequires.ts | 5 +++-- defi/src/fetchLiquidations.ts | 1 + defi/src/storeLiquidations.ts | 3 +-- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/defi/serverless.yml b/defi/serverless.yml index 34635402d4..6055e843f9 100644 --- a/defi/serverless.yml +++ b/defi/serverless.yml @@ -392,13 +392,13 @@ functions: # - http: # path: categories # method: get - storeLiquidations: - handler: src/storeLiquidations.default - timeout: 900 - memorySize: 4500 - events: - # update latest every 20 minutes - - schedule: cron(0/20 * * * ? *) + # storeLiquidations: + # handler: src/storeLiquidations.default + # timeout: 900 + # memorySize: 4500 + # events: + # # update latest every 20 minutes + # - schedule: cron(0/20 * * * ? *) # fetchLiquidations: # handler: src/fetchLiquidations.default # timeout: 900 diff --git a/defi/src/cli/buildRequires.ts b/defi/src/cli/buildRequires.ts index 64525155ca..fc502aac85 100644 --- a/defi/src/cli/buildRequires.ts +++ b/defi/src/cli/buildRequires.ts @@ -20,7 +20,7 @@ async function run() { const buildFunctions = { // 'tvl import': createTVLImportsFile, - 'liquidation import': createLiquidationImportsFile, + // 'liquidation import': createLiquidationImportsFile, 'dimensions import': createDimensionsImports, } @@ -33,6 +33,7 @@ async function run() { run().catch(console.error).then(() => process.exit(0)) +/* Liquidations is disabled for now function createLiquidationImportsFile() { const excludeLiquidation = ["test.ts", "utils", "README.md"] writeFileSync("./src/utils/imports/adapters_liquidations.ts", @@ -42,7 +43,7 @@ function createLiquidationImportsFile() { }`) } - + */ async function createDimensionsImports() { const outputFile = "./src/utils/imports/dimensions_adapters.json" diff --git a/defi/src/fetchLiquidations.ts b/defi/src/fetchLiquidations.ts index e36a8ab072..5e1ba34723 100644 --- a/defi/src/fetchLiquidations.ts +++ b/defi/src/fetchLiquidations.ts @@ -2,6 +2,7 @@ import adaptersModules from "./utils/imports/adapters_liquidations"; import { performance } from "perf_hooks"; import { storeCachedLiqsR2 } from "./utils/r2"; +// WARNING: This is deprecated, the feature is scraped. const handler = async (event: any, _context: AWSLambda.Context) => { const protocol = event.protocol as keyof typeof adaptersModules; const module = adaptersModules[protocol]; diff --git a/defi/src/storeLiquidations.ts b/defi/src/storeLiquidations.ts index 9531085f27..cef853e919 100644 --- a/defi/src/storeLiquidations.ts +++ b/defi/src/storeLiquidations.ts @@ -4,13 +4,12 @@ import { getCurrentUnixTimestamp } from "./utils/date"; import { getCachedLiqsR2, getExternalLiqsR2, storeCachedLiqsR2, storeLiqsR2 } from "./utils/r2"; import { aggregateAssetAdapterData, Liq } from "./liquidationsUtils"; import { performance } from "perf_hooks"; -import setEnvSecrets from "./utils/shared/setEnvSecrets"; export const standaloneProtocols: string[] = ["venus", "maker"]; export const excludedProtocols: string[] = ["angle", "euler"]; +// WARNING: This is deprecated, the feature is scraped. async function handler() { - await setEnvSecrets() const time = getCurrentUnixTimestamp(); const data = await Promise.all( Object.entries(adaptersModules) From 70f36db3f8770339c40cbec2659254507a0e0c4b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 17 Oct 2025 15:01:58 +0200 Subject: [PATCH 317/398] remove unused code --- defi/src/cli/buildRequires.ts | 9 +++++---- defi/src/utils/imports/importAdapter.ts | 1 - 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/defi/src/cli/buildRequires.ts b/defi/src/cli/buildRequires.ts index fc502aac85..e4b7a8d1c3 100644 --- a/defi/src/cli/buildRequires.ts +++ b/defi/src/cli/buildRequires.ts @@ -127,10 +127,11 @@ async function createDimensionsImports() { async function createTVLImportsFile() { - await writeFile("./src/utils/imports/adapters.ts", - `export default { - ${getUnique(protocols.concat(treasuries).concat(entities).map(p => `"${p.module}": require("@defillama/adapters/projects/${p.module}"),`)).join('\n')} -}`) + // we no longer need the imports/adapters.ts file +// await writeFile("./src/utils/imports/adapters.ts", +// `export default { +// ${getUnique(protocols.concat(treasuries).concat(entities).map(p => `"${p.module}": require("@defillama/adapters/projects/${p.module}"),`)).join('\n')} +// }`) return createTvlAdapterDataJSON() } diff --git a/defi/src/utils/imports/importAdapter.ts b/defi/src/utils/imports/importAdapter.ts index 2b73962782..47a279f497 100644 --- a/defi/src/utils/imports/importAdapter.ts +++ b/defi/src/utils/imports/importAdapter.ts @@ -1,5 +1,4 @@ import { Protocol } from "../../protocols/types"; -// import adapters from "./adapters" import fs from "fs"; import path from "path"; From 8aae6e4c4d8100db14d08dbe223135c454181570 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 17 Oct 2025 15:27:57 +0200 Subject: [PATCH 318/398] expose treasury & entity config --- defi/src/api2/cron-task/index.ts | 2 ++ defi/ui-tool/src/tvl.ts | 23 +++++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/defi/src/api2/cron-task/index.ts b/defi/src/api2/cron-task/index.ts index 366d19b112..7fc16b609b 100644 --- a/defi/src/api2/cron-task/index.ts +++ b/defi/src/api2/cron-task/index.ts @@ -302,6 +302,8 @@ async function run() { protocols: cache.metadata.protocols, parentProtocols: cache.metadata.parentProtocols, chainCoingeckoIds: cache.metadata.chainCoingeckoIds, + treasuries: cache.metadata.treasuries, + entities: cache.metadata.entities, chainKeyToLabelMap, } await storeRouteData('configs', data) diff --git a/defi/ui-tool/src/tvl.ts b/defi/ui-tool/src/tvl.ts index c31f7e1838..51a8025426 100644 --- a/defi/ui-tool/src/tvl.ts +++ b/defi/ui-tool/src/tvl.ts @@ -10,7 +10,6 @@ import PromisePool from '@supercharge/promise-pool'; import { deleteProtocolItems, getProtocolItems, initializeTVLCacheDB } from '../../src/api2/db'; import dynamodb from '../../src/utils/shared/dynamodb'; import { dailyTokensTvl, dailyTvl, dailyUsdTokensTvl, dailyRawTokensTvl, } from '../../src/utils/getLastRecord'; -import { getClosestDayStartTimestamp } from '@defillama/dimension-adapters/utils/date'; import { importAdapterDynamic } from '../../src/utils/imports/importAdapter'; const tvlNameMap: Record = {} @@ -18,7 +17,6 @@ const allItems = [...protocols, ...treasuries, ...entities] allItems.forEach((protocol: any) => tvlNameMap[protocol.name] = protocol) export const tvlProtocolList = allItems.filter(i => i.module !== 'dummy.js').map(i => i.name) -import { } from "../../src/cli/utils/clearProtocolCache"; export async function runTvlAction(ws: any, data: any) { @@ -378,3 +376,24 @@ export function sendTvlDeleteWaitingRecords(ws: any) { data: Object.values(deleteRecordsList).map(getRecordItem), })) } + + +function toUNIXTimestamp(ms: number) { + return Math.round(ms / 1000); +} + +function getClosestDayStartTimestamp(timestamp: number) { + const dt = new Date(timestamp * 1000); + dt.setUTCHours(0, 0, 0, 0); + const prevDayTimestamp = toUNIXTimestamp(dt.getTime()); + dt.setUTCHours(24); + const nextDayTimestamp = toUNIXTimestamp(dt.getTime()); + if ( + Math.abs(prevDayTimestamp - timestamp) < + Math.abs(nextDayTimestamp - timestamp) + ) { + return prevDayTimestamp; + } else { + return nextDayTimestamp; + } +} From 0fa18616a7b5fac79c421ae7c21bb3619be81267 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 17 Oct 2025 16:13:33 +0100 Subject: [PATCH 319/398] MBTC (#10835) --- coins/src/adapters/tokenMapping.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/coins/src/adapters/tokenMapping.json b/coins/src/adapters/tokenMapping.json index 2b2600791a..4fc199f35a 100644 --- a/coins/src/adapters/tokenMapping.json +++ b/coins/src/adapters/tokenMapping.json @@ -10442,6 +10442,11 @@ } }, "move": { + "0xb7400b60e249c92b6b97717e29915474d90eec3e8c510bf5675628367d39e35": { + "to": "coingecko#mbtc", + "decimals": 10, + "symbol": "MBTC" + }, "0x51ffc9885233adf3dd411078cad57535ed1982013dc82d9d6c433a55f2e0035d": { "to": "coingecko#kelp-dao-restaked-eth", "decimals": 8, From a6a09d15e13472e90287fa4d612dea84ca81588c Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 17 Oct 2025 16:36:24 +0100 Subject: [PATCH 320/398] solana chain assets patch (#10836) --- defi/l2/utils.ts | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/defi/l2/utils.ts b/defi/l2/utils.ts index aaee530fe5..71a94284f9 100644 --- a/defi/l2/utils.ts +++ b/defi/l2/utils.ts @@ -15,7 +15,40 @@ import { Connection, PublicKey } from "@solana/web3.js"; import * as sdk from "@defillama/sdk"; import fetchThirdPartyTokenList from "./adapters/thirdParty"; import { storeR2JSONString } from "../src/utils/r2"; -import { struct, u64 } from "buffer-layout"; +const BufferLayout = require("buffer-layout"); + +const uint64 = (property = "uint64") => { + const layout = BufferLayout.blob(8, property); + + const _decode = layout.decode.bind(layout); + const _encode = layout.encode.bind(layout); + + layout.decode = (buffer: any, offset: any) => { + const data = _decode(buffer, offset); + return new BigNumber( + [...data] + .reverse() + .map((i) => `00${i.toString(16)}`.slice(-2)) + .join(""), + 16 + ); + }; + + layout.encode = (num: any, buffer: any, offset: any) => { + const a = num.toArray().reverse(); + let b = Buffer.from(a); + if (b.length !== 8) { + const zeroPad = Buffer.alloc(8); + b.copy(zeroPad); + b = zeroPad; + } + return _encode(b, buffer, offset); + }; + + return layout; +}; + +const u64 = uint64 export async function aggregateChainTokenBalances(usdTokenBalances: AllProtocols): Promise { const chainUsdTokenTvls: TokenTvlData = {}; @@ -235,7 +268,7 @@ async function getSolanaTokenSupply( ): Promise<{ [token: string]: number }> { if (timestamp) throw new Error(`timestamp incompatible with ${chain} adapter!`); - const solanaMintLayout = struct([u64("supply")]); + const solanaMintLayout = BufferLayout.struct([u64("supply")]); const sleepTime = tokens.length > 2000 ? 2000 : 200; const tokensPK: PublicKey[] = []; From 86bba55a78faba56cfd9159fc8b154370048298f Mon Sep 17 00:00:00 2001 From: Define101 Date: Fri, 17 Oct 2025 17:05:00 +0100 Subject: [PATCH 321/398] add stats linea --- defi/src/utils/normalizeChain.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defi/src/utils/normalizeChain.ts b/defi/src/utils/normalizeChain.ts index 40dee725f3..3d47c1412e 100644 --- a/defi/src/utils/normalizeChain.ts +++ b/defi/src/utils/normalizeChain.ts @@ -2353,8 +2353,8 @@ export const chainCoingeckoIds = { } }, "Linea": { - geckoId: null, - symbol: null, + geckoId: "linea", + symbol: "LINEA", cmcId: null, categories: ["EVM", "Rollup"], github: ["ConsenSys"], From 58abbbfc6faa1f7f6995e5a1a6aa3018a63092da Mon Sep 17 00:00:00 2001 From: mike stone <166530234+clmikestone@users.noreply.github.com> Date: Fri, 17 Oct 2025 14:42:23 -0400 Subject: [PATCH 322/398] Edge -> Chaos Rebrand (#10830) --- defi/src/constants/chainsByOracle.ts | 17 +++++++++++++++++ defi/src/protocols/data1.ts | 2 +- defi/src/protocols/data3.ts | 10 +++++----- defi/src/protocols/data4.ts | 10 +++++----- 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/defi/src/constants/chainsByOracle.ts b/defi/src/constants/chainsByOracle.ts index fd153058d7..d3505bb4b3 100644 --- a/defi/src/constants/chainsByOracle.ts +++ b/defi/src/constants/chainsByOracle.ts @@ -520,6 +520,23 @@ const chainsByOracle: Record> = { ], "Quex": [ "Arbitrum", + ], + "Chaos": [ + "Arbitrum", + "Solana", + "Avalanche", + "Ethereum", + "Corn", + "Ink", + "Scroll", + "Botanix", + "BSC", + "Optimism", + "Linea", + "Base", + "Polygon", + "OP Mainnet", + "Gnosis" ] }; diff --git a/defi/src/protocols/data1.ts b/defi/src/protocols/data1.ts index 69f62559ca..eda969dd1f 100644 --- a/defi/src/protocols/data1.ts +++ b/defi/src/protocols/data1.ts @@ -8275,7 +8275,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the twitter: "BenqiFinance", audit_links: ["https://docs.benqi.fi/risks#audits"], oraclesBreakdown: [ - { name: "Edge", type: "Primary", proof: ["https://docs.benqi.fi/resources/contracts/price-feeds"] }, + { name: "Chaos", type: "Primary", proof: ["https://docs.benqi.fi/resources/contracts/price-feeds"] }, { name: "Chainlink", type: "Fallback", proof: ["https://docs.benqi.fi/resources/contracts/price-feeds"] } ], forkedFromIds: ["114"], diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index fdc17eb463..9e590fdc01 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -15728,7 +15728,7 @@ const data3_1: Protocol[] = [ twitter: "GMX_IO", forkedFrom: [], // https://x.com/GMX_IO/status/1866794916392874021 https://gov.gmx.io/t/implementation-of-chaos-labs-risk-oracles/3861 - oracles: ["Chainlink","Edge"], + oracles: ["Chainlink","Chaos"], oraclesBreakdown: [ { name: "Chainlink", @@ -15736,7 +15736,7 @@ const data3_1: Protocol[] = [ proof: ["https://docs.gmx.io/docs/intro"] }, { - name: "Edge", + name: "Chaos", type: "Primary", proof: ["https://x.com/GMX_IO/status/1866794916392874021", "https://gov.gmx.io/t/implementation-of-chaos-labs-risk-oracles/3861"] } @@ -32451,10 +32451,10 @@ const data3_1: Protocol[] = [ category: "Derivatives", chains: ["Solana"], // https://support.jup.ag/hc/en-us/articles/19355326396700-Jupiter-Perpetuals-price-oracles - oracles: ["Edge"], + oracles: ["Chaos"], oraclesBreakdown: [ { - name: "Edge", + name: "Chaos", type: "Primary", proof: ["https://support.jup.ag/hc/en-us/articles/19355326396700-Jupiter-Perpetuals-price-oracles"] }, @@ -62594,7 +62594,7 @@ const data3_2: Protocol[] = [ forkedFrom: [], oraclesBreakdown: [ { - name: "Edge", + name: "Chaos", type: "Primary", proof: ["https://x.com/AdrenaProtocol/status/1925828470573076631"], startDate: "2025-05-23" diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 5e92599b08..e490c51540 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -15975,7 +15975,7 @@ const data4: Protocol[] = [ chains: [{ chain: "Base" }], }, { - name: "Edge", + name: "Chaos", type: "Primary", proof: [ "https://cornscan.io/address/0xFe423163bfEe287a132E656D5EC4a363B8A2B4f3/contract/21000000/readContract#F1", @@ -19899,7 +19899,7 @@ const data4: Protocol[] = [ listedAt: 1751313277, oraclesBreakdown: [ { - name: "Edge", + name: "Chaos", type: "Primary", proof: ["https://etherfi.gitbook.io/etherfi/contracts-and-integrations/integrations","https://github.com/DefiLlama/defillama-server/pull/10407"], }, @@ -19927,7 +19927,7 @@ const data4: Protocol[] = [ listedAt: 1751313285, oraclesBreakdown: [ { - name: "Edge", + name: "Chaos", type: "Primary", proof: ["https://etherfi.gitbook.io/etherfi/contracts-and-integrations/integrations","https://github.com/DefiLlama/defillama-server/pull/10407"], }, @@ -23884,7 +23884,7 @@ const data4: Protocol[] = [ }, oraclesBreakdown: [ { - name: "Edge", + name: "Chaos", type: "Primary", proof: ["https://arbiscan.io/address/0x7b09d87945102d25069c173ee45db397c6e055b3#readContract#F4","https://github.com/DefiLlama/defillama-server/pull/10782"], }, @@ -31720,7 +31720,7 @@ const data4: Protocol[] = [ twitter: "tydrohq", oraclesBreakdown: [ { - name: "Edge", + name: "Chaos", type: "Primary", proof: ["https://docs.tydro.com/primitives/oracle"], }, From e9b28383e85dcf0714dc4e2a7cedfe9147bceaa3 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 17 Oct 2025 12:49:21 -0600 Subject: [PATCH 323/398] add spinup parent --- defi/DefiLlama-Adapters | 2 +- defi/src/protocols/data4.ts | 7 ++++--- defi/src/protocols/parentProtocols.ts | 11 +++++++++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/defi/DefiLlama-Adapters b/defi/DefiLlama-Adapters index dc7f41675c..88ebec403c 160000 --- a/defi/DefiLlama-Adapters +++ b/defi/DefiLlama-Adapters @@ -1 +1 @@ -Subproject commit dc7f41675cc60b53939045d91a8fab2d31376d7e +Subproject commit 88ebec403c7a9bb39cc29ddafe0ca9f1ea044f40 diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index e490c51540..da846b7f90 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -9782,7 +9782,7 @@ const data4: Protocol[] = [ }, { id: "5960", - name: "SpinUp", + name: "SpinUp Liquid Staking", previousNames: ["Hyperpie"], address: null, symbol: "-", @@ -9818,6 +9818,7 @@ const data4: Protocol[] = [ "https://github.com/astrasecai/audit-reports/blob/main/AstraSec-AuditReport-SpinUp.pdf", "https://github.com/SupremacyTeam/publications/blob/main/SpinUp/Supremacy-Audit-Report-SpinUp-v1.6.pdf" ], + parentProtocol: "parent#spinup", listedAt: 1743107407 }, { @@ -27069,7 +27070,7 @@ const data4: Protocol[] = [ module: "hyperpie-launchpad/index.js", forkedFromIds: [], twitter: "SpinUpZone", - parentProtocol: "parent#magpie-ecosystem", + parentProtocol: "parent#spinup", listedAt: 1757103078, dimensions: { fees: "hyperpie-launchpad", @@ -27094,7 +27095,7 @@ const data4: Protocol[] = [ module: "hyperpie-v2-dex/index.js", forkedFromIds: ["1407"], twitter: "SpinUpZone", - parentProtocol: "parent#magpie-ecosystem", + parentProtocol: "parent#spinup", listedAt: 1757103085, dimensions: { fees: "hyperpie-v2-dex", diff --git a/defi/src/protocols/parentProtocols.ts b/defi/src/protocols/parentProtocols.ts index c31f672d7f..03e613020b 100644 --- a/defi/src/protocols/parentProtocols.ts +++ b/defi/src/protocols/parentProtocols.ts @@ -8247,6 +8247,17 @@ const parentProtocols: IParentProtocol[] = [ twitter: "Strata_Money", github: ["Strata-Money"], }, + { + id: "parent#spinup", + name: "SpinUp", + url: "https://www.spinup.zone/", + description: "SpinUp is a DeFi ecosystem built on HyperEVM, bringing together liquid staking, a Meme Launchpad, a Meme DEX, and driving memes into perpetual market fire", + logo: `${baseIconsUrl}/spinup.jpg`, + gecko_id: null, + cmcId: null, + chains: [], + twitter: "SpinUpZone", + }, ]; export default parentProtocols; From 2af545aa19f6a242c27c817a9c00fcf4eea2e7af Mon Sep 17 00:00:00 2001 From: Deepcryptodive <61325205+Deepcryptodive@users.noreply.github.com> Date: Fri, 17 Oct 2025 19:59:04 +0100 Subject: [PATCH 324/398] update kpk info (#10837) --- defi/src/protocols/data3.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 9e590fdc01..f9f5d48f1f 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -34230,14 +34230,14 @@ const data3_1: Protocol[] = [ symbol: "KPK", url: "https://kpk.io/", description: - "We help decentralised organisations to preserve capital through state-of-the-art risk management and trust-minimised DeFi treasury execution.", + "kpk provides infrastructure to secure, manage, and grow onchain assets—contributing to the development of the largest liquidity network in crypto, aligned with the strategic goals of onchain organisations.", chain: "Ethereum", logo: `${baseIconsUrl}/kpk.jpg`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: kpk, cmcId: null, - category: "Treasury Manager", + category: "Risk Curators", chains: ["Ethereum"], module: "kpk/index.js", treasury: "karpatkey.js", From ab932e77e179aba6045c63fead8cd4e98e30afe1 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 17 Oct 2025 14:39:32 -0600 Subject: [PATCH 325/398] fix gecko id --- defi/src/protocols/data3.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index f9f5d48f1f..fbac068f3e 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -34235,7 +34235,7 @@ const data3_1: Protocol[] = [ logo: `${baseIconsUrl}/kpk.jpg`, audits: "0", audit_note: null, - gecko_id: kpk, + gecko_id: "kpk", cmcId: null, category: "Risk Curators", chains: ["Ethereum"], From 3a141d09d720b044e3f624ef00b4a3f55e19ab48 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 17 Oct 2025 15:19:19 -0600 Subject: [PATCH 326/398] add new listings and chain --- defi/src/protocols/data4.ts | 65 ++++++++++++++++++++++++++++++++ defi/src/utils/normalizeChain.ts | 13 ++++++- 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index da846b7f90..99f8798873 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31806,5 +31806,70 @@ const data4: Protocol[] = [ ], listedAt: 1760656147, }, + { + id: "6879", + name: "Gimo", + address: null, + symbol: "-", + assetToken: "st0G", + url: "https://gimofinance.xyz/", + description: `Liquid Staking for 0G Network`, + chain: "0G", + logo: `${baseIconsUrl}/gimo.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Liquid Staking", + chains: ["0G"], + forkedFromIds: [], + module: "gimo/index.js", + twitter: "Gimo_Fi", + audit_links: [], + listedAt: 1760734972, + }, + { + id: "6880", + name: "JAINE", + address: null, + symbol: "-", + url: "https://jaine.app/", + description: `Jaine is a decentralized exchange (DEX) on the 0G network. It allows users to swap tokens and earn fees from liquidity providers`, + chain: "0G", + logo: `${baseIconsUrl}/jaine.jpg`, + audits: "2", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["0G"], + forkedFromIds: ["2198"], + module: "jaine/index.js", + twitter: "Jaineon0G", + audit_links: [], + listedAt: 1760734977, + }, + { + id: "6881", + name: "Bio Protocol", + address: "0xcb1592591996765Ec0eFc1f92599A19767ee5ffA", + symbol: "BIO", + url: "https://www.bio.xyz/", + description: `The Bio protocol is DeSci's new financial layer, engineered to commercialize the best science, faster`, + chain: "Ethereum", + logo: `${baseIconsUrl}/bio.jpg`, + audits: "0", + audit_note: null, + gecko_id: "bio-protocol", + cmcId: "34812", + category: "Launchpad", + chains: ["Ethereum", "Base", "Solana"], + forkedFromIds: [], + module: "bio/index.js", + twitter: "BioProtocol", + audit_links: [], + github: ["bio-xyz"], + listedAt: 1760735837, + }, ]; export default data4; diff --git a/defi/src/utils/normalizeChain.ts b/defi/src/utils/normalizeChain.ts index 3d47c1412e..5b2cd31054 100644 --- a/defi/src/utils/normalizeChain.ts +++ b/defi/src/utils/normalizeChain.ts @@ -4980,6 +4980,16 @@ export const chainCoingeckoIds = { url: "https://kasplex.org/", github: ["kasplex"], }, + "0G": { + geckoId: "zero-gravity", + symbol: "0G", + cmcId: "38337", + categories: ["EVM"], + twitter: "0G_Foundation", + url: "https://www.0gfoundation.ai/", + github: ["0gfoundation"], + chainId: 16661, + }, } as unknown as ChainCoinGekcoIds // We are creating the list here because, later in the code, we include historical chain labels with the same chain metadata, so, chainCoingeckoIds will have duplicate keys @@ -5195,7 +5205,8 @@ const chainLabelMap = { "zklighter": "zkLighter", "goat": "Goat", "gatelayer": "GateLayer", - "xone": "Xone Chain" + "xone": "Xone Chain", + "0g": "0G" } as { [key: string]: string } // When we decide to change the display name of a chain, we add the mapping for the new name here From 6dc7a51149ebcbd40de4a8282f8949fcfd9b1978 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 17 Oct 2025 15:31:15 -0600 Subject: [PATCH 327/398] add new listings --- defi/src/protocols/data4.ts | 47 +++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 99f8798873..64d33f5ae7 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -22940,6 +22940,7 @@ const data4: Protocol[] = [ forkedFromIds: [], module: "evedex/index.js", twitter: "EveDexOfficial", + treasury: "evedex.js", listedAt: 1753803222, }, { @@ -30375,6 +30376,9 @@ const data4: Protocol[] = [ twitter: "SolidYield", audit_links: ["https://docs.solid.xyz/safety-and-trust/security-and-audits#audits"], listedAt: 1759797789, + dimensions: { + fees: "solid-yield" + } }, /* { @@ -31871,5 +31875,48 @@ const data4: Protocol[] = [ github: ["bio-xyz"], listedAt: 1760735837, }, + { + id: "6882", + name: "FlowX Perps", + address: "sui:0x6dae8ca14311574fdfe555524ea48558e3d1360d1607d1c7f98af867e3b7976c::flx::FLX", + symbol: "FLX", + url: "https://flowx.finance/perp", + description: "FlowX Perps is the perpetual futures exchange built on the Sui Blockchain.", + chain: "Sui", + logo: `${baseIconsUrl}/flowx-perps.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Interface", + chains: ["Sui"], + forkedFrom: [], + module: "dummy.js", + twitter: "FlowX_finance", + parentProtocol: "parent#flowx-finance", + dimensions: { + derivatives: "flowx-perps" + } + }, + { + id: "6883", + name: "YieldBricks", + address: "arbitrum:0x11920f139a3121c2836e01551d43f95b3c31159c", + symbol: "YBR", + url: "https://yieldbricks.com/", + description: "Your Trusted Web3 Gateway to Premium Real Estate Yield | Seamless RWA Hub for Global Retail.", + chain: "Arbitrum", + logo: `${baseIconsUrl}/yieldbricks.jpg`, + audits: "0", + audit_note: null, + gecko_id: "yieldbricks", + cmcId: "34385", + tags: ["Real Estate"], + chains: ["Arbitrum"], + forkedFrom: [], + module: "yieldbricks/index.js", + twitter: "YieldBricks", + listedAt: 1760736594, + }, ]; export default data4; From 0045b9c61fa4d5a7f4f6c5a0807b12674f4eb275 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 17 Oct 2025 15:34:06 -0600 Subject: [PATCH 328/398] enable dimensions adapters --- defi/src/protocols/data3.ts | 1 + defi/src/protocols/data4.ts | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index fbac068f3e..94c6787cc9 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -16009,6 +16009,7 @@ const data3_1: Protocol[] = [ oraclesBreakdown: [ { name: "Stork", type: "Primary", proof: [] } ], listedAt: 1691812695, dimensions: { + fees: "aark", derivatives: { genuineSpikes: ["1691884800", "1691971200"], adapter: "aark" diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 64d33f5ae7..493e7a0387 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31224,6 +31224,9 @@ const data4: Protocol[] = [ module: "pharaoh-exchange-v3-legacy/index.js", twitter: "PharaohExchange", parentProtocol: "parent#pharaoh-exchange", + dimensions: { + dexs: "pharaoh-v3-legacy" + }, listedAt: 1760377677, }, { @@ -31245,6 +31248,9 @@ const data4: Protocol[] = [ module: "pharaoh-exchange-v3/index.js", twitter: "PharaohExchange", parentProtocol: "parent#pharaoh-exchange", + dimensions: { + dexs: "pharaoh-v3" + }, listedAt: 1760377684, }, { From e0a01435d949ba24c16d92795effa5b1e557b180 Mon Sep 17 00:00:00 2001 From: crow Date: Sat, 18 Oct 2025 08:30:39 +0500 Subject: [PATCH 329/398] Update data4.ts (#10839) * Update data4.ts Update description for Musical Chairs * Update data4.ts --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 493e7a0387..bc128878d3 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -28376,7 +28376,7 @@ const data4: Protocol[] = [ address: null, symbol: "-", url: "https://muschairs.com", - description: "A high-stakes on-chain game of reaction and skill, built on Arbitrum. Players stake ETH to join a game of musical chairs; the last one to react when the music stops loses their stake to the winners", + description: "Musical Chairs is a provably fair on-chain game of reaction and skill on Arbitrum, designed for Web3 mass adoption. It features a radically accessible stake of ~$8, a low commission, and a high 4-to-1 winner-to-loser ratio, creating a positive first experience for new users.", chain: "Arbitrum", logo: `${baseIconsUrl}/musical-chairs.jpg`, audits: "0", From 65a994f77d366c2194cbe501e6400a7b5fb9f630 Mon Sep 17 00:00:00 2001 From: Josh-DIA Date: Fri, 17 Oct 2025 21:36:58 -0600 Subject: [PATCH 330/398] update-data3 (#10832) --- defi/src/protocols/data3.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 94c6787cc9..6a612697f0 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -40708,7 +40708,7 @@ const data3_2: Protocol[] = [ }, { name: "DIA", - type: "Secondary", + type: "Primary", proof: ["https://explorer.hiro.so/txid/SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.alex-oracle-v1-1?chain=mainnet","https://github.com/DefiLlama/defillama-server/pull/10672"] }, ], From 4975e66fdc14acc95b881dd64f252f5c461f7838 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 17 Oct 2025 21:39:19 -0600 Subject: [PATCH 331/398] update zest oracles --- defi/src/protocols/data3.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 6a612697f0..bb14e353f6 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -40703,7 +40703,7 @@ const data3_2: Protocol[] = [ oraclesBreakdown: [ { name: "Pyth", - type: "Primary", + type: "Secondary", proof: ["https://docs.zestprotocol.com/start/borrow/zest-protocol-borrow-overview/oracles#zest-protocol-uses-pyth"] }, { From e19737a130c554dbd6dad4dee233532ed4420cdc Mon Sep 17 00:00:00 2001 From: biancabuzea200 <34369307+biancabuzea200@users.noreply.github.com> Date: Sat, 18 Oct 2025 05:41:31 +0200 Subject: [PATCH 332/398] Update Re7 description (#10831) --- defi/src/protocols/data4.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index bc128878d3..35c24daa30 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -15872,6 +15872,19 @@ const data4: Protocol[] = [ chains: ["Ethereum", "Base", "Sonic", "Berachain", "Binance", "Plume Mainnet", "TAC", "Plasma"], forkedFrom: [], oraclesBreakdown: [ + { + name: "Chronicle", + type: "Primary", + proof: [ + "https://berascan.com/address/0x83348bef4994abfc11af0790ca83fa5f582b77ae", + "https://berascan.com/address/0x4d210d0d7cb11eae6f3b970cfa68594a71564310", + "https://berascan.com/address/0x7614a738accc2ed7234638250e769f72bcbc3880", + "https://berascan.com/address/0x9fbecbf8cb18170ae52cd5bbde09fe918d1dbbf9", + "https://berascan.com/address/0xe3822ff32fdb60a263df046f5bee6c3cb51e3e1b", + "https://berascan.com/address/0x6d34d7b10ddfc1875da4455ce58f90ca97b4e669" + ], + chains: [{ chain: "Berachain" }], + }, { name: "Stork", type: "Primary", From c14d9e7199ac466797832070fd7f603d297798f1 Mon Sep 17 00:00:00 2001 From: Anastasiia Kondaurova <31795791+KStasi@users.noreply.github.com> Date: Sat, 18 Oct 2025 06:42:50 +0300 Subject: [PATCH 333/398] add XU3O8 details (#10828) --- defi/src/protocols/data4.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 35c24daa30..a2b149b4bd 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -11543,17 +11543,17 @@ const data4: Protocol[] = [ { id: "6033", name: "Uranium.io", - address: null, - symbol: "-", + address: "0x79052ab3c166d4899a1e0dd033ac3b379af0b1fd", + symbol: "XU3O8", url: "https://uranium.io/en", description: - "Uranium.io enables investors to own and trade Uranium ore concentrate (U3O8), also known as ‘yellowcake; in an investment friendly and transparent manner by administering fractional ownership of physical uranium in the form of a smart contract ledger.", + "Uranium.io (XU3O8) enables investors to own and trade Uranium ore concentrate (U3O8), also known as ‘yellowcake; in an investment friendly and transparent manner by administering fractional ownership of physical uranium in the form of a smart contract ledger.", chain: "Etherlink", logo: `${baseIconsUrl}/uranium.io.jpg`, audits: "0", audit_note: null, - gecko_id: null, - cmcId: null, + gecko_id: "uranium", + cmcId: "35597", tags: ["Commodities"], chains: ["Etherlink"], forkedFrom: [], From 9f8f3cdcf54b13c4fdef0f8721fc6af6b8656bf0 Mon Sep 17 00:00:00 2001 From: isaacRedstone Date: Sat, 18 Oct 2025 04:56:48 +0100 Subject: [PATCH 334/398] Update Oracles for Termmax.ts (#10632) * Update Oracles for Termmax.ts * include an entry for chainlink as secondary * Add additional proof link for RedStone protocol --------- Co-authored-by: Real Shaman <85087525+realdealshaman@users.noreply.github.com> --- defi/src/protocols/data3.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index bb14e353f6..3770f78973 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -49579,17 +49579,25 @@ const data3_2: Protocol[] = [ name: "Chainlink", type: "Primary", proof: ["https://docs.ts.finance/protocol-spec/primary-markets/liquidation-mechanism#fully-on-chain-liquidation"] + End Date: "2025-09-17" }, { name: "RedStone", - type: "Secondary", - proof: ["https://docs.ts.finance/protocol-spec/fixed-rate-borrowing-lending-prev-primary-markets/liquidation-mechanism#fully-on-chain-liquidation"] + type: "Primary", + proof: ["https://docs.ts.finance/technical-details/oracles","https://github.com/DefiLlama/defillama-server/pull/10632/files"] + Start Date: "2025-09-17" }, { name: "eOracle", type: "Secondary", proof: ["https://docs.ts.finance/technical-details/deployments"] }, + { + name: "Chainlink", + type: "Secondary", + proof: ["https://docs.ts.finance/protocol-spec/primary-markets/liquidation-mechanism#fully-on-chain-liquidation"] + End Date: "2025-09-17" + }, ], audit_links: ["https://github.com/term-structure/audits"], github: ["term-structure"], From 903ea811eb4250f053ac97bec5a6643102dfd17b Mon Sep 17 00:00:00 2001 From: "Alex S." Date: Sat, 18 Oct 2025 05:57:53 +0200 Subject: [PATCH 335/398] fix(Strata Season 0): adding missing parent relation (#10824) --- defi/src/protocols/data4.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index a2b149b4bd..f733860a53 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -22375,6 +22375,7 @@ const data4: Protocol[] = [ { id: "6473", name: "Strata Season 0", + parentProtocol: "parent#strata", address: null, symbol: "-", url: "https://strata.money", From b82a4f8071c6c72e83d391a66afb072c865934f6 Mon Sep 17 00:00:00 2001 From: realshaman Date: Fri, 17 Oct 2025 22:09:17 -0600 Subject: [PATCH 336/398] fix listing details --- defi/src/protocols/data3.ts | 9 ++++----- defi/src/protocols/data4.ts | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 3770f78973..473e69e946 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -49578,14 +49578,14 @@ const data3_2: Protocol[] = [ { name: "Chainlink", type: "Primary", - proof: ["https://docs.ts.finance/protocol-spec/primary-markets/liquidation-mechanism#fully-on-chain-liquidation"] - End Date: "2025-09-17" + proof: ["https://docs.ts.finance/protocol-spec/primary-markets/liquidation-mechanism#fully-on-chain-liquidation"], + endDate: "2025-09-17" }, { name: "RedStone", type: "Primary", - proof: ["https://docs.ts.finance/technical-details/oracles","https://github.com/DefiLlama/defillama-server/pull/10632/files"] - Start Date: "2025-09-17" + proof: ["https://docs.ts.finance/technical-details/oracles","https://github.com/DefiLlama/defillama-server/pull/10632/files"], + startDate: "2025-09-17", }, { name: "eOracle", @@ -49596,7 +49596,6 @@ const data3_2: Protocol[] = [ name: "Chainlink", type: "Secondary", proof: ["https://docs.ts.finance/protocol-spec/primary-markets/liquidation-mechanism#fully-on-chain-liquidation"] - End Date: "2025-09-17" }, ], audit_links: ["https://github.com/term-structure/audits"], diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index f733860a53..2059986168 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31248,7 +31248,7 @@ const data4: Protocol[] = [ name: "Pharaoh V3", address: "avax:0x13A466998Ce03Db73aBc2d4DF3bBD845Ed1f28E7", symbol: "PHAR", - url: "https://pharaoh.exchange/swap/", + url: "https://www.phar.gg/trade", description: `Pharaoh is a concentrated liquidity layer and exchange built on the Avalanche C-Chain, powered by the latest metaDEX x(3,3) methodology—a more fluid and accessible version of the popular ve(3,3) model.`, chain: "Avalanche", logo: `${baseIconsUrl}/pharaoh-v3.jpg`, From 7827816087bcb7ed12e899b48ed3fbd611fb31b8 Mon Sep 17 00:00:00 2001 From: Reynardo Etenia Wongso Date: Sat, 18 Oct 2025 17:45:02 +0700 Subject: [PATCH 337/398] fix (#10840) --- defi/src/protocols/data3.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index 473e69e946..cf2c67e5b5 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -40467,7 +40467,7 @@ const data3_2: Protocol[] = [ name: "Chainlink", type: "Primary", proof: ["https://docs.river.inc/outro/oracle"], - chains: [{chain: "BOB"},{chain: "Binance"},{chain: "Arbitrum"},{chain:"Arbitrum"}] + chains: [{chain: "BOB"},{chain: "Binance"},{chain: "Arbitrum"}] }, { name: "DIA", @@ -49595,7 +49595,8 @@ const data3_2: Protocol[] = [ { name: "Chainlink", type: "Secondary", - proof: ["https://docs.ts.finance/protocol-spec/primary-markets/liquidation-mechanism#fully-on-chain-liquidation"] + proof: ["https://docs.ts.finance/protocol-spec/primary-markets/liquidation-mechanism#fully-on-chain-liquidation"], + startDate: "2025-09-17", }, ], audit_links: ["https://github.com/term-structure/audits"], From 05ffd45c786f557e9bc3b2214baaa0dfa05c0b39 Mon Sep 17 00:00:00 2001 From: realshaman Date: Sat, 18 Oct 2025 14:58:17 -0600 Subject: [PATCH 338/398] enable chain fees --- defi/src/utils/normalizeChain.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/defi/src/utils/normalizeChain.ts b/defi/src/utils/normalizeChain.ts index 5b2cd31054..abb27d94a2 100644 --- a/defi/src/utils/normalizeChain.ts +++ b/defi/src/utils/normalizeChain.ts @@ -3165,7 +3165,10 @@ export const chainCoingeckoIds = { cmcId: "32196", categories: ["EVM"], twitter: "HyperliquidX", - url: "https://hyperliquid.xyz/" + url: "https://hyperliquid.xyz/", + dimensions: { + fees: "hyperevm" + } }, "Nibiru": { geckoId: "nibiru", @@ -4931,6 +4934,9 @@ export const chainCoingeckoIds = { url: "https://www.plasma.to/", github: ["PlasmaLaboratories"], chainId: 9745, + dimensions: { + fees: "plasma" + } }, "Constellation": { geckoId: "constellation-labs", From f1b3bfbc0a20d7d15ee91a103785c6b38a3cf1b2 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 18 Oct 2025 23:07:11 +0200 Subject: [PATCH 339/398] bugfix: tvl package --- defi/package-lock.json | 628 +++++++++++++++++++---------------------- 1 file changed, 284 insertions(+), 344 deletions(-) diff --git a/defi/package-lock.json b/defi/package-lock.json index 6e77a2a6ba..f43b1d3126 100644 --- a/defi/package-lock.json +++ b/defi/package-lock.json @@ -76,13 +76,15 @@ "@defillama/sdk": "latest", "@project-serum/anchor": "^0.26.0", "@solana/web3.js": "^1.87.6", - "@solendprotocol/solend-sdk": "^0.4.3", "@supercharge/promise-pool": "^2.1.0", "axios": "^1.6.5", + "base-x": "^5.0.1", "bignumber.js": "^9.0.1", "blakejs": "^1.2.1", "bn.js": "^5.2.1", "borsh": "^0.7.0", + "bs58": "^6.0.0", + "buffer-layout": "^1.2.2", "curve25519-js": "^0.0.4", "dotenv": "^8.6.0", "ethers": "^6.0.0", @@ -94,11 +96,10 @@ "miscreant": "^0.3.2", "p-limit": "^3.1.0", "starknet": "^5.24.3", - "typescript": "^5.0.0" + "ws": "^8.18.3" }, "devDependencies": { - "eslint": "^8.32.0", - "ts-node": "^10.8.1" + "eslint": "^9.38.0" } }, "DefiLlama-Adapters/node_modules/@coral-xyz/anchor": { @@ -126,6 +127,24 @@ "node": ">=11" } }, + "DefiLlama-Adapters/node_modules/@coral-xyz/anchor/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "DefiLlama-Adapters/node_modules/@coral-xyz/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, "DefiLlama-Adapters/node_modules/@coral-xyz/borsh": { "version": "0.30.1", "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.30.1.tgz", @@ -141,6 +160,21 @@ "@solana/web3.js": "^1.68.0" } }, + "DefiLlama-Adapters/node_modules/base-x": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.1.tgz", + "integrity": "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==", + "license": "MIT" + }, + "DefiLlama-Adapters/node_modules/bs58": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", + "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", + "license": "MIT", + "dependencies": { + "base-x": "^5.0.0" + } + }, "DefiLlama-Adapters/node_modules/dotenv": { "version": "8.6.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", @@ -149,6 +183,27 @@ "node": ">=10" } }, + "DefiLlama-Adapters/node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "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 + } + } + }, "dimension-adapters": { "name": "adapters", "version": "1.0.0", @@ -3219,30 +3274,6 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@coral-xyz/anchor": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.29.0.tgz", - "integrity": "sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA==", - "dependencies": { - "@coral-xyz/borsh": "^0.29.0", - "@noble/hashes": "^1.3.1", - "@solana/web3.js": "^1.68.0", - "bn.js": "^5.1.2", - "bs58": "^4.0.1", - "buffer-layout": "^1.2.2", - "camelcase": "^6.3.0", - "cross-fetch": "^3.1.5", - "crypto-hash": "^1.3.0", - "eventemitter3": "^4.0.7", - "pako": "^2.0.3", - "snake-case": "^3.0.4", - "superstruct": "^0.15.4", - "toml": "^3.0.0" - }, - "engines": { - "node": ">=11" - } - }, "node_modules/@coral-xyz/anchor-errors": { "version": "0.30.1", "resolved": "https://registry.npmjs.org/@coral-xyz/anchor-errors/-/anchor-errors-0.30.1.tgz", @@ -3251,21 +3282,6 @@ "node": ">=10" } }, - "node_modules/@coral-xyz/anchor/node_modules/@coral-xyz/borsh": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.29.0.tgz", - "integrity": "sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ==", - "dependencies": { - "bn.js": "^5.1.2", - "buffer-layout": "^1.2.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@solana/web3.js": "^1.68.0" - } - }, "node_modules/@coral-xyz/borsh": { "version": "0.26.0", "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.26.0.tgz", @@ -3376,39 +3392,99 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.1.tgz", + "integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -3416,7 +3492,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -3426,18 +3502,17 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3448,6 +3523,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -3455,25 +3531,41 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/js": { + "version": "9.38.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz", + "integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://eslint.org/donate" } }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@fastify/busboy": { @@ -3823,18 +3915,28 @@ "@hapi/hoek": "^11.0.2" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -3850,11 +3952,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -5132,34 +5242,6 @@ "node": ">=11" } }, - "node_modules/@pythnetwork/client": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/@pythnetwork/client/-/client-2.21.0.tgz", - "integrity": "sha512-jqUuPLuVKRNUsZfwLuvK/MwnJ3LIrIxBNoz43xt0fjvVuH5QyTlz51ek76CkeKfCbomGKe41Vq7bvn8aqWVOGA==", - "dependencies": { - "@coral-xyz/anchor": "^0.29.0", - "@coral-xyz/borsh": "^0.28.0", - "buffer": "^6.0.1" - }, - "peerDependencies": { - "@solana/web3.js": "^1.30.2" - } - }, - "node_modules/@pythnetwork/client/node_modules/@coral-xyz/borsh": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.28.0.tgz", - "integrity": "sha512-/u1VTzw7XooK7rqeD7JLUSwOyRSesPUk0U37BV9zK0axJc1q0nRbKFGFLYCQ16OtdOJTTwGfGp11Lx9B45bRCQ==", - "dependencies": { - "bn.js": "^5.1.2", - "buffer-layout": "^1.2.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@solana/web3.js": "^1.68.0" - } - }, "node_modules/@scure/base": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.6.tgz", @@ -6291,30 +6373,6 @@ "node": ">=5.10" } }, - "node_modules/@solana/spl-token": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.1.8.tgz", - "integrity": "sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==", - "dependencies": { - "@babel/runtime": "^7.10.5", - "@solana/web3.js": "^1.21.0", - "bn.js": "^5.1.0", - "buffer": "6.0.3", - "buffer-layout": "^1.2.0", - "dotenv": "10.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@solana/spl-token/node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "engines": { - "node": ">=10" - } - }, "node_modules/@solana/web3.js": { "version": "1.91.8", "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.91.8.tgz", @@ -6342,42 +6400,6 @@ "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" }, - "node_modules/@solendprotocol/solend-sdk": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/@solendprotocol/solend-sdk/-/solend-sdk-0.4.9.tgz", - "integrity": "sha512-tVsvE0kap58/eMeeSonv0tEiqlnvYC0x90MXKoGz2D0oyQBx9Eneba5wXDh9FJ3S5S2RFqwXIAnmdOzTLZzV/A==", - "dependencies": { - "@pythnetwork/client": "^2.5.1", - "@solana/buffer-layout": "^3.0.0", - "@solana/spl-token": "^0.1.8", - "@solana/web3.js": "^1.31.0", - "axios": "^0.24.0", - "bignumber.js": "^9.0.2", - "bn.js": "^5.2.0", - "buffer": "^6.0.3", - "buffer-layout": "^1.2.0", - "isomorphic-fetch": "^3.0.0" - } - }, - "node_modules/@solendprotocol/solend-sdk/node_modules/@solana/buffer-layout": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-3.0.0.tgz", - "integrity": "sha512-MVdgAKKL39tEs0l8je0hKaXLQFb7Rdfb0Xg2LjFZd8Lfdazkg6xiS98uAZrEKvaoF3i4M95ei9RydkGIDMeo3w==", - "dependencies": { - "buffer": "~6.0.3" - }, - "engines": { - "node": ">=5.10" - } - }, - "node_modules/@solendprotocol/solend-sdk/node_modules/axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", - "dependencies": { - "follow-redirects": "^1.14.4" - } - }, "node_modules/@sqltools/formatter": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", @@ -6543,11 +6565,11 @@ } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, - "peer": true + "license": "MIT" }, "node_modules/@types/graceful-fs": { "version": "4.1.9", @@ -6717,12 +6739,6 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, "node_modules/@webassemblyjs/ast": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", @@ -6973,10 +6989,11 @@ } }, "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "devOptional": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -6999,6 +7016,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -9432,9 +9450,10 @@ } }, "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==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -10030,18 +10049,6 @@ "node": ">=8" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dot-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", @@ -10865,83 +10872,90 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.38.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz", + "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.1", + "@eslint/core": "^0.16.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.38.0", + "@eslint/plugin-kit": "^0.4.0", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -10962,12 +10976,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -11030,21 +11038,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -11054,18 +11047,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -11108,18 +11089,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/esniff": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", @@ -11136,17 +11105,18 @@ } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -11739,15 +11709,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-type": { @@ -11884,24 +11855,25 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" }, "node_modules/follow-redirects": { "version": "1.15.6", @@ -12374,12 +12346,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, "node_modules/graphlib": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", @@ -12656,10 +12622,11 @@ "dev": true }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -12676,6 +12643,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -13648,15 +13616,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -17770,6 +17729,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -18994,21 +18954,6 @@ "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rpc-websockets": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.11.0.tgz", @@ -20794,12 +20739,6 @@ "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -21592,6 +21531,7 @@ "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" From 92a415f1f9b02a87f15f3590cd0727a26db4dd66 Mon Sep 17 00:00:00 2001 From: realshaman Date: Sat, 18 Oct 2025 15:14:36 -0600 Subject: [PATCH 340/398] enable aquifer spot volume --- defi/src/protocols/data4.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 2059986168..580e8be37f 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31938,5 +31938,27 @@ const data4: Protocol[] = [ twitter: "YieldBricks", listedAt: 1760736594, }, + { + id: "6884", + name: "Aquifer", + address: null, + symbol: "-", + url: "https://aquiferdex.io/", + description: "Prop AMM on Solana.", + chain: "Solana", + logo: `${baseIconsUrl}/aquifer.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Dexs", + chains: ["Solana"], + forkedFrom: [], + module: "dummy.js", + twitter: "_aquifer_", + dimensions: { + dexs: "aquifer" + } + }, ]; export default data4; From c63186a2145fbc4ba9b59c6b78e93f5b023b503c Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 19 Oct 2025 01:52:52 +0100 Subject: [PATCH 341/398] update urls for vest exchange and debridge --- defi/src/protocols/data2.ts | 4 ++-- defi/src/protocols/data3.ts | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/defi/src/protocols/data2.ts b/defi/src/protocols/data2.ts index c97353b9dd..e2c29167e0 100644 --- a/defi/src/protocols/data2.ts +++ b/defi/src/protocols/data2.ts @@ -1932,8 +1932,8 @@ const data2: Protocol[] = [ previousNames: ["DLN"], address: "solana:DBRiDgJAMsM95moTzJs7M9LnkGErpbv9v6CUR1DXnUu5", symbol: "DBR", - url: "https://app.debridge.finance/r/32425", - referralUrl: "https://app.debridge.finance/r/32425", + url: "https://app.debridge.com/r/32425", + referralUrl: "https://app.debridge.com/r/32425", description: "deBridge is a cross-chain interoperability and liquidity transfer protocol that allows the decentralized transfer of arbitrary data and assets between various blockchains", chain: "Ethereum", diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index cf2c67e5b5..961f8539af 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -26892,7 +26892,7 @@ const data3_1: Protocol[] = [ previousNames: ["DLN"], address: null, symbol: "-", - url: "https://debridge.finance", + url: "https://debridge.com", description: "The bridge that moves at lightspeed. Because DeFi doesn't wait.", chain: "Ethereum", logo: `${baseIconsUrl}/debridge.jpg`, @@ -40214,10 +40214,11 @@ const data3_2: Protocol[] = [ }, { id: "4400", - name: "Vest Exchange", + name: "Vest Markets", + previousNames: ["Vest Exchange"], address: null, symbol: "-", - url: "https://www.vest.exchange", + url: "https://vestmarkets.com/", description: "Vest Exchange is a next generation Perps DEX that ensures the most capital efficient liquidity, and fairest pricing for traders and LPs.", chain: "zkSync Era", @@ -40231,7 +40232,7 @@ const data3_2: Protocol[] = [ forkedFrom: [], module: "vest/index.js", twitter: "VestExchange", - audit_links: ["https://docs.vest.exchange/audits"], + audit_links: ["https://docs.vestmarkets.com/audits"], listedAt: 1711709964, dimensions: { derivatives: "vest" From 2c0dad02c777074ab52468bd38534097eee47789 Mon Sep 17 00:00:00 2001 From: Reynardo Etenia Wongso Date: Sun, 19 Oct 2025 23:04:36 +0700 Subject: [PATCH 342/398] validate api script (#10217) (#10220) * validate api script (#10217) * only notify if error * update script, add retry * add support for coins etc * fix * updated * improved validation and compare * working validate API command --------- Co-authored-by: treeoflife2 --- defi/package.json | 5 +- defi/src/utils/apiValidateUtils.ts | 1033 ++++++++++++++++++++++++++++ defi/src/utils/compareAPI.ts | 532 ++++++++++++++ defi/src/utils/validateAPI.ts | 344 +++++++++ 4 files changed, 1913 insertions(+), 1 deletion(-) create mode 100644 defi/src/utils/apiValidateUtils.ts create mode 100644 defi/src/utils/compareAPI.ts create mode 100644 defi/src/utils/validateAPI.ts diff --git a/defi/package.json b/defi/package.json index 34d9217266..37e4994a9b 100644 --- a/defi/package.json +++ b/defi/package.json @@ -59,7 +59,8 @@ "twitter-update": "npx ts-node --logError --transpile-only src/twitter/updateTwitterData.ts", "local-test-por": "npx ts-node --logError --transpile-only proof-of-reserves/cli/test.ts", "run-check-por": "npx ts-node --logError --transpile-only proof-of-reserves/cli/check.ts", - "ui-tool": "npm run update-submodules; cd ui-tool; npm run start-server" + "ui-tool": "npm run update-submodules; cd ui-tool; npm run start-server", + "validate-api": "npx ts-node --logError --transpile-only src/utils/validateAPI.ts" }, "devDependencies": { "@babel/preset-env": "^7.18.2", @@ -92,6 +93,7 @@ "@defillama/sdk": "^5.0.172", "@elastic/elasticsearch": "^8.13.1", "@supercharge/promise-pool": "^2.3.2", + "@types/ajv": "^0.0.5", "@types/async-retry": "^1.4.8", "@types/aws-lambda": "^8.10.97", "@types/inquirer-autocomplete-prompt": "^2.0.0", @@ -100,6 +102,7 @@ "@types/node": "^18.0.0", "@types/node-fetch": "^2.5.10", "@types/promise.allsettled": "^1.0.6", + "ajv": "^8.17.1", "axios": "^1.6.5", "bignumber.js": "^9.0.1", "buffer-layout": "^1.2.2", diff --git a/defi/src/utils/apiValidateUtils.ts b/defi/src/utils/apiValidateUtils.ts new file mode 100644 index 0000000000..75227ca124 --- /dev/null +++ b/defi/src/utils/apiValidateUtils.ts @@ -0,0 +1,1033 @@ +import fs from 'fs'; +import path from 'path'; +import axios, { AxiosResponse } from 'axios'; +import Ajv from 'ajv'; + +export interface SchemaInfo { + schema: any; + serverUrl: string; +} + +export interface EndpointInfo { + path: string; + serverUrl: string; + schema: any; + method: string; + queryParams?: Record; + override?: EndpointOverride; +} + +export interface ValidationResult { + endpoint: string; + serverUrl: string; + status: 'pass' | 'fail' | 'expected_failure'; + errors: string[]; + responseTime?: number; + override?: EndpointOverride; + queryParams?: Record; +} + +const schemasCache = new Map(); +const ajv = new Ajv({ + allErrors: true, + verbose: true, + strict: false, + removeAdditional: false, + coerceTypes: true +}); + +//handle uint +ajv.addFormat('uint', { + type: 'number', + validate: (value: number) => { + return Number.isInteger(value) && value >= 0; + } +}); + + +export interface EndpointOverride { + parameterOverrides?: Record; + skip?: boolean; + expectedFailure?: boolean; + skipDataComparison?: boolean; + reason?: string; +} + +// Endpoint overrides for special cases +// Note: For compareBeta (prod vs beta), data comparison is enabled by default +// since both environments use the same DB and should return matching values. +// For validateAPI (single environment), only schema is validated. +export const ENDPOINT_OVERRIDES: Record = { + // Add specific overrides here if needed (e.g., skip certain endpoints entirely) +}; + +export async function fetchWithRetry( + url: string, + retries: number = 3, + delay: number = 1000, + timeout: number = 45000 +): Promise { + for (let i = 0; i <= retries; i++) { + try { + const response = await axios.get(url, { + timeout, + headers: { + 'User-Agent': 'DefiLlama-API-Validator/1.0' + } + }); + return response; + } catch (error: any) { + const isLastAttempt = i === retries; + const shouldRetry = shouldRetryError(error); + + if (isLastAttempt || !shouldRetry) { + throw error; + } + + const backoffDelay = calculateBackoffDelay(delay, i, error); + await new Promise(resolve => setTimeout(resolve, backoffDelay)); + } + } + throw new Error('Unexpected error in fetchWithRetry'); +} + +function shouldRetryError(error: any): boolean { + if (error.code) { + const retryableCodes = [ + 'ECONNRESET', + 'ETIMEDOUT', + 'ENOTFOUND', + 'ECONNREFUSED', + 'EHOSTUNREACH', + 'EPIPE', + 'EAI_AGAIN' + ]; + + if (retryableCodes.includes(error.code)) { + return true; + } + } + + if (error.response?.status) { + const retryableStatuses = [ + 429, + 502, + 503, + 504, + 520, + 521, + 522, + 523, + 524 + ]; + + return retryableStatuses.includes(error.response.status); + } + + if (error.message?.toLowerCase().includes('timeout')) { + return true; + } + + return false; +} + +function calculateBackoffDelay(baseDelay: number, attempt: number, error: any): number { + let backoffDelay = baseDelay * Math.pow(2, attempt); + if (error.response?.status === 429) { + const retryAfter = error.response.headers['retry-after']; + if (retryAfter) { + const retryAfterMs = parseInt(retryAfter) * 1000; + backoffDelay = Math.max(backoffDelay, retryAfterMs); + } else { + backoffDelay = baseDelay * Math.pow(3, attempt); + } + } + + const jitter = backoffDelay * 0.25 * (Math.random() - 0.5); + backoffDelay += jitter; + + // Ensure delay is between 1-5 seconds + return Math.max(1000, Math.min(backoffDelay, 5000)); +} + +export async function loadOpenApiSpec(apiType: 'free' | 'pro' = 'free'): Promise { + const cacheKey = `openapi-${apiType}`; + + if (schemasCache.has(cacheKey)) { + return schemasCache.get(cacheKey); + } + + const githubUrl = apiType === 'pro' + ? 'https://raw.githubusercontent.com/DefiLlama/api-docs/refs/heads/main/defillama-openapi-pro.json' + : 'https://raw.githubusercontent.com/DefiLlama/api-docs/refs/heads/main/defillama-openapi-free.json'; + + try { + console.log(`getting spec from api-docs for ${apiType}`); + const response = await axios.get(githubUrl, { + timeout: 30000, + }); + + const spec = response.data; + schemasCache.set(cacheKey, spec); + return spec; + + } catch (error: any) { + throw new Error(`spec fetch failed: ${error.message}`); + } +} + +export function getServerUrl(endpoint: string, spec: any, apiType: 'free' | 'pro' = 'free'): string { + try { + const endpointDef = spec.paths[endpoint]; + let serverUrl: string; + + if (!endpointDef) { + serverUrl = spec.servers?.[0]?.url || process.env.BASE_API_URL || 'https://api.llama.fi'; + } else { + const getMethod = endpointDef.get; + if (getMethod?.servers?.length > 0) { + serverUrl = getMethod.servers[0].url; + } else { + serverUrl = spec.servers?.[0]?.url || process.env.BASE_API_URL || 'https://api.llama.fi'; + } + } + + if (apiType === 'pro' && process.env.PRO_API_KEY && serverUrl.includes('pro-api.llama.fi')) { + serverUrl = `${serverUrl}/${process.env.PRO_API_KEY}`; + } + + return serverUrl; + } catch (error) { + const baseUrl = process.env.BASE_API_URL || 'https://api.llama.fi'; + + if (apiType === 'pro' && process.env.PRO_API_KEY && baseUrl.includes('pro-api.llama.fi')) { + return `${baseUrl}/${process.env.PRO_API_KEY}`; + } + + return baseUrl; + } +} + +export function getBetaServerUrl(prodServerUrl: string): string { + try { + const prodUrl = new URL(prodServerUrl); + const path = prodUrl.pathname; + + let betaBaseUrl = ''; + + if (prodUrl.hostname === 'coins.llama.fi') { + betaBaseUrl = process.env.BETA_COINS_URL || process.env.BETA_API_URL || ''; + } else if (prodUrl.hostname === 'stablecoins.llama.fi') { + betaBaseUrl = process.env.BETA_STABLECOINS_URL || process.env.BETA_API_URL || ''; + } else if (prodUrl.hostname === 'yields.llama.fi') { + betaBaseUrl = process.env.BETA_YIELDS_URL || process.env.BETA_API_URL || ''; + } else if (prodUrl.hostname === 'api.llama.fi') { + betaBaseUrl = process.env.BETA_API_URL || ''; + } else if (prodUrl.hostname === 'pro-api.llama.fi') { + betaBaseUrl = process.env.BETA_PRO_API_URL || process.env.BETA_API_URL || ''; + } else if (prodUrl.hostname === 'bridges.llama.fi') { + betaBaseUrl = process.env.BETA_BRIDGES_URL || process.env.BETA_API_URL || ''; + } else { + console.warn(`No beta URL mapping found for domain: ${prodUrl.hostname}`); + betaBaseUrl = process.env.BETA_API_URL || ''; + } + + if (!betaBaseUrl) { + console.warn(`Beta URL not configured for ${prodUrl.hostname}`); + return ''; + } + + const cleanBaseUrl = betaBaseUrl.replace(/\/$/, ''); + const cleanPath = path.startsWith('/') ? path : '/' + path; + + return cleanBaseUrl + cleanPath + prodUrl.search; + + } catch (error) { + console.error(`Error parsing URL ${prodServerUrl}:`, error); + return process.env.BETA_API_URL || ''; + } +} + +function makeFieldsNullable(schema: any, isRoot: boolean = false): any { + if (!schema || typeof schema !== 'object') { + return schema; + } + + if (isRoot) { + if (schema.type === 'array') { + return { + ...schema, + items: schema.items ? makeFieldsNullable(schema.items) : schema.items + }; + } + if (schema.type === 'object') { + const newProperties: any = {}; + if (schema.properties) { + for (const [key, value] of Object.entries(schema.properties)) { + newProperties[key] = makeFieldsNullable(value); + } + } + return { + ...schema, + properties: newProperties, + additionalProperties: schema.additionalProperties ? makeFieldsNullable(schema.additionalProperties) : schema.additionalProperties + }; + } + } + + if (schema.type === 'number') { + return { + ...schema, + type: ['number', 'string', 'null'] //sometime we return numbers as strings + }; + } + + if (Array.isArray(schema.type) && schema.type.includes('number') && schema.type.includes('null')) { + return { + ...schema, + type: ['number', 'string', 'null'] + }; + } + + //make strings flexible to accept arrays and numbers (for fields like governanceID, valuation) + if (schema.type === 'string') { + return { + ...schema, + type: ['string', 'array', 'number', 'null'] + }; + } + + //make arrays nullable and process their items + if (schema.type === 'array') { + return { + ...schema, + type: ['array', 'null'], + items: schema.items ? makeFieldsNullable(schema.items) : schema.items + }; + } + + //handle objects with properties - make them nullable + if (schema.type === 'object' && schema.properties) { + const newProperties: any = {}; + for (const [key, value] of Object.entries(schema.properties)) { + newProperties[key] = makeFieldsNullable(value); + } + return { + ...schema, + type: ['object', 'null'], + properties: newProperties, + additionalProperties: true + }; + } + + //handle objects with additionalProperties (like chainTvls) - make them nullable too + if (schema.type === 'object' && schema.additionalProperties) { + return { + ...schema, + type: ['object', 'null'], + additionalProperties: makeFieldsNullable(schema.additionalProperties) + }; + } + + //handle plain objects without properties or additionalProperties - make them very flexible + if (schema.type === 'object' && !schema.properties && !schema.additionalProperties) { + return { + ...schema, + type: ['object', 'null', 'string'] + }; + } + + //handle anyOf, oneOf, allOf - make them more permissive + if (schema.anyOf) { + return { + ...schema, + anyOf: schema.anyOf.map((s: any) => makeFieldsNullable(s)) + }; + } + + if (schema.oneOf) { + const oneOfTypes = schema.oneOf.map((s: any) => makeFieldsNullable(s)); + oneOfTypes.push({ type: ['string', 'number', 'object', 'array', 'boolean', 'null'] }); + return { + ...schema, + anyOf: oneOfTypes //use anyOf instead of oneOf for more permissive validation + }; + } + + if (schema.allOf) { + return { + ...schema, + allOf: schema.allOf.map((s: any) => makeFieldsNullable(s)) + }; + } + + return schema; +} + +export function extractSchemaFromOpenApi(endpoint: string, spec: any): any | null { + try { + const endpointDef = spec.paths[endpoint]; + if (!endpointDef?.get?.responses?.['200']?.content?.['application/json']?.schema) { + return null; + } + + const rawSchema = endpointDef.get.responses['200'].content['application/json'].schema; + return makeFieldsNullable(rawSchema, true); + } catch (error) { + console.error(`Error extracting schema for endpoint ${endpoint}:`, error); + return null; + } +} + +export interface QueryParameterInfo { + queryParams: Record; + hasRequiredParams: boolean; +} + +export function extractQueryParameters(endpointDef: any): QueryParameterInfo { + const queryParams: Record = {}; + let hasRequiredParams = false; + + if (!endpointDef.parameters) { + return { queryParams, hasRequiredParams }; + } + + endpointDef.parameters.forEach((param: any) => { + if (param.in === 'query') { + const paramName = param.name; + const schema = param.schema; + + if (param.required) { + hasRequiredParams = true; + } + + //use schema example if available + if (schema?.example !== undefined && schema?.example !== null) { + queryParams[paramName] = [String(schema.example)]; + } + //use schema default if available + else if (schema?.default !== undefined && schema?.default !== null) { + queryParams[paramName] = [String(schema.default)]; + } + //use schema enum if available + else if (schema?.enum && Array.isArray(schema.enum)) { + queryParams[paramName] = schema.enum.map(String); + } + } + }); + + return { queryParams, hasRequiredParams }; +} + +export function buildUrlWithQueryParams(baseUrl: string, queryParams: Record): string { + if (Object.keys(queryParams).length === 0) { + return baseUrl; + } + + const url = new URL(baseUrl); + Object.entries(queryParams).forEach(([key, value]) => { + url.searchParams.append(key, value); + }); + + return url.toString(); +} + +export function generateQueryParameterVariations(queryParams: Record, hasRequiredParams: boolean = false): Record[] { + if (Object.keys(queryParams).length === 0) { + return [{}]; + } + + const paramNames = Object.keys(queryParams); + const variations: Record[] = []; + const maxVariationsPerEndpoint = 10; + + function generateCombinations(currentParams: Record, remainingParamNames: string[]): void { + if (variations.length >= maxVariationsPerEndpoint) { + return; + } + + if (remainingParamNames.length === 0) { + variations.push({ ...currentParams }); + return; + } + + const paramName = remainingParamNames[0]; + const samples = queryParams[paramName]; + + samples.forEach(sample => { + if (variations.length < maxVariationsPerEndpoint) { + const newParams = { ...currentParams, [paramName]: sample }; + generateCombinations(newParams, remainingParamNames.slice(1)); + } + }); + } + + if (!hasRequiredParams) { + variations.push({}); + } + + generateCombinations({}, paramNames); + + return variations.slice(0, maxVariationsPerEndpoint); +} + +export function getEndpointOverride(endpoint: string): EndpointOverride | undefined { + if (ENDPOINT_OVERRIDES[endpoint]) { + return ENDPOINT_OVERRIDES[endpoint]; + } + + for (const [pattern, override] of Object.entries(ENDPOINT_OVERRIDES)) { + if (pattern.includes('{') && endpointMatchesPattern(endpoint, pattern)) { + return override; + } + } + + return undefined; +} + +function endpointMatchesPattern(endpoint: string, pattern: string): boolean { + const regexPattern = pattern.replace(/\{[^}]+\}/g, '[^/]+'); + const regex = new RegExp(`^${regexPattern}$`); + return regex.test(endpoint); +} + +export function substituteParameters(endpoint: string, spec: any, parameterValues?: Record): string[] { + const paramMatches = endpoint.match(/\{([^}]+)\}/g); + + if (!paramMatches) { + return [endpoint]; + } + + const override = getEndpointOverride(endpoint); + + const variations: string[] = []; + const paramNames = paramMatches.map(match => match.slice(1, -1)); + + const endpointDef = spec.paths[endpoint]; + const pathParameters = endpointDef?.get?.parameters?.filter((p: any) => p.in === 'path') || []; + + function generateCombinations(currentEndpoint: string, remainingParams: string[]): void { + if (remainingParams.length === 0) { + variations.push(currentEndpoint); + return; + } + + const paramName = remainingParams[0]; + + let samples: string[]; + + if (parameterValues?.[paramName]) { + samples = [parameterValues[paramName]]; + } else if (override?.parameterOverrides?.[paramName]) { + samples = override.parameterOverrides[paramName]; + } else { + const paramDef = pathParameters.find((p: any) => p.name === paramName); + + if (paramDef?.schema?.example !== undefined && paramDef?.schema?.example !== null) { + samples = [String(paramDef.schema.example)]; + } else if (paramDef?.schema?.default !== undefined && paramDef?.schema?.default !== null) { + samples = [String(paramDef.schema.default)]; + } else { + samples = ['sample']; + } + } + + samples.forEach(sample => { + const newEndpoint = currentEndpoint.replace(`{${paramName}}`, sample); + generateCombinations(newEndpoint, remainingParams.slice(1)); + }); + } + + generateCombinations(endpoint, paramNames); + return variations; +} + +export function getAllEndpoints(spec: any, includeParameterized: boolean = true, apiType: 'free' | 'pro' = 'free'): EndpointInfo[] { + const endpoints: EndpointInfo[] = []; + let skippedProEndpoints = 0; + + Object.entries(spec.paths).forEach(([path, methods]: [string, any]) => { + if (methods.get) { + // Filter endpoints based on API type + const endpointSecurity = methods.get.security; + const isPro = endpointSecurity && endpointSecurity.length > 0; + + // Skip pro endpoints when testing free API + if (apiType === 'free' && isPro) { + skippedProEndpoints++; + return; + } + + const serverUrl = getServerUrl(path, spec, apiType); + const schema = extractSchemaFromOpenApi(path, spec); + const { queryParams, hasRequiredParams } = extractQueryParameters(methods.get); + + if (schema) { + if (path.includes('{') && includeParameterized) { + const pathVariations = substituteParameters(path, spec); + pathVariations.forEach(variation => { + const override = getEndpointOverride(variation); + + if (override?.skip) { + return; + } + + const queryVariations = generateQueryParameterVariations(queryParams, hasRequiredParams); + + queryVariations.forEach(queryParamSet => { + endpoints.push({ + path: variation, + serverUrl, + schema, + method: 'GET', + queryParams: queryParamSet, + override + }); + }); + }); + } else if (!path.includes('{')) { + const override = getEndpointOverride(path); + + if (override?.skip) { + return; + } + + const queryVariations = generateQueryParameterVariations(queryParams, hasRequiredParams); + + queryVariations.forEach(queryParamSet => { + endpoints.push({ + path, + serverUrl, + schema, + method: 'GET', + queryParams: queryParamSet, + override + }); + }); + } + } + } + }); + + if (apiType === 'free' && skippedProEndpoints > 0) { + console.log(`Skipped ${skippedProEndpoints} pro-only endpoints (testing free API)`); + } + + return endpoints; +} + +export async function validateResponseAgainstSchema( + response: any, + schema: any, + isDebug: boolean = false +): Promise<{ valid: boolean; errors: string[] }> { + try { + if (isDebug) { + console.log('\n=== VALIDATION DEBUG ==='); + console.log('Response type:', typeof response); + console.log('Response keys:', response && typeof response === 'object' ? Object.keys(response) : 'N/A'); + console.log('Response preview:', JSON.stringify(response, null, 2).slice(0, 500) + '...'); + } + + let actualData = response; + + // Handle stringified entire response + if (typeof response === 'string') { + try { + actualData = JSON.parse(response); + if (isDebug) { + console.log('Parsed stringified response'); + } + } catch (parseError) { + if (isDebug) { + console.log('Response is string but not valid JSON:', parseError); + } + } + } + + // Handle stringified JSON in body field + if (actualData && typeof actualData === 'object' && actualData.body && typeof actualData.body === 'string') { + try { + const parsedBody = JSON.parse(actualData.body); + if (isDebug) { + console.log('Parsed body field'); + } + actualData = parsedBody; + } catch (parseError) { + if (isDebug) { + console.log('Failed to parse body field:', parseError); + } + } + } + + // Handle double-escaped JSON (fallback for when actualData is still a string) + if (typeof actualData === 'string') { + try { + // Try to parse again in case of double-escaping + actualData = JSON.parse(actualData); + if (isDebug) { + console.log('Parsed double-escaped JSON'); + } + } catch (parseError) { + // Keep as is + } + } + + if (isDebug) { + console.log('Schema expects type:', schema.type || 'Any'); + console.log('Schema properties:', schema.properties ? Object.keys(schema.properties) : 'N/A'); + console.log('========================\n'); + } + + const validate = ajv.compile(schema); + let valid = validate(actualData); + + // If validation failed and data is still a string, try one more unescape attempt + if (!valid && typeof actualData === 'string') { + try { + const unescaped = actualData.replace(/\\"/g, '"').replace(/\\\\/g, '\\'); + const parsedUnescaped = JSON.parse(unescaped); + actualData = parsedUnescaped; + valid = validate(actualData); + if (valid && isDebug) { + console.log('Successfully validated after unescaping'); + } + } catch (e) { + // Keep original validation result + } + } + + if (valid) { + return { valid: true, errors: [] }; + } else { + const errors = validate.errors?.map(error => { + const errorMsg = `${error.instancePath || '/body'}: ${error.message}`; + if (isDebug) { + console.log('Validation error details:', { + path: error.instancePath || '/body', + message: error.message, + data: error.data + }); + } + return errorMsg; + }) || ['Unknown validation error']; + + // DEBUG: Log full response on validation failure + console.log('\n[DEBUG] Schema validation failed. Full response data:'); + console.log(JSON.stringify(actualData, null, 2)); + console.log('\n[DEBUG] Expected schema:'); + console.log(JSON.stringify(schema, null, 2)); + console.log('[DEBUG] End of validation failure data\n'); + + return { valid: false, errors }; + } + } catch (error: any) { + if (isDebug) { + console.log('Schema validation exception:', error.message); + } + return { + valid: false, + errors: [`Schema validation error: ${error.message}`] + }; + } +} + +export async function testEndpoint( + endpointInfo: EndpointInfo, + isDebug: boolean = false, + retryCount: number = 3, + retryDelay: number = 1000, + requestTimeout: number = 45000 +): Promise { + const baseUrl = `${endpointInfo.serverUrl}${endpointInfo.path}`; + const fullUrl = buildUrlWithQueryParams(baseUrl, endpointInfo.queryParams || {}); + const startTime = Date.now(); + + try { + const response = await fetchWithRetry(fullUrl, retryCount, retryDelay, requestTimeout); + const responseTime = Date.now() - startTime; + + if (response.status !== 200) { + if (endpointInfo.override?.expectedFailure) { + return { + endpoint: endpointInfo.path, + serverUrl: endpointInfo.serverUrl, + status: 'expected_failure', + errors: [`Expected failure: ${endpointInfo.override.reason || 'No reason provided'}`], + responseTime, + override: endpointInfo.override, + queryParams: endpointInfo.queryParams + }; + } + + return { + endpoint: endpointInfo.path, + serverUrl: endpointInfo.serverUrl, + status: 'fail', + errors: [`HTTP ${response.status}: ${response.statusText}`], + responseTime, + override: endpointInfo.override, + queryParams: endpointInfo.queryParams + }; + } + + if (isDebug) { + console.log(`\n--- ENDPOINT DEBUG: ${endpointInfo.path} ---`); + console.log('Raw response status:', response.status); + console.log('Raw response headers content-type:', response.headers['content-type']); + console.log('Raw response data type:', typeof response.data); + console.log('Raw response data preview:', JSON.stringify(response.data, null, 2).slice(0, 400) + '...'); + console.log('Expected schema type:', endpointInfo.schema?.type); + console.log('--- END ENDPOINT DEBUG ---\n'); + } + + const validation = await validateResponseAgainstSchema(response.data, endpointInfo.schema, isDebug); + + return { + endpoint: endpointInfo.path, + serverUrl: endpointInfo.serverUrl, + status: validation.valid ? 'pass' : 'fail', + errors: validation.errors, + responseTime, + override: endpointInfo.override, + queryParams: endpointInfo.queryParams + }; + + } catch (error: any) { + const responseTime = Date.now() - startTime; + + if (endpointInfo.override?.expectedFailure) { + return { + endpoint: endpointInfo.path, + serverUrl: endpointInfo.serverUrl, + status: 'expected_failure', + errors: [`Expected failure: ${endpointInfo.override.reason || 'No reason provided'}`], + responseTime, + override: endpointInfo.override, + queryParams: endpointInfo.queryParams + }; + } + + let errorMessage = error.message || 'Unknown error'; + + if (error.code) { + errorMessage += ` (${error.code})`; + } + + if (error.response?.status) { + errorMessage += ` - HTTP ${error.response.status}`; + if (error.response.statusText) { + errorMessage += `: ${error.response.statusText}`; + } + } + + if (isDebug) { + console.log(`Network error for ${fullUrl}:`, errorMessage); + console.log('Error details:', { + code: error.code, + status: error.response?.status, + statusText: error.response?.statusText, + url: fullUrl + }); + } + + return { + endpoint: endpointInfo.path, + serverUrl: endpointInfo.serverUrl, + status: 'fail', + errors: [errorMessage], + responseTime, + override: endpointInfo.override, + queryParams: endpointInfo.queryParams + }; + } +} + +export function compareResponses( + baseResponse: any, + betaResponse: any, + tolerance: number = 0.1 +): { isMatch: boolean; differences: string[] } { + const differences: string[] = []; + + function deepCompare(obj1: any, obj2: any, path: string = 'root'): void { + if (typeof obj1 !== typeof obj2) { + differences.push(`${path}: Type mismatch - base: ${typeof obj1}, beta: ${typeof obj2}`); + return; + } + + if (obj1 === null || obj2 === null) { + if (obj1 !== obj2) { + differences.push(`${path}: Null mismatch - base: ${obj1}, beta: ${obj2}`); + } + return; + } + + if (typeof obj1 === 'number' && typeof obj2 === 'number') { + if (obj1 === 0 && obj2 === 0) return; + + const deviation = Math.abs((obj1 - obj2) / (obj1 || 1)); + if (deviation > tolerance) { + differences.push(`${path}: Value deviation ${(deviation * 100).toFixed(2)}% - base: ${obj1}, beta: ${obj2}`); + } + return; + } + + if (typeof obj1 === 'string' || typeof obj1 === 'boolean') { + if (obj1 !== obj2) { + differences.push(`${path}: Value mismatch - base: ${obj1}, beta: ${obj2}`); + } + return; + } + + if (Array.isArray(obj1) && Array.isArray(obj2)) { + if (obj1.length !== obj2.length) { + differences.push(`${path}: Array length mismatch - base: ${obj1.length}, beta: ${obj2.length}`); + } + + const minLength = Math.min(obj1.length, obj2.length); + + if (minLength <= 10) { + for (let i = 0; i < minLength; i++) { + deepCompare(obj1[i], obj2[i], `${path}[${i}]`); + } + } else { + const indicesToCompare = new Set(); + + for (let i = 0; i < 10; i++) { + indicesToCompare.add(i); + } + + for (let i = Math.max(10, minLength - 10); i < minLength; i++) { + indicesToCompare.add(i); + } + + //highest 10 items (sort by numerical value if applicable, or by 'date' property for objects) + try { + const sortedIndices1 = [...Array(obj1.length).keys()].sort((a, b) => { + const val1 = obj1[a]; + const val2 = obj1[b]; + + if (val1 && typeof val1 === 'object' && 'date' in val1 && val2 && typeof val2 === 'object' && 'tvl' in val2) { + return (Number(val2.tvl) || 0) - (Number(val1.tvl) || 0); + } + if (typeof val1 === 'number' && typeof val2 === 'number') { + return val2 - val1; + } + if (val1 && typeof val1 === 'object' && val2 && typeof val2 === 'object') { + const numericKeys = Object.keys(val1).filter(key => typeof val1[key] === 'number'); + if (numericKeys.length > 0) { + const key = numericKeys[0]; + return (Number(val2[key]) || 0) - (Number(val1[key]) || 0); + } + } + return 0; + }); + + for (let i = 0; i < Math.min(10, sortedIndices1.length); i++) { + indicesToCompare.add(sortedIndices1[i]); + } + } catch (error) { + } + + const availableIndices: number[] = []; + for (let i = 0; i < minLength; i++) { + if (!indicesToCompare.has(i)) { + availableIndices.push(i); + } + } + + for (let i = availableIndices.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [availableIndices[i], availableIndices[j]] = [availableIndices[j], availableIndices[i]]; + } + + for (let i = 0; i < Math.min(10, availableIndices.length); i++) { + indicesToCompare.add(availableIndices[i]); + } + + for (const index of Array.from(indicesToCompare).sort((a, b) => a - b)) { + if (index < minLength) { + deepCompare(obj1[index], obj2[index], `${path}[${index}]`); + } + } + } + return; + } + + if (typeof obj1 === 'object' && typeof obj2 === 'object') { + const keys1 = Object.keys(obj1); + const keys2 = Object.keys(obj2); + + const allKeys = [...new Set([...keys1, ...keys2])]; + for (const key of allKeys) { + if (!(key in obj1)) { + differences.push(`${path}.${key}: Missing in base response`); + } else if (!(key in obj2)) { + differences.push(`${path}.${key}: Missing in beta response`); + } else { + deepCompare(obj1[key], obj2[key], `${path}.${key}`); + } + } + } + } + + deepCompare(baseResponse, betaResponse); + + return { + isMatch: differences.length === 0, + differences + }; +} + +export function sanitizeUrlForDisplay(url: string): string { + if (url.includes('pro-api.llama.fi')) { + const parts = url.split('/'); + if (parts.length >= 4 && parts[2] === 'pro-api.llama.fi') { + return parts.slice(0, 3).join('/') + '/' + parts.slice(4).join('/'); + } + } + return url; +} + +export function buildEndpointDisplayPath(endpoint: string, queryParams?: Record): string { + if (!queryParams || Object.keys(queryParams).length === 0) { + return endpoint; + } + + const params = new URLSearchParams(queryParams); + return `${endpoint}?${params.toString()}`; +} + +export function validateBetaConfiguration(): { isValid: boolean; warnings: string[] } { + const warnings: string[] = []; + let isValid = true; + + const requiredBetaUrls = [ + { key: 'BETA_API_URL', domain: 'api.llama.fi' }, + { key: 'BETA_COINS_URL', domain: 'coins.llama.fi' }, + { key: 'BETA_STABLECOINS_URL', domain: 'stablecoins.llama.fi' }, + { key: 'BETA_YIELDS_URL', domain: 'yields.llama.fi' }, + { key: 'BETA_PRO_API_URL', domain: 'pro-api.llama.fi' }, + { key: 'BETA_BRIDGES_URL', domain: 'bridges.llama.fi' } + ]; + + for (const { key, domain } of requiredBetaUrls) { + const url = process.env[key]; + if (!url) { + warnings.push(`${key} not configured - ${domain} endpoints will fallback to BETA_API_URL`); + } else if (!url.startsWith('http')) { + warnings.push(`${key} should start with https:// - got: ${url}`); + isValid = false; + } + } + + if (!process.env.BETA_API_URL) { + warnings.push('BETA_API_URL not configured - beta comparison will fail'); + isValid = false; + } + + return { isValid, warnings }; +} + +export { sendMessage } from '../../src/utils/discord'; \ No newline at end of file diff --git a/defi/src/utils/compareAPI.ts b/defi/src/utils/compareAPI.ts new file mode 100644 index 0000000000..0a9124bdd8 --- /dev/null +++ b/defi/src/utils/compareAPI.ts @@ -0,0 +1,532 @@ +/** + * compareAPI.ts - API Comparison Tool + * + * Compares two API environments (e.g., production vs beta) for deployment validation. + * Tests both schema compliance AND actual data values. + * + * Why data comparison works: Both environments use the same database. + * When called simultaneously, they query the same data snapshot. + * Any differences indicate bugs in the candidate deployment. + * + * Supports both free and pro API testing. + * + * Usage: + * npm run compare-api # Compare free API + * npm run compare-api -- --api-type pro # Compare pro API + * + * See API_VALIDATION_README.md for full documentation. + */ + +import fs from 'fs'; +import path from 'path'; +import dotenv from 'dotenv'; +import { + loadOpenApiSpec, + getAllEndpoints, + fetchWithRetry, + validateResponseAgainstSchema, + compareResponses, + getBetaServerUrl, + EndpointInfo, + sendMessage, +} from './apiValidateUtils'; + +dotenv.config({ path: path.join(__dirname, '../../.env') }); + +// DEBUG: Set specific endpoint to test only that endpoint (for debugging) +// Example: '/api/v2/chains' or '/api/oracles' +// Set to null to test all endpoints +// const DEBUG_ENDPOINT: string | null = null; +const DEBUG_ENDPOINT = '/api/v2/chains'; +// const DEBUG_ENDPOINT = '/api/oracles'; + +interface ComparisonResult { + endpoint: string; + prodUrl: string; + betaUrl: string; + status: 'pass' | 'fail' | 'schema_fail' | 'network_error'; + prodResponseTime?: number; + betaResponseTime?: number; + schemaValidation: { + prod: { valid: boolean; errors: string[] }; + beta: { valid: boolean; errors: string[] }; + }; + dataComparison?: { + isMatch: boolean; + differences: string[]; + }; + errors: string[]; + // TEMP DEBUG: Store actual responses for debugging + prodResponse?: any; + betaResponse?: any; +} + +interface ComparisonReport { + timestamp: string; + apiType: 'free' | 'pro'; + tolerance: number; + summary: { + total: number; + passed: number; + failed: number; + schemaFailures: number; + networkErrors: number; + skippedDataComparison: number; + averageProdResponseTime: number; + averageBetaResponseTime: number; + }; + failedEndpoints: ComparisonResult[]; + significantDifferences: string[]; + passedEndpoints?: ComparisonResult[]; +} + +async function compareEndpoint( + endpoint: EndpointInfo, + tolerance: number = 0.1 +): Promise { + const prodUrl = `${endpoint.serverUrl}${endpoint.path}`; + const betaUrl = getBetaServerUrl(prodUrl); + + const result: ComparisonResult = { + endpoint: endpoint.path, + prodUrl, + betaUrl, + status: 'fail', + schemaValidation: { + prod: { valid: false, errors: [] }, + beta: { valid: false, errors: [] } + }, + errors: [] + }; + + try { + // Fetch from both prod and beta in parallel with 5 retries + const [prodResponse, betaResponse] = await Promise.allSettled([ + (async () => { + const start = Date.now(); + const response = await fetchWithRetry(prodUrl, 5, 1000, 45000); + const responseTime = Date.now() - start; + return { data: response.data, responseTime }; + })(), + (async () => { + const start = Date.now(); + const response = await fetchWithRetry(betaUrl, 5, 1000, 45000); + const responseTime = Date.now() - start; + return { data: response.data, responseTime }; + })() + ]); + + if (prodResponse.status === 'rejected') { + result.errors.push(`Prod API error: ${prodResponse.reason.message}`); + result.status = 'network_error'; + return result; + } + + if (betaResponse.status === 'rejected') { + result.errors.push(`Beta API error: ${betaResponse.reason.message}`); + result.status = 'network_error'; + return result; + } + + const prodData = prodResponse.value.data; + const betaData = betaResponse.value.data; + result.prodResponseTime = prodResponse.value.responseTime; + result.betaResponseTime = betaResponse.value.responseTime; + + // TEMP DEBUG: Store responses in result for JSON report + if (DEBUG_ENDPOINT) { + result.prodResponse = prodData; + result.betaResponse = betaData; + } + + // Validate both responses against OpenAPI schema + const prodValidation = await validateResponseAgainstSchema(prodData, endpoint.schema); + const betaValidation = await validateResponseAgainstSchema(betaData, endpoint.schema); + + result.schemaValidation.prod = prodValidation; + result.schemaValidation.beta = betaValidation; + + if (!prodValidation.valid || !betaValidation.valid) { + result.status = 'schema_fail'; + if (!prodValidation.valid) { + result.errors.push(`Prod schema validation failed: ${prodValidation.errors.join(', ')}`); + } + if (!betaValidation.valid) { + result.errors.push(`Beta schema validation failed: ${betaValidation.errors.join(', ')}`); + } + return result; + } + + // Both schemas are valid - now compare the actual data + // Since prod and beta use the same DB and are called simultaneously, + // they should return the same (or very similar) values + const comparison = compareResponses(prodData, betaData, tolerance); + result.dataComparison = comparison; + + if (comparison.isMatch) { + result.status = 'pass'; + } else { + result.status = 'fail'; + result.errors.push(`Data mismatch: ${comparison.differences.length} differences found`); + } + + return result; + + } catch (error: any) { + result.errors.push(`Unexpected error: ${error.message}`); + result.status = 'network_error'; + return result; + } +} + +async function compareAllEndpoints( + apiType: 'free' | 'pro' = 'free', + tolerance: number = 0.1, + specificEndpoint?: string, + specificDomain?: string, + includeSuccess: boolean = false +): Promise { + + try { + const spec = await loadOpenApiSpec(apiType); + let endpoints = getAllEndpoints(spec, true, apiType); + + // DEBUG: Filter to specific endpoint if DEBUG_ENDPOINT is set + if (DEBUG_ENDPOINT) { + endpoints = endpoints.filter(ep => ep.path === DEBUG_ENDPOINT); + console.log(`[DEBUG MODE] Testing only endpoint: ${DEBUG_ENDPOINT}`); + if (endpoints.length === 0) { + console.log(`[DEBUG MODE] No endpoint found matching: ${DEBUG_ENDPOINT}`); + } + } + + if (specificEndpoint) { + endpoints = endpoints.filter(ep => ep.path.includes(specificEndpoint)); + console.log(`filtering to endpoints containing: ${specificEndpoint}`); + } + + if (specificDomain) { + endpoints = endpoints.filter(ep => ep.serverUrl.includes(specificDomain)); + console.log(`filtering to domain: ${specificDomain}`); + } + + console.log(`comparing ${endpoints.length} endpoints between prod and beta...`); + + const results: ComparisonResult[] = []; + const prodResponseTimes: number[] = []; + const betaResponseTimes: number[] = []; + + for (const [index, endpoint] of endpoints.entries()) { + const progress = ((index + 1) / endpoints.length * 100).toFixed(1); + process.stdout.write(`\rprogress: ${progress}% (${index + 1}/${endpoints.length}) - comparing ${endpoint.path}`); + + try { + const result = await compareEndpoint(endpoint, tolerance); + results.push(result); + + if (result.prodResponseTime) prodResponseTimes.push(result.prodResponseTime); + if (result.betaResponseTime) betaResponseTimes.push(result.betaResponseTime); + + if (result.status === 'fail') { + console.log(`\n❌ DATA MISMATCH: ${endpoint.path}`); + result.errors.forEach(error => console.log(` • ${error}`)); + + if (result.dataComparison && result.dataComparison.differences.length > 0) { + const topDiffs = result.dataComparison.differences.slice(0, 3); + topDiffs.forEach(diff => console.log(` 📊 ${diff}`)); + if (result.dataComparison.differences.length > 3) { + console.log(` ... and ${result.dataComparison.differences.length - 3} more differences`); + } + } + } else if (result.status === 'schema_fail') { + console.log(`\n🔧 SCHEMA FAIL: ${endpoint.path}`); + result.errors.forEach(error => console.log(` • ${error}`)); + } + + await new Promise(resolve => setTimeout(resolve, 200)); + + } catch (error: any) { + const failedResult: ComparisonResult = { + endpoint: endpoint.path, + prodUrl: `${endpoint.serverUrl}${endpoint.path}`, + betaUrl: getBetaServerUrl(`${endpoint.serverUrl}${endpoint.path}`), + status: 'network_error', + schemaValidation: { + prod: { valid: false, errors: [] }, + beta: { valid: false, errors: [] } + }, + errors: [`Critical error: ${error.message}`] + }; + results.push(failedResult); + console.log(`\nERROR: ${endpoint.path} - ${error.message}`); + } + } + + console.log('\n'); + + const passed = results.filter(r => r.status === 'pass').length; + const failed = results.filter(r => r.status === 'fail').length; + const schemaFailures = results.filter(r => r.status === 'schema_fail').length; + const networkErrors = results.filter(r => r.status === 'network_error').length; + const skippedDataComparison = 0; // We compare data for all endpoints + + const avgProdResponseTime = prodResponseTimes.length > 0 + ? Math.round(prodResponseTimes.reduce((a, b) => a + b, 0) / prodResponseTimes.length) + : 0; + const avgBetaResponseTime = betaResponseTimes.length > 0 + ? Math.round(betaResponseTimes.reduce((a, b) => a + b, 0) / betaResponseTimes.length) + : 0; + + const significantDifferences: string[] = []; + results.forEach(result => { + if (result.dataComparison && !result.dataComparison.isMatch) { + result.dataComparison.differences.forEach(diff => { + if (!significantDifferences.includes(diff)) { + significantDifferences.push(diff); + } + }); + } + }); + + const failedResults = results.filter(r => r.status !== 'pass'); + const passedResults = results.filter(r => r.status === 'pass'); + + const report: ComparisonReport = { + timestamp: new Date().toISOString(), + apiType, + tolerance, + summary: { + total: results.length, + passed, + failed, + schemaFailures, + networkErrors, + skippedDataComparison, + averageProdResponseTime: avgProdResponseTime, + averageBetaResponseTime: avgBetaResponseTime + }, + failedEndpoints: failedResults, + significantDifferences: significantDifferences.slice(0, 20) + }; + + // Only include successful results if requested + if (includeSuccess) { + report.passedEndpoints = passedResults; + } + + return report; + + } catch (error: any) { + console.error('error during comparison:', error.message); + throw error; + } +} + +async function generateComparisonReport(report: ComparisonReport, outputFile?: string): Promise { + const { summary, significantDifferences, apiType, tolerance } = report; + + console.log('\ncomparison summary'); + console.log('='.repeat(50)); + console.log(`api: ${apiType}`); + console.log(`total endpoints: ${summary.total}`); + console.log(`passed (schema + data): ${summary.passed}`); + console.log(`data mismatch: ${summary.failed}`); + console.log(`schema failed: ${summary.schemaFailures}`); + console.log(`network errors: ${summary.networkErrors}`); + console.log(`success rate: ${((summary.passed / summary.total) * 100).toFixed(1)}%`); + console.log(`prod avg resp: ${summary.averageProdResponseTime}ms`); + console.log(`beta avg resp: ${summary.averageBetaResponseTime}ms`); + console.log(`tolerance: ${tolerance * 100}%`); + + if (significantDifferences.length > 0) { + console.log('\nTop differences found:'); + significantDifferences.slice(0, 10).forEach((diff, index) => { + console.log(`${index + 1}. ${diff}`); + }); + + if (significantDifferences.length > 10) { + console.log(`... and ${significantDifferences.length - 10} more difference patterns`); + } + } + + const reportFile = outputFile || path.join(__dirname, '../beta_comparison_report.json'); + fs.writeFileSync(reportFile, JSON.stringify(report, null, 2)); + console.log(`\nfull comparison report saved to: ${reportFile}`); +} + +async function sendNotification(report: ComparisonReport, isDryRun: boolean = false): Promise { + const { summary, apiType } = report; + + if (summary.failed === 0 && summary.schemaFailures === 0 && summary.networkErrors === 0) { + console.log('\nall comparisons passed - no notification needed'); + return; + } + + const failedEndpointsList = report.failedEndpoints.map(r => `${r.endpoint} (${r.status})`); + + const failureMessage = "```" + + `beta comparison - issues detected\n\n` + + `${apiType} api:\n` + + `• total endpoints: ${summary.total}\n` + + `• passed: ${summary.passed}\n` + + `• data mismatch: ${summary.failed}\n` + + `• schema failed: ${summary.schemaFailures}\n` + + `• network errors: ${summary.networkErrors}\n` + + `• success rate: ${((summary.passed / summary.total) * 100).toFixed(1)}%\n` + + `• prod avg resp: ${summary.averageProdResponseTime}ms\n` + + `• beta avg resp: ${summary.averageBetaResponseTime}ms\n\n` + + `failing endpoints (${Math.min(failedEndpointsList.length, 20)} of ${failedEndpointsList.length}):\n` + + failedEndpointsList.slice(0, 20).map((endpoint, i) => `${i + 1}. ${endpoint}`).join('\n') + + (failedEndpointsList.length > 20 ? `\n... and ${failedEndpointsList.length - 20} more` : '') + + `\n\n${report.timestamp}` + + "```"; + + console.log('\nsending discord notification'); + + if (!isDryRun) { + await sendMessage(failureMessage, process.env.DISCORD_WEBHOOK_URL, false); + } else { + console.log('would send:\n', failureMessage); + } +} + +async function main(): Promise { + const args = process.argv.slice(2); + + let apiType: 'free' | 'pro' = 'free'; + let tolerance = 0.1; + let specificEndpoint: string | undefined; + let specificDomain: string | undefined; + let outputFile: string | undefined; + let isDryRun = false; + let includeSuccess = false; + + for (let i = 0; i < args.length; i++) { + const arg = args[i]; + switch (arg) { + case '--api-type': + apiType = args[++i] as 'free' | 'pro'; + break; + case '--tolerance': + tolerance = parseFloat(args[++i]); + break; + case '--endpoint': + specificEndpoint = args[++i]; + break; + case '--domain': + specificDomain = args[++i]; + break; + case '--output': + outputFile = args[++i]; + break; + case '--dry-run': + isDryRun = true; + break; + case '--include-success': + includeSuccess = true; + break; + case '--help': + console.log(` +╔═══════════════════════════════════════════════════════════════════════════╗ +║ compareAPI.ts - API Comparison Tool ║ +╚═══════════════════════════════════════════════════════════════════════════╝ + +PURPOSE: + Compares production vs beta API responses for deployment validation. + Tests: Schema compliance + Actual data values. + + Why it works: Prod and beta share the same database. When called + simultaneously, they query the same data. Any differences = bugs in beta! + +USAGE: + npx ts-node src/utils/compareBeta.ts [options] + +OPTIONS: + --api-type API type to compare (default: free) + --tolerance Tolerance for numerical differences (default: 0.1 = 10%) + --endpoint Filter endpoints containing this pattern + --domain Filter to specific domain (e.g., stablecoins.llama.fi) + --output Custom output file for JSON report + --dry-run Skip Discord notifications + --include-success Include successful endpoints in JSON report (default: false) + --help Show this help message + +TOLERANCE EXPLAINED: + 0.0 = Exact match required + 0.05 = 5% difference allowed + 0.1 = 10% difference allowed (default) + 0.2 = 20% difference allowed + +EXAMPLES: + # Compare all free API endpoints (prod vs beta) + npm run compare-api + + # Compare pro API with strict tolerance + npm run compare-api -- --api-type pro --tolerance 0.05 + + # Test specific protocol endpoints + npm run compare-api -- --endpoint /protocol + + # Test stablecoins domain only + npm run compare-api -- --domain stablecoins.llama.fi + + # CI/CD: Run without Discord notification + npm run compare-api -- --dry-run + +OUTPUT: + ✅ Pass - Schema valid + data matches (within tolerance) + ❌ Data mismatch - Values differ between prod and beta + 🔧 Schema fail - Response doesn't match OpenAPI schema + ⚠️ Network error - Unable to reach endpoint + +TYPICAL WORKFLOW: + 1. Deploy new code to beta environment + 2. Run: npm run compare-api + 3. Review differences (if any) + 4. Fix bugs in beta + 5. Repeat until all tests pass + 6. Promote beta to production + +See API_VALIDATION_README.md for full documentation. + `); + process.exit(0); + } + } + + console.log('api compare tool\n'); + + try { + const report = await compareAllEndpoints(apiType, tolerance, specificEndpoint, specificDomain, includeSuccess); + await generateComparisonReport(report, outputFile); + + const hasIssues = report.summary.failed > 0 || report.summary.schemaFailures > 0 || report.summary.networkErrors > 0; + + if (hasIssues) { + console.log(`\ncomparison completed with issues`); + await sendNotification(report, isDryRun); + process.exit(1); + } else { + console.log('\nall comparisons passed successfully!'); + process.exit(0); + } + + } catch (error: any) { + console.error(`\nerror: ${error.message}`); + + if (!isDryRun) { + await sendMessage( + `beta comparison critical error!\n\n` + + `error: ${error.message}\n` + + `timestamp: ${new Date().toISOString()}`, + process.env.DISCORD_WEBHOOK_URL, + false + ); + } + + process.exit(1); + } +} + +if (require.main === module) { + main(); +} \ No newline at end of file diff --git a/defi/src/utils/validateAPI.ts b/defi/src/utils/validateAPI.ts new file mode 100644 index 0000000000..01019408b0 --- /dev/null +++ b/defi/src/utils/validateAPI.ts @@ -0,0 +1,344 @@ +/** + * validateAPI.ts - OpenAPI Compliance Validator + * + * Validates that API responses match the OpenAPI specification. + * Tests schema structure, required fields, and data types. + * Does NOT compare actual values (use compareAPI.ts for that). + * + * Usage: + * npx ts-node src/utils/validateAPI.ts [--api-type free|pro] [--endpoint pattern] + * + */ + +import fs from 'fs'; +import path from 'path'; +import dotenv from 'dotenv'; +import { + loadOpenApiSpec, + getAllEndpoints, + testEndpoint, + ValidationResult, + sendMessage, + sanitizeUrlForDisplay, + buildEndpointDisplayPath +} from './apiValidateUtils'; + +dotenv.config({ path: path.join(__dirname, '../../.env') }); + +// DEBUG: Set specific endpoint to test only that endpoint (for debugging) +// Example: '/api/v2/chains' or '/api/oracles' +// Set to null to test all endpoints +const DEBUG_ENDPOINT: string | null = null; +// const DEBUG_ENDPOINT = 'protocol/aave'; +// const DEBUG_ENDPOINT = '/api/oracles'; + +interface ValidationReport { + timestamp: string; + environment: string; + summary: { + total: number; + passed: number; + failed: number; + averageResponseTime: number; + }; + failedEndpoints: Array<{ + endpoint: string; + status: string; + errors: string[]; + responseTime?: number; + }>; +} + +async function validateAllEndpoints( + specificEndpoint?: string, + specificDomain?: string, + useBeta: boolean = false +): Promise { + const envLabel = useBeta ? 'BETA' : 'PRODUCTION'; + console.log(`\n${'='.repeat(60)}`); + console.log(`API Validation - ${envLabel}`); + console.log('='.repeat(60)); + + try { + // Load both free and pro specs and merge endpoints + const freeSpec = await loadOpenApiSpec('free'); + const proSpec = await loadOpenApiSpec('pro'); + let endpoints = [ + ...getAllEndpoints(freeSpec, true, 'free'), + ...getAllEndpoints(proSpec, true, 'pro') + ]; + + console.log(`Loaded ${endpoints.length} total endpoints (free + pro)`); + + // DEBUG: Filter to specific endpoint if DEBUG_ENDPOINT is set + if (DEBUG_ENDPOINT) { + endpoints = endpoints.filter(ep => ep.path === DEBUG_ENDPOINT); + console.log(`[DEBUG MODE] Testing only endpoint: ${DEBUG_ENDPOINT}`); + if (endpoints.length === 0) { + console.log(`[DEBUG MODE] No endpoint found matching: ${DEBUG_ENDPOINT}`); + } + } + + if (specificEndpoint) { + endpoints = endpoints.filter(ep => ep.path.includes(specificEndpoint)); + console.log(`Filtering to endpoints containing: ${specificEndpoint}`); + } + + if (specificDomain) { + endpoints = endpoints.filter(ep => ep.serverUrl.includes(specificDomain)); + console.log(`Filtering to domain: ${specificDomain}`); + } + + // If using beta, map URLs to beta environment + if (useBeta) { + const { getBetaServerUrl } = require('./apiValidateUtils'); + endpoints = endpoints.map(ep => ({ + ...ep, + serverUrl: getBetaServerUrl(`${ep.serverUrl}${ep.path}`).replace(ep.path, '') + })); + } + + console.log(`Testing ${endpoints.length} endpoints...\n`); + + const results: ValidationResult[] = []; + const totalResponseTimes: number[] = []; + + // Use defaults: retryCount=5, retryDelay=1000, requestTimeout=45000, requestDelay=500 + const retryCount = 5; + const retryDelay = 1000; + const requestTimeout = 45000; + const requestDelay = 500; + + for (const [index, endpoint] of endpoints.entries()) { + const progress = ((index + 1) / endpoints.length * 100).toFixed(1); + process.stdout.write(`\rProgress: ${progress}% (${index + 1}/${endpoints.length}) - Testing ${endpoint.path}`); + + try { + const result = await testEndpoint(endpoint, false, retryCount, retryDelay, requestTimeout); + results.push(result); + + if (result.responseTime) { + totalResponseTimes.push(result.responseTime); + } + + if (result.status === 'fail') { + const displayPath = buildEndpointDisplayPath(result.endpoint, result.queryParams); + // console.log(`\nFailed: ${displayPath} on ${sanitizeUrlForDisplay(endpoint.serverUrl)}`); + // result.errors.forEach(error => console.log(` • ${error}`)); + } + + await new Promise(resolve => setTimeout(resolve, requestDelay)); + + } catch (error: any) { + const failedResult: ValidationResult = { + endpoint: endpoint.path, + serverUrl: endpoint.serverUrl, + status: 'fail', + errors: [`Unexpected error: ${error.message}`], + queryParams: endpoint.queryParams + }; + results.push(failedResult); + const displayPath = buildEndpointDisplayPath(endpoint.path, endpoint.queryParams); + console.log(`\nError: ${displayPath} - ${error.message}`); + } + } + + console.log('\n'); + + const passed = results.filter(r => r.status === 'pass').length; + const failed = results.filter(r => r.status === 'fail').length; + const averageResponseTime = totalResponseTimes.length > 0 + ? Math.round(totalResponseTimes.reduce((a, b) => a + b, 0) / totalResponseTimes.length) + : 0; + + const failedResults = results.filter(r => r.status === 'fail'); + + const report: ValidationReport = { + timestamp: new Date().toISOString(), + environment: envLabel, + summary: { + total: results.length, + passed, + failed, + averageResponseTime + }, + failedEndpoints: failedResults.map(r => ({ + endpoint: `${r.serverUrl}${buildEndpointDisplayPath(r.endpoint, r.queryParams)}`, + status: r.status, + errors: r.errors, + responseTime: r.responseTime + })) + }; + + return report; + + } catch (error: any) { + console.error('Error during validation:', error.message); + throw error; + } +} + +async function generateReport( + report: ValidationReport, + outputFile?: string +): Promise { + const { summary, failedEndpoints, environment } = report; + + console.log(`\n${'='.repeat(60)}`); + console.log(`VALIDATION SUMMARY - ${environment}`); + console.log('='.repeat(60)); + + console.log(`\nTotal Endpoints: ${summary.total}`); + console.log(`Passed: ${summary.passed}`); + console.log(`Failed: ${summary.failed}`); + console.log(`Avg Response Time: ${summary.averageResponseTime}ms`); + console.log(`Success Rate: ${((summary.passed / summary.total) * 100).toFixed(1)}%`); + + // Show failed endpoints + if (failedEndpoints.length > 0) { + console.log(`\n❌ FAILED ENDPOINTS (${failedEndpoints.length}):`); + failedEndpoints.forEach((item, index) => { + console.log(` ${index + 1}. ${sanitizeUrlForDisplay(item.endpoint)}`); + item.errors.forEach(error => console.log(` • ${error}`)); + }); + } + + const reportFile = outputFile || path.join(__dirname, '../validation_report.json'); + fs.writeFileSync(reportFile, JSON.stringify(report, null, 2)); + console.log(`\n📄 Full report saved to: ${reportFile}`); +} + +async function sendNotification(report: ValidationReport): Promise { + const { summary, failedEndpoints, environment } = report; + + if (summary.failed === 0) { + console.log('\n✅ All validations passed - no notification needed'); + return; + } + + const failureMessage = "```" + + `API Validation ${environment} - Issues Detected\n\n` + + `Total Endpoints: ${summary.total}\n` + + `Passed: ${summary.passed}\n` + + `Failed: ${summary.failed}\n` + + `Success Rate: ${((summary.passed / summary.total) * 100).toFixed(1)}%\n` + + `Avg Response: ${summary.averageResponseTime}ms\n\n` + + `Failed Endpoints (${Math.min(failedEndpoints.length, 20)} of ${failedEndpoints.length}):\n` + + failedEndpoints.slice(0, 20).map((item, i) => + `${i + 1}. ${sanitizeUrlForDisplay(item.endpoint)}` + ).join('\n') + + (failedEndpoints.length > 20 ? `\n... and ${failedEndpoints.length - 20} more` : '') + + `\n\n${report.timestamp}` + + "```"; + + console.log('\n📤 Sending Discord notification...'); + + await sendMessage(failureMessage, process.env.DISCORD_WEBHOOK_URL, false); +} + +async function main(): Promise { + const args = process.argv.slice(2); + + let specificEndpoint: string | undefined; + let specificDomain: string | undefined; + let outputFile: string | undefined; + let useBeta = false; + + for (let i = 0; i < args.length; i++) { + const arg = args[i]; + switch (arg) { + case '--endpoint': + specificEndpoint = args[++i]; + break; + case '--domain': + specificDomain = args[++i]; + break; + case '--output': + outputFile = args[++i]; + break; + case '--beta': + useBeta = true; + break; + case '--help': + console.log(` +╔═══════════════════════════════════════════════════════════════════════════╗ +║ validateAPI.ts - OpenAPI Validator ║ +╚═══════════════════════════════════════════════════════════════════════════╝ + +PURPOSE: + Validates API responses match the OpenAPI specification. + Merges and tests ALL endpoints (free + pro) in a single run. + Tests: Schema structure, required fields, data types. + + Defaults: 5 retries, 1-5s backoff, 45s timeout, 500ms request delay + +USAGE: + npm run validate-api # Validate production (default) + npm run validate-api-beta # Validate beta environment + +OPTIONS: + --beta Test beta URLs instead of production + --endpoint Filter endpoints containing this pattern + --domain Filter to specific domain (e.g., coins.llama.fi) + --output Custom output file for JSON report + --help Show this help message + +EXAMPLES: + # Validate production (all endpoints) + npm run validate-api + + # Validate beta (all endpoints) + npm run validate-api-beta + + # Test specific endpoint + npm run validate-api -- --endpoint /protocol/aave + + # Test coins domain only + npm run validate-api -- --domain coins.llama.fi + +OUTPUT: + All endpoints tested together (no free/pro separation) + ✅ Pass - Response matches OpenAPI schema + ❌ Fail - Response doesn't match schema + + Report: defi/src/validation_report.json + +See API_VALIDATION_README.md for full documentation. + `); + process.exit(0); + } + } + + console.log('🔍 API Validation Tool\n'); + + try { + const report = await validateAllEndpoints(specificEndpoint, specificDomain, useBeta); + await generateReport(report, outputFile); + + if (report.summary.failed > 0) { + console.log(`\n❌ Validation failed with ${report.summary.failed} endpoint failures`); + await sendNotification(report); + process.exit(1); + } else { + console.log('\n✅ All validations passed!'); + process.exit(0); + } + + } catch (error: any) { + console.error(`\n💥 Critical error: ${error.message}`); + + await sendMessage( + `API Validation Critical Error!\n\n` + + `Error: ${error.message}\n` + + `Timestamp: ${new Date().toISOString()}`, + process.env.DISCORD_WEBHOOK_URL, + false + ); + + process.exit(1); + } +} + +if (require.main === module) { + main(); +} From 72fe263f06fd41cd75ca0f9df31622ea74c3242c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 19 Oct 2025 22:14:50 +0200 Subject: [PATCH 343/398] gauntlet fee is wrong --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 580e8be37f..2923035567 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -15649,7 +15649,7 @@ const data4: Protocol[] = [ ], listedAt: 1747734127, dimensions: { - fees: "gauntlet" + // fees: "gauntlet" # incorrect fees on sol, fix it and re-enable #10843 } }, { From 85174b07f709dfc437fa0b3f2e140823ca9157f4 Mon Sep 17 00:00:00 2001 From: realshaman Date: Sun, 19 Oct 2025 15:24:48 -0600 Subject: [PATCH 344/398] add new listings --- defi/src/protocols/data4.ts | 45 +++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 2923035567..173412a71a 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -31960,5 +31960,50 @@ const data4: Protocol[] = [ dexs: "aquifer" } }, + { + id: "6885", + name: "Variational", + address: null, + symbol: "-", + url: "https://variational.io/", + description: "Variational is a protocol that provides infrastructure for peer-to-peer trading, clearing, and settlement of perpetuals and generalized derivatives. The Variational Protocol enables safe and efficient bilateral trading of options, futures, perpetuals, exotics, and more. Multiple apps have been built on the Variational Protocol, including Omni for perpetuals trading and Pro for institutions to trade customizable OTC derivatives.", + chain: "Arbitrum", + logo: `${baseIconsUrl}/variational.jpg`, + audits: "0", + audit_note: null, + gecko_id: null, + cmcId: null, + category: "Derivatives", + chains: ["Arbitrum"], + forkedFrom: [], + module: "dummy.js", + twitter: "variational_io", + dimensions: { + fees: "variational" + }, + github: ["variational-research"], + }, + { + id: "6886", + name: "Open Stablecoin Index", + address: "0x7ebab7190d3d574ce82d29f2fa1422f18e29969c", + symbol: "SQUILL", + url: "https://www.openstablecoinindex.com/", + description: "Open stablecoin index is an equal-weight index tracking leading stablecoin-networks advancing transparency, composability, and user-led governance.", + chain: "Ethereum", + logo: `${baseIconsUrl}/open-stablecoin-index.jpg`, + audits: "0", + audit_note: null, + gecko_id: "squill", + cmcId: null, + category: "Indexes", + chains: ["Ethereum"], + forkedFrom: [], + module: "dummy.js", + twitter: "OpenStableIndex", + dimensions: { + fees: "open-stablecoin-index" + } + }, ]; export default data4; From ce24776c2f2afd6937254b343c42cfe4389a9903 Mon Sep 17 00:00:00 2001 From: tree Date: Mon, 20 Oct 2025 15:48:32 +0530 Subject: [PATCH 345/398] enable gauntlet (#10845) --- defi/src/protocols/data4.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 173412a71a..0462ab5048 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -15649,7 +15649,7 @@ const data4: Protocol[] = [ ], listedAt: 1747734127, dimensions: { - // fees: "gauntlet" # incorrect fees on sol, fix it and re-enable #10843 + fees: "gauntlet" } }, { From 2ba6bc4eda2c6dfac9fa4c74edacccda89c6523f Mon Sep 17 00:00:00 2001 From: Define101 Date: Mon, 20 Oct 2025 13:05:48 +0100 Subject: [PATCH 346/398] SPICE audit link --- defi/src/protocols/data4.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 0462ab5048..6ed4f2eb35 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -16162,6 +16162,7 @@ const data4: Protocol[] = [ module: "spice-protocol/index.js", twitter: "SpiceProtocol", github: ["spice-protocol"], + audit_links: ["https://hashlock.com/wp-content/uploads/2025/08/Spice-Smart-Contract-Audit-Report-Final-Report-v7.pdf"], listedAt: 1747867094, }, { From 4e077a38d8d1d7e217d4b86a41598acea5bea100 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 20 Oct 2025 14:15:15 +0200 Subject: [PATCH 347/398] Unlink all repos & use pnpm (#10842) * unlink dimensions & tvl repo * add scripts to load repos * switch rest to pnpm, remove references to sub modules * ui-tool - deploy custom branch * test * test 2 * bug fix * refactor: streamline Dockerfile by removing unnecessary echo statements * ui-tool: bugfix * trim commands * update lock file * ignore api validation report * api validation: skip beta test if URL is not provided * minor fix --- .github/workflows/coins.yml | 66 +- .github/workflows/defi.yml | 35 +- .gitmodules | 7 - coins/pnpm-lock.yaml | 13508 +++++++++++ coins/tsconfig.json | 1 - defi/.gitignore | 7 +- defi/DefiLlama-Adapters | 1 - defi/README.md | 13 - defi/dimension-adapters | 1 - defi/package.json | 25 +- defi/pnpm-lock.yaml | 13218 +++++++++++ defi/proof-of-reserves/readme.md | 3 - defi/src/adaptors/data/index.ts | 5 +- defi/src/adaptors/data/types.ts | 2 +- .../handlers/storeAdaptorData/index.ts | 10 +- .../scripts/findMissingBlockscoutChains.ts | 2 +- .../scripts/storeAllBlockscoutData.ts | 4 +- defi/src/adaptors/utils.ts | 4 - .../utils/getAllChainsFromAdaptors.ts | 58 +- defi/src/api2/Dockerfile | 14 + defi/src/api2/scripts/build.sh | 5 +- defi/src/api2/scripts/docker_prod_start.sh | 15 +- defi/src/cli/buildRequires.ts | 203 - defi/src/cli/buildRequiresV2.js | 33 + defi/src/cli/getNftSales.ts | 2 +- defi/src/cli/loadDimensionsRepo.sh | 13 + defi/src/cli/loadTvlRepo.sh | 13 + .../deprecated/refillHistoricalActiveUsers.ts | 2 +- defi/src/cli/users/findMissingUsers.ts | 2 +- .../cli/users/findMostUsedChainsForUsers.ts | 2 +- .../findProtocolsMissingHistoricalData.ts | 2 +- defi/src/cli/users/queries/gas.ts | 4 +- defi/src/cli/users/queries/newUsers.ts | 4 +- defi/src/cli/users/queries/txs.ts | 4 +- defi/src/cli/users/queries/users.ts | 4 +- defi/src/cli/users/refilChainTxs.ts | 4 +- defi/src/cli/users/refillChain.ts | 4 +- defi/src/cli/users/refillChainGas.ts | 4 +- defi/src/cli/users/refillChainUsers.ts | 4 +- defi/src/cli/users/refillChainsTxs.ts | 2 +- defi/src/cli/users/refillNewChainUsers.ts | 4 +- defi/src/cli/users/refillNewUsers.ts | 4 +- defi/src/cli/users/refillUsers.ts | 4 +- .../cli/users/single/refillSingleProtocol.ts | 2 +- .../src/dimension_migration/adapters/types.ts | 231 + .../src/dimension_migration/helpers/allium.ts | 105 + defi/src/dimension_migration/helpers/env.ts | 86 + .../helpers/flipsidecrypto.ts | 209 + defi/src/dimension_migration/nfts/chains.ts | 143 + defi/src/dimension_migration/nfts/test.ts | 19 + defi/src/dimension_migration/users/README.md | 9 + defi/src/dimension_migration/users/chains.ts | 125 + .../users/compound-v2/index.ts | 633 + defi/src/dimension_migration/users/list.ts | 9 + .../users/routers/index.ts | 9 + .../users/routers/routerAddresses.ts | 2437 ++ defi/src/dimension_migration/users/test.ts | 29 + .../users/testHistoricalUsers.ts | 88 + .../dimension_migration/users/testNewUsers.ts | 26 + .../users/utils/convertChain.ts | 11 + .../users/utils/countUsers.ts | 154 + .../dimension_migration/users/utils/types.ts | 18 + .../src/dimension_migration/utils/fetchURL.ts | 71 + defi/src/dimension_migration/utils/utils.ts | 7 + defi/src/storeActiveUsers.ts | 4 +- defi/src/storeActiveUsersRetrieve.ts | 7 +- defi/src/storeChainNftVolume.ts | 2 +- defi/src/users/data-adapters.test.ts | 2 +- defi/src/utils/apiValidateUtils.ts | 24 +- defi/src/utils/imports/importAdapter.ts | 21 +- defi/src/utils/validateAPI.ts | 6 + defi/tsconfig.json | 1 - defi/ui-tool/Dockerfile | 13 + defi/ui-tool/buildScript.ts | 5 +- defi/ui-tool/package-lock.json | 19659 ---------------- defi/ui-tool/package.json | 4 +- defi/ui-tool/pnpm-lock.yaml | 13912 +++++++++++ defi/ui-tool/start.sh | 27 +- 78 files changed, 45355 insertions(+), 20075 deletions(-) delete mode 100644 .gitmodules create mode 100644 coins/pnpm-lock.yaml delete mode 160000 defi/DefiLlama-Adapters delete mode 160000 defi/dimension-adapters create mode 100644 defi/pnpm-lock.yaml delete mode 100644 defi/src/cli/buildRequires.ts create mode 100644 defi/src/cli/buildRequiresV2.js create mode 100644 defi/src/cli/loadDimensionsRepo.sh create mode 100644 defi/src/cli/loadTvlRepo.sh create mode 100644 defi/src/dimension_migration/adapters/types.ts create mode 100644 defi/src/dimension_migration/helpers/allium.ts create mode 100644 defi/src/dimension_migration/helpers/env.ts create mode 100644 defi/src/dimension_migration/helpers/flipsidecrypto.ts create mode 100644 defi/src/dimension_migration/nfts/chains.ts create mode 100644 defi/src/dimension_migration/nfts/test.ts create mode 100644 defi/src/dimension_migration/users/README.md create mode 100644 defi/src/dimension_migration/users/chains.ts create mode 100644 defi/src/dimension_migration/users/compound-v2/index.ts create mode 100644 defi/src/dimension_migration/users/list.ts create mode 100644 defi/src/dimension_migration/users/routers/index.ts create mode 100644 defi/src/dimension_migration/users/routers/routerAddresses.ts create mode 100644 defi/src/dimension_migration/users/test.ts create mode 100644 defi/src/dimension_migration/users/testHistoricalUsers.ts create mode 100644 defi/src/dimension_migration/users/testNewUsers.ts create mode 100644 defi/src/dimension_migration/users/utils/convertChain.ts create mode 100644 defi/src/dimension_migration/users/utils/countUsers.ts create mode 100644 defi/src/dimension_migration/users/utils/types.ts create mode 100644 defi/src/dimension_migration/utils/fetchURL.ts create mode 100644 defi/src/dimension_migration/utils/utils.ts delete mode 100644 defi/ui-tool/package-lock.json create mode 100644 defi/ui-tool/pnpm-lock.yaml diff --git a/.github/workflows/coins.yml b/.github/workflows/coins.yml index 483c5d690c..f3fa9e09dd 100644 --- a/.github/workflows/coins.yml +++ b/.github/workflows/coins.yml @@ -26,29 +26,43 @@ jobs: if: ${{ needs.changes.outputs.coins == 'true' }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: Get Node.js - uses: actions/setup-node@v1 - with: - node-version: '16.x' - - run: (npm ci || npm i) && ln -s ../coins/node_modules/ ../defi/node_modules - - name: Deploy infrastructure stack - run: npm run deploy:prod - env: - ETHEREUM_RPC: ${{ secrets.ETHEREUM_RPC }} - POLYGON_RPC: ${{ secrets.POLYGON_RPC }} - BSC_RPC: ${{ secrets.BSC_RPC }} - FANTOM_RPC: ${{ secrets.FANTOM_RPC }} - ARBITRUM_RPC: ${{ secrets.ARBITRUM_RPC }} - OPTIMISM_RPC: ${{ secrets.OPTIMISM_RPC }} - XDAI_RPC: ${{ secrets.XDAI_RPC }} - HARMONY_RPC: ${{ secrets.HARMONY_RPC }} - SOLANA_RPC: ${{ secrets.SOLANA_RPC }} - CG_KEY: ${{ secrets.CG_KEY }} - MISSING_COINS_DB_PWD: ${{ secrets.MISSING_COINS_DB_PWD }} - STALE_COINS_ADAPTERS_WEBHOOK: ${{ secrets.STALE_COINS_ADAPTERS_WEBHOOK }} - R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} - R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} - R2_ENDPOINT: ${{ secrets.R2_ENDPOINT }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: pnpm/action-setup@v4 + name: Install pnpm + with: + version: 10 + run_install: false + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install && ln -s ../coins/node_modules/ ../defi/node_modules + + - name: Deploy infrastructure stack + run: pnpm run deploy:prod + env: + ETHEREUM_RPC: ${{ secrets.ETHEREUM_RPC }} + POLYGON_RPC: ${{ secrets.POLYGON_RPC }} + BSC_RPC: ${{ secrets.BSC_RPC }} + FANTOM_RPC: ${{ secrets.FANTOM_RPC }} + ARBITRUM_RPC: ${{ secrets.ARBITRUM_RPC }} + OPTIMISM_RPC: ${{ secrets.OPTIMISM_RPC }} + XDAI_RPC: ${{ secrets.XDAI_RPC }} + HARMONY_RPC: ${{ secrets.HARMONY_RPC }} + SOLANA_RPC: ${{ secrets.SOLANA_RPC }} + CG_KEY: ${{ secrets.CG_KEY }} + MISSING_COINS_DB_PWD: ${{ secrets.MISSING_COINS_DB_PWD }} + STALE_COINS_ADAPTERS_WEBHOOK: ${{ secrets.STALE_COINS_ADAPTERS_WEBHOOK }} + R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} + R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} + R2_ENDPOINT: ${{ secrets.R2_ENDPOINT }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} diff --git a/.github/workflows/defi.yml b/.github/workflows/defi.yml index 841f5eef4b..8fac743aa3 100644 --- a/.github/workflows/defi.yml +++ b/.github/workflows/defi.yml @@ -28,28 +28,43 @@ jobs: if: ${{ needs.changes.outputs.defi == 'true' }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - run: git submodule update --init --recursive - - name: Get Node.js - uses: actions/setup-node@v1 + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: pnpm/action-setup@v4 + name: Install pnpm with: - node-version: '16' + version: 10 + run_install: false + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + - run: echo "TODAY=$(date +%Y%m%d)" >> $GITHUB_ENV - name: Get jest cache uses: actions/cache@v3 with: path: /tmp/jest-cache key: ${{ runner.os }}-jest-${{ env.TODAY }} - - run: cd DefiLlama-Adapters && git checkout main && git pull - - run: cd dimension-adapters && git checkout master && git pull - - run: npm ci || npm i + + - name: Run tests - run: npm t data # && npx esbuild src/protocols/import.test.ts --bundle --log-limit=0 --platform=node | node + run: pnpm t data # && npx esbuild src/protocols/import.test.ts --bundle --log-limit=0 --platform=node | node env: ETHEREUM_RPC: FAKE_ETHEREUM_RPC GRAPH_API_KEY: FAKE_GRAPH_API_KEY + + - name: Deploy infrastructure stack - run: npm run deploy:prod + run: pnpm run deploy:prod env: ETHEREUM_RPC: ${{ secrets.ETHEREUM_RPC }} POLYGON_RPC: ${{ secrets.POLYGON_RPC }} diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 477f1d46f9..0000000000 --- a/.gitmodules +++ /dev/null @@ -1,7 +0,0 @@ -[submodule "DefiLlama-Adapters"] - path = defi/DefiLlama-Adapters - url = https://github.com/DefiLlama/DefiLlama-Adapters.git - branch = main -[submodule "defi/dimension-adapters"] - path = defi/dimension-adapters - url = https://github.com/DefiLlama/dimension-adapters.git diff --git a/coins/pnpm-lock.yaml b/coins/pnpm-lock.yaml new file mode 100644 index 0000000000..091ee87db4 --- /dev/null +++ b/coins/pnpm-lock.yaml @@ -0,0 +1,13508 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@aws-sdk/client-s3': + specifier: ^3.354.0 + version: 3.913.0 + '@defillama/sdk': + specifier: ^5.0.152 + version: 5.0.175(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@ethersproject/bignumber': + specifier: ^5.5.0 + version: 5.8.0 + '@project-serum/anchor': + specifier: ^0.26.0 + version: 0.26.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@sentry/serverless': + specifier: ^6.19.7 + version: 6.19.7 + '@sentry/tracing': + specifier: ^6.19.7 + version: 6.19.7 + '@solana/web3.js': + specifier: ^1.73.3 + version: 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@supercharge/promise-pool': + specifier: ^2.1.0 + version: 2.4.0 + ajv: + specifier: ^6.12.6 + version: 6.12.6 + axios: + specifier: ^1.6.7 + version: 1.12.2 + crypto-js: + specifier: ^4.2.0 + version: 4.2.0 + dayjs: + specifier: ^1.11.10 + version: 1.11.18 + dotenv: + specifier: ^8.6.0 + version: 8.6.0 + ethers: + specifier: ^6.0.0 + version: 6.15.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + fs: + specifier: ^0.0.1-security + version: 0.0.1-security + graphql: + specifier: ^16.6.0 + version: 16.11.0 + graphql-request: + specifier: ^5.1.0 + version: 5.2.0(graphql@16.11.0) + ioredis: + specifier: ^5.3.2 + version: 5.8.1 + kafkajs: + specifier: ^2.2.4 + version: 2.2.4 + node-fetch: + specifier: ^2.7.0 + version: 2.7.0 + p-limit: + specifier: ^3.1.0 + version: 3.1.0 + path: + specifier: ^0.12.7 + version: 0.12.7 + postgres: + specifier: ^3.4.3 + version: 3.4.7 + simple-git: + specifier: ^3.27.0 + version: 3.28.0 + starknet: + specifier: ^5.24.3 + version: 5.29.0 + devDependencies: + '@babel/preset-env': + specifier: ^7.13.12 + version: 7.28.3(@babel/core@7.28.4) + '@babel/preset-typescript': + specifier: ^7.13.0 + version: 7.27.1(@babel/core@7.28.4) + '@types/aws-lambda': + specifier: ^8.10.72 + version: 8.10.156 + '@types/crypto-js': + specifier: ^4.2.2 + version: 4.2.2 + '@types/jest': + specifier: ^29.0.0 + version: 29.5.14 + '@types/node': + specifier: ^14.14.35 + version: 14.18.63 + '@types/node-fetch': + specifier: ^2.5.10 + version: 2.6.13 + aws-sdk: + specifier: ^2.1692.0 + version: 2.1692.0 + babel-jest: + specifier: ^29.0.0 + version: 29.7.0(@babel/core@7.28.4) + babel-loader: + specifier: ^8.2.2 + version: 8.4.1(@babel/core@7.28.4)(webpack@5.102.1(esbuild@0.14.54)) + esbuild: + specifier: ^0.14.38 + version: 0.14.54 + jest: + specifier: ^29.0.0 + version: 29.7.0(@types/node@14.18.63)(ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3)) + prettier: + specifier: ^2.2.1 + version: 2.8.8 + serverless: + specifier: ^2.31.0 + version: 2.72.4(bufferutil@4.0.9)(inquirer@7.3.3)(utf-8-validate@5.0.10) + serverless-esbuild: + specifier: ^1.26.2 + version: 1.55.1(bufferutil@4.0.9)(esbuild@0.14.54)(utf-8-validate@5.0.10) + serverless-offline: + specifier: ^7.0.0 + version: 7.1.0(bufferutil@4.0.9)(serverless@2.72.4(bufferutil@4.0.9)(inquirer@7.3.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + serverless-plugin-log-retention: + specifier: ^2.0.0 + version: 2.1.0 + serverless-prune-plugin: + specifier: ^1.4.4 + version: 1.6.1(serverless@2.72.4(bufferutil@4.0.9)(inquirer@7.3.3)(utf-8-validate@5.0.10)) + ts-jest: + specifier: ^29.0.0 + version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.14.54)(jest-util@29.7.0)(jest@29.7.0(@types/node@14.18.63)(ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3)))(typescript@5.9.3) + ts-loader: + specifier: ^8.0.18 + version: 8.4.0(typescript@5.9.3)(webpack@5.102.1(esbuild@0.14.54)) + ts-node: + specifier: ^10.0.0 + version: 10.9.2(@types/node@14.18.63)(typescript@5.9.3) + typescript: + specifier: ^5.0.0 + version: 5.9.3 + +packages: + + 2-thenable@1.0.0: + resolution: {integrity: sha512-HqiDzaLDFCXkcCO/SwoyhRwqYtINFHF7t9BDRq4x90TOKNAJpiqUt9X5lQ08bwxYzc067HUywDjGySpebHcUpw==} + + '@adraffy/ens-normalize@1.10.1': + resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + + '@aws-crypto/crc32@5.2.0': + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/crc32c@5.2.0': + resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} + + '@aws-crypto/sha1-browser@5.2.0': + resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} + + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-s3@3.913.0': + resolution: {integrity: sha512-YdWHIXn+TltH1MbMkBrFl8Ocxj/PJXleacQ1U5AZRAt8EqxctYkeTNB/+XYS5x6ieYQ4uWnF7sF74sJx+KTpwg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sso@3.911.0': + resolution: {integrity: sha512-N9QAeMvN3D1ZyKXkQp4aUgC4wUMuA5E1HuVCkajc0bq1pnH4PIke36YlrDGGREqPlyLFrXCkws2gbL5p23vtlg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/core@3.911.0': + resolution: {integrity: sha512-k4QG9A+UCq/qlDJFmjozo6R0eXXfe++/KnCDMmajehIE9kh+b/5DqlGvAmbl9w4e92LOtrY6/DN3mIX1xs4sXw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-env@3.911.0': + resolution: {integrity: sha512-6FWRwWn3LUZzLhqBXB+TPMW2ijCWUqGICSw8bVakEdODrvbiv1RT/MVUayzFwz/ek6e6NKZn6DbSWzx07N9Hjw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-http@3.911.0': + resolution: {integrity: sha512-xUlwKmIUW2fWP/eM3nF5u4CyLtOtyohlhGJ5jdsJokr3MrQ7w0tDITO43C9IhCn+28D5UbaiWnKw5ntkw7aVfA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-ini@3.913.0': + resolution: {integrity: sha512-iR4c4NQ1OSRKQi0SxzpwD+wP1fCy+QNKtEyCajuVlD0pvmoIHdrm5THK9e+2/7/SsQDRhOXHJfLGxHapD74WJw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-node@3.913.0': + resolution: {integrity: sha512-HQPLkKDxS83Q/nZKqg9bq4igWzYQeOMqhpx5LYs4u1GwsKeCsYrrfz12Iu4IHNWPp9EnGLcmdfbfYuqZGrsaSQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-process@3.911.0': + resolution: {integrity: sha512-mKshhV5jRQffZjbK9x7bs+uC2IsYKfpzYaBamFsEov3xtARCpOiKaIlM8gYKFEbHT2M+1R3rYYlhhl9ndVWS2g==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-sso@3.911.0': + resolution: {integrity: sha512-JAxd4uWe0Zc9tk6+N0cVxe9XtJVcOx6Ms0k933ZU9QbuRMH6xti/wnZxp/IvGIWIDzf5fhqiGyw5MSyDeI5b1w==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.911.0': + resolution: {integrity: sha512-urIbXWWG+cm54RwwTFQuRwPH0WPsMFSDF2/H9qO2J2fKoHRURuyblFCyYG3aVKZGvFBhOizJYexf5+5w3CJKBw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-bucket-endpoint@3.910.0': + resolution: {integrity: sha512-8ZfA0WARwvAKQQ7vmoQTg6xFEewFqsQCltQIHd7NtNs3CLF1aU06Ixp0i7Mp68k6dUj9WJJO7mz3I5VFOecqHQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-expect-continue@3.910.0': + resolution: {integrity: sha512-jtnsBlxuRyRbK52WdNSry28Tn4ljIqUfUEzDFYWDTEymEGPpVguQKPudW/6M5BWEDmNsv3ai/X+fXd0GZ1fE/Q==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-flexible-checksums@3.911.0': + resolution: {integrity: sha512-ZeS5zPKRCBMqpO8e0S/isfDWBt8AtG604PopKFFqEowbbV8cf6ms3hddNZRajTHvaoWBlU7Fbcn0827RWJnBdw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-host-header@3.910.0': + resolution: {integrity: sha512-F9Lqeu80/aTM6S/izZ8RtwSmjfhWjIuxX61LX+/9mxJyEkgaECRxv0chsLQsLHJumkGnXRy/eIyMLBhcTPF5vg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-location-constraint@3.913.0': + resolution: {integrity: sha512-iudUrAYV4ZyweYL0hW/VaJzJRjFVruHpK0NukwECs0FZ76Zn17/smbkFIeiaRdGi9cqQdRk9PfhKPvbufnnhPg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-logger@3.910.0': + resolution: {integrity: sha512-3LJyyfs1USvRuRDla1pGlzGRtXJBXD1zC9F+eE9Iz/V5nkmhyv52A017CvKWmYoR0DM9dzjLyPOI0BSSppEaTw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.910.0': + resolution: {integrity: sha512-m/oLz0EoCy+WoIVBnXRXJ4AtGpdl0kPE7U+VH9TsuUzHgxY1Re/176Q1HWLBRVlz4gr++lNsgsMWEC+VnAwMpw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-sdk-s3@3.911.0': + resolution: {integrity: sha512-P0mIIW/QkAGNvFu15Jqa5NSmHeQvZkkQY8nbQpCT3tGObZe4wRsq5u1mOS+CJp4DIBbRZuHeX7ohbX5kPMi4dg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-ssec@3.910.0': + resolution: {integrity: sha512-Ikb0WrIiOeaZo9UmeoVrO4GH2OHiMTKSbr5raTW8nTCArED8iTVZiBF6As+JicZMLSNiBiYSb7EjDihWQ0DrTQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-user-agent@3.911.0': + resolution: {integrity: sha512-rY3LvGvgY/UI0nmt5f4DRzjEh8135A2TeHcva1bgOmVfOI4vkkGfA20sNRqerOkSO6hPbkxJapO50UJHFzmmyA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/nested-clients@3.911.0': + resolution: {integrity: sha512-lp/sXbdX/S0EYaMYPVKga0omjIUbNNdFi9IJITgKZkLC6CzspihIoHd5GIdl4esMJevtTQQfkVncXTFkf/a4YA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/region-config-resolver@3.910.0': + resolution: {integrity: sha512-gzQAkuHI3xyG6toYnH/pju+kc190XmvnB7X84vtN57GjgdQJICt9So/BD0U6h+eSfk9VBnafkVrAzBzWMEFZVw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/signature-v4-multi-region@3.911.0': + resolution: {integrity: sha512-SJ4dUcY9+HPDIMCHiskT8F7JrRVZF2Y1NUN0Yiy6VUHSULgq2MDlIzSQpNICnmXhk1F1E1B2jJG9XtPYrvtqUg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/token-providers@3.911.0': + resolution: {integrity: sha512-O1c5F1pbEImgEe3Vr8j1gpWu69UXWj3nN3vvLGh77hcrG5dZ8I27tSP5RN4Labm8Dnji/6ia+vqSYpN8w6KN5A==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/types@3.910.0': + resolution: {integrity: sha512-o67gL3vjf4nhfmuSUNNkit0d62QJEwwHLxucwVJkR/rw9mfUtAWsgBs8Tp16cdUbMgsyQtCQilL8RAJDoGtadQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-arn-parser@3.893.0': + resolution: {integrity: sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-endpoints@3.910.0': + resolution: {integrity: sha512-6XgdNe42ibP8zCQgNGDWoOF53RfEKzpU/S7Z29FTTJ7hcZv0SytC0ZNQQZSx4rfBl036YWYwJRoJMlT4AA7q9A==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-locate-window@3.893.0': + resolution: {integrity: sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-user-agent-browser@3.910.0': + resolution: {integrity: sha512-iOdrRdLZHrlINk9pezNZ82P/VxO/UmtmpaOAObUN+xplCUJu31WNM2EE/HccC8PQw6XlAudpdA6HDTGiW6yVGg==} + + '@aws-sdk/util-user-agent-node@3.911.0': + resolution: {integrity: sha512-3l+f6ooLF6Z6Lz0zGi7vSKSUYn/EePPizv88eZQpEAFunBHv+CSVNPtxhxHfkm7X9tTsV4QGZRIqo3taMLolmA==} + engines: {node: '>=18.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/xml-builder@3.911.0': + resolution: {integrity: sha512-/yh3oe26bZfCVGrIMRM9Z4hvvGJD+qx5tOLlydOkuBkm72aXON7D9+MucjJXTAcI8tF2Yq+JHa0478eHQOhnLg==} + engines: {node: '>=18.0.0'} + + '@aws/lambda-invoke-store@0.0.1': + resolution: {integrity: sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw==} + engines: {node: '>=18.0.0'} + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.28.4': + resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.28.4': + resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.28.3': + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.28.3': + resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.27.1': + resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.5': + resolution: {integrity: sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.27.1': + resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.27.1': + resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.27.1': + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.28.3': + resolution: {integrity: sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': + resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': + resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': + resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': + resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3': + resolution: {integrity: sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.27.1': + resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.27.1': + resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.27.1': + resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.27.1': + resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.28.0': + resolution: {integrity: sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.27.1': + resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.27.1': + resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.28.4': + resolution: {integrity: sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.27.1': + resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.28.3': + resolution: {integrity: sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.28.4': + resolution: {integrity: sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.27.1': + resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.28.0': + resolution: {integrity: sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.27.1': + resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.27.1': + resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.27.1': + resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-explicit-resource-management@7.28.0': + resolution: {integrity: sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.27.1': + resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.27.1': + resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.27.1': + resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.27.1': + resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.27.1': + resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.27.1': + resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.27.1': + resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.27.1': + resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.27.1': + resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.27.1': + resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.27.1': + resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.27.1': + resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.27.1': + resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1': + resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.27.1': + resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.28.4': + resolution: {integrity: sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.27.1': + resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.27.1': + resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.27.1': + resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.27.7': + resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.27.1': + resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.27.1': + resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.27.1': + resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.28.4': + resolution: {integrity: sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.27.1': + resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.27.1': + resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.27.1': + resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.27.1': + resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.27.1': + resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.27.1': + resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.27.1': + resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.28.0': + resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.27.1': + resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.27.1': + resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.27.1': + resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.27.1': + resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.28.3': + resolution: {integrity: sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/preset-typescript@7.27.1': + resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.28.4': + resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} + + '@coral-xyz/borsh@0.26.0': + resolution: {integrity: sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@defillama/sdk@5.0.175': + resolution: {integrity: sha512-o6ZiDxEi7ev9C74c8FgSPqc1f+EGi/H+HMz5FJRlTCAeBOiLkMo6N9NfY6Xwhs+nrBqN7PyFR8hXD3tgXQprTQ==} + + '@effect/platform-node-shared@0.15.5': + resolution: {integrity: sha512-PXFdIHMNzv19+aaKBo99KVsqJ65il8j7ejze/srkzOkNu4WK/GGpQuYF32NZLirFgXJe/4aYMRgwD+uJ4mCyuw==} + peerDependencies: + '@effect/platform': ^0.65.5 + effect: ^3.8.3 + + '@effect/platform-node@0.60.5': + resolution: {integrity: sha512-//VG5MSdqzV2WzuzYal5Q9d/U/g0gnSbZms7LIEWZKIuybth4n1dQzQs+4V3C0OZVPm5N+8Kd8alrbJiRTNVJw==} + peerDependencies: + '@effect/platform': ^0.65.5 + effect: ^3.8.3 + + '@effect/platform@0.65.5': + resolution: {integrity: sha512-FAORK6KoMQbd2VyLq/BMwcViy1txYd7XD9eYd5IGrXFpoOgWrSjp4zaSDlFPIEGgm68+n8fN0RelkbuMHCkSsg==} + peerDependencies: + '@effect/schema': ^0.73.4 + effect: ^3.8.3 + + '@effect/schema@0.73.4': + resolution: {integrity: sha512-Vjgu+EuG6eyh3oB21jpHv0l9ZgGZCyVZf3lXs+2X18UEUOkppvpw11heHiK02iJCVchgp3Qjw/GDPUqhQvKpSg==} + deprecated: this package has been merged into the main effect package + peerDependencies: + effect: ^3.8.3 + + '@elastic/elasticsearch@8.19.1': + resolution: {integrity: sha512-+1j9NnQVOX+lbWB8LhCM7IkUmjU05Y4+BmSLfusq0msCsQb1Va+OUKFCoOXjCJqQrcgdRdQCjYYyolQ/npQALQ==} + engines: {node: '>=18'} + + '@elastic/transport@8.10.0': + resolution: {integrity: sha512-Xd62ZtgdrJuaunTLk0LqYtkUtJ3D2/NQ4QyLWPYj0c2h97SNUaNkrQH9lzb6r2P0Bdjx/HwKtW3X8kO5LJ7qEQ==} + engines: {node: '>=18'} + + '@esbuild/linux-loong64@0.14.54': + resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@ethersproject/bignumber@5.8.0': + resolution: {integrity: sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==} + + '@ethersproject/bytes@5.8.0': + resolution: {integrity: sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==} + + '@ethersproject/logger@5.8.0': + resolution: {integrity: sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==} + + '@graphql-typed-document-node/core@3.2.0': + resolution: {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 + + '@hapi/accept@3.2.4': + resolution: {integrity: sha512-soThGB+QMgfxlh0Vzhzlf3ZOEOPk5biEwcOXhkF0Eedqx8VnhGiggL9UYHrIsOb1rUg3Be3K8kp0iDL2wbVSOQ==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/address@2.1.4': + resolution: {integrity: sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==} + deprecated: Moved to 'npm install @sideway/address' + + '@hapi/ammo@3.1.2': + resolution: {integrity: sha512-ej9OtFmiZv1qr45g1bxEZNGyaR4jRpyMxU6VhbxjaYThymvOwsyIsUKMZnP5Qw2tfYFuwqCJuIBHGpeIbdX9gQ==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/b64@4.2.1': + resolution: {integrity: sha512-zqHpQuH5CBMw6hADzKfU/IGNrxq1Q+/wTYV+OiZRQN9F3tMyk+9BUMeBvFRMamduuqL8iSp62QAnJ+7ATiYLWA==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/boom@7.4.11': + resolution: {integrity: sha512-VSU/Cnj1DXouukYxxkes4nNJonCnlogHvIff1v1RVoN4xzkKhMXX+GRmb3NyH1iar10I9WFPDv2JPwfH3GaV0A==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/bounce@1.3.2': + resolution: {integrity: sha512-3bnb1AlcEByFZnpDIidxQyw1Gds81z/1rSqlx4bIEE+wUN0ATj0D49B5cE1wGocy90Rp/de4tv7GjsKd5RQeew==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/bourne@1.3.2': + resolution: {integrity: sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/call@5.1.3': + resolution: {integrity: sha512-5DfWpMk7qZiYhvBhM5oUiT4GQ/O8a2rFR121/PdwA/eZ2C1EsuD547ZggMKAR5bZ+FtxOf0fdM20zzcXzq2mZA==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/catbox-memory@4.1.1': + resolution: {integrity: sha512-T6Hdy8DExzG0jY7C8yYWZB4XHfc0v+p1EGkwxl2HoaPYAmW7I3E59M/IvmSVpis8RPcIoBp41ZpO2aZPBpM2Ww==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/catbox@10.2.3': + resolution: {integrity: sha512-kN9hXO4NYyOHW09CXiuj5qW1syc/0XeVOBsNNk0Tz89wWNQE5h21WF+VsfAw3uFR8swn/Wj3YEVBnWqo82m/JQ==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/content@4.1.1': + resolution: {integrity: sha512-3TWvmwpVPxFSF3KBjKZ8yDqIKKZZIm7VurDSweYpXYENZrJH3C1hd1+qEQW9wQaUaI76pPBLGrXl6I3B7i3ipA==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/cryptiles@4.2.1': + resolution: {integrity: sha512-XoqgKsHK0l/VpqPs+tr6j6vE+VQ3+2bkF2stvttmc7xAOf1oSAwHcJ0tlp/6MxMysktt1IEY0Csy3khKaP9/uQ==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/file@1.0.0': + resolution: {integrity: sha512-Bsfp/+1Gyf70eGtnIgmScvrH8sSypO3TcK3Zf0QdHnzn/ACnAkI6KLtGACmNRPEzzIy+W7aJX5E+1fc9GwIABQ==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/formula@1.2.0': + resolution: {integrity: sha512-UFbtbGPjstz0eWHb+ga/GM3Z9EzqKXFWIbSOFURU0A/Gku0Bky4bCk9/h//K2Xr3IrCfjFNhMm4jyZ5dbCewGA==} + deprecated: Moved to 'npm install @sideway/formula' + + '@hapi/h2o2@8.3.2': + resolution: {integrity: sha512-2WkZq+QAkvYHWGqnUuG0stcVeGyv9T7bopBYnCJSUEuvBZlUf2BTX2JCVSKxsnTLOxCYwoC/aI4Rr0ZSRd2oVg==} + + '@hapi/hapi@18.4.1': + resolution: {integrity: sha512-9HjVGa0Z4Qv9jk9AVoUdJMQLA+KuZ+liKWyEEkVBx3e3H1F0JM6aGbPkY9jRfwsITBWGBU2iXazn65SFKSi/tg==} + deprecated: This version contains severe security issues and defects and should not be used! Please upgrade to the latest version of @hapi/hapi or consider a commercial license (https://github.com/hapijs/hapi/issues/4114) + + '@hapi/heavy@6.2.2': + resolution: {integrity: sha512-PY1dCCO6dsze7RlafIRhTaGeyTgVe49A/lSkxbhKGjQ7x46o/OFf7hLiRqTCDh3atcEKf6362EaB3+kTUbCsVA==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/hoek@8.5.1': + resolution: {integrity: sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/iron@5.1.4': + resolution: {integrity: sha512-+ElC+OCiwWLjlJBmm8ZEWjlfzTMQTdgPnU/TsoU5QsktspIWmWi9IU4kU83nH+X/SSya8TP8h8P11Wr5L7dkQQ==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/joi@15.1.1': + resolution: {integrity: sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==} + deprecated: Switch to 'npm install joi' + + '@hapi/joi@16.1.8': + resolution: {integrity: sha512-wAsVvTPe+FwSrsAurNt5vkg3zo+TblvC5Bb1zMVK6SJzZqw9UrJnexxR+76cpePmtUZKHAPxcQ2Bf7oVHyahhg==} + deprecated: Switch to 'npm install joi' + + '@hapi/mimos@4.1.1': + resolution: {integrity: sha512-CXoi/zfcTWfKYX756eEea8rXJRIb9sR4d7VwyAH9d3BkDyNgAesZxvqIdm55npQc6S9mU3FExinMAQVlIkz0eA==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/nigel@3.1.1': + resolution: {integrity: sha512-R9YWx4S8yu0gcCBrMUDCiEFm1SQT895dMlYoeNBp8I6YhF1BFF1iYPueKA2Kkp9BvyHdjmvrxCOns7GMmpl+Fw==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/pez@4.1.2': + resolution: {integrity: sha512-8zSdJ8cZrJLFldTgwjU9Fb1JebID+aBCrCsycgqKYe0OZtM2r3Yv3aAwW5z97VsZWCROC1Vx6Mdn4rujh5Ktcg==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/pinpoint@1.0.2': + resolution: {integrity: sha512-dtXC/WkZBfC5vxscazuiJ6iq4j9oNx1SHknmIr8hofarpKUZKmlUVYVIhNVzIEgK5Wrc4GMHL5lZtt1uS2flmQ==} + deprecated: Moved to 'npm install @sideway/pinpoint' + + '@hapi/podium@3.4.3': + resolution: {integrity: sha512-QJlnYLEYZWlKQ9fSOtuUcpANyoVGwT68GA9P0iQQCAetBK0fI+nbRBt58+aMixoifczWZUthuGkNjqKxgPh/CQ==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/shot@4.1.2': + resolution: {integrity: sha512-6LeHLjvsq/bQ0R+fhEyr7mqExRGguNTrxFZf5DyKe3CK6pNabiGgYO4JVFaRrLZ3JyuhkS0fo8iiRE2Ql2oA/A==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/somever@2.1.1': + resolution: {integrity: sha512-cic5Sto4KGd9B0oQSdKTokju+rYhCbdpzbMb0EBnrH5Oc1z048hY8PaZ1lx2vBD7I/XIfTQVQetBH57fU51XRA==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/statehood@6.1.2': + resolution: {integrity: sha512-pYXw1x6npz/UfmtcpUhuMvdK5kuOGTKcJNfLqdNptzietK2UZH5RzNJSlv5bDHeSmordFM3kGItcuQWX2lj2nQ==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/subtext@6.1.3': + resolution: {integrity: sha512-qWN6NbiHNzohVcJMeAlpku/vzbyH4zIpnnMPMPioQMwIxbPFKeNViDCNI6fVBbMPBiw/xB4FjqiJkRG5P9eWWg==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/teamwork@3.3.1': + resolution: {integrity: sha512-61tiqWCYvMKP7fCTXy0M4VE6uNIwA0qvgFoiDubgfj7uqJ0fdHJFQNnVPGrxhLWlwz0uBPWrQlBH7r8y9vFITQ==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/topo@3.1.6': + resolution: {integrity: sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/vise@3.1.1': + resolution: {integrity: sha512-OXarbiCSadvtg+bSdVPqu31Z1JoBL+FwNYz3cYoBKQ5xq1/Cr4A3IkGpAZbAuxU5y4NL5pZFZG3d2a3ZGm/dOQ==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@hapi/wreck@15.1.0': + resolution: {integrity: sha512-tQczYRTTeYBmvhsek/D49En/5khcShaBEmzrAaDjMrFXKJRuF8xA8+tlq1ETLBFwGd6Do6g2OC74rt11kzawzg==} + deprecated: This version has been deprecated and is no longer supported or maintained + + '@ioredis/commands@1.4.0': + resolution: {integrity: sha512-aFT2yemJJo+TZCmieA7qnYGQooOS7QfNmYrzGtsYd3g9j5iDP8AimYYAesf79ohjbLG12XxC4nG5DyEnC88AsQ==} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@kwsites/file-exists@1.1.1': + resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} + + '@kwsites/promise-deferred@1.1.1': + resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} + + '@noble/curves@1.2.0': + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + + '@noble/curves@1.3.0': + resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} + + '@noble/curves@1.9.7': + resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.3.2': + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + + '@noble/hashes@1.3.3': + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/core@2.1.0': + resolution: {integrity: sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.37.0': + resolution: {integrity: sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==} + engines: {node: '>=14'} + + '@paralleldrive/cuid2@2.2.2': + resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} + + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + engines: {node: '>= 10.0.0'} + + '@project-serum/anchor@0.26.0': + resolution: {integrity: sha512-Nq+COIjE1135T7qfnOHEn7E0q39bQTgXLFk837/rgFe6Hkew9WML7eHsS+lSYD2p3OJaTiUOHTAq1lHy36oIqQ==} + engines: {node: '>=11'} + + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + + '@rometools/cli-darwin-arm64@12.1.3': + resolution: {integrity: sha512-AmFTUDYjBuEGQp/Wwps+2cqUr+qhR7gyXAUnkL5psCuNCz3807TrUq/ecOoct5MIavGJTH6R4aaSL6+f+VlBEg==} + cpu: [arm64] + os: [darwin] + + '@rometools/cli-darwin-x64@12.1.3': + resolution: {integrity: sha512-k8MbWna8q4LRlb005N2X+JS1UQ+s3ZLBBvwk4fP8TBxlAJXUz17jLLu/Fi+7DTTEmMhM84TWj4FDKW+rNar28g==} + cpu: [x64] + os: [darwin] + + '@rometools/cli-linux-arm64@12.1.3': + resolution: {integrity: sha512-X/uLhJ2/FNA3nu5TiyeNPqiD3OZoFfNfRvw6a3ut0jEREPvEn72NI7WPijH/gxSz55znfQ7UQ6iM4DZumUknJg==} + cpu: [arm64] + os: [linux] + + '@rometools/cli-linux-x64@12.1.3': + resolution: {integrity: sha512-csP17q1eWiUXx9z6Jr/JJPibkplyKIwiWPYNzvPCGE8pHlKhwZj3YHRuu7Dm/4EOqx0XFIuqqWZUYm9bkIC8xg==} + cpu: [x64] + os: [linux] + + '@rometools/cli-win32-arm64@12.1.3': + resolution: {integrity: sha512-RymHWeod57EBOJY4P636CgUwYA6BQdkQjh56XKk4pLEHO6X1bFyMet2XL7KlHw5qOTalzuzf5jJqUs+vf3jdXQ==} + cpu: [arm64] + os: [win32] + + '@rometools/cli-win32-x64@12.1.3': + resolution: {integrity: sha512-yHSKYidqJMV9nADqg78GYA+cZ0hS1twANAjiFibQdXj9aGzD+s/IzIFEIi/U/OBLvWYg/SCw0QVozi2vTlKFDQ==} + cpu: [x64] + os: [win32] + + '@scure/base@1.1.9': + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} + + '@scure/starknet@1.0.0': + resolution: {integrity: sha512-o5J57zY0f+2IL/mq8+AYJJ4Xpc1fOtDhr+mFQKbHnYFmm3WQrC+8zj2HEgxak1a+x86mhmBC1Kq305KUpVf0wg==} + + '@sentry/core@6.19.7': + resolution: {integrity: sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw==} + engines: {node: '>=6'} + + '@sentry/hub@6.19.7': + resolution: {integrity: sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==} + engines: {node: '>=6'} + + '@sentry/minimal@6.19.7': + resolution: {integrity: sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==} + engines: {node: '>=6'} + + '@sentry/node@6.19.7': + resolution: {integrity: sha512-gtmRC4dAXKODMpHXKfrkfvyBL3cI8y64vEi3fDD046uqYcrWdgoQsffuBbxMAizc6Ez1ia+f0Flue6p15Qaltg==} + engines: {node: '>=6'} + + '@sentry/serverless@6.19.7': + resolution: {integrity: sha512-uGOfoh3DH+fvUu7LhMLlnd4sAPdBfzFnfQNHnfw8jF/6tC53wdEDH/bBS9d+g8OC37ixJ+jrZIV1lHF5ann37w==} + engines: {node: '>=10'} + + '@sentry/tracing@6.19.7': + resolution: {integrity: sha512-ol4TupNnv9Zd+bZei7B6Ygnr9N3Gp1PUrNI761QSlHtPC25xXC5ssSD3GMhBgyQrcvpuRcCFHVNNM97tN5cZiA==} + engines: {node: '>=6'} + + '@sentry/types@6.19.7': + resolution: {integrity: sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==} + engines: {node: '>=6'} + + '@sentry/utils@6.19.7': + resolution: {integrity: sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==} + engines: {node: '>=6'} + + '@serverless/cli@1.6.0': + resolution: {integrity: sha512-1Muw/KhS4sZ6+ZrXBdmVY9zAwZh03lF7v1DKtaZ0cmxjqQBwPLoO40rOGXlxR97pyufe2NS6rD/p+ri8NGqeXg==} + hasBin: true + + '@serverless/component-metrics@1.0.8': + resolution: {integrity: sha512-lOUyRopNTKJYVEU9T6stp2irwlTDsYMmUKBOUjnMcwGveuUfIJqrCOtFLtIPPj3XJlbZy5F68l4KP9rZ8Ipang==} + + '@serverless/components@3.18.2': + resolution: {integrity: sha512-jQSgd3unajU94R6vjzD0l+PS5lVcky0vrE1DOfb28VPgmaS48+I/niavWR7+SOt0mYjIkUlwBI73a2ZuqeYK6Q==} + engines: {node: '>=10.0'} + hasBin: true + + '@serverless/core@1.1.2': + resolution: {integrity: sha512-PY7gH+7aQ+MltcUD7SRDuQODJ9Sav9HhFJsgOiyf8IVo7XVD6FxZIsSnpMI6paSkptOB7n+0Jz03gNlEkKetQQ==} + + '@serverless/dashboard-plugin@5.5.4': + resolution: {integrity: sha512-qqZnT/RXhBcWXwYnpF+GMeNvSUi6mnyIqsAHj8+f7jJ7N9qa5Qrb14+dUh78sdgRBG5Peub3m3Mlx1n5V9yHDw==} + engines: {node: '>=10.0'} + + '@serverless/event-mocks@1.1.1': + resolution: {integrity: sha512-YAV5V/y+XIOfd+HEVeXfPWZb8C6QLruFk9tBivoX2roQLWVq145s4uxf8D0QioCueuRzkukHUS4JIj+KVoS34A==} + + '@serverless/platform-client-china@2.4.2': + resolution: {integrity: sha512-HFF3vN2Cli2z2A1E1Tp76lFe8lFcHiPuobe5CLxK7VxtwVY3xj7h4hmgsxavmJESw9cJ83u6r5tpY2TYaLbnVA==} + engines: {node: '>=10.0'} + + '@serverless/platform-client@4.5.1': + resolution: {integrity: sha512-XltmO/029X76zi0LUFmhsnanhE2wnqH1xf+WBt5K8gumQA9LnrfwLgPxj+VA+mm6wQhy+PCp7H5SS0ZPu7F2Cw==} + engines: {node: '>=10.0'} + + '@serverless/template@1.1.4': + resolution: {integrity: sha512-LYC+RmSD4ozStdCxSHInpVWP8h+0sSa0lmPGjAb1Fw4Ppk+LCJqJTrohbhHmF2ixgaIBu6ceNtVTB4qM+2NvIA==} + + '@serverless/utils-china@1.1.7': + resolution: {integrity: sha512-HDN0pjnjuwV8QTjqLvqk4wzAV3NitvistM5nF8Wa6knKJZZ68bxWm2h+BoYlBvW4xVJOaq1GyyF9Z7Qj1Q7qwQ==} + deprecated: This package is no longer maintained. If you're a user of the Serverless Framework, please upgrade to the latest v3+ version + + '@serverless/utils@1.2.0': + resolution: {integrity: sha512-aI/cpGVUhWbJUR8QDMtPue28EU4ViG/L4/XKuZDfAN2uNQv3NRjwEFIBi/cxyfQnMTYVtMLe9wDjuwzOT4ENzA==} + engines: {node: '>=6.0'} + + '@serverless/utils@4.1.0': + resolution: {integrity: sha512-cl5uPaGg72z0sCUpF0zsOhwYYUV72Gxc1FwFfxltO8hSvMeFDvwD7JrNE4kHcIcKRjwPGbSH0fdVPUpErZ8Mog==} + engines: {node: '>=10.0'} + + '@serverless/utils@5.20.3': + resolution: {integrity: sha512-MG3DQJdto+LaeVY9gh/z0xloAfT0h1Y3Pa4/yYcKe8Dy5HYtSujuav0MvTOH18+s2outjKKJDxTh6tZuyNqFDQ==} + engines: {node: '>=10.0'} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sindresorhus/is@0.14.0': + resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} + engines: {node: '>=6'} + + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@smithy/abort-controller@4.2.3': + resolution: {integrity: sha512-xWL9Mf8b7tIFuAlpjKtRPnHrR8XVrwTj5NPYO/QwZPtc0SDLsPxb56V5tzi5yspSMytISHybifez+4jlrx0vkQ==} + engines: {node: '>=18.0.0'} + + '@smithy/chunked-blob-reader-native@4.2.1': + resolution: {integrity: sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==} + engines: {node: '>=18.0.0'} + + '@smithy/chunked-blob-reader@5.2.0': + resolution: {integrity: sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==} + engines: {node: '>=18.0.0'} + + '@smithy/config-resolver@4.3.3': + resolution: {integrity: sha512-xSql8A1Bl41O9JvGU/CtgiLBlwkvpHTSKRlvz9zOBvBCPjXghZ6ZkcVzmV2f7FLAA+80+aqKmIOmy8pEDrtCaw==} + engines: {node: '>=18.0.0'} + + '@smithy/core@3.17.0': + resolution: {integrity: sha512-Tir3DbfoTO97fEGUZjzGeoXgcQAUBRDTmuH9A8lxuP8ATrgezrAJ6cLuRvwdKN4ZbYNlHgKlBX69Hyu3THYhtg==} + engines: {node: '>=18.0.0'} + + '@smithy/credential-provider-imds@4.2.3': + resolution: {integrity: sha512-hA1MQ/WAHly4SYltJKitEsIDVsNmXcQfYBRv2e+q04fnqtAX5qXaybxy/fhUeAMCnQIdAjaGDb04fMHQefWRhw==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-codec@4.2.3': + resolution: {integrity: sha512-rcr0VH0uNoMrtgKuY7sMfyKqbHc4GQaQ6Yp4vwgm+Z6psPuOgL+i/Eo/QWdXRmMinL3EgFM0Z1vkfyPyfzLmjw==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-browser@4.2.3': + resolution: {integrity: sha512-EcS0kydOr2qJ3vV45y7nWnTlrPmVIMbUFOZbMG80+e2+xePQISX9DrcbRpVRFTS5Nqz3FiEbDcTCAV0or7bqdw==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-config-resolver@4.3.3': + resolution: {integrity: sha512-GewKGZ6lIJ9APjHFqR2cUW+Efp98xLu1KmN0jOWxQ1TN/gx3HTUPVbLciFD8CfScBj2IiKifqh9vYFRRXrYqXA==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-node@4.2.3': + resolution: {integrity: sha512-uQobOTQq2FapuSOlmGLUeGTpvcBLE5Fc7XjERUSk4dxEi4AhTwuyHYZNAvL4EMUp7lzxxkKDFaJ1GY0ovrj0Kg==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-universal@4.2.3': + resolution: {integrity: sha512-QIvH/CKOk1BZPz/iwfgbh1SQD5Y0lpaw2kLA8zpLRRtYMPXeYUEWh+moTaJyqDaKlbrB174kB7FSRFiZ735tWw==} + engines: {node: '>=18.0.0'} + + '@smithy/fetch-http-handler@5.3.4': + resolution: {integrity: sha512-bwigPylvivpRLCm+YK9I5wRIYjFESSVwl8JQ1vVx/XhCw0PtCi558NwTnT2DaVCl5pYlImGuQTSwMsZ+pIavRw==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-blob-browser@4.2.4': + resolution: {integrity: sha512-W7eIxD+rTNsLB/2ynjmbdeP7TgxRXprfvqQxKFEfy9HW2HeD7t+g+KCIrY0pIn/GFjA6/fIpH+JQnfg5TTk76Q==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-node@4.2.3': + resolution: {integrity: sha512-6+NOdZDbfuU6s1ISp3UOk5Rg953RJ2aBLNLLBEcamLjHAg1Po9Ha7QIB5ZWhdRUVuOUrT8BVFR+O2KIPmw027g==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-stream-node@4.2.3': + resolution: {integrity: sha512-EXMSa2yiStVII3x/+BIynyOAZlS7dGvI7RFrzXa/XssBgck/7TXJIvnjnCu328GY/VwHDC4VeDyP1S4rqwpYag==} + engines: {node: '>=18.0.0'} + + '@smithy/invalid-dependency@4.2.3': + resolution: {integrity: sha512-Cc9W5DwDuebXEDMpOpl4iERo8I0KFjTnomK2RMdhhR87GwrSmUmwMxS4P5JdRf+LsjOdIqumcerwRgYMr/tZ9Q==} + engines: {node: '>=18.0.0'} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/is-array-buffer@4.2.0': + resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} + engines: {node: '>=18.0.0'} + + '@smithy/md5-js@4.2.3': + resolution: {integrity: sha512-5+4bUEJQi/NRgzdA5SVXvAwyvEnD0ZAiKzV3yLO6dN5BG8ScKBweZ8mxXXUtdxq+Dx5k6EshKk0XJ7vgvIPSnA==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-content-length@4.2.3': + resolution: {integrity: sha512-/atXLsT88GwKtfp5Jr0Ks1CSa4+lB+IgRnkNrrYP0h1wL4swHNb0YONEvTceNKNdZGJsye+W2HH8W7olbcPUeA==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-endpoint@4.3.4': + resolution: {integrity: sha512-/RJhpYkMOaUZoJEkddamGPPIYeKICKXOu/ojhn85dKDM0n5iDIhjvYAQLP3K5FPhgB203O3GpWzoK2OehEoIUw==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-retry@4.4.4': + resolution: {integrity: sha512-vSgABQAkuUHRO03AhR2rWxVQ1un284lkBn+NFawzdahmzksAoOeVMnXXsuPViL4GlhRHXqFaMlc8Mj04OfQk1w==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-serde@4.2.3': + resolution: {integrity: sha512-8g4NuUINpYccxiCXM5s1/V+uLtts8NcX4+sPEbvYQDZk4XoJfDpq5y2FQxfmUL89syoldpzNzA0R9nhzdtdKnQ==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-stack@4.2.3': + resolution: {integrity: sha512-iGuOJkH71faPNgOj/gWuEGS6xvQashpLwWB1HjHq1lNNiVfbiJLpZVbhddPuDbx9l4Cgl0vPLq5ltRfSaHfspA==} + engines: {node: '>=18.0.0'} + + '@smithy/node-config-provider@4.3.3': + resolution: {integrity: sha512-NzI1eBpBSViOav8NVy1fqOlSfkLgkUjUTlohUSgAEhHaFWA3XJiLditvavIP7OpvTjDp5u2LhtlBhkBlEisMwA==} + engines: {node: '>=18.0.0'} + + '@smithy/node-http-handler@4.4.2': + resolution: {integrity: sha512-MHFvTjts24cjGo1byXqhXrbqm7uznFD/ESFx8npHMWTFQVdBZjrT1hKottmp69LBTRm/JQzP/sn1vPt0/r6AYQ==} + engines: {node: '>=18.0.0'} + + '@smithy/property-provider@4.2.3': + resolution: {integrity: sha512-+1EZ+Y+njiefCohjlhyOcy1UNYjT+1PwGFHCxA/gYctjg3DQWAU19WigOXAco/Ql8hZokNehpzLd0/+3uCreqQ==} + engines: {node: '>=18.0.0'} + + '@smithy/protocol-http@5.3.3': + resolution: {integrity: sha512-Mn7f/1aN2/jecywDcRDvWWWJF4uwg/A0XjFMJtj72DsgHTByfjRltSqcT9NyE9RTdBSN6X1RSXrhn/YWQl8xlw==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-builder@4.2.3': + resolution: {integrity: sha512-LOVCGCmwMahYUM/P0YnU/AlDQFjcu+gWbFJooC417QRB/lDJlWSn8qmPSDp+s4YVAHOgtgbNG4sR+SxF/VOcJQ==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-parser@4.2.3': + resolution: {integrity: sha512-cYlSNHcTAX/wc1rpblli3aUlLMGgKZ/Oqn8hhjFASXMCXjIqeuQBei0cnq2JR8t4RtU9FpG6uyl6PxyArTiwKA==} + engines: {node: '>=18.0.0'} + + '@smithy/service-error-classification@4.2.3': + resolution: {integrity: sha512-NkxsAxFWwsPsQiwFG2MzJ/T7uIR6AQNh1SzcxSUnmmIqIQMlLRQDKhc17M7IYjiuBXhrQRjQTo3CxX+DobS93g==} + engines: {node: '>=18.0.0'} + + '@smithy/shared-ini-file-loader@4.3.3': + resolution: {integrity: sha512-9f9Ixej0hFhroOK2TxZfUUDR13WVa8tQzhSzPDgXe5jGL3KmaM9s8XN7RQwqtEypI82q9KHnKS71CJ+q/1xLtQ==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.3.3': + resolution: {integrity: sha512-CmSlUy+eEYbIEYN5N3vvQTRfqt0lJlQkaQUIf+oizu7BbDut0pozfDjBGecfcfWf7c62Yis4JIEgqQ/TCfodaA==} + engines: {node: '>=18.0.0'} + + '@smithy/smithy-client@4.9.0': + resolution: {integrity: sha512-qz7RTd15GGdwJ3ZCeBKLDQuUQ88m+skh2hJwcpPm1VqLeKzgZvXf6SrNbxvx7uOqvvkjCMXqx3YB5PDJyk00ww==} + engines: {node: '>=18.0.0'} + + '@smithy/types@4.8.0': + resolution: {integrity: sha512-QpELEHLO8SsQVtqP+MkEgCYTFW0pleGozfs3cZ183ZBj9z3VC1CX1/wtFMK64p+5bhtZo41SeLK1rBRtd25nHQ==} + engines: {node: '>=18.0.0'} + + '@smithy/url-parser@4.2.3': + resolution: {integrity: sha512-I066AigYvY3d9VlU3zG9XzZg1yT10aNqvCaBTw9EPgu5GrsEl1aUkcMvhkIXascYH1A8W0LQo3B1Kr1cJNcQEw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-base64@4.3.0': + resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-browser@4.2.0': + resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-node@4.2.1': + resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@4.2.0': + resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==} + engines: {node: '>=18.0.0'} + + '@smithy/util-config-provider@4.2.0': + resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-browser@4.3.3': + resolution: {integrity: sha512-vqHoybAuZXbFXZqgzquiUXtdY+UT/aU33sxa4GBPkiYklmR20LlCn+d3Wc3yA5ZM13gQ92SZe/D8xh6hkjx+IQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-node@4.2.4': + resolution: {integrity: sha512-X5/xrPHedifo7hJUUWKlpxVb2oDOiqPUXlvsZv1EZSjILoutLiJyWva3coBpn00e/gPSpH8Rn2eIbgdwHQdW7Q==} + engines: {node: '>=18.0.0'} + + '@smithy/util-endpoints@3.2.3': + resolution: {integrity: sha512-aCfxUOVv0CzBIkU10TubdgKSx5uRvzH064kaiPEWfNIvKOtNpu642P4FP1hgOFkjQIkDObrfIDnKMKkeyrejvQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-hex-encoding@4.2.0': + resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-middleware@4.2.3': + resolution: {integrity: sha512-v5ObKlSe8PWUHCqEiX2fy1gNv6goiw6E5I/PN2aXg3Fb/hse0xeaAnSpXDiWl7x6LamVKq7senB+m5LOYHUAHw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-retry@4.2.3': + resolution: {integrity: sha512-lLPWnakjC0q9z+OtiXk+9RPQiYPNAovt2IXD3CP4LkOnd9NpUsxOjMx1SnoUVB7Orb7fZp67cQMtTBKMFDvOGg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-stream@4.5.3': + resolution: {integrity: sha512-oZvn8a5bwwQBNYHT2eNo0EU8Kkby3jeIg1P2Lu9EQtqDxki1LIjGRJM6dJ5CZUig8QmLxWxqOKWvg3mVoOBs5A==} + engines: {node: '>=18.0.0'} + + '@smithy/util-uri-escape@4.2.0': + resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@4.2.0': + resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-waiter@4.2.3': + resolution: {integrity: sha512-5+nU///E5sAdD7t3hs4uwvCTWQtTR8JwKwOCSJtBRx0bY1isDo1QwH87vRK86vlFLBTISqoDA2V6xvP6nF1isQ==} + engines: {node: '>=18.0.0'} + + '@smithy/uuid@1.1.0': + resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==} + engines: {node: '>=18.0.0'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.3.0': + resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-numbers@2.3.0': + resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/errors@2.3.0': + resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' + + '@solana/web3.js@1.98.4': + resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} + + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + + '@supercharge/promise-pool@2.4.0': + resolution: {integrity: sha512-O9CMipBlq5OObdt1uKJGIzm9cdjpPWfj+a+Zw9EgWKxaMNHKC7EU7X9taj3H0EGQNLOSq2jAcOa3EzxlfHsD6w==} + engines: {node: '>=8'} + + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + + '@szmarczak/http-timer@1.1.2': + resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} + engines: {node: '>=6'} + + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + + '@tencent-sdk/capi@2.0.3': + resolution: {integrity: sha512-iLmtC1Trp74u+l9OP0Kv60Nfa8wfqAQQ5t6Vt3gIdJsYleG994mqRJTEFVQE/+hFAgIFfx9owQR0B+Yv/MkefQ==} + + '@tencent-sdk/common@1.0.0': + resolution: {integrity: sha512-fgBcyiAPJy0LDXWha8zFOh3T5cc/UwD3z2SZ+ulE7ZyFQxWf/moECynvOQ2wJqIZWF+5mAo0mfOK13067PZXng==} + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/aws-lambda@8.10.156': + resolution: {integrity: sha512-LElQP+QliVWykC7OF8dNr04z++HJCMO2lF7k9HuKoSDARqhcjHq8MzbrRwujCSDeBHIlvaimbuY/tVZL36KXFQ==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + + '@types/body-parser@1.19.6': + resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} + + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + + '@types/command-line-args@5.2.3': + resolution: {integrity: sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==} + + '@types/command-line-usage@5.0.4': + resolution: {integrity: sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/crypto-js@4.2.2': + resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/express-serve-static-core@4.19.7': + resolution: {integrity: sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==} + + '@types/express@4.17.23': + resolution: {integrity: sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + '@types/http-errors@2.0.5': + resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + + '@types/lodash@4.17.20': + resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + + '@types/long@4.0.2': + resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/node-fetch@2.6.13': + resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@14.18.63': + resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} + + '@types/node@22.7.5': + resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + + '@types/node@24.8.1': + resolution: {integrity: sha512-alv65KGRadQVfVcG69MuB4IzdYVpRwMG/mq8KWOaoOdyY617P5ivaDiMCGOFDWD2sAn5Q0mR3mRtUOgm99hL9Q==} + + '@types/qs@6.14.0': + resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/responselike@1.0.3': + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + + '@types/retry@0.12.0': + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + + '@types/send@0.17.5': + resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} + + '@types/send@1.2.0': + resolution: {integrity: sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==} + + '@types/serve-static@1.15.9': + resolution: {integrity: sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/triple-beam@1.3.5': + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + + '@types/uuid@8.3.4': + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + abi-wan-kanabi@1.0.3: + resolution: {integrity: sha512-Xwva0AnhXx/IVlzo3/kwkI7Oa7ZX7codtcSn+Gmoa2PmjGPF/0jeVud9puasIPtB7V50+uBdUj4Mh3iATqtBvg==} + hasBin: true + + abi-wan-kanabi@2.2.4: + resolution: {integrity: sha512-0aA81FScmJCPX+8UvkXLki3X1+yPQuWxEkqXBVKltgPAK79J+NB+Lp5DouMXa7L6f+zcRlIA/6XO7BN/q9fnvg==} + hasBin: true + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + acorn-import-phases@1.0.4: + resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} + engines: {node: '>=10.13.0'} + peerDependencies: + acorn: ^8.14.0 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + adm-zip@0.5.16: + resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} + engines: {node: '>=12.0'} + + aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + + after@0.8.2: + resolution: {integrity: sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-escapes@3.2.0: + resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} + engines: {node: '>=4'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + + ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + + ansi-regex@4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + apache-arrow@21.1.0: + resolution: {integrity: sha512-kQrYLxhC+NTVVZ4CCzGF6L/uPVOzJmD1T3XgbiUnP7oTeVFOFgEUu6IKNwCDkpFoBVqDKQivlX4RUFqqnWFlEA==} + hasBin: true + + aproba@1.2.0: + resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} + + archive-type@4.0.0: + resolution: {integrity: sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==} + engines: {node: '>=4'} + + archiver-utils@2.1.0: + resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} + engines: {node: '>= 6'} + + archiver-utils@3.0.4: + resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==} + engines: {node: '>= 10'} + + archiver@5.3.2: + resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} + engines: {node: '>= 10'} + + are-we-there-yet@1.1.7: + resolution: {integrity: sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==} + deprecated: This package is no longer supported. + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-back@6.2.2: + resolution: {integrity: sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==} + engines: {node: '>=12.17'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + arraybuffer.slice@0.0.7: + resolution: {integrity: sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + async@2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + aws-sdk@2.1692.0: + resolution: {integrity: sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==} + engines: {node: '>= 10.0.0'} + + axios@1.12.2: + resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-loader@8.4.1: + resolution: {integrity: sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-plugin-polyfill-corejs2@0.4.14: + resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.13.0: + resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.5: + resolution: {integrity: sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-preset-current-node-syntax@1.2.0: + resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} + peerDependencies: + '@babel/core': ^7.0.0 || ^8.0.0-0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + backo2@1.0.2: + resolution: {integrity: sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + + base64-arraybuffer@0.1.4: + resolution: {integrity: sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg==} + engines: {node: '>= 0.6.0'} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + baseline-browser-mapping@2.8.18: + resolution: {integrity: sha512-UYmTpOBwgPScZpS4A+YbapwWuBwasxvO/2IOHArSsAhL/+ZdmATBXTex3t+l2hXwLVYK382ibr/nKoY9GKe86w==} + hasBin: true + + bestzip@2.2.1: + resolution: {integrity: sha512-XdAb87RXqOqF7C6UgQG9IqpEHJvS6IOUo0bXWEAebjSSdhDjsbcqFKdHpn5Q7QHz2pGr3Zmw4wgG3LlzdyDz7w==} + engines: {node: '>=10'} + hasBin: true + + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + binary@0.3.0: + resolution: {integrity: sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bl@1.2.3: + resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} + + bl@2.2.1: + resolution: {integrity: sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + blob@0.0.5: + resolution: {integrity: sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + bowser@2.12.1: + resolution: {integrity: sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==} + + boxen@5.1.2: + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + engines: {node: '>=10'} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.26.3: + resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-alloc-unsafe@1.1.0: + resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} + + buffer-alloc@1.2.0: + resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + buffer-fill@1.0.0: + resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-layout@1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + + buffer@4.9.2: + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + buffermaker@1.2.1: + resolution: {integrity: sha512-IdnyU2jDHU65U63JuVQNTHiWjPRH0CS3aYd/WPaEwyX84rFdukhOduAVb1jwUScmb5X0JWPw8NZOrhoLMiyAHQ==} + + buffers@0.1.1: + resolution: {integrity: sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==} + engines: {node: '>=0.2.0'} + + bufferutil@4.0.9: + resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + engines: {node: '>=6.14.2'} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + + cacheable-request@6.1.0: + resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} + engines: {node: '>=8'} + + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + + cachedir@2.4.0: + resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==} + engines: {node: '>=6'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001751: + resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} + + cardinal@2.1.1: + resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} + hasBin: true + + chainsaw@0.1.0: + resolution: {integrity: sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==} + + chalk-template@0.4.0: + resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} + engines: {node: '>=12'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + child-process-ext@2.1.1: + resolution: {integrity: sha512-0UQ55f51JBkOFa+fvR76ywRzxiPwQS3Xe8oe5bZRphpv+dIMeerW5Zn5e4cUy4COJwVtJyU0R79RMnw+aCqmGA==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-boxes@2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} + + cli-color@2.0.4: + resolution: {integrity: sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==} + engines: {node: '>=0.10'} + + cli-cursor@2.1.0: + resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} + engines: {node: '>=4'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-progress-footer@2.3.3: + resolution: {integrity: sha512-p+hyTPxSZWG1c3Qy1DLBoGZhpeA3Y6AMlKrtbGpMMSKpezbSLel8gW4e5You4FNlHb3wS/M1JU594OAWe/Totg==} + engines: {node: '>=10.0'} + + cli-sprintf-format@1.1.1: + resolution: {integrity: sha512-BbEjY9BEdA6wagVwTqPvmAwGB24U93rQPBFZUT8lNCDxXzre5LFHQUTJc70czjgUomVg8u8R5kW8oY9DYRFNeg==} + engines: {node: '>=6.0'} + + cli-width@2.2.1: + resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + + cluster-key-slot@1.1.2: + resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} + engines: {node: '>=0.10.0'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + code-point-at@1.1.0: + resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} + engines: {node: '>=0.10.0'} + + collect-v8-coverage@1.0.3: + resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + + colornames@1.1.1: + resolution: {integrity: sha512-/pyV40IrsdulWv+wFPmERh9k/mjsPZ64yUMDmWrtj/k1nmgrzzIENWKdaVKyBbvFdQWqkcaRxr+polCo3VMe7A==} + + colors@1.3.3: + resolution: {integrity: sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==} + engines: {node: '>=0.1.90'} + + colorspace@1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + command-line-args@6.0.1: + resolution: {integrity: sha512-Jr3eByUjqyK0qd8W0SGFW1nZwqCaNCtbXjRo2cRJC1OYxWl3MZ5t1US3jq+cO4sPavqgw4l9BMGX0CBe+trepg==} + engines: {node: '>=12.20'} + peerDependencies: + '@75lb/nature': latest + peerDependenciesMeta: + '@75lb/nature': + optional: true + + command-line-usage@7.0.3: + resolution: {integrity: sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==} + engines: {node: '>=12.20.0'} + + commander@14.0.1: + resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} + engines: {node: '>=20'} + + commander@2.19.0: + resolution: {integrity: sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + component-bind@1.0.0: + resolution: {integrity: sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw==} + + component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + + component-inherit@0.0.3: + resolution: {integrity: sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA==} + + compress-commons@4.1.2: + resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} + engines: {node: '>= 10'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + configstore@5.0.1: + resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} + engines: {node: '>=8'} + + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + + cookiejar@2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + + core-js-compat@3.46.0: + resolution: {integrity: sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + crc32-stream@4.0.3: + resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} + engines: {node: '>= 10'} + + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cron-parser@2.18.0: + resolution: {integrity: sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg==} + engines: {node: '>=0.8'} + + cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} + engines: {node: '>=4.8'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + + crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + + crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + + cuid@2.1.8: + resolution: {integrity: sha512-xiEMER6E7TlTPnDxrM4eRiC6TRgjNX9xzEZ5U/Se2YJKr7Mq4pJn/2XEHjl3STcSh96GmkHPcBXLES8M29wyyg==} + deprecated: Cuid and other k-sortable and non-cryptographic ids (Ulid, ObjectId, KSUID, all UUIDs) are all insecure. Use @paralleldrive/cuid2 instead. + + d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + dayjs@1.11.18: + resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.1.0: + resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decompress-response@3.3.0: + resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} + engines: {node: '>=4'} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + decompress-tar@4.1.1: + resolution: {integrity: sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==} + engines: {node: '>=4'} + + decompress-tarbz2@4.1.1: + resolution: {integrity: sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==} + engines: {node: '>=4'} + + decompress-targz@4.1.1: + resolution: {integrity: sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==} + engines: {node: '>=4'} + + decompress-unzip@4.0.1: + resolution: {integrity: sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==} + engines: {node: '>=4'} + + decompress@4.2.1: + resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==} + engines: {node: '>=4'} + + dedent@1.7.0: + resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + defer-to-connect@1.1.3: + resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + deferred@0.7.11: + resolution: {integrity: sha512-8eluCl/Blx4YOGwMapBvXRKxHXhA8ejDXYzEaK8+/gtcm8hRMhSLmXSqDmNUKNc/C8HNSmuyyp/hflhqDAvK2A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + denque@1.5.1: + resolution: {integrity: sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==} + engines: {node: '>=0.10'} + + denque@2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + + diagnostics@1.1.1: + resolution: {integrity: sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dijkstrajs@1.0.3: + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + + dot-qs@0.2.0: + resolution: {integrity: sha512-4PzH4lANxojsx2aTexBUhZ9jtUkhxvv5o2xtNkeNgSBvZ6PEq51t2eLuanOFEjk2jcp2ax9wFmxhOSU7gMPIBQ==} + + dotenv-expand@5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + + dotenv@10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} + + dotenv@8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + duplexer3@0.1.5: + resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} + + duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + + duration@0.2.2: + resolution: {integrity: sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==} + + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + + effect@3.18.4: + resolution: {integrity: sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==} + + electron-to-chromium@1.5.237: + resolution: {integrity: sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + + enabled@1.0.2: + resolution: {integrity: sha512-nnzgVSpB35qKrUN8358SjO1bYAmxoThECTWw9s3J0x5G8A9hokKHVDFzBjVpCoSryo6MhN8woVyascN5jheaNA==} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + + engine.io-client@3.5.4: + resolution: {integrity: sha512-ydc8uuMMDxC5KCKNJN3zZKYJk2sgyTuTZQ7Aj1DJSsLKAcizA/PzWivw8fZMIjJVBo2CJOYzntv4FSjY/Lr//g==} + + engine.io-parser@2.2.1: + resolution: {integrity: sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==} + + enhanced-resolve@4.5.0: + resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==} + engines: {node: '>=6.9.0'} + + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + engines: {node: '>=10.13.0'} + + env-variable@0.0.6: + resolution: {integrity: sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==} + + errno@0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} + + es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + es6-promisify@6.1.1: + resolution: {integrity: sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==} + + es6-set@0.1.6: + resolution: {integrity: sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==} + engines: {node: '>=0.12'} + + es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} + + es6-weak-map@2.0.3: + resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} + + esbuild-android-64@0.14.54: + resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + esbuild-android-arm64@0.14.54: + resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + esbuild-darwin-64@0.14.54: + resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + esbuild-darwin-arm64@0.14.54: + resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + esbuild-freebsd-64@0.14.54: + resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + esbuild-freebsd-arm64@0.14.54: + resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + esbuild-linux-32@0.14.54: + resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + esbuild-linux-64@0.14.54: + resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + esbuild-linux-arm64@0.14.54: + resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + esbuild-linux-arm@0.14.54: + resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + esbuild-linux-mips64le@0.14.54: + resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + esbuild-linux-ppc64le@0.14.54: + resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + esbuild-linux-riscv64@0.14.54: + resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + esbuild-linux-s390x@0.14.54: + resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + esbuild-netbsd-64@0.14.54: + resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + esbuild-openbsd-64@0.14.54: + resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + esbuild-sunos-64@0.14.54: + resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + esbuild-windows-32@0.14.54: + resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + esbuild-windows-64@0.14.54: + resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + esbuild-windows-arm64@0.14.54: + resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + esbuild@0.14.54: + resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-goat@2.1.1: + resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} + engines: {node: '>=8'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + esniff@1.1.3: + resolution: {integrity: sha512-SLBLpfE7xWgF/HbzhVuAwqnJDRqSCNZqcqaIMVm+f+PbTp1kFRWu6BuT83SATb4Tp+ovr+S+u7vDH7/UErAOkw==} + engines: {node: '>=0.10'} + + esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + essentials@1.2.0: + resolution: {integrity: sha512-kP/j7Iw7KeNE8b/o7+tr9uX2s1wegElGOoGZ2Xm35qBr4BbbEcH3/bxR2nfH9l9JANCq9AUrvKw+gRuHtZp0HQ==} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + ethers@6.15.0: + resolution: {integrity: sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==} + engines: {node: '>=14.0.0'} + + event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@1.1.1: + resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} + engines: {node: '>=0.4.x'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + ext-list@2.2.2: + resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} + engines: {node: '>=0.10.0'} + + ext-name@5.0.0: + resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} + engines: {node: '>=4'} + + ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + extract-files@9.0.0: + resolution: {integrity: sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==} + engines: {node: ^10.17.0 || ^12.0.0 || >= 13.7.0} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-check@3.23.2: + resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} + engines: {node: '>=8.0.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + + fast-xml-parser@5.2.5: + resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} + hasBin: true + + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + + figures@2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-type@16.5.4: + resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} + engines: {node: '>=10'} + + file-type@3.9.0: + resolution: {integrity: sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==} + engines: {node: '>=0.10.0'} + + file-type@4.4.0: + resolution: {integrity: sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==} + engines: {node: '>=4'} + + file-type@5.2.0: + resolution: {integrity: sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==} + engines: {node: '>=4'} + + file-type@6.2.0: + resolution: {integrity: sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==} + engines: {node: '>=4'} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + filename-reserved-regex@2.0.0: + resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} + engines: {node: '>=4'} + + filenamify@4.3.0: + resolution: {integrity: sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==} + engines: {node: '>=8'} + + filesize@8.0.7: + resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} + engines: {node: '>= 0.4.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + + find-my-way-ts@0.1.6: + resolution: {integrity: sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA==} + + find-replace@5.0.2: + resolution: {integrity: sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==} + engines: {node: '>=14'} + peerDependencies: + '@75lb/nature': latest + peerDependenciesMeta: + '@75lb/nature': + optional: true + + find-requires@1.0.0: + resolution: {integrity: sha512-UME7hNwBfzeISSFQcBEDemEEskpOjI/shPrpJM5PI4DSdn6hX0dmz+2dL70blZER2z8tSnTRL+2rfzlYgtbBoQ==} + hasBin: true + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + flatbuffers@25.9.23: + resolution: {integrity: sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ==} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + form-data@3.0.4: + resolution: {integrity: sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==} + engines: {node: '>= 6'} + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + formidable@2.1.5: + resolution: {integrity: sha512-Oz5Hwvwak/DCaXVVUtPn4oLMLLy1CdclLKO1LFgU7XzDpVMUU5UjlSLpGMocyQNNk8F6IJW9M/YdooSn2MRI+Q==} + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.3.2: + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} + engines: {node: '>=14.14'} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fs2@0.3.16: + resolution: {integrity: sha512-gf/9tXLWI7qKmHDrMz55TRrTj12iceKuwo30CG1+Vbae719LT4uFc++GwDG8y/4vZJ34a6pzhgY23bgg88cZDg==} + engines: {node: '>=6'} + + fs@0.0.1-security: + resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gauge@2.7.4: + resolution: {integrity: sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==} + deprecated: This package is no longer supported. + + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stdin@8.0.0: + resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==} + engines: {node: '>=10'} + + get-stream@2.3.1: + resolution: {integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==} + engines: {node: '>=0.10.0'} + + get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + global-dirs@3.0.1: + resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} + engines: {node: '>=10'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + + got@9.6.0: + resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} + engines: {node: '>=8.6'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphlib@2.1.8: + resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} + + graphql-request@5.2.0: + resolution: {integrity: sha512-pLhKIvnMyBERL0dtFI3medKqWOz/RhHdcgbZ+hMMIb32mEPa5MJSzS4AuXxfI4sRAu6JVVk5tvXuGfCWl9JYWQ==} + peerDependencies: + graphql: 14 - 16 + + graphql@16.11.0: + resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-binary2@1.0.3: + resolution: {integrity: sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==} + + has-cors@1.1.0: + resolution: {integrity: sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + + has-yarn@2.1.0: + resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} + engines: {node: '>=8'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hpagent@1.2.0: + resolution: {integrity: sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==} + engines: {node: '>=14'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.1.13: + resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + import-lazy@2.1.0: + resolution: {integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==} + engines: {node: '>=4'} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + indexof@0.0.1: + resolution: {integrity: sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@2.0.0: + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} + + inquirer-autocomplete-prompt@1.4.0: + resolution: {integrity: sha512-qHgHyJmbULt4hI+kCmwX92MnSxDs/Yhdt4wPA30qnoa01OF6uTXV8yvH4hKXgdaTNmkZ9D01MHjqKYEuJN+ONw==} + engines: {node: '>=10'} + peerDependencies: + inquirer: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + + inquirer@6.5.2: + resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==} + engines: {node: '>=6.0.0'} + + inquirer@7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + ioredis@5.8.1: + resolution: {integrity: sha512-Qho8TgIamqEPdgiMadJwzRMW3TudIg6vpg4YONokGDudy4eqRIJtDbVX72pfLBcWxvbn3qm/40TyGUObdW4tLQ==} + engines: {node: '>=12.22.0'} + + is-arguments@1.2.0: + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.4: + resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-ci@2.0.0: + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} + hasBin: true + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@1.0.0: + resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-installed-globally@0.4.0: + resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} + engines: {node: '>=10'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + + is-natural-number@4.0.1: + resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-npm@5.0.0: + resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==} + engines: {node: '>=10'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + is-yarn-global@0.3.0: + resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.1: + resolution: {integrity: sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-fetch@3.0.0: + resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} + engines: {node: '>=8'} + + java-invoke-local@0.0.6: + resolution: {integrity: sha512-gZmQKe1QrfkkMjCn8Qv9cpyJFyogTYqkP5WCobX5RNaHsJzIV/6NvAnlnouOcwKr29QrxLGDGcqYuJ+ae98s1A==} + hasBin: true + + jayson@4.2.0: + resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==} + engines: {node: '>=8'} + hasBin: true + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jmespath@0.16.0: + resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} + engines: {node: '>= 0.6.0'} + + js-sha256@0.9.0: + resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==} + + js-string-escape@1.0.1: + resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} + engines: {node: '>= 0.8'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-bignum@0.0.3: + resolution: {integrity: sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==} + engines: {node: '>=0.8'} + + json-buffer@3.0.0: + resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-cycle@1.5.0: + resolution: {integrity: sha512-GOehvd5PO2FeZ5T4c+RxobeT5a1PiGpF4u9/3+UvrMU4bhnVqzJY7hm39wg8PDCqkU91fWGH8qjWR4bn+wgq9w==} + engines: {node: '>= 4'} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-refs@3.0.15: + resolution: {integrity: sha512-0vOQd9eLNBL18EGl5yYaO44GhixmImes2wiYn9Z3sag3QnehWrYWlB9AFtMxCL2Bj3fyxgDYkxGFEU/chlYssw==} + engines: {node: '>=0.8'} + hasBin: true + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + + jsonpath-plus@5.1.0: + resolution: {integrity: sha512-890w2Pjtj0iswAxalRlt2kHthi6HKrXEfZcn+ZNZptv7F3rUGIeDuZo+C+h4vXBHLEsVjJrHeCm35nYeZLzSBQ==} + engines: {node: '>=10.0.0'} + + jsonschema@1.5.0: + resolution: {integrity: sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==} + + jsonwebtoken@8.5.1: + resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} + engines: {node: '>=4', npm: '>=1.4.28'} + + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + + jwa@1.4.2: + resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + + jwt-decode@2.2.0: + resolution: {integrity: sha512-86GgN2vzfUu7m9Wcj63iUkuDzFNYFVmjeDm2GzWpUk+opB0pEpMsw6ePCMrhYkumz2C1ihqtZzOMAg7FiXcNoQ==} + + jwt-decode@3.1.2: + resolution: {integrity: sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==} + + kafka-node@5.0.0: + resolution: {integrity: sha512-dD2ga5gLcQhsq1yNoQdy1MU4x4z7YnXM5bcG9SdQuiNr5KKuAmXixH1Mggwdah5o7EfholFbcNDPSVA6BIfaug==} + engines: {node: '>=8.5.1'} + + kafkajs@2.2.4: + resolution: {integrity: sha512-j/YeapB1vfPT2iOIUn/vxdyKEuhuY2PxMBvf5JWux6iSaukAccrMtXEY/Lb7OvavDhOWME589bpLrEdnVHjfjA==} + engines: {node: '>=14.0.0'} + + keyv@3.1.0: + resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + kuler@1.0.1: + resolution: {integrity: sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==} + + latest-version@5.1.0: + resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} + engines: {node: '>=8'} + + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + loader-runner@4.3.1: + resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} + engines: {node: '>=6.11.5'} + + loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + + lodash.difference@4.5.0: + resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} + + lodash.flatten@4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isarguments@3.1.0: + resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash.union@4.6.0: + resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-node@8.0.3: + resolution: {integrity: sha512-1UBwzgYiCIDFs8A0rM2QdBFo8Wd8UQ0HrSTu/MNI+/2zN3NoHRj2fhplurAyuxTYUXu3Oohugq1jAn5s05u1MQ==} + engines: {node: '>=10.0'} + peerDependencies: + log: ^6.0.0 + + log@6.3.2: + resolution: {integrity: sha512-ek8NRg/OPvS9ISOJNWNAz5vZcpYacWNFDWNJjj5OXsc6YuKacfey6wF04cXz/tOJIVrZ2nGSkHpAY5qKtF6ISg==} + engines: {node: '>=0.12'} + + logform@2.7.0: + resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} + engines: {node: '>= 12.0.0'} + + long-timeout@0.1.1: + resolution: {integrity: sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==} + + long@1.1.2: + resolution: {integrity: sha512-pjR3OP1X2VVQhCQlrq3s8UxugQsuoucwMOn9Yj/kN/61HMc+lDFJS5bvpNEHneZ9NVaSm8gNWxZvtGS7lqHb3Q==} + engines: {node: '>=0.6'} + + long@4.0.0: + resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + + lossless-json@2.0.11: + resolution: {integrity: sha512-BP0vn+NGYvzDielvBZaFain/wgeJ1hTvURCqtKvhr1SCPePdaaTanmmcplrHfEJSJOUql7hk4FHwToNJjWRY3g==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lowercase-keys@1.0.1: + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} + + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lru-queue@0.1.0: + resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} + + lru_map@0.3.3: + resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} + + luxon@1.28.1: + resolution: {integrity: sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw==} + + make-dir@1.3.0: + resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} + engines: {node: '>=4'} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + map-age-cleaner@0.1.3: + resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} + engines: {node: '>=6'} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memoizee@0.4.17: + resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} + engines: {node: '>=0.12'} + + memory-fs@0.5.0: + resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==} + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + mimic-fn@1.2.0: + resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} + engines: {node: '>=4'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@3.1.0: + resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} + engines: {node: '>=8'} + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + moment-timezone@0.5.48: + resolution: {integrity: sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==} + + moment@2.30.1: + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multipasta@0.2.7: + resolution: {integrity: sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA==} + + mute-stream@0.0.7: + resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==} + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + nan@2.23.0: + resolution: {integrity: sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + napi-build-utils@1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + + native-promise-only@0.8.1: + resolution: {integrity: sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + ncjsm@4.3.2: + resolution: {integrity: sha512-6d1VWA7FY31CpI4Ki97Fpm36jfURkVbpktizp8aoVViTZRQgr/0ddmlKerALSSlzfwQRBeSq1qwwVcBJK4Sk7Q==} + + nco@1.0.1: + resolution: {integrity: sha512-tjlHSkSvVzRGeBXIOimMTA2J3ZUP9LLUvqv+JeBLGAseZP1syF/LgetKNJ8zMiXosuKJHx7/KSIv8UDyKXoeKQ==} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + nested-error-stacks@2.1.1: + resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} + + next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-abi@2.30.1: + resolution: {integrity: sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-dir@0.1.17: + resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} + engines: {node: '>= 0.10.5'} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.25: + resolution: {integrity: sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==} + + node-schedule@1.3.3: + resolution: {integrity: sha512-uF9Ubn6luOPrcAYKfsXWimcJ1tPFtQ8I85wb4T3NgJQrXazEzojcFZVk46ZlLHby3eEJChgkV/0T689IsXh2Gw==} + + noop-logger@0.1.1: + resolution: {integrity: sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-url@4.5.1: + resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} + engines: {node: '>=8'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npmlog@4.1.2: + resolution: {integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==} + deprecated: This package is no longer supported. + + number-is-nan@1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + one-time@0.0.4: + resolution: {integrity: sha512-qAMrwuk2xLEutlASoiPiAMW3EN3K96Ka/ilSXYr6qR1zSVXw2j7+yDSqGTC4T9apfLYxM3tLLjKvgPdAUK7kYQ==} + + onetime@2.0.1: + resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} + engines: {node: '>=4'} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + open@7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + + optional@0.1.4: + resolution: {integrity: sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==} + + os-homedir@1.0.2: + resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} + engines: {node: '>=0.10.0'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-cancelable@1.1.0: + resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} + engines: {node: '>=6'} + + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + + p-defer@1.0.0: + resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} + engines: {node: '>=4'} + + p-event@4.2.0: + resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} + engines: {node: '>=8'} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-memoize@4.0.4: + resolution: {integrity: sha512-ijdh0DP4Mk6J4FXlOM6vPPoCjPytcEseW8p/k5SDTSSfGV3E9bpt9Yzfifvzp6iohIieoLTkXRb32OWV0fB2Lw==} + engines: {node: '>=10'} + + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + + p-reflect@2.1.0: + resolution: {integrity: sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==} + engines: {node: '>=8'} + + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + + p-settle@4.1.1: + resolution: {integrity: sha512-6THGh13mt3gypcNMm0ADqVNCcYa3BK6DWsuJWFCuEKP1rpY+OKGp7gaZwVmLspmic01+fsg/fN57MfvDzZ/PuQ==} + engines: {node: '>=10'} + + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json@6.5.0: + resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} + engines: {node: '>=8'} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parseqs@0.0.6: + resolution: {integrity: sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==} + + parseuri@0.0.6: + resolution: {integrity: sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-loader@1.0.12: + resolution: {integrity: sha512-n7oDG8B+k/p818uweWrOixY9/Dsr89o2TkCm6tOTex3fpdo2+BFDgR+KpB37mGKBRsBAlR8CIJMFN0OEy/7hIQ==} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + path2@0.1.0: + resolution: {integrity: sha512-TX+cz8Jk+ta7IvRy2FAej8rdlbrP0+uBIkP/5DTODez/AuL/vSb30KuAdDxGVREXzn8QfAiu5mJYJ1XjbOhEPA==} + + path@0.12.7: + resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} + + peek-readable@4.1.0: + resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} + engines: {node: '>=8'} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + + pinkie-promise@2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} + + pinkie@2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + please-upgrade-node@3.2.0: + resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} + + portfinder@1.0.38: + resolution: {integrity: sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==} + engines: {node: '>= 10.12'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postgres@3.4.7: + resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==} + engines: {node: '>=12'} + + prebuild-install@5.3.0: + resolution: {integrity: sha512-aaLVANlj4HgZweKttFNUVNRxDukytuIuxeK2boIMHjagNJCiVKWFsKF4tCE3ql3GbrD2tExPQ7/pwtEJcHNZeg==} + engines: {node: '>=6'} + hasBin: true + + prepend-http@2.0.0: + resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} + engines: {node: '>=4'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + prettyoutput@1.2.0: + resolution: {integrity: sha512-G2gJwLzLcYS+2m6bTAe+CcDpwak9YpcvpScI0tE4WYb2O3lEZD/YywkMNpGqsSx5wttGvh2UXaKROTKKCyM2dw==} + engines: {node: '>=4'} + hasBin: true + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process-utils@4.0.0: + resolution: {integrity: sha512-fMyMQbKCxX51YxR7YGCzPjLsU3yDzXFkP4oi1/Mt5Ixnk7GO/7uUTj8mrCHUwuvozWzI+V7QSJR9cZYnwNOZPg==} + engines: {node: '>=10.0'} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + promise-queue@2.2.5: + resolution: {integrity: sha512-p/iXrPSVfnqPft24ZdNNLECw/UrtLTpT3jpAAMzl/o5/rDsGCPo3/CQS2611flL6LkoEJ3oQZw7C8Q80ZISXRQ==} + engines: {node: '>= 0.8.0'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + protobufjs@6.11.4: + resolution: {integrity: sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==} + hasBin: true + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + + pump@1.0.3: + resolution: {integrity: sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==} + + pump@2.0.1: + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + + punycode@1.3.2: + resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pupa@2.1.1: + resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} + engines: {node: '>=8'} + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + qrcode-terminal@0.12.0: + resolution: {integrity: sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==} + hasBin: true + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + querystring@0.2.0: + resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} + engines: {node: '>=0.4.x'} + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + + querystring@0.2.1: + resolution: {integrity: sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==} + engines: {node: '>=0.4.x'} + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + ramda@0.26.1: + resolution: {integrity: sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==} + + ramda@0.27.2: + resolution: {integrity: sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==} + + ramda@0.28.0: + resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readable-web-to-node-stream@3.0.4: + resolution: {integrity: sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==} + engines: {node: '>=8'} + + readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + redeyed@2.1.1: + resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} + + redis-errors@1.2.0: + resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} + engines: {node: '>=4'} + + redis-parser@3.0.0: + resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} + engines: {node: '>=4'} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regenerate-unicode-properties@10.2.2: + resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + regexpu-core@6.4.0: + resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} + engines: {node: '>=4'} + + registry-auth-token@4.2.2: + resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} + engines: {node: '>=6.0.0'} + + registry-url@5.1.0: + resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} + engines: {node: '>=8'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.13.0: + resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} + hasBin: true + + replaceall@0.1.6: + resolution: {integrity: sha512-sL26E4+8Kec7bwpRjHlQvbNZcpnGroT3PA7ywsgH6GjzxAg4IGNlNalLoRC/JmTed7cMhyDbi44pWw1kMhDxlw==} + engines: {node: '>= 0.8.x'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + engines: {node: '>=10'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + responselike@1.0.2: + resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} + + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + + restore-cursor@2.0.0: + resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} + engines: {node: '>=4'} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + retry@0.10.1: + resolution: {integrity: sha512-ZXUSQYTHdl3uS7IuCehYfMzKyIDBNoAuUblvy5oGO5UJSUTmStUUVPXbA9Qxd173Bgre53yCQczQuHgRWAdvJQ==} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rome@12.1.3: + resolution: {integrity: sha512-e+ff72hxDpe/t5/Us7YRBVw3PBET7SeczTQNn6tvrWdrCaAw3qOukQQ+tDCkyFtS4yGsnhjrJbm43ctNbz27Yg==} + engines: {node: '>=14.*'} + hasBin: true + + rpc-websockets@9.2.0: + resolution: {integrity: sha512-DS/XHdPxplQTtNRKiBCRWGBJfjOk56W7fyFUpiYi9fSTWTzoEMbUkn3J4gB0IMniIEVeAGR1/rzFQogzD5MxvQ==} + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-parallel-limit@1.1.0: + resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sax@1.2.1: + resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} + + schema-utils@2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} + + schema-utils@4.3.3: + resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} + engines: {node: '>= 10.13.0'} + + secure-json-parse@3.0.2: + resolution: {integrity: sha512-H6nS2o8bWfpFEV6U38sOSjS7bTbdgbCGU9wEM6W14P5H0QOsz94KCusifV44GpHDTu2nqZbuDNhTzu+mjDSw1w==} + + seek-bzip@1.0.6: + resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==} + hasBin: true + + semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + + semver-diff@3.1.1: + resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} + engines: {node: '>=8'} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.5.3: + resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + serverless-esbuild@1.55.1: + resolution: {integrity: sha512-/tAjN1tLTj+qB9j4rwuCRil9PDJ//iBqR9IGvNoDJfFz7daqDbC2mxi1Gzx31UVG8Pm5e8oPPoXZ0GgZYKO1HQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + esbuild: 0.8 - 0.25 + esbuild-node-externals: ^1.0.0 + peerDependenciesMeta: + esbuild-node-externals: + optional: true + + serverless-offline@7.1.0: + resolution: {integrity: sha512-ru58Zr1FeNU7JgqZrjkF+lNJBuDp/nA+izDzQxG4hSNoYpoHyNffmxAWc95WS9fGZZE6SLVUFl8sM3tJoOO9BA==} + engines: {node: '>=10.13.0'} + peerDependencies: + serverless: ^1.60.0 || 2 + + serverless-plugin-log-retention@2.1.0: + resolution: {integrity: sha512-8mugmUQHUJVQWIOyOF8YI1slq+LEeWCEF2qfBKX9abopKb8rtJteo9FNALNJROtbeVP+35EV4osvxXrRLxTOgA==} + + serverless-prune-plugin@1.6.1: + resolution: {integrity: sha512-rTeaedrVRWFdfXgSsraxcCHpVzL3AqztcYSr7FY3Jc74PJ0/H6Ukf5nFKKYZSolnF3JkU8ddwQGY52YnJIxQqw==} + peerDependencies: + serverless: 1 || 2 + + serverless@2.72.4: + resolution: {integrity: sha512-npyccTOEEqPI25PwXs4r7qsTVvzYjWA1yBp9pBo7I29IpTcgVYv0CoLLR7K4yy7cf2E75TPYzVAxgtWAC8CdAQ==} + engines: {node: '>=10.0'} + hasBin: true + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shortid@2.2.17: + resolution: {integrity: sha512-GpbM3gLF1UUXZvQw6MCyulHkWbRseNO4cyBEZresZRorwl1+SLu1ZdqgVtuwqz8mB6RpwPkm541mYSqrKyJSaA==} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@2.8.2: + resolution: {integrity: sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==} + + simple-git@2.48.0: + resolution: {integrity: sha512-z4qtrRuaAFJS4PUd0g+xy7aN4y+RvEt/QTJpR184lhJguBA1S/LsVlvE/CM95RsYMOFJG3NGGDjqFCzKU19S/A==} + + simple-git@3.28.0: + resolution: {integrity: sha512-Rs/vQRwsn1ILH1oBUy8NucJlXmnnLeLCfcvbSehkPzbv3wwoFWIdtfd6Ndo6ZPhlPsCZ60CPI4rxurnwAa+a2w==} + + simple-swizzle@0.2.4: + resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + snappy@6.3.5: + resolution: {integrity: sha512-lonrUtdp1b1uDn1dbwgQbBsb5BbaiLeKq+AGwOk2No+en+VvJThwmtztwulEQsLinRF681pBqib0NUZaizKLIA==} + + socket.io-client@2.5.0: + resolution: {integrity: sha512-lOO9clmdgssDykiOmVQQitwBAF3I6mYcQAo7hQ7AM6Ny5X7fp8hIJ3HcQs3Rjz4SoggoxA1OgrQyY8EgTbcPYw==} + + socket.io-parser@3.3.4: + resolution: {integrity: sha512-z/pFQB3x+EZldRRzORYW1vwVO8m/3ILkswtnpoeU6Ve3cbMWkmHEWDAVJn4QJtchiiFTo5j7UG2QvwxvaA9vow==} + + sort-keys-length@1.0.1: + resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} + engines: {node: '>=0.10.0'} + + sort-keys@1.1.2: + resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} + engines: {node: '>=0.10.0'} + + sorted-array-functions@1.3.0: + resolution: {integrity: sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + split2@3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sprintf-kit@2.0.2: + resolution: {integrity: sha512-lnapdj6W4LflHZGKvl9eVkz5YF0xaTrqpRWVA4cNVOTedwqifIP8ooGImldzT/4IAN5KXFQAyXTdLidYVQdyag==} + engines: {node: '>=0.12'} + + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + standard-as-callback@2.1.0: + resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} + + starknet@5.29.0: + resolution: {integrity: sha512-eEcd6uiYIwGvl8MtHOsXGBhREqjJk84M/qUkvPLQ3n/JAMkbKBGnygDlh+HAsvXJsGlMQfwrcVlm6KpDoPha7w==} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + stream-chain@2.2.5: + resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} + + stream-json@1.9.1: + resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} + + stream-promise@3.2.0: + resolution: {integrity: sha512-P+7muTGs2C8yRcgJw/PPt61q7O517tDHiwYEzMWo1GSBCcZedUMT/clz7vUNsSxFphIlJ6QUL4GexQKlfJoVtA==} + + stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@1.0.2: + resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} + engines: {node: '>=0.10.0'} + + string-width@2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + + strip-ansi@4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} + + strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-dirs@2.1.0: + resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-outer@1.0.1: + resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} + engines: {node: '>=0.10.0'} + + strnum@2.1.1: + resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==} + + strtok3@6.3.0: + resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} + engines: {node: '>=10'} + + superagent@7.1.6: + resolution: {integrity: sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g==} + engines: {node: '>=6.4.0 <13 || >=14'} + deprecated: Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net + + superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@6.1.0: + resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==} + engines: {node: '>=6'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + table-layout@4.1.1: + resolution: {integrity: sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==} + engines: {node: '>=12.17'} + + tabtab@3.0.2: + resolution: {integrity: sha512-jANKmUe0sIQc/zTALTBy186PoM/k6aPrh3A7p6AaAfF6WPSbTx1JYeGIGH162btpH+mmVEXln+UxwViZHO2Jhg==} + + tapable@1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} + + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} + + tar-fs@1.16.6: + resolution: {integrity: sha512-JkOgFt3FxM/2v2CNpAVHqMW2QASjc/Hxo7IGfNd3MHaDYSW/sBFiS7YVmmhmr8x6vwN1VFQDQGdT2MWpmIuVKA==} + + tar-stream@1.6.2: + resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} + engines: {node: '>= 0.8.0'} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + tencent-serverless-http@1.3.2: + resolution: {integrity: sha512-HgIu9HuBdY0lx3jLKuicOSOrjmieklPh55x8ZmtuTnrZ5v1buAPUfLKBhTeBSz6e90ggyW+dPr5PWdz179kUkw==} + engines: {node: '>=8'} + + terser-webpack-plugin@5.3.14: + resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.44.0: + resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + + throat@5.0.0: + resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + timers-ext@0.1.8: + resolution: {integrity: sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==} + engines: {node: '>=0.12'} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-array@0.1.4: + resolution: {integrity: sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A==} + + to-buffer@1.2.2: + resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} + engines: {node: '>= 0.4'} + + to-readable-stream@1.0.0: + resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} + engines: {node: '>=6'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + token-types@4.2.1: + resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} + engines: {node: '>=10'} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + traverse@0.3.9: + resolution: {integrity: sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==} + + traverse@0.6.11: + resolution: {integrity: sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==} + engines: {node: '>= 0.4'} + + trim-repeated@1.0.0: + resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} + engines: {node: '>=0.10.0'} + + triple-beam@1.4.1: + resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} + engines: {node: '>= 14.0.0'} + + tron-format-address@0.1.12: + resolution: {integrity: sha512-dtlfwSZEdWA9Cj3Mqypw/WNhQPlQf5JWT+/H5gYX5Viu+ntIq+7zJvcWCrmcDJ48L0EHt2xzGme2eErW9Y7spQ==} + + ts-jest@29.4.5: + resolution: {integrity: sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 || ^30.0.0 + '@jest/types': ^29.0.0 || ^30.0.0 + babel-jest: ^29.0.0 || ^30.0.0 + esbuild: '*' + jest: ^29.0.0 || ^30.0.0 + jest-util: ^29.0.0 || ^30.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + jest-util: + optional: true + + ts-loader@8.4.0: + resolution: {integrity: sha512-6nFY3IZ2//mrPc+ImY3hNWx1vCHyEhl6V+wLmL4CZcm6g1CqX7UKrkc6y0i4FwcfOhxyMPCfaEvh20f4r9GNpw==} + engines: {node: '>=10.0.0'} + peerDependencies: + typescript: '*' + webpack: '*' + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + 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 + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + + typedarray.prototype.slice@1.0.5: + resolution: {integrity: sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg==} + engines: {node: '>= 0.4'} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + typical@7.3.0: + resolution: {integrity: sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==} + engines: {node: '>=12.17'} + + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + undici-types@7.14.0: + resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} + + undici@6.22.0: + resolution: {integrity: sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==} + engines: {node: '>=18.17'} + + uni-global@1.0.0: + resolution: {integrity: sha512-WWM3HP+siTxzIWPNUg7hZ4XO8clKi6NoCAJJWnuRL+BAqyFXF8gC03WNyTefGoUXYc47uYgXxpKLIEvo65PEHw==} + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.1: + resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.2.0: + resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} + engines: {node: '>=4'} + + unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + untildify@3.0.3: + resolution: {integrity: sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==} + engines: {node: '>=4'} + + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-notifier@5.1.0: + resolution: {integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==} + engines: {node: '>=10'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-join@4.0.1: + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + + url-parse-lax@3.0.0: + resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} + engines: {node: '>=4'} + + url@0.10.3: + resolution: {integrity: sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==} + + urlencode@1.1.0: + resolution: {integrity: sha512-OOAOh9owHXr/rCN1tteSnYwIvsrGHamSz0hafMhmQa7RcS4+Ets6/2iVClVGjt9jkDW84UqoMw/Gmpc7QolX6A==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util@0.10.4: + resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + uuid@3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + + uuid@8.0.0: + resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} + hasBin: true + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + velocityjs@2.1.5: + resolution: {integrity: sha512-QYOx2+7ICdUp2IckrJpjakPopLPDAaYwF26z/ZNsUvrlQLNkNoFvnN0SrbnEWp7tZ88+ybIpvuu/+IB9q1j+jQ==} + engines: {node: '>=16.0.0'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + watchpack@2.4.4: + resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==} + engines: {node: '>=10.13.0'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webpack-sources@3.3.3: + resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} + engines: {node: '>=10.13.0'} + + webpack@5.102.1: + resolution: {integrity: sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-pm-runs@1.1.0: + resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} + engines: {node: '>=4'} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + + widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + + winston-transport@4.9.0: + resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} + engines: {node: '>= 12.0.0'} + + winston@3.2.1: + resolution: {integrity: sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==} + engines: {node: '>= 6.4.0'} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + wordwrapjs@5.1.1: + resolution: {integrity: sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg==} + engines: {node: '>=12.17'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@2.4.3: + resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} + + write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + 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 + + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + 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 + + xdg-basedir@4.0.0: + resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} + engines: {node: '>=8'} + + xml2js@0.6.2: + resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + + xmlhttprequest-ssl@1.6.3: + resolution: {integrity: sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==} + engines: {node: '>=0.4.0'} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml-ast-parser@0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + + yamljs@0.3.0: + resolution: {integrity: sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==} + hasBin: true + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yeast@0.1.2: + resolution: {integrity: sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zip-stream@4.1.1: + resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} + engines: {node: '>= 10'} + +snapshots: + + 2-thenable@1.0.0: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + + '@adraffy/ens-normalize@1.10.1': {} + + '@aws-crypto/crc32@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.910.0 + tslib: 2.8.1 + + '@aws-crypto/crc32c@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.910.0 + tslib: 2.8.1 + + '@aws-crypto/sha1-browser@5.2.0': + dependencies: + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.910.0 + '@aws-sdk/util-locate-window': 3.893.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-browser@5.2.0': + 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.910.0 + '@aws-sdk/util-locate-window': 3.893.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.910.0 + tslib: 2.8.1 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.8.1 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.910.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-sdk/client-s3@3.913.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/core': 3.911.0 + '@aws-sdk/credential-provider-node': 3.913.0 + '@aws-sdk/middleware-bucket-endpoint': 3.910.0 + '@aws-sdk/middleware-expect-continue': 3.910.0 + '@aws-sdk/middleware-flexible-checksums': 3.911.0 + '@aws-sdk/middleware-host-header': 3.910.0 + '@aws-sdk/middleware-location-constraint': 3.913.0 + '@aws-sdk/middleware-logger': 3.910.0 + '@aws-sdk/middleware-recursion-detection': 3.910.0 + '@aws-sdk/middleware-sdk-s3': 3.911.0 + '@aws-sdk/middleware-ssec': 3.910.0 + '@aws-sdk/middleware-user-agent': 3.911.0 + '@aws-sdk/region-config-resolver': 3.910.0 + '@aws-sdk/signature-v4-multi-region': 3.911.0 + '@aws-sdk/types': 3.910.0 + '@aws-sdk/util-endpoints': 3.910.0 + '@aws-sdk/util-user-agent-browser': 3.910.0 + '@aws-sdk/util-user-agent-node': 3.911.0 + '@aws-sdk/xml-builder': 3.911.0 + '@smithy/config-resolver': 4.3.3 + '@smithy/core': 3.17.0 + '@smithy/eventstream-serde-browser': 4.2.3 + '@smithy/eventstream-serde-config-resolver': 4.3.3 + '@smithy/eventstream-serde-node': 4.2.3 + '@smithy/fetch-http-handler': 5.3.4 + '@smithy/hash-blob-browser': 4.2.4 + '@smithy/hash-node': 4.2.3 + '@smithy/hash-stream-node': 4.2.3 + '@smithy/invalid-dependency': 4.2.3 + '@smithy/md5-js': 4.2.3 + '@smithy/middleware-content-length': 4.2.3 + '@smithy/middleware-endpoint': 4.3.4 + '@smithy/middleware-retry': 4.4.4 + '@smithy/middleware-serde': 4.2.3 + '@smithy/middleware-stack': 4.2.3 + '@smithy/node-config-provider': 4.3.3 + '@smithy/node-http-handler': 4.4.2 + '@smithy/protocol-http': 5.3.3 + '@smithy/smithy-client': 4.9.0 + '@smithy/types': 4.8.0 + '@smithy/url-parser': 4.2.3 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.3 + '@smithy/util-defaults-mode-node': 4.2.4 + '@smithy/util-endpoints': 3.2.3 + '@smithy/util-middleware': 4.2.3 + '@smithy/util-retry': 4.2.3 + '@smithy/util-stream': 4.5.3 + '@smithy/util-utf8': 4.2.0 + '@smithy/util-waiter': 4.2.3 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso@3.911.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.911.0 + '@aws-sdk/middleware-host-header': 3.910.0 + '@aws-sdk/middleware-logger': 3.910.0 + '@aws-sdk/middleware-recursion-detection': 3.910.0 + '@aws-sdk/middleware-user-agent': 3.911.0 + '@aws-sdk/region-config-resolver': 3.910.0 + '@aws-sdk/types': 3.910.0 + '@aws-sdk/util-endpoints': 3.910.0 + '@aws-sdk/util-user-agent-browser': 3.910.0 + '@aws-sdk/util-user-agent-node': 3.911.0 + '@smithy/config-resolver': 4.3.3 + '@smithy/core': 3.17.0 + '@smithy/fetch-http-handler': 5.3.4 + '@smithy/hash-node': 4.2.3 + '@smithy/invalid-dependency': 4.2.3 + '@smithy/middleware-content-length': 4.2.3 + '@smithy/middleware-endpoint': 4.3.4 + '@smithy/middleware-retry': 4.4.4 + '@smithy/middleware-serde': 4.2.3 + '@smithy/middleware-stack': 4.2.3 + '@smithy/node-config-provider': 4.3.3 + '@smithy/node-http-handler': 4.4.2 + '@smithy/protocol-http': 5.3.3 + '@smithy/smithy-client': 4.9.0 + '@smithy/types': 4.8.0 + '@smithy/url-parser': 4.2.3 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.3 + '@smithy/util-defaults-mode-node': 4.2.4 + '@smithy/util-endpoints': 3.2.3 + '@smithy/util-middleware': 4.2.3 + '@smithy/util-retry': 4.2.3 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.911.0': + dependencies: + '@aws-sdk/types': 3.910.0 + '@aws-sdk/xml-builder': 3.911.0 + '@smithy/core': 3.17.0 + '@smithy/node-config-provider': 4.3.3 + '@smithy/property-provider': 4.2.3 + '@smithy/protocol-http': 5.3.3 + '@smithy/signature-v4': 5.3.3 + '@smithy/smithy-client': 4.9.0 + '@smithy/types': 4.8.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-middleware': 4.2.3 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.911.0': + dependencies: + '@aws-sdk/core': 3.911.0 + '@aws-sdk/types': 3.910.0 + '@smithy/property-provider': 4.2.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.911.0': + dependencies: + '@aws-sdk/core': 3.911.0 + '@aws-sdk/types': 3.910.0 + '@smithy/fetch-http-handler': 5.3.4 + '@smithy/node-http-handler': 4.4.2 + '@smithy/property-provider': 4.2.3 + '@smithy/protocol-http': 5.3.3 + '@smithy/smithy-client': 4.9.0 + '@smithy/types': 4.8.0 + '@smithy/util-stream': 4.5.3 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.913.0': + dependencies: + '@aws-sdk/core': 3.911.0 + '@aws-sdk/credential-provider-env': 3.911.0 + '@aws-sdk/credential-provider-http': 3.911.0 + '@aws-sdk/credential-provider-process': 3.911.0 + '@aws-sdk/credential-provider-sso': 3.911.0 + '@aws-sdk/credential-provider-web-identity': 3.911.0 + '@aws-sdk/nested-clients': 3.911.0 + '@aws-sdk/types': 3.910.0 + '@smithy/credential-provider-imds': 4.2.3 + '@smithy/property-provider': 4.2.3 + '@smithy/shared-ini-file-loader': 4.3.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-node@3.913.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.911.0 + '@aws-sdk/credential-provider-http': 3.911.0 + '@aws-sdk/credential-provider-ini': 3.913.0 + '@aws-sdk/credential-provider-process': 3.911.0 + '@aws-sdk/credential-provider-sso': 3.911.0 + '@aws-sdk/credential-provider-web-identity': 3.911.0 + '@aws-sdk/types': 3.910.0 + '@smithy/credential-provider-imds': 4.2.3 + '@smithy/property-provider': 4.2.3 + '@smithy/shared-ini-file-loader': 4.3.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-process@3.911.0': + dependencies: + '@aws-sdk/core': 3.911.0 + '@aws-sdk/types': 3.910.0 + '@smithy/property-provider': 4.2.3 + '@smithy/shared-ini-file-loader': 4.3.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.911.0': + dependencies: + '@aws-sdk/client-sso': 3.911.0 + '@aws-sdk/core': 3.911.0 + '@aws-sdk/token-providers': 3.911.0 + '@aws-sdk/types': 3.910.0 + '@smithy/property-provider': 4.2.3 + '@smithy/shared-ini-file-loader': 4.3.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.911.0': + dependencies: + '@aws-sdk/core': 3.911.0 + '@aws-sdk/nested-clients': 3.911.0 + '@aws-sdk/types': 3.910.0 + '@smithy/property-provider': 4.2.3 + '@smithy/shared-ini-file-loader': 4.3.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/middleware-bucket-endpoint@3.910.0': + dependencies: + '@aws-sdk/types': 3.910.0 + '@aws-sdk/util-arn-parser': 3.893.0 + '@smithy/node-config-provider': 4.3.3 + '@smithy/protocol-http': 5.3.3 + '@smithy/types': 4.8.0 + '@smithy/util-config-provider': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-expect-continue@3.910.0': + dependencies: + '@aws-sdk/types': 3.910.0 + '@smithy/protocol-http': 5.3.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-flexible-checksums@3.911.0': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@aws-crypto/crc32c': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/core': 3.911.0 + '@aws-sdk/types': 3.910.0 + '@smithy/is-array-buffer': 4.2.0 + '@smithy/node-config-provider': 4.3.3 + '@smithy/protocol-http': 5.3.3 + '@smithy/types': 4.8.0 + '@smithy/util-middleware': 4.2.3 + '@smithy/util-stream': 4.5.3 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-host-header@3.910.0': + dependencies: + '@aws-sdk/types': 3.910.0 + '@smithy/protocol-http': 5.3.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-location-constraint@3.913.0': + dependencies: + '@aws-sdk/types': 3.910.0 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-logger@3.910.0': + dependencies: + '@aws-sdk/types': 3.910.0 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-recursion-detection@3.910.0': + dependencies: + '@aws-sdk/types': 3.910.0 + '@aws/lambda-invoke-store': 0.0.1 + '@smithy/protocol-http': 5.3.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-sdk-s3@3.911.0': + dependencies: + '@aws-sdk/core': 3.911.0 + '@aws-sdk/types': 3.910.0 + '@aws-sdk/util-arn-parser': 3.893.0 + '@smithy/core': 3.17.0 + '@smithy/node-config-provider': 4.3.3 + '@smithy/protocol-http': 5.3.3 + '@smithy/signature-v4': 5.3.3 + '@smithy/smithy-client': 4.9.0 + '@smithy/types': 4.8.0 + '@smithy/util-config-provider': 4.2.0 + '@smithy/util-middleware': 4.2.3 + '@smithy/util-stream': 4.5.3 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-ssec@3.910.0': + dependencies: + '@aws-sdk/types': 3.910.0 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-user-agent@3.911.0': + dependencies: + '@aws-sdk/core': 3.911.0 + '@aws-sdk/types': 3.910.0 + '@aws-sdk/util-endpoints': 3.910.0 + '@smithy/core': 3.17.0 + '@smithy/protocol-http': 5.3.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@aws-sdk/nested-clients@3.911.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.911.0 + '@aws-sdk/middleware-host-header': 3.910.0 + '@aws-sdk/middleware-logger': 3.910.0 + '@aws-sdk/middleware-recursion-detection': 3.910.0 + '@aws-sdk/middleware-user-agent': 3.911.0 + '@aws-sdk/region-config-resolver': 3.910.0 + '@aws-sdk/types': 3.910.0 + '@aws-sdk/util-endpoints': 3.910.0 + '@aws-sdk/util-user-agent-browser': 3.910.0 + '@aws-sdk/util-user-agent-node': 3.911.0 + '@smithy/config-resolver': 4.3.3 + '@smithy/core': 3.17.0 + '@smithy/fetch-http-handler': 5.3.4 + '@smithy/hash-node': 4.2.3 + '@smithy/invalid-dependency': 4.2.3 + '@smithy/middleware-content-length': 4.2.3 + '@smithy/middleware-endpoint': 4.3.4 + '@smithy/middleware-retry': 4.4.4 + '@smithy/middleware-serde': 4.2.3 + '@smithy/middleware-stack': 4.2.3 + '@smithy/node-config-provider': 4.3.3 + '@smithy/node-http-handler': 4.4.2 + '@smithy/protocol-http': 5.3.3 + '@smithy/smithy-client': 4.9.0 + '@smithy/types': 4.8.0 + '@smithy/url-parser': 4.2.3 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.3 + '@smithy/util-defaults-mode-node': 4.2.4 + '@smithy/util-endpoints': 3.2.3 + '@smithy/util-middleware': 4.2.3 + '@smithy/util-retry': 4.2.3 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/region-config-resolver@3.910.0': + dependencies: + '@aws-sdk/types': 3.910.0 + '@smithy/node-config-provider': 4.3.3 + '@smithy/types': 4.8.0 + '@smithy/util-config-provider': 4.2.0 + '@smithy/util-middleware': 4.2.3 + tslib: 2.8.1 + + '@aws-sdk/signature-v4-multi-region@3.911.0': + dependencies: + '@aws-sdk/middleware-sdk-s3': 3.911.0 + '@aws-sdk/types': 3.910.0 + '@smithy/protocol-http': 5.3.3 + '@smithy/signature-v4': 5.3.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.911.0': + dependencies: + '@aws-sdk/core': 3.911.0 + '@aws-sdk/nested-clients': 3.911.0 + '@aws-sdk/types': 3.910.0 + '@smithy/property-provider': 4.2.3 + '@smithy/shared-ini-file-loader': 4.3.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/types@3.910.0': + dependencies: + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@aws-sdk/util-arn-parser@3.893.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-endpoints@3.910.0': + dependencies: + '@aws-sdk/types': 3.910.0 + '@smithy/types': 4.8.0 + '@smithy/url-parser': 4.2.3 + '@smithy/util-endpoints': 3.2.3 + tslib: 2.8.1 + + '@aws-sdk/util-locate-window@3.893.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-browser@3.910.0': + dependencies: + '@aws-sdk/types': 3.910.0 + '@smithy/types': 4.8.0 + bowser: 2.12.1 + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-node@3.911.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.911.0 + '@aws-sdk/types': 3.910.0 + '@smithy/node-config-provider': 4.3.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@aws-sdk/xml-builder@3.911.0': + dependencies: + '@smithy/types': 4.8.0 + fast-xml-parser: 5.2.5 + tslib: 2.8.1 + + '@aws/lambda-invoke-store@0.0.1': {} + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.4': {} + + '@babel/core@7.28.4': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.3': + dependencies: + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.28.4 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.28.4 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.26.3 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.4 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.4.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + debug: 4.4.3 + lodash.debounce: 4.0.8 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-member-expression-to-functions@7.27.1': + dependencies: + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.28.4 + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-wrap-function': 7.28.3 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helper-wrap-function@7.28.3': + dependencies: + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.28.4': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.4 + + '@babel/parser@7.28.4': + dependencies: + '@babel/types': 7.28.4 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-block-scoping@7.28.4(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-globals': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/template': 7.27.2 + + '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/preset-env@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/compat-data': 7.28.4 + '@babel/core': 7.28.4 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.4) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-block-scoping': 7.28.4(@babel/core@7.28.4) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.4) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.4) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.4) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.4) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.4) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.4) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.4) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.4) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.4) + core-js-compat: 3.46.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/types': 7.28.4 + esutils: 2.0.3 + + '@babel/preset-typescript@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/runtime@7.28.4': {} + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + + '@babel/traverse@7.28.4': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/types': 7.28.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.4': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@bcoe/v8-coverage@0.2.3': {} + + '@colors/colors@1.6.0': {} + + '@coral-xyz/borsh@0.26.0(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))': + dependencies: + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) + bn.js: 5.2.2 + buffer-layout: 1.2.2 + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@defillama/sdk@5.0.175(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@aws-sdk/client-s3': 3.913.0 + '@elastic/elasticsearch': 8.19.1 + '@supercharge/promise-pool': 2.4.0 + axios: 1.12.2 + ethers: 6.15.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + p-limit: 3.1.0 + tron-format-address: 0.1.12 + transitivePeerDependencies: + - '@75lb/nature' + - aws-crt + - bufferutil + - debug + - supports-color + - utf-8-validate + + '@effect/platform-node-shared@0.15.5(@effect/platform@0.65.5(@effect/schema@0.73.4(effect@3.18.4))(effect@3.18.4))(effect@3.18.4)': + dependencies: + '@effect/platform': 0.65.5(@effect/schema@0.73.4(effect@3.18.4))(effect@3.18.4) + '@parcel/watcher': 2.5.1 + effect: 3.18.4 + multipasta: 0.2.7 + + '@effect/platform-node@0.60.5(@effect/platform@0.65.5(@effect/schema@0.73.4(effect@3.18.4))(effect@3.18.4))(bufferutil@4.0.9)(effect@3.18.4)(utf-8-validate@5.0.10)': + dependencies: + '@effect/platform': 0.65.5(@effect/schema@0.73.4(effect@3.18.4))(effect@3.18.4) + '@effect/platform-node-shared': 0.15.5(@effect/platform@0.65.5(@effect/schema@0.73.4(effect@3.18.4))(effect@3.18.4))(effect@3.18.4) + effect: 3.18.4 + mime: 3.0.0 + undici: 6.22.0 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@effect/platform@0.65.5(@effect/schema@0.73.4(effect@3.18.4))(effect@3.18.4)': + dependencies: + '@effect/schema': 0.73.4(effect@3.18.4) + effect: 3.18.4 + find-my-way-ts: 0.1.6 + multipasta: 0.2.7 + + '@effect/schema@0.73.4(effect@3.18.4)': + dependencies: + effect: 3.18.4 + fast-check: 3.23.2 + + '@elastic/elasticsearch@8.19.1': + dependencies: + '@elastic/transport': 8.10.0 + apache-arrow: 21.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@75lb/nature' + - supports-color + + '@elastic/transport@8.10.0': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) + debug: 4.4.3 + hpagent: 1.2.0 + ms: 2.1.3 + secure-json-parse: 3.0.2 + tslib: 2.8.1 + undici: 6.22.0 + transitivePeerDependencies: + - supports-color + + '@esbuild/linux-loong64@0.14.54': + optional: true + + '@ethersproject/bignumber@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + bn.js: 5.2.2 + + '@ethersproject/bytes@5.8.0': + dependencies: + '@ethersproject/logger': 5.8.0 + + '@ethersproject/logger@5.8.0': {} + + '@graphql-typed-document-node/core@3.2.0(graphql@16.11.0)': + dependencies: + graphql: 16.11.0 + + '@hapi/accept@3.2.4': + dependencies: + '@hapi/boom': 7.4.11 + '@hapi/hoek': 8.5.1 + + '@hapi/address@2.1.4': {} + + '@hapi/ammo@3.1.2': + dependencies: + '@hapi/hoek': 8.5.1 + + '@hapi/b64@4.2.1': + dependencies: + '@hapi/hoek': 8.5.1 + + '@hapi/boom@7.4.11': + dependencies: + '@hapi/hoek': 8.5.1 + + '@hapi/bounce@1.3.2': + dependencies: + '@hapi/boom': 7.4.11 + '@hapi/hoek': 8.5.1 + + '@hapi/bourne@1.3.2': {} + + '@hapi/call@5.1.3': + dependencies: + '@hapi/boom': 7.4.11 + '@hapi/hoek': 8.5.1 + + '@hapi/catbox-memory@4.1.1': + dependencies: + '@hapi/boom': 7.4.11 + '@hapi/hoek': 8.5.1 + + '@hapi/catbox@10.2.3': + dependencies: + '@hapi/boom': 7.4.11 + '@hapi/hoek': 8.5.1 + '@hapi/joi': 16.1.8 + '@hapi/podium': 3.4.3 + + '@hapi/content@4.1.1': + dependencies: + '@hapi/boom': 7.4.11 + + '@hapi/cryptiles@4.2.1': + dependencies: + '@hapi/boom': 7.4.11 + + '@hapi/file@1.0.0': {} + + '@hapi/formula@1.2.0': {} + + '@hapi/h2o2@8.3.2': + dependencies: + '@hapi/boom': 7.4.11 + '@hapi/hoek': 8.5.1 + '@hapi/joi': 16.1.8 + '@hapi/wreck': 15.1.0 + + '@hapi/hapi@18.4.1': + dependencies: + '@hapi/accept': 3.2.4 + '@hapi/ammo': 3.1.2 + '@hapi/boom': 7.4.11 + '@hapi/bounce': 1.3.2 + '@hapi/call': 5.1.3 + '@hapi/catbox': 10.2.3 + '@hapi/catbox-memory': 4.1.1 + '@hapi/heavy': 6.2.2 + '@hapi/hoek': 8.5.1 + '@hapi/joi': 15.1.1 + '@hapi/mimos': 4.1.1 + '@hapi/podium': 3.4.3 + '@hapi/shot': 4.1.2 + '@hapi/somever': 2.1.1 + '@hapi/statehood': 6.1.2 + '@hapi/subtext': 6.1.3 + '@hapi/teamwork': 3.3.1 + '@hapi/topo': 3.1.6 + + '@hapi/heavy@6.2.2': + dependencies: + '@hapi/boom': 7.4.11 + '@hapi/hoek': 8.5.1 + '@hapi/joi': 16.1.8 + + '@hapi/hoek@8.5.1': {} + + '@hapi/iron@5.1.4': + dependencies: + '@hapi/b64': 4.2.1 + '@hapi/boom': 7.4.11 + '@hapi/bourne': 1.3.2 + '@hapi/cryptiles': 4.2.1 + '@hapi/hoek': 8.5.1 + + '@hapi/joi@15.1.1': + dependencies: + '@hapi/address': 2.1.4 + '@hapi/bourne': 1.3.2 + '@hapi/hoek': 8.5.1 + '@hapi/topo': 3.1.6 + + '@hapi/joi@16.1.8': + dependencies: + '@hapi/address': 2.1.4 + '@hapi/formula': 1.2.0 + '@hapi/hoek': 8.5.1 + '@hapi/pinpoint': 1.0.2 + '@hapi/topo': 3.1.6 + + '@hapi/mimos@4.1.1': + dependencies: + '@hapi/hoek': 8.5.1 + mime-db: 1.54.0 + + '@hapi/nigel@3.1.1': + dependencies: + '@hapi/hoek': 8.5.1 + '@hapi/vise': 3.1.1 + + '@hapi/pez@4.1.2': + dependencies: + '@hapi/b64': 4.2.1 + '@hapi/boom': 7.4.11 + '@hapi/content': 4.1.1 + '@hapi/hoek': 8.5.1 + '@hapi/nigel': 3.1.1 + + '@hapi/pinpoint@1.0.2': {} + + '@hapi/podium@3.4.3': + dependencies: + '@hapi/hoek': 8.5.1 + '@hapi/joi': 16.1.8 + + '@hapi/shot@4.1.2': + dependencies: + '@hapi/hoek': 8.5.1 + '@hapi/joi': 16.1.8 + + '@hapi/somever@2.1.1': + dependencies: + '@hapi/bounce': 1.3.2 + '@hapi/hoek': 8.5.1 + + '@hapi/statehood@6.1.2': + dependencies: + '@hapi/boom': 7.4.11 + '@hapi/bounce': 1.3.2 + '@hapi/bourne': 1.3.2 + '@hapi/cryptiles': 4.2.1 + '@hapi/hoek': 8.5.1 + '@hapi/iron': 5.1.4 + '@hapi/joi': 16.1.8 + + '@hapi/subtext@6.1.3': + dependencies: + '@hapi/boom': 7.4.11 + '@hapi/bourne': 1.3.2 + '@hapi/content': 4.1.1 + '@hapi/file': 1.0.0 + '@hapi/hoek': 8.5.1 + '@hapi/pez': 4.1.2 + '@hapi/wreck': 15.1.0 + + '@hapi/teamwork@3.3.1': {} + + '@hapi/topo@3.1.6': + dependencies: + '@hapi/hoek': 8.5.1 + + '@hapi/vise@3.1.1': + dependencies: + '@hapi/hoek': 8.5.1 + + '@hapi/wreck@15.1.0': + dependencies: + '@hapi/boom': 7.4.11 + '@hapi/bourne': 1.3.2 + '@hapi/hoek': 8.5.1 + + '@ioredis/commands@1.4.0': {} + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@14.18.63)(ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 14.18.63 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.31 + '@types/node': 14.18.63 + chalk: 4.1.2 + collect-v8-coverage: 1.0.3 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.2.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.3 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.28.4 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.31 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.7 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 14.18.63 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@kwsites/file-exists@1.1.1': + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@kwsites/promise-deferred@1.1.1': {} + + '@noble/curves@1.2.0': + dependencies: + '@noble/hashes': 1.3.2 + + '@noble/curves@1.3.0': + dependencies: + '@noble/hashes': 1.3.3 + + '@noble/curves@1.9.7': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/hashes@1.3.2': {} + + '@noble/hashes@1.3.3': {} + + '@noble/hashes@1.8.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@opentelemetry/api@1.9.0': {} + + '@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.37.0 + + '@opentelemetry/semantic-conventions@1.37.0': {} + + '@paralleldrive/cuid2@2.2.2': + dependencies: + '@noble/hashes': 1.8.0 + + '@parcel/watcher-android-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-x64@2.5.1': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.1': + optional: true + + '@parcel/watcher-win32-arm64@2.5.1': + optional: true + + '@parcel/watcher-win32-ia32@2.5.1': + optional: true + + '@parcel/watcher-win32-x64@2.5.1': + optional: true + + '@parcel/watcher@2.5.1': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 + + '@project-serum/anchor@0.26.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/borsh': 0.26.0(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) + base64-js: 1.5.1 + bn.js: 5.2.2 + bs58: 4.0.1 + buffer-layout: 1.2.2 + camelcase: 6.3.0 + cross-fetch: 3.2.0 + crypto-hash: 1.3.0 + eventemitter3: 4.0.7 + js-sha256: 0.9.0 + pako: 2.1.0 + snake-case: 3.0.4 + superstruct: 0.15.5 + toml: 3.0.0 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + + '@rometools/cli-darwin-arm64@12.1.3': + optional: true + + '@rometools/cli-darwin-x64@12.1.3': + optional: true + + '@rometools/cli-linux-arm64@12.1.3': + optional: true + + '@rometools/cli-linux-x64@12.1.3': + optional: true + + '@rometools/cli-win32-arm64@12.1.3': + optional: true + + '@rometools/cli-win32-x64@12.1.3': + optional: true + + '@scure/base@1.1.9': {} + + '@scure/starknet@1.0.0': + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + + '@sentry/core@6.19.7': + dependencies: + '@sentry/hub': 6.19.7 + '@sentry/minimal': 6.19.7 + '@sentry/types': 6.19.7 + '@sentry/utils': 6.19.7 + tslib: 1.14.1 + + '@sentry/hub@6.19.7': + dependencies: + '@sentry/types': 6.19.7 + '@sentry/utils': 6.19.7 + tslib: 1.14.1 + + '@sentry/minimal@6.19.7': + dependencies: + '@sentry/hub': 6.19.7 + '@sentry/types': 6.19.7 + tslib: 1.14.1 + + '@sentry/node@6.19.7': + dependencies: + '@sentry/core': 6.19.7 + '@sentry/hub': 6.19.7 + '@sentry/types': 6.19.7 + '@sentry/utils': 6.19.7 + cookie: 0.4.2 + https-proxy-agent: 5.0.1 + lru_map: 0.3.3 + tslib: 1.14.1 + transitivePeerDependencies: + - supports-color + + '@sentry/serverless@6.19.7': + dependencies: + '@sentry/minimal': 6.19.7 + '@sentry/node': 6.19.7 + '@sentry/tracing': 6.19.7 + '@sentry/types': 6.19.7 + '@sentry/utils': 6.19.7 + '@types/aws-lambda': 8.10.156 + '@types/express': 4.17.23 + tslib: 1.14.1 + transitivePeerDependencies: + - supports-color + + '@sentry/tracing@6.19.7': + dependencies: + '@sentry/hub': 6.19.7 + '@sentry/minimal': 6.19.7 + '@sentry/types': 6.19.7 + '@sentry/utils': 6.19.7 + tslib: 1.14.1 + + '@sentry/types@6.19.7': {} + + '@sentry/utils@6.19.7': + dependencies: + '@sentry/types': 6.19.7 + tslib: 1.14.1 + + '@serverless/cli@1.6.0': + dependencies: + '@serverless/core': 1.1.2 + '@serverless/template': 1.1.4 + '@serverless/utils': 1.2.0 + ansi-escapes: 4.3.2 + chalk: 2.4.2 + chokidar: 3.6.0 + dotenv: 8.6.0 + figures: 3.2.0 + minimist: 1.2.8 + prettyoutput: 1.2.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - encoding + + '@serverless/component-metrics@1.0.8': + dependencies: + node-fetch: 2.7.0 + shortid: 2.2.17 + transitivePeerDependencies: + - encoding + + '@serverless/components@3.18.2(bufferutil@4.0.9)(inquirer@7.3.3)(utf-8-validate@5.0.10)': + dependencies: + '@serverless/platform-client': 4.5.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@serverless/platform-client-china': 2.4.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@serverless/utils': 4.1.0 + adm-zip: 0.5.16 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + child-process-ext: 2.1.1 + chokidar: 3.6.0 + ci-info: 3.9.0 + dayjs: 1.11.18 + dotenv: 8.6.0 + fastest-levenshtein: 1.0.16 + figures: 3.2.0 + fs-extra: 9.1.0 + got: 11.8.6 + graphlib: 2.1.8 + https-proxy-agent: 5.0.1 + inquirer-autocomplete-prompt: 1.4.0(inquirer@7.3.3) + js-yaml: 3.14.1 + memoizee: 0.4.17 + minimist: 1.2.8 + open: 7.4.2 + prettyoutput: 1.2.0 + ramda: 0.27.2 + semver: 7.7.3 + strip-ansi: 6.0.1 + tencent-serverless-http: 1.3.2 + traverse: 0.6.11 + uuid: 8.3.2 + transitivePeerDependencies: + - bufferutil + - debug + - inquirer + - supports-color + - utf-8-validate + + '@serverless/core@1.1.2': + dependencies: + fs-extra: 7.0.1 + js-yaml: 3.14.1 + package-json: 6.5.0 + ramda: 0.26.1 + semver: 6.3.1 + + '@serverless/dashboard-plugin@5.5.4(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@serverless/event-mocks': 1.1.1 + '@serverless/platform-client': 4.5.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@serverless/utils': 5.20.3 + chalk: 4.1.2 + child-process-ext: 2.1.1 + chokidar: 3.6.0 + cli-color: 2.0.4 + flat: 5.0.2 + fs-extra: 9.1.0 + js-yaml: 4.1.0 + jszip: 3.10.1 + lodash: 4.17.21 + memoizee: 0.4.17 + ncjsm: 4.3.2 + node-dir: 0.1.17 + node-fetch: 2.7.0 + open: 7.4.2 + semver: 7.7.3 + simple-git: 2.48.0 + uuid: 8.3.2 + yamljs: 0.3.0 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - supports-color + - utf-8-validate + + '@serverless/event-mocks@1.1.1': + dependencies: + '@types/lodash': 4.17.20 + lodash: 4.17.21 + + '@serverless/platform-client-china@2.4.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@serverless/utils-china': 1.1.7(bufferutil@4.0.9)(utf-8-validate@5.0.10) + archiver: 5.3.2 + dotenv: 8.6.0 + fast-glob: 3.3.3 + fs-extra: 9.1.0 + got: 11.8.6 + https-proxy-agent: 5.0.1 + js-yaml: 3.14.1 + jszip: 3.10.1 + minimatch: 3.1.2 + querystring: 0.2.1 + run-parallel-limit: 1.1.0 + traverse: 0.6.11 + urlencode: 1.1.0 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@serverless/platform-client@4.5.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + adm-zip: 0.5.16 + archiver: 5.3.2 + axios: 1.12.2 + fast-glob: 3.3.3 + https-proxy-agent: 5.0.1 + ignore: 5.3.2 + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + js-yaml: 3.14.1 + jwt-decode: 2.2.0 + minimatch: 3.1.2 + querystring: 0.2.1 + run-parallel-limit: 1.1.0 + throat: 5.0.0 + traverse: 0.6.11 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + '@serverless/template@1.1.4': + dependencies: + '@serverless/component-metrics': 1.0.8 + '@serverless/core': 1.1.2 + graphlib: 2.1.8 + ramda: 0.26.1 + traverse: 0.6.11 + transitivePeerDependencies: + - encoding + + '@serverless/utils-china@1.1.7(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@tencent-sdk/capi': 2.0.3 + dijkstrajs: 1.0.3 + dot-qs: 0.2.0 + duplexify: 4.1.3 + end-of-stream: 1.4.5 + got: 11.8.6 + https-proxy-agent: 5.0.1 + kafka-node: 5.0.0 + protobufjs: 6.11.4 + qrcode-terminal: 0.12.0 + socket.io-client: 2.5.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + winston: 3.2.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@serverless/utils@1.2.0': + dependencies: + chalk: 2.4.2 + lodash: 4.17.21 + rc: 1.2.8 + type: 2.7.3 + uuid: 3.4.0 + write-file-atomic: 2.4.3 + + '@serverless/utils@4.1.0': + dependencies: + chalk: 4.1.2 + ci-info: 3.9.0 + inquirer: 7.3.3 + js-yaml: 4.1.0 + jwt-decode: 3.1.2 + lodash: 4.17.21 + ncjsm: 4.3.2 + type: 2.7.3 + uuid: 8.3.2 + write-file-atomic: 3.0.3 + + '@serverless/utils@5.20.3': + dependencies: + archive-type: 4.0.0 + chalk: 4.1.2 + ci-info: 3.9.0 + cli-progress-footer: 2.3.3 + content-disposition: 0.5.4 + d: 1.0.2 + decompress: 4.2.1 + event-emitter: 0.3.5 + ext: 1.7.0 + ext-name: 5.0.0 + file-type: 16.5.4 + filenamify: 4.3.0 + get-stream: 6.0.1 + got: 11.8.6 + inquirer: 7.3.3 + js-yaml: 4.1.0 + jwt-decode: 3.1.2 + lodash: 4.17.21 + log: 6.3.2 + log-node: 8.0.3(log@6.3.2) + make-dir: 3.1.0 + memoizee: 0.4.17 + ncjsm: 4.3.2 + p-event: 4.2.0 + supports-color: 8.1.1 + type: 2.7.3 + uni-global: 1.0.0 + uuid: 8.3.2 + write-file-atomic: 3.0.3 + + '@sinclair/typebox@0.27.8': {} + + '@sindresorhus/is@0.14.0': {} + + '@sindresorhus/is@4.6.0': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@smithy/abort-controller@4.2.3': + dependencies: + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/chunked-blob-reader-native@4.2.1': + dependencies: + '@smithy/util-base64': 4.3.0 + tslib: 2.8.1 + + '@smithy/chunked-blob-reader@5.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/config-resolver@4.3.3': + dependencies: + '@smithy/node-config-provider': 4.3.3 + '@smithy/types': 4.8.0 + '@smithy/util-config-provider': 4.2.0 + '@smithy/util-middleware': 4.2.3 + tslib: 2.8.1 + + '@smithy/core@3.17.0': + dependencies: + '@smithy/middleware-serde': 4.2.3 + '@smithy/protocol-http': 5.3.3 + '@smithy/types': 4.8.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-middleware': 4.2.3 + '@smithy/util-stream': 4.5.3 + '@smithy/util-utf8': 4.2.0 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.2.3': + dependencies: + '@smithy/node-config-provider': 4.3.3 + '@smithy/property-provider': 4.2.3 + '@smithy/types': 4.8.0 + '@smithy/url-parser': 4.2.3 + tslib: 2.8.1 + + '@smithy/eventstream-codec@4.2.3': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.8.0 + '@smithy/util-hex-encoding': 4.2.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-browser@4.2.3': + dependencies: + '@smithy/eventstream-serde-universal': 4.2.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-config-resolver@4.3.3': + dependencies: + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-node@4.2.3': + dependencies: + '@smithy/eventstream-serde-universal': 4.2.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-universal@4.2.3': + dependencies: + '@smithy/eventstream-codec': 4.2.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.3.4': + dependencies: + '@smithy/protocol-http': 5.3.3 + '@smithy/querystring-builder': 4.2.3 + '@smithy/types': 4.8.0 + '@smithy/util-base64': 4.3.0 + tslib: 2.8.1 + + '@smithy/hash-blob-browser@4.2.4': + dependencies: + '@smithy/chunked-blob-reader': 5.2.0 + '@smithy/chunked-blob-reader-native': 4.2.1 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/hash-node@4.2.3': + dependencies: + '@smithy/types': 4.8.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/hash-stream-node@4.2.3': + dependencies: + '@smithy/types': 4.8.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/invalid-dependency@4.2.3': + dependencies: + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/is-array-buffer@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/md5-js@4.2.3': + dependencies: + '@smithy/types': 4.8.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/middleware-content-length@4.2.3': + dependencies: + '@smithy/protocol-http': 5.3.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/middleware-endpoint@4.3.4': + dependencies: + '@smithy/core': 3.17.0 + '@smithy/middleware-serde': 4.2.3 + '@smithy/node-config-provider': 4.3.3 + '@smithy/shared-ini-file-loader': 4.3.3 + '@smithy/types': 4.8.0 + '@smithy/url-parser': 4.2.3 + '@smithy/util-middleware': 4.2.3 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.4.4': + dependencies: + '@smithy/node-config-provider': 4.3.3 + '@smithy/protocol-http': 5.3.3 + '@smithy/service-error-classification': 4.2.3 + '@smithy/smithy-client': 4.9.0 + '@smithy/types': 4.8.0 + '@smithy/util-middleware': 4.2.3 + '@smithy/util-retry': 4.2.3 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + + '@smithy/middleware-serde@4.2.3': + dependencies: + '@smithy/protocol-http': 5.3.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/middleware-stack@4.2.3': + dependencies: + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/node-config-provider@4.3.3': + dependencies: + '@smithy/property-provider': 4.2.3 + '@smithy/shared-ini-file-loader': 4.3.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/node-http-handler@4.4.2': + dependencies: + '@smithy/abort-controller': 4.2.3 + '@smithy/protocol-http': 5.3.3 + '@smithy/querystring-builder': 4.2.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/property-provider@4.2.3': + dependencies: + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/protocol-http@5.3.3': + dependencies: + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/querystring-builder@4.2.3': + dependencies: + '@smithy/types': 4.8.0 + '@smithy/util-uri-escape': 4.2.0 + tslib: 2.8.1 + + '@smithy/querystring-parser@4.2.3': + dependencies: + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/service-error-classification@4.2.3': + dependencies: + '@smithy/types': 4.8.0 + + '@smithy/shared-ini-file-loader@4.3.3': + dependencies: + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/signature-v4@5.3.3': + dependencies: + '@smithy/is-array-buffer': 4.2.0 + '@smithy/protocol-http': 5.3.3 + '@smithy/types': 4.8.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-middleware': 4.2.3 + '@smithy/util-uri-escape': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/smithy-client@4.9.0': + dependencies: + '@smithy/core': 3.17.0 + '@smithy/middleware-endpoint': 4.3.4 + '@smithy/middleware-stack': 4.2.3 + '@smithy/protocol-http': 5.3.3 + '@smithy/types': 4.8.0 + '@smithy/util-stream': 4.5.3 + tslib: 2.8.1 + + '@smithy/types@4.8.0': + dependencies: + tslib: 2.8.1 + + '@smithy/url-parser@4.2.3': + dependencies: + '@smithy/querystring-parser': 4.2.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/util-base64@4.3.0': + dependencies: + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-body-length-browser@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-body-length-node@4.2.1': + dependencies: + tslib: 2.8.1 + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-buffer-from@4.2.0': + dependencies: + '@smithy/is-array-buffer': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-config-provider@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-defaults-mode-browser@4.3.3': + dependencies: + '@smithy/property-provider': 4.2.3 + '@smithy/smithy-client': 4.9.0 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/util-defaults-mode-node@4.2.4': + dependencies: + '@smithy/config-resolver': 4.3.3 + '@smithy/credential-provider-imds': 4.2.3 + '@smithy/node-config-provider': 4.3.3 + '@smithy/property-provider': 4.2.3 + '@smithy/smithy-client': 4.9.0 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/util-endpoints@3.2.3': + dependencies: + '@smithy/node-config-provider': 4.3.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/util-hex-encoding@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-middleware@4.2.3': + dependencies: + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/util-retry@4.2.3': + dependencies: + '@smithy/service-error-classification': 4.2.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/util-stream@4.5.3': + dependencies: + '@smithy/fetch-http-handler': 5.3.4 + '@smithy/node-http-handler': 4.4.2 + '@smithy/types': 4.8.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-uri-escape@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-utf8@4.2.0': + dependencies: + '@smithy/util-buffer-from': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-waiter@4.2.3': + dependencies: + '@smithy/abort-controller': 4.2.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + + '@smithy/uuid@1.1.0': + dependencies: + tslib: 2.8.1 + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-numbers@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/errors@2.3.0(typescript@5.9.3)': + dependencies: + chalk: 5.6.2 + commander: 14.0.1 + typescript: 5.9.3 + + '@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.28.4 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@solana/buffer-layout': 4.0.1 + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + agentkeepalive: 4.6.0 + bn.js: 5.2.2 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 9.2.0 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + + '@standard-schema/spec@1.0.0': {} + + '@supercharge/promise-pool@2.4.0': {} + + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + + '@szmarczak/http-timer@1.1.2': + dependencies: + defer-to-connect: 1.1.3 + + '@szmarczak/http-timer@4.0.6': + dependencies: + defer-to-connect: 2.0.1 + + '@tencent-sdk/capi@2.0.3': + dependencies: + '@tencent-sdk/common': 1.0.0 + got: 11.8.6 + + '@tencent-sdk/common@1.0.0': + dependencies: + camelcase: 6.3.0 + type-fest: 1.4.0 + + '@tokenizer/token@0.3.0': {} + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/aws-lambda@8.10.156': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.28.4 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.28.4 + + '@types/body-parser@1.19.6': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 14.18.63 + + '@types/cacheable-request@6.0.3': + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 14.18.63 + '@types/responselike': 1.0.3 + + '@types/command-line-args@5.2.3': {} + + '@types/command-line-usage@5.0.4': {} + + '@types/connect@3.4.38': + dependencies: + '@types/node': 14.18.63 + + '@types/crypto-js@4.2.2': {} + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.8 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.8': {} + + '@types/express-serve-static-core@4.19.7': + dependencies: + '@types/node': 14.18.63 + '@types/qs': 6.14.0 + '@types/range-parser': 1.2.7 + '@types/send': 1.2.0 + + '@types/express@4.17.23': + dependencies: + '@types/body-parser': 1.19.6 + '@types/express-serve-static-core': 4.19.7 + '@types/qs': 6.14.0 + '@types/serve-static': 1.15.9 + + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 14.18.63 + + '@types/http-cache-semantics@4.0.4': {} + + '@types/http-errors@2.0.5': {} + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest@29.5.14': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + + '@types/json-schema@7.0.15': {} + + '@types/keyv@3.1.4': + dependencies: + '@types/node': 14.18.63 + + '@types/lodash@4.17.20': {} + + '@types/long@4.0.2': {} + + '@types/mime@1.3.5': {} + + '@types/node-fetch@2.6.13': + dependencies: + '@types/node': 14.18.63 + form-data: 4.0.4 + + '@types/node@12.20.55': {} + + '@types/node@14.18.63': {} + + '@types/node@22.7.5': + dependencies: + undici-types: 6.19.8 + + '@types/node@24.8.1': + dependencies: + undici-types: 7.14.0 + + '@types/qs@6.14.0': {} + + '@types/range-parser@1.2.7': {} + + '@types/responselike@1.0.3': + dependencies: + '@types/node': 14.18.63 + + '@types/retry@0.12.0': {} + + '@types/send@0.17.5': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 14.18.63 + + '@types/send@1.2.0': + dependencies: + '@types/node': 14.18.63 + + '@types/serve-static@1.15.9': + dependencies: + '@types/http-errors': 2.0.5 + '@types/node': 14.18.63 + '@types/send': 0.17.5 + + '@types/stack-utils@2.0.3': {} + + '@types/triple-beam@1.3.5': {} + + '@types/uuid@8.3.4': {} + + '@types/ws@7.4.7': + dependencies: + '@types/node': 14.18.63 + + '@types/ws@8.18.1': + dependencies: + '@types/node': 14.18.63 + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@webassemblyjs/ast@1.14.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + + '@webassemblyjs/helper-api-error@1.13.2': {} + + '@webassemblyjs/helper-buffer@1.14.1': {} + + '@webassemblyjs/helper-numbers@1.13.2': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + + '@webassemblyjs/helper-wasm-section@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 + + '@webassemblyjs/ieee754@1.13.2': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.13.2': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.13.2': {} + + '@webassemblyjs/wasm-edit@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 + + '@webassemblyjs/wasm-gen@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wasm-opt@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + + '@webassemblyjs/wasm-parser@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wast-printer@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + abi-wan-kanabi@1.0.3: + dependencies: + fs-extra: 10.1.0 + rome: 12.1.3 + typescript: 4.9.5 + yargs: 17.7.2 + + abi-wan-kanabi@2.2.4: + dependencies: + ansicolors: 0.3.2 + cardinal: 2.1.1 + fs-extra: 10.1.0 + yargs: 17.7.2 + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + acorn-import-phases@1.0.4(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + adm-zip@0.5.16: {} + + aes-js@4.0.0-beta.5: {} + + after@0.8.2: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + + ajv-keywords@5.1.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + fast-deep-equal: 3.1.3 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-escapes@3.2.0: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@2.1.1: + optional: true + + ansi-regex@3.0.1: {} + + ansi-regex@4.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansicolors@0.3.2: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + apache-arrow@21.1.0: + dependencies: + '@swc/helpers': 0.5.17 + '@types/command-line-args': 5.2.3 + '@types/command-line-usage': 5.0.4 + '@types/node': 24.8.1 + command-line-args: 6.0.1 + command-line-usage: 7.0.3 + flatbuffers: 25.9.23 + json-bignum: 0.0.3 + tslib: 2.8.1 + transitivePeerDependencies: + - '@75lb/nature' + + aproba@1.2.0: + optional: true + + archive-type@4.0.0: + dependencies: + file-type: 4.4.0 + + archiver-utils@2.1.0: + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 2.3.8 + + archiver-utils@3.0.4: + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + + archiver@5.3.2: + dependencies: + archiver-utils: 2.1.0 + async: 3.2.6 + buffer-crc32: 0.2.13 + readable-stream: 3.6.2 + readdir-glob: 1.1.3 + tar-stream: 2.2.0 + zip-stream: 4.1.1 + + are-we-there-yet@1.1.7: + dependencies: + delegates: 1.0.0 + readable-stream: 2.3.8 + optional: true + + arg@4.1.3: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-back@6.2.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-union@2.1.0: {} + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + arraybuffer.slice@0.0.7: {} + + asap@2.0.6: {} + + async-function@1.0.0: {} + + async@2.6.4: + dependencies: + lodash: 4.17.21 + + async@3.2.6: {} + + asynckit@0.4.0: {} + + at-least-node@1.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + aws-sdk@2.1692.0: + dependencies: + buffer: 4.9.2 + events: 1.1.1 + ieee754: 1.1.13 + jmespath: 0.16.0 + querystring: 0.2.0 + sax: 1.2.1 + url: 0.10.3 + util: 0.12.5 + uuid: 8.0.0 + xml2js: 0.6.2 + + axios@1.12.2: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + babel-jest@29.7.0(@babel/core@7.28.4): + dependencies: + '@babel/core': 7.28.4 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.28.4) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-loader@8.4.1(@babel/core@7.28.4)(webpack@5.102.1(esbuild@0.14.54)): + dependencies: + '@babel/core': 7.28.4 + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 5.102.1(esbuild@0.14.54) + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.27.1 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.4 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.28.0 + + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.4): + dependencies: + '@babel/compat-data': 7.28.4 + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.4): + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + core-js-compat: 3.46.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.4): + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.4): + dependencies: + '@babel/core': 7.28.4 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.4) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.4) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.4) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.4) + + babel-preset-jest@29.6.3(@babel/core@7.28.4): + dependencies: + '@babel/core': 7.28.4 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.4) + + backo2@1.0.2: {} + + balanced-match@1.0.2: {} + + base-x@3.0.11: + dependencies: + safe-buffer: 5.2.1 + + base64-arraybuffer@0.1.4: {} + + base64-js@1.5.1: {} + + baseline-browser-mapping@2.8.18: {} + + bestzip@2.2.1: + dependencies: + archiver: 5.3.2 + async: 3.2.6 + glob: 7.2.3 + which: 2.0.2 + yargs: 16.2.0 + + big.js@5.2.2: {} + + binary-extensions@2.3.0: {} + + binary@0.3.0: + dependencies: + buffers: 0.1.1 + chainsaw: 0.1.0 + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + optional: true + + bl@1.2.3: + dependencies: + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + + bl@2.2.1: + dependencies: + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + blob@0.0.5: {} + + bluebird@3.7.2: {} + + bn.js@5.2.2: {} + + borsh@0.7.0: + dependencies: + bn.js: 5.2.2 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + bowser@2.12.1: {} + + boxen@5.1.2: + dependencies: + ansi-align: 3.0.1 + camelcase: 6.3.0 + chalk: 4.1.2 + cli-boxes: 2.2.1 + string-width: 4.2.3 + type-fest: 0.20.2 + widest-line: 3.1.0 + wrap-ansi: 7.0.0 + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.26.3: + dependencies: + baseline-browser-mapping: 2.8.18 + caniuse-lite: 1.0.30001751 + electron-to-chromium: 1.5.237 + node-releases: 2.0.25 + update-browserslist-db: 1.1.3(browserslist@4.26.3) + + bs-logger@0.2.6: + dependencies: + fast-json-stable-stringify: 2.1.0 + + bs58@4.0.1: + dependencies: + base-x: 3.0.11 + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-alloc-unsafe@1.1.0: {} + + buffer-alloc@1.2.0: + dependencies: + buffer-alloc-unsafe: 1.1.0 + buffer-fill: 1.0.0 + + buffer-crc32@0.2.13: {} + + buffer-equal-constant-time@1.0.1: {} + + buffer-fill@1.0.0: {} + + buffer-from@1.1.2: {} + + buffer-layout@1.2.2: {} + + buffer@4.9.2: + dependencies: + base64-js: 1.5.1 + ieee754: 1.1.13 + isarray: 1.0.0 + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffermaker@1.2.1: + dependencies: + long: 1.1.2 + + buffers@0.1.1: {} + + bufferutil@4.0.9: + dependencies: + node-gyp-build: 4.8.4 + optional: true + + builtin-modules@3.3.0: {} + + cacheable-lookup@5.0.4: {} + + cacheable-request@6.1.0: + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.2.0 + keyv: 3.1.0 + lowercase-keys: 2.0.0 + normalize-url: 4.5.1 + responselike: 1.0.2 + + cacheable-request@7.0.4: + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.2.0 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + + cachedir@2.4.0: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001751: {} + + cardinal@2.1.1: + dependencies: + ansicolors: 0.3.2 + redeyed: 2.1.1 + + chainsaw@0.1.0: + dependencies: + traverse: 0.3.9 + + chalk-template@0.4.0: + dependencies: + chalk: 4.1.2 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.6.2: {} + + char-regex@1.0.2: {} + + chardet@0.7.0: {} + + child-process-ext@2.1.1: + dependencies: + cross-spawn: 6.0.6 + es5-ext: 0.10.64 + log: 6.3.2 + split2: 3.2.2 + stream-promise: 3.2.0 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chownr@1.1.4: + optional: true + + chownr@2.0.0: {} + + chrome-trace-event@1.0.4: {} + + ci-info@2.0.0: {} + + ci-info@3.9.0: {} + + cjs-module-lexer@1.4.3: {} + + clean-stack@2.2.0: {} + + cli-boxes@2.2.1: {} + + cli-color@2.0.4: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-iterator: 2.0.3 + memoizee: 0.4.17 + timers-ext: 0.1.8 + + cli-cursor@2.1.0: + dependencies: + restore-cursor: 2.0.0 + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-progress-footer@2.3.3: + dependencies: + cli-color: 2.0.4 + d: 1.0.2 + es5-ext: 0.10.64 + mute-stream: 0.0.8 + process-utils: 4.0.0 + timers-ext: 0.1.8 + type: 2.7.3 + + cli-sprintf-format@1.1.1: + dependencies: + cli-color: 2.0.4 + es5-ext: 0.10.64 + sprintf-kit: 2.0.2 + supports-color: 6.1.0 + + cli-width@2.2.1: {} + + cli-width@3.0.0: {} + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone-response@1.0.3: + dependencies: + mimic-response: 1.0.1 + + cluster-key-slot@1.1.2: {} + + co@4.6.0: {} + + code-point-at@1.1.0: + optional: true + + collect-v8-coverage@1.0.3: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.4 + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + + colornames@1.1.1: {} + + colors@1.3.3: {} + + colorspace@1.1.4: + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + command-line-args@6.0.1: + dependencies: + array-back: 6.2.2 + find-replace: 5.0.2 + lodash.camelcase: 4.3.0 + typical: 7.3.0 + + command-line-usage@7.0.3: + dependencies: + array-back: 6.2.2 + chalk-template: 0.4.0 + table-layout: 4.1.1 + typical: 7.3.0 + + commander@14.0.1: {} + + commander@2.19.0: {} + + commander@2.20.3: {} + + commander@4.1.1: {} + + commondir@1.0.1: {} + + component-bind@1.0.0: {} + + component-emitter@1.3.1: {} + + component-inherit@0.0.3: {} + + compress-commons@4.1.2: + dependencies: + buffer-crc32: 0.2.13 + crc32-stream: 4.0.3 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + + concat-map@0.0.1: {} + + configstore@5.0.1: + dependencies: + dot-prop: 5.3.0 + graceful-fs: 4.2.11 + make-dir: 3.1.0 + unique-string: 2.0.0 + write-file-atomic: 3.0.3 + xdg-basedir: 4.0.0 + + console-control-strings@1.1.0: + optional: true + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + convert-source-map@2.0.0: {} + + cookie@0.4.2: {} + + cookiejar@2.1.4: {} + + core-js-compat@3.46.0: + dependencies: + browserslist: 4.26.3 + + core-util-is@1.0.3: {} + + crc-32@1.2.2: {} + + crc32-stream@4.0.3: + dependencies: + crc-32: 1.2.2 + readable-stream: 3.6.2 + + create-jest@29.7.0(@types/node@14.18.63)(ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@14.18.63)(ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-require@1.1.1: {} + + cron-parser@2.18.0: + dependencies: + is-nan: 1.3.2 + moment-timezone: 0.5.48 + + cross-fetch@3.2.0: + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + cross-spawn@6.0.6: + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypto-hash@1.3.0: {} + + crypto-js@4.2.0: {} + + crypto-random-string@2.0.0: {} + + cuid@2.1.8: {} + + d@1.0.2: + dependencies: + es5-ext: 0.10.64 + type: 2.7.3 + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + dayjs@1.11.18: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@3.1.0: + dependencies: + ms: 2.0.0 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decompress-response@3.3.0: + dependencies: + mimic-response: 1.0.1 + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + decompress-tar@4.1.1: + dependencies: + file-type: 5.2.0 + is-stream: 1.1.0 + tar-stream: 1.6.2 + + decompress-tarbz2@4.1.1: + dependencies: + decompress-tar: 4.1.1 + file-type: 6.2.0 + is-stream: 1.1.0 + seek-bzip: 1.0.6 + unbzip2-stream: 1.4.3 + + decompress-targz@4.1.1: + dependencies: + decompress-tar: 4.1.1 + file-type: 5.2.0 + is-stream: 1.1.0 + + decompress-unzip@4.0.1: + dependencies: + file-type: 3.9.0 + get-stream: 2.3.1 + pify: 2.3.0 + yauzl: 2.10.0 + + decompress@4.2.1: + dependencies: + decompress-tar: 4.1.1 + decompress-tarbz2: 4.1.1 + decompress-targz: 4.1.1 + decompress-unzip: 4.0.1 + graceful-fs: 4.2.11 + make-dir: 1.3.0 + pify: 2.3.0 + strip-dirs: 2.1.0 + + dedent@1.7.0: {} + + deep-extend@0.6.0: {} + + deepmerge@4.3.1: {} + + defer-to-connect@1.1.3: {} + + defer-to-connect@2.0.1: {} + + deferred@0.7.11: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + next-tick: 1.1.0 + timers-ext: 0.1.8 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delay@5.0.0: {} + + delayed-stream@1.0.0: {} + + delegates@1.0.0: + optional: true + + denque@1.5.1: {} + + denque@2.1.0: {} + + detect-libc@1.0.3: {} + + detect-newline@3.1.0: {} + + dezalgo@1.0.4: + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + + diagnostics@1.1.1: + dependencies: + colorspace: 1.1.4 + enabled: 1.0.2 + kuler: 1.0.1 + + diff-sequences@29.6.3: {} + + diff@4.0.2: {} + + dijkstrajs@1.0.3: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + + dot-qs@0.2.0: {} + + dotenv-expand@5.1.0: {} + + dotenv@10.0.0: {} + + dotenv@8.6.0: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + duplexer3@0.1.5: {} + + duplexify@4.1.3: + dependencies: + end-of-stream: 1.4.5 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.3 + + duration@0.2.2: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + + effect@3.18.4: + dependencies: + '@standard-schema/spec': 1.0.0 + fast-check: 3.23.2 + + electron-to-chromium@1.5.237: {} + + emittery@0.13.1: {} + + emoji-regex@8.0.0: {} + + emojis-list@3.0.0: {} + + enabled@1.0.2: + dependencies: + env-variable: 0.0.6 + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + + engine.io-client@3.5.4(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + component-emitter: 1.3.1 + component-inherit: 0.0.3 + debug: 3.1.0 + engine.io-parser: 2.2.1 + has-cors: 1.1.0 + indexof: 0.0.1 + parseqs: 0.0.6 + parseuri: 0.0.6 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + xmlhttprequest-ssl: 1.6.3 + yeast: 0.1.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + engine.io-parser@2.2.1: + dependencies: + after: 0.8.2 + arraybuffer.slice: 0.0.7 + base64-arraybuffer: 0.1.4 + blob: 0.0.5 + has-binary2: 1.0.3 + + enhanced-resolve@4.5.0: + dependencies: + graceful-fs: 4.2.11 + memory-fs: 0.5.0 + tapable: 1.1.3 + + enhanced-resolve@5.18.3: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + + env-variable@0.0.6: {} + + errno@0.1.8: + dependencies: + prr: 1.0.1 + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.24.0: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@1.7.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + es5-ext@0.10.64: + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 + + es6-iterator@2.0.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + + es6-promisify@6.1.1: {} + + es6-set@0.1.6: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + event-emitter: 0.3.5 + type: 2.7.3 + + es6-symbol@3.1.4: + dependencies: + d: 1.0.2 + ext: 1.7.0 + + es6-weak-map@2.0.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + + esbuild-android-64@0.14.54: + optional: true + + esbuild-android-arm64@0.14.54: + optional: true + + esbuild-darwin-64@0.14.54: + optional: true + + esbuild-darwin-arm64@0.14.54: + optional: true + + esbuild-freebsd-64@0.14.54: + optional: true + + esbuild-freebsd-arm64@0.14.54: + optional: true + + esbuild-linux-32@0.14.54: + optional: true + + esbuild-linux-64@0.14.54: + optional: true + + esbuild-linux-arm64@0.14.54: + optional: true + + esbuild-linux-arm@0.14.54: + optional: true + + esbuild-linux-mips64le@0.14.54: + optional: true + + esbuild-linux-ppc64le@0.14.54: + optional: true + + esbuild-linux-riscv64@0.14.54: + optional: true + + esbuild-linux-s390x@0.14.54: + optional: true + + esbuild-netbsd-64@0.14.54: + optional: true + + esbuild-openbsd-64@0.14.54: + optional: true + + esbuild-sunos-64@0.14.54: + optional: true + + esbuild-windows-32@0.14.54: + optional: true + + esbuild-windows-64@0.14.54: + optional: true + + esbuild-windows-arm64@0.14.54: + optional: true + + esbuild@0.14.54: + optionalDependencies: + '@esbuild/linux-loong64': 0.14.54 + esbuild-android-64: 0.14.54 + esbuild-android-arm64: 0.14.54 + esbuild-darwin-64: 0.14.54 + esbuild-darwin-arm64: 0.14.54 + esbuild-freebsd-64: 0.14.54 + esbuild-freebsd-arm64: 0.14.54 + esbuild-linux-32: 0.14.54 + esbuild-linux-64: 0.14.54 + esbuild-linux-arm: 0.14.54 + esbuild-linux-arm64: 0.14.54 + esbuild-linux-mips64le: 0.14.54 + esbuild-linux-ppc64le: 0.14.54 + esbuild-linux-riscv64: 0.14.54 + esbuild-linux-s390x: 0.14.54 + esbuild-netbsd-64: 0.14.54 + esbuild-openbsd-64: 0.14.54 + esbuild-sunos-64: 0.14.54 + esbuild-windows-32: 0.14.54 + esbuild-windows-64: 0.14.54 + esbuild-windows-arm64: 0.14.54 + + escalade@3.2.0: {} + + escape-goat@2.1.1: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + esniff@1.1.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + + esniff@2.0.1: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.3 + + esprima@4.0.1: {} + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + essentials@1.2.0: + dependencies: + uni-global: 1.0.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + ethers@6.15.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@adraffy/ens-normalize': 1.10.1 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 22.7.5 + aes-js: 4.0.0-beta.5 + tslib: 2.7.0 + ws: 8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + event-emitter@0.3.5: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + + event-target-shim@5.0.1: {} + + eventemitter3@4.0.7: {} + + eventemitter3@5.0.1: {} + + events@1.1.1: {} + + events@3.3.0: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + exit@0.1.2: {} + + expand-template@2.0.3: + optional: true + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + + ext-list@2.2.2: + dependencies: + mime-db: 1.54.0 + + ext-name@5.0.0: + dependencies: + ext-list: 2.2.2 + sort-keys-length: 1.0.1 + + ext@1.7.0: + dependencies: + type: 2.7.3 + + extend@3.0.2: {} + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + extract-files@9.0.0: {} + + eyes@0.1.8: {} + + fast-check@3.23.2: + dependencies: + pure-rand: 6.1.0 + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-safe-stringify@2.1.1: {} + + fast-stable-stringify@1.0.0: {} + + fast-uri@3.1.0: {} + + fast-xml-parser@5.2.5: + dependencies: + strnum: 2.1.1 + + fastest-levenshtein@1.0.16: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + fecha@4.2.3: {} + + figures@2.0.0: + dependencies: + escape-string-regexp: 1.0.5 + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + file-type@16.5.4: + dependencies: + readable-web-to-node-stream: 3.0.4 + strtok3: 6.3.0 + token-types: 4.2.1 + + file-type@3.9.0: {} + + file-type@4.4.0: {} + + file-type@5.2.0: {} + + file-type@6.2.0: {} + + file-uri-to-path@1.0.0: + optional: true + + filename-reserved-regex@2.0.0: {} + + filenamify@4.3.0: + dependencies: + filename-reserved-regex: 2.0.0 + strip-outer: 1.0.1 + trim-repeated: 1.0.0 + + filesize@8.0.7: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-cache-dir@3.3.2: + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + + find-my-way-ts@0.1.6: {} + + find-replace@5.0.2: {} + + find-requires@1.0.0: + dependencies: + es5-ext: 0.10.64 + esniff: 1.1.3 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + flatbuffers@25.9.23: {} + + follow-redirects@1.15.11: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + form-data@3.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + formidable@2.1.5: + dependencies: + '@paralleldrive/cuid2': 2.2.2 + dezalgo: 1.0.4 + once: 1.4.0 + qs: 6.14.0 + + fs-constants@1.0.0: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs-extra@11.3.2: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fs.realpath@1.0.0: {} + + fs2@0.3.16: + dependencies: + d: 1.0.2 + deferred: 0.7.11 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + ext: 1.7.0 + ignore: 5.3.2 + memoizee: 0.4.17 + type: 2.7.3 + + fs@0.0.1-security: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + gauge@2.7.4: + dependencies: + aproba: 1.2.0 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 1.0.2 + strip-ansi: 3.0.1 + wide-align: 1.1.5 + optional: true + + generator-function@2.0.1: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-package-type@0.1.0: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stdin@8.0.0: {} + + get-stream@2.3.1: + dependencies: + object-assign: 4.1.1 + pinkie-promise: 2.0.1 + + get-stream@4.1.0: + dependencies: + pump: 3.0.3 + + get-stream@5.2.0: + dependencies: + pump: 3.0.3 + + get-stream@6.0.1: {} + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + github-from-package@0.0.0: + optional: true + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + global-dirs@3.0.1: + dependencies: + ini: 2.0.0 + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + gopd@1.2.0: {} + + got@11.8.6: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + + got@9.6.0: + dependencies: + '@sindresorhus/is': 0.14.0 + '@szmarczak/http-timer': 1.1.2 + '@types/keyv': 3.1.4 + '@types/responselike': 1.0.3 + cacheable-request: 6.1.0 + decompress-response: 3.3.0 + duplexer3: 0.1.5 + get-stream: 4.1.0 + lowercase-keys: 1.0.1 + mimic-response: 1.0.1 + p-cancelable: 1.1.0 + to-readable-stream: 1.0.0 + url-parse-lax: 3.0.0 + + graceful-fs@4.2.11: {} + + graphlib@2.1.8: + dependencies: + lodash: 4.17.21 + + graphql-request@5.2.0(graphql@16.11.0): + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) + cross-fetch: 3.2.0 + extract-files: 9.0.0 + form-data: 3.0.4 + graphql: 16.11.0 + transitivePeerDependencies: + - encoding + + graphql@16.11.0: {} + + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + + has-bigints@1.1.0: {} + + has-binary2@1.0.3: + dependencies: + isarray: 2.0.1 + + has-cors@1.1.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + has-unicode@2.0.1: + optional: true + + has-yarn@2.1.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hpagent@1.2.0: {} + + html-escaper@2.0.2: {} + + http-cache-semantics@4.2.0: {} + + http2-wrapper@1.0.3: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + human-signals@2.1.0: {} + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.1.13: {} + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + immediate@3.0.6: {} + + import-lazy@2.1.0: {} + + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + indexof@0.0.1: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.3: {} + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ini@2.0.0: {} + + inquirer-autocomplete-prompt@1.4.0(inquirer@7.3.3): + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + figures: 3.2.0 + inquirer: 7.3.3 + run-async: 2.4.1 + rxjs: 6.6.7 + + inquirer@6.5.2: + dependencies: + ansi-escapes: 3.2.0 + chalk: 2.4.2 + cli-cursor: 2.1.0 + cli-width: 2.2.1 + external-editor: 3.1.0 + figures: 2.0.0 + lodash: 4.17.21 + mute-stream: 0.0.7 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 2.1.1 + strip-ansi: 5.2.0 + through: 2.3.8 + + inquirer@7.3.3: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + ioredis@5.8.1: + dependencies: + '@ioredis/commands': 1.4.0 + cluster-key-slot: 1.1.2 + debug: 4.4.3 + denque: 2.1.0 + lodash.defaults: 4.2.0 + lodash.isarguments: 3.1.0 + redis-errors: 1.2.0 + redis-parser: 3.0.0 + standard-as-callback: 2.1.0 + transitivePeerDependencies: + - supports-color + + is-arguments@1.2.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.4: {} + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-ci@2.0.0: + dependencies: + ci-info: 2.0.0 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-docker@2.2.1: {} + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-fullwidth-code-point@1.0.0: + dependencies: + number-is-nan: 1.0.1 + optional: true + + is-fullwidth-code-point@2.0.0: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-fn@2.1.0: {} + + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-installed-globally@0.4.0: + dependencies: + global-dirs: 3.0.1 + is-path-inside: 3.0.3 + + is-map@2.0.3: {} + + is-nan@1.3.2: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + + is-natural-number@4.0.1: {} + + is-negative-zero@2.0.3: {} + + is-npm@5.0.0: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-obj@2.0.0: {} + + is-path-inside@3.0.3: {} + + is-plain-obj@1.1.0: {} + + is-promise@2.2.2: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-stream@1.1.0: {} + + is-stream@2.0.1: {} + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is-typedarray@1.0.0: {} + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + is-yarn-global@0.3.0: {} + + isarray@1.0.0: {} + + isarray@2.0.1: {} + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + isomorphic-fetch@3.0.0: + dependencies: + node-fetch: 2.7.0 + whatwg-fetch: 3.6.20 + transitivePeerDependencies: + - encoding + + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.28.4 + '@babel/parser': 7.28.4 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.28.4 + '@babel/parser': 7.28.4 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.4.3 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.2.0: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + java-invoke-local@0.0.6: {} + + jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + stream-json: 1.9.1 + uuid: 8.3.2 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.7.0 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@14.18.63)(ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@14.18.63)(ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@14.18.63)(ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@14.18.63)(ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3)): + dependencies: + '@babel/core': 7.28.4 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.28.4) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 14.18.63 + ts-node: 10.9.2(@types/node@14.18.63)(typescript@5.9.3) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 14.18.63 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.27.1 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.10 + resolve.exports: 2.0.3 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + chalk: 4.1.2 + cjs-module-lexer: 1.4.3 + collect-v8-coverage: 1.0.3 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.28.4 + '@babel/generator': 7.28.3 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) + '@babel/types': 7.28.4 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.4) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + + jest-worker@27.5.1: + dependencies: + '@types/node': 14.18.63 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest-worker@29.7.0: + dependencies: + '@types/node': 14.18.63 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@14.18.63)(ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@14.18.63)(ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jmespath@0.16.0: {} + + js-sha256@0.9.0: {} + + js-string-escape@1.0.1: {} + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-bignum@0.0.3: {} + + json-buffer@3.0.0: {} + + json-buffer@3.0.1: {} + + json-cycle@1.5.0: {} + + json-parse-even-better-errors@2.3.1: {} + + json-refs@3.0.15: + dependencies: + commander: 4.1.1 + graphlib: 2.1.8 + js-yaml: 3.14.1 + lodash: 4.17.21 + native-promise-only: 0.8.1 + path-loader: 1.0.12 + slash: 3.0.0 + uri-js: 4.4.1 + transitivePeerDependencies: + - supports-color + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stringify-safe@5.0.1: {} + + json5@2.2.3: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonpath-plus@5.1.0: {} + + jsonschema@1.5.0: {} + + jsonwebtoken@8.5.1: + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 5.7.2 + + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + + jwa@1.4.2: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@3.2.2: + dependencies: + jwa: 1.4.2 + safe-buffer: 5.2.1 + + jwt-decode@2.2.0: {} + + jwt-decode@3.1.2: {} + + kafka-node@5.0.0: + dependencies: + optional: 0.1.4 + async: 2.6.4 + binary: 0.3.0 + bl: 2.2.1 + buffer-crc32: 0.2.13 + buffermaker: 1.2.1 + debug: 2.6.9 + denque: 1.5.1 + lodash: 4.17.21 + minimatch: 3.1.2 + nested-error-stacks: 2.1.1 + retry: 0.10.1 + uuid: 3.4.0 + optionalDependencies: + snappy: 6.3.5 + transitivePeerDependencies: + - supports-color + + kafkajs@2.2.4: {} + + keyv@3.1.0: + dependencies: + json-buffer: 3.0.0 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kleur@3.0.3: {} + + kuler@1.0.1: + dependencies: + colornames: 1.1.1 + + latest-version@5.1.0: + dependencies: + package-json: 6.5.0 + + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + + leven@3.1.0: {} + + lie@3.3.0: + dependencies: + immediate: 3.0.6 + + lines-and-columns@1.2.4: {} + + loader-runner@4.3.1: {} + + loader-utils@2.0.4: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + lodash.camelcase@4.3.0: {} + + lodash.debounce@4.0.8: {} + + lodash.defaults@4.2.0: {} + + lodash.difference@4.5.0: {} + + lodash.flatten@4.4.0: {} + + lodash.includes@4.3.0: {} + + lodash.isarguments@3.1.0: {} + + lodash.isboolean@3.0.3: {} + + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + + lodash.memoize@4.1.2: {} + + lodash.once@4.1.1: {} + + lodash.union@4.6.0: {} + + lodash@4.17.21: {} + + log-node@8.0.3(log@6.3.2): + dependencies: + ansi-regex: 5.0.1 + cli-color: 2.0.4 + cli-sprintf-format: 1.1.1 + d: 1.0.2 + es5-ext: 0.10.64 + log: 6.3.2 + sprintf-kit: 2.0.2 + supports-color: 8.1.1 + type: 2.7.3 + + log@6.3.2: + dependencies: + d: 1.0.2 + duration: 0.2.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + sprintf-kit: 2.0.2 + type: 2.7.3 + uni-global: 1.0.0 + + logform@2.7.0: + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.5.0 + triple-beam: 1.4.1 + + long-timeout@0.1.1: {} + + long@1.1.2: {} + + long@4.0.0: {} + + lossless-json@2.0.11: {} + + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + + lowercase-keys@1.0.1: {} + + lowercase-keys@2.0.0: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + lru-queue@0.1.0: + dependencies: + es5-ext: 0.10.64 + + lru_map@0.3.3: {} + + luxon@1.28.1: {} + + make-dir@1.3.0: + dependencies: + pify: 3.0.0 + + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + + make-dir@4.0.0: + dependencies: + semver: 7.7.3 + + make-error@1.3.6: {} + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + map-age-cleaner@0.1.3: + dependencies: + p-defer: 1.0.0 + + math-intrinsics@1.1.0: {} + + media-typer@0.3.0: {} + + memoizee@0.4.17: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-weak-map: 2.0.3 + event-emitter: 0.3.5 + is-promise: 2.2.2 + lru-queue: 0.1.0 + next-tick: 1.1.0 + timers-ext: 0.1.8 + + memory-fs@0.5.0: + dependencies: + errno: 0.1.8 + readable-stream: 2.3.8 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@2.6.0: {} + + mime@3.0.0: {} + + mimic-fn@1.2.0: {} + + mimic-fn@2.1.0: {} + + mimic-fn@3.1.0: {} + + mimic-response@1.0.1: {} + + mimic-response@3.1.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + + minimist@1.2.8: {} + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mkdirp@1.0.4: {} + + moment-timezone@0.5.48: + dependencies: + moment: 2.30.1 + + moment@2.30.1: {} + + ms@2.0.0: {} + + ms@2.1.3: {} + + multipasta@0.2.7: {} + + mute-stream@0.0.7: {} + + mute-stream@0.0.8: {} + + nan@2.23.0: + optional: true + + nanoid@3.3.11: {} + + napi-build-utils@1.0.2: + optional: true + + native-promise-only@0.8.1: {} + + natural-compare@1.4.0: {} + + ncjsm@4.3.2: + dependencies: + builtin-modules: 3.3.0 + deferred: 0.7.11 + es5-ext: 0.10.64 + es6-set: 0.1.6 + ext: 1.7.0 + find-requires: 1.0.0 + fs2: 0.3.16 + type: 2.7.3 + + nco@1.0.1: {} + + neo-async@2.6.2: {} + + nested-error-stacks@2.1.1: {} + + next-tick@1.1.0: {} + + nice-try@1.0.5: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + + node-abi@2.30.1: + dependencies: + semver: 5.7.2 + optional: true + + node-addon-api@7.1.1: {} + + node-dir@0.1.17: + dependencies: + minimatch: 3.1.2 + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.4: + optional: true + + node-int64@0.4.0: {} + + node-releases@2.0.25: {} + + node-schedule@1.3.3: + dependencies: + cron-parser: 2.18.0 + long-timeout: 0.1.1 + sorted-array-functions: 1.3.0 + + noop-logger@0.1.1: + optional: true + + normalize-path@3.0.0: {} + + normalize-url@4.5.1: {} + + normalize-url@6.1.0: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npmlog@4.1.2: + dependencies: + are-we-there-yet: 1.1.7 + console-control-strings: 1.1.0 + gauge: 2.7.4 + set-blocking: 2.0.0 + optional: true + + number-is-nan@1.0.1: + optional: true + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + one-time@0.0.4: {} + + onetime@2.0.1: + dependencies: + mimic-fn: 1.2.0 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + open@7.4.2: + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + + optional@0.1.4: {} + + os-homedir@1.0.2: + optional: true + + os-tmpdir@1.0.2: {} + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-cancelable@1.1.0: {} + + p-cancelable@2.1.1: {} + + p-defer@1.0.0: {} + + p-event@4.2.0: + dependencies: + p-timeout: 3.2.0 + + p-finally@1.0.0: {} + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + + p-memoize@4.0.4: + dependencies: + map-age-cleaner: 0.1.3 + mimic-fn: 3.1.0 + p-settle: 4.1.1 + + p-queue@6.6.2: + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + + p-reflect@2.1.0: {} + + p-retry@4.6.2: + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + + p-settle@4.1.1: + dependencies: + p-limit: 2.3.0 + p-reflect: 2.1.0 + + p-timeout@3.2.0: + dependencies: + p-finally: 1.0.0 + + p-try@2.2.0: {} + + package-json@6.5.0: + dependencies: + got: 9.6.0 + registry-auth-token: 4.2.2 + registry-url: 5.1.0 + semver: 6.3.1 + + pako@1.0.11: {} + + pako@2.1.0: {} + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parseqs@0.0.6: {} + + parseuri@0.0.6: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@2.0.1: {} + + path-key@3.1.1: {} + + path-loader@1.0.12: + dependencies: + native-promise-only: 0.8.1 + superagent: 7.1.6 + transitivePeerDependencies: + - supports-color + + path-parse@1.0.7: {} + + path-type@4.0.0: {} + + path2@0.1.0: {} + + path@0.12.7: + dependencies: + process: 0.11.10 + util: 0.10.4 + + peek-readable@4.1.0: {} + + pend@1.2.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pify@2.3.0: {} + + pify@3.0.0: {} + + pinkie-promise@2.0.1: + dependencies: + pinkie: 2.0.4 + + pinkie@2.0.4: {} + + pirates@4.0.7: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + please-upgrade-node@3.2.0: + dependencies: + semver-compare: 1.0.0 + + portfinder@1.0.38: + dependencies: + async: 3.2.6 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + possible-typed-array-names@1.1.0: {} + + postgres@3.4.7: {} + + prebuild-install@5.3.0: + dependencies: + detect-libc: 1.0.3 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp: 0.5.6 + napi-build-utils: 1.0.2 + node-abi: 2.30.1 + noop-logger: 0.1.1 + npmlog: 4.1.2 + os-homedir: 1.0.2 + pump: 2.0.1 + rc: 1.2.8 + simple-get: 2.8.2 + tar-fs: 1.16.6 + tunnel-agent: 0.6.0 + which-pm-runs: 1.1.0 + optional: true + + prepend-http@2.0.0: {} + + prettier@2.8.8: {} + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + prettyoutput@1.2.0: + dependencies: + colors: 1.3.3 + commander: 2.19.0 + lodash: 4.17.21 + + process-nextick-args@2.0.1: {} + + process-utils@4.0.0: + dependencies: + ext: 1.7.0 + fs2: 0.3.16 + memoizee: 0.4.17 + type: 2.7.3 + + process@0.11.10: {} + + promise-queue@2.2.5: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + protobufjs@6.11.4: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/long': 4.0.2 + '@types/node': 14.18.63 + long: 4.0.0 + + proxy-from-env@1.1.0: {} + + prr@1.0.1: {} + + pump@1.0.3: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + optional: true + + pump@2.0.1: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + optional: true + + pump@3.0.3: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + + punycode@1.3.2: {} + + punycode@2.3.1: {} + + pupa@2.1.1: + dependencies: + escape-goat: 2.1.1 + + pure-rand@6.1.0: {} + + qrcode-terminal@0.12.0: {} + + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + + querystring@0.2.0: {} + + querystring@0.2.1: {} + + queue-microtask@1.2.3: {} + + quick-lru@5.1.1: {} + + ramda@0.26.1: {} + + ramda@0.27.2: {} + + ramda@0.28.0: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + react-is@18.3.1: {} + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readable-stream@4.7.0: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readable-web-to-node-stream@3.0.4: + dependencies: + readable-stream: 4.7.0 + + readdir-glob@1.1.3: + dependencies: + minimatch: 5.1.6 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + redeyed@2.1.1: + dependencies: + esprima: 4.0.1 + + redis-errors@1.2.0: {} + + redis-parser@3.0.0: + dependencies: + redis-errors: 1.2.0 + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regenerate-unicode-properties@10.2.2: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + regexpu-core@6.4.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.2 + regjsgen: 0.8.0 + regjsparser: 0.13.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.1 + + registry-auth-token@4.2.2: + dependencies: + rc: 1.2.8 + + registry-url@5.1.0: + dependencies: + rc: 1.2.8 + + regjsgen@0.8.0: {} + + regjsparser@0.13.0: + dependencies: + jsesc: 3.1.0 + + replaceall@0.1.6: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-alpn@1.2.1: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@5.0.0: {} + + resolve.exports@2.0.3: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + responselike@1.0.2: + dependencies: + lowercase-keys: 1.0.1 + + responselike@2.0.1: + dependencies: + lowercase-keys: 2.0.0 + + restore-cursor@2.0.0: + dependencies: + onetime: 2.0.1 + signal-exit: 3.0.7 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + retry@0.10.1: {} + + retry@0.13.1: {} + + reusify@1.1.0: {} + + rome@12.1.3: + optionalDependencies: + '@rometools/cli-darwin-arm64': 12.1.3 + '@rometools/cli-darwin-x64': 12.1.3 + '@rometools/cli-linux-arm64': 12.1.3 + '@rometools/cli-linux-x64': 12.1.3 + '@rometools/cli-win32-arm64': 12.1.3 + '@rometools/cli-win32-x64': 12.1.3 + + rpc-websockets@9.2.0: + dependencies: + '@swc/helpers': 0.5.17 + '@types/uuid': 8.3.4 + '@types/ws': 8.18.1 + buffer: 6.0.3 + eventemitter3: 5.0.1 + uuid: 8.3.2 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + run-async@2.4.1: {} + + run-parallel-limit@1.1.0: + dependencies: + queue-microtask: 1.2.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@6.6.7: + dependencies: + tslib: 1.14.1 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safe-stable-stringify@2.5.0: {} + + safer-buffer@2.1.2: {} + + sax@1.2.1: {} + + schema-utils@2.7.1: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + schema-utils@4.3.3: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + + secure-json-parse@3.0.2: {} + + seek-bzip@1.0.6: + dependencies: + commander: 2.20.3 + + semver-compare@1.0.0: {} + + semver-diff@3.1.1: + dependencies: + semver: 6.3.1 + + semver@5.7.2: {} + + semver@6.3.1: {} + + semver@7.5.3: + dependencies: + lru-cache: 6.0.0 + + semver@7.7.3: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + serverless-esbuild@1.55.1(bufferutil@4.0.9)(esbuild@0.14.54)(utf-8-validate@5.0.10): + dependencies: + '@effect/platform': 0.65.5(@effect/schema@0.73.4(effect@3.18.4))(effect@3.18.4) + '@effect/platform-node': 0.60.5(@effect/platform@0.65.5(@effect/schema@0.73.4(effect@3.18.4))(effect@3.18.4))(bufferutil@4.0.9)(effect@3.18.4)(utf-8-validate@5.0.10) + '@effect/schema': 0.73.4(effect@3.18.4) + acorn: 8.15.0 + acorn-walk: 8.3.4 + anymatch: 3.1.3 + archiver: 5.3.2 + bestzip: 2.2.1 + chokidar: 3.6.0 + effect: 3.18.4 + esbuild: 0.14.54 + execa: 5.1.1 + fs-extra: 11.3.2 + globby: 11.1.0 + p-map: 4.0.0 + ramda: 0.28.0 + semver: 7.7.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + serverless-offline@7.1.0(bufferutil@4.0.9)(serverless@2.72.4(bufferutil@4.0.9)(inquirer@7.3.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): + dependencies: + '@hapi/boom': 7.4.11 + '@hapi/h2o2': 8.3.2 + '@hapi/hapi': 18.4.1 + aws-sdk: 2.1692.0 + boxen: 5.1.2 + chalk: 4.1.2 + cuid: 2.1.8 + execa: 5.1.1 + extend: 3.0.2 + fs-extra: 9.1.0 + java-invoke-local: 0.0.6 + js-string-escape: 1.0.1 + jsonpath-plus: 5.1.0 + jsonschema: 1.5.0 + jsonwebtoken: 8.5.1 + jszip: 3.10.1 + luxon: 1.28.1 + node-fetch: 2.7.0 + node-schedule: 1.3.3 + object.fromentries: 2.0.8 + p-memoize: 4.0.4 + p-queue: 6.6.2 + p-retry: 4.6.2 + please-upgrade-node: 3.2.0 + portfinder: 1.0.38 + semver: 7.7.3 + serverless: 2.72.4(bufferutil@4.0.9)(inquirer@7.3.3)(utf-8-validate@5.0.10) + update-notifier: 5.1.0 + velocityjs: 2.1.5 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + serverless-plugin-log-retention@2.1.0: + dependencies: + nco: 1.0.1 + semver: 7.5.3 + + serverless-prune-plugin@1.6.1(serverless@2.72.4(bufferutil@4.0.9)(inquirer@7.3.3)(utf-8-validate@5.0.10)): + dependencies: + bluebird: 3.7.2 + serverless: 2.72.4(bufferutil@4.0.9)(inquirer@7.3.3)(utf-8-validate@5.0.10) + + serverless@2.72.4(bufferutil@4.0.9)(inquirer@7.3.3)(utf-8-validate@5.0.10): + dependencies: + '@serverless/cli': 1.6.0 + '@serverless/components': 3.18.2(bufferutil@4.0.9)(inquirer@7.3.3)(utf-8-validate@5.0.10) + '@serverless/dashboard-plugin': 5.5.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@serverless/platform-client': 4.5.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@serverless/utils': 5.20.3 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + archiver: 5.3.2 + aws-sdk: 2.1692.0 + bluebird: 3.7.2 + boxen: 5.1.2 + cachedir: 2.4.0 + chalk: 4.1.2 + child-process-ext: 2.1.1 + ci-info: 3.9.0 + cli-progress-footer: 2.3.3 + d: 1.0.2 + dayjs: 1.11.18 + decompress: 4.2.1 + dotenv: 10.0.0 + dotenv-expand: 5.1.0 + essentials: 1.2.0 + ext: 1.7.0 + fastest-levenshtein: 1.0.16 + filesize: 8.0.7 + fs-extra: 9.1.0 + get-stdin: 8.0.0 + globby: 11.1.0 + got: 11.8.6 + graceful-fs: 4.2.11 + https-proxy-agent: 5.0.1 + is-docker: 2.2.1 + js-yaml: 4.1.0 + json-cycle: 1.5.0 + json-refs: 3.0.15 + lodash: 4.17.21 + memoizee: 0.4.17 + micromatch: 4.0.8 + ncjsm: 4.3.2 + node-fetch: 2.7.0 + open: 7.4.2 + path2: 0.1.0 + process-utils: 4.0.0 + promise-queue: 2.2.5 + replaceall: 0.1.6 + semver: 7.7.3 + signal-exit: 3.0.7 + strip-ansi: 6.0.1 + tabtab: 3.0.2 + tar: 6.2.1 + timers-ext: 0.1.8 + type: 2.7.3 + untildify: 4.0.0 + uuid: 8.3.2 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - inquirer + - supports-color + - utf-8-validate + + set-blocking@2.0.0: + optional: true + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + setimmediate@1.0.5: {} + + shebang-command@1.2.0: + dependencies: + shebang-regex: 1.0.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@1.0.0: {} + + shebang-regex@3.0.0: {} + + shortid@2.2.17: + dependencies: + nanoid: 3.3.11 + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + simple-concat@1.0.1: + optional: true + + simple-get@2.8.2: + dependencies: + decompress-response: 3.3.0 + once: 1.4.0 + simple-concat: 1.0.1 + optional: true + + simple-git@2.48.0: + dependencies: + '@kwsites/file-exists': 1.1.1 + '@kwsites/promise-deferred': 1.1.1 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + simple-git@3.28.0: + dependencies: + '@kwsites/file-exists': 1.1.1 + '@kwsites/promise-deferred': 1.1.1 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + simple-swizzle@0.2.4: + dependencies: + is-arrayish: 0.3.4 + + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + + snappy@6.3.5: + dependencies: + bindings: 1.5.0 + nan: 2.23.0 + prebuild-install: 5.3.0 + optional: true + + socket.io-client@2.5.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + backo2: 1.0.2 + component-bind: 1.0.0 + component-emitter: 1.3.1 + debug: 3.1.0 + engine.io-client: 3.5.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) + has-binary2: 1.0.3 + indexof: 0.0.1 + parseqs: 0.0.6 + parseuri: 0.0.6 + socket.io-parser: 3.3.4 + to-array: 0.1.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + socket.io-parser@3.3.4: + dependencies: + component-emitter: 1.3.1 + debug: 3.1.0 + isarray: 2.0.1 + transitivePeerDependencies: + - supports-color + + sort-keys-length@1.0.1: + dependencies: + sort-keys: 1.1.2 + + sort-keys@1.1.2: + dependencies: + is-plain-obj: 1.1.0 + + sorted-array-functions@1.3.0: {} + + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + split2@3.2.2: + dependencies: + readable-stream: 3.6.2 + + sprintf-js@1.0.3: {} + + sprintf-kit@2.0.2: + dependencies: + es5-ext: 0.10.64 + + stack-trace@0.0.10: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + standard-as-callback@2.1.0: {} + + starknet@5.29.0: + dependencies: + '@noble/curves': 1.3.0 + '@scure/base': 1.1.9 + '@scure/starknet': 1.0.0 + abi-wan-kanabi-v1: abi-wan-kanabi@1.0.3 + abi-wan-kanabi-v2: abi-wan-kanabi@2.2.4 + isomorphic-fetch: 3.0.0 + lossless-json: 2.0.11 + pako: 2.1.0 + url-join: 4.0.1 + transitivePeerDependencies: + - encoding + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + stream-chain@2.2.5: {} + + stream-json@1.9.1: + dependencies: + stream-chain: 2.2.5 + + stream-promise@3.2.0: + dependencies: + 2-thenable: 1.0.0 + es5-ext: 0.10.64 + is-stream: 1.1.0 + + stream-shift@1.0.3: {} + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-width@1.0.2: + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + strip-ansi: 3.0.1 + optional: true + + string-width@2.1.1: + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@3.0.1: + dependencies: + ansi-regex: 2.1.1 + optional: true + + strip-ansi@4.0.0: + dependencies: + ansi-regex: 3.0.1 + + strip-ansi@5.2.0: + dependencies: + ansi-regex: 4.1.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@4.0.0: {} + + strip-dirs@2.1.0: + dependencies: + is-natural-number: 4.0.1 + + strip-final-newline@2.0.0: {} + + strip-json-comments@2.0.1: {} + + strip-json-comments@3.1.1: {} + + strip-outer@1.0.1: + dependencies: + escape-string-regexp: 1.0.5 + + strnum@2.1.1: {} + + strtok3@6.3.0: + dependencies: + '@tokenizer/token': 0.3.0 + peek-readable: 4.1.0 + + superagent@7.1.6: + dependencies: + component-emitter: 1.3.1 + cookiejar: 2.1.4 + debug: 4.4.3 + fast-safe-stringify: 2.1.1 + form-data: 4.0.4 + formidable: 2.1.5 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.14.0 + readable-stream: 3.6.2 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + + superstruct@0.15.5: {} + + superstruct@2.0.2: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@6.1.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + table-layout@4.1.1: + dependencies: + array-back: 6.2.2 + wordwrapjs: 5.1.1 + + tabtab@3.0.2: + dependencies: + debug: 4.4.3 + es6-promisify: 6.1.1 + inquirer: 6.5.2 + minimist: 1.2.8 + mkdirp: 0.5.6 + untildify: 3.0.3 + transitivePeerDependencies: + - supports-color + + tapable@1.1.3: {} + + tapable@2.3.0: {} + + tar-fs@1.16.6: + dependencies: + chownr: 1.1.4 + mkdirp: 0.5.6 + pump: 1.0.3 + tar-stream: 1.6.2 + optional: true + + tar-stream@1.6.2: + dependencies: + bl: 1.2.3 + buffer-alloc: 1.2.0 + end-of-stream: 1.4.5 + fs-constants: 1.0.0 + readable-stream: 2.3.8 + to-buffer: 1.2.2 + xtend: 4.0.2 + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.5 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + tencent-serverless-http@1.3.2: + dependencies: + type-is: 1.6.18 + + terser-webpack-plugin@5.3.14(esbuild@0.14.54)(webpack@5.102.1(esbuild@0.14.54)): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + serialize-javascript: 6.0.2 + terser: 5.44.0 + webpack: 5.102.1(esbuild@0.14.54) + optionalDependencies: + esbuild: 0.14.54 + + terser@5.44.0: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.15.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + text-encoding-utf-8@1.0.2: {} + + text-hex@1.0.0: {} + + throat@5.0.0: {} + + through@2.3.8: {} + + timers-ext@0.1.8: + dependencies: + es5-ext: 0.10.64 + next-tick: 1.1.0 + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + tmpl@1.0.5: {} + + to-array@0.1.4: {} + + to-buffer@1.2.2: + dependencies: + isarray: 2.0.5 + safe-buffer: 5.2.1 + typed-array-buffer: 1.0.3 + + to-readable-stream@1.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + token-types@4.2.1: + dependencies: + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + + toml@3.0.0: {} + + tr46@0.0.3: {} + + traverse@0.3.9: {} + + traverse@0.6.11: + dependencies: + gopd: 1.2.0 + typedarray.prototype.slice: 1.0.5 + which-typed-array: 1.1.19 + + trim-repeated@1.0.0: + dependencies: + escape-string-regexp: 1.0.5 + + triple-beam@1.4.1: {} + + tron-format-address@0.1.12: {} + + ts-jest@29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.14.54)(jest-util@29.7.0)(jest@29.7.0(@types/node@14.18.63)(ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3)))(typescript@5.9.3): + dependencies: + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + handlebars: 4.7.8 + jest: 29.7.0(@types/node@14.18.63)(ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3)) + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.7.3 + type-fest: 4.41.0 + typescript: 5.9.3 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.28.4 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.28.4) + esbuild: 0.14.54 + jest-util: 29.7.0 + + ts-loader@8.4.0(typescript@5.9.3)(webpack@5.102.1(esbuild@0.14.54)): + dependencies: + chalk: 4.1.2 + enhanced-resolve: 4.5.0 + loader-utils: 2.0.4 + micromatch: 4.0.8 + semver: 7.7.3 + typescript: 5.9.3 + webpack: 5.102.1(esbuild@0.14.54) + + ts-node@10.9.2(@types/node@14.18.63)(typescript@5.9.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 14.18.63 + acorn: 8.15.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.9.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tslib@1.14.1: {} + + tslib@2.7.0: {} + + tslib@2.8.1: {} + + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + optional: true + + type-detect@4.0.8: {} + + type-fest@0.20.2: {} + + type-fest@0.21.3: {} + + type-fest@1.4.0: {} + + type-fest@4.41.0: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + type@2.7.3: {} + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typedarray-to-buffer@3.1.5: + dependencies: + is-typedarray: 1.0.0 + + typedarray.prototype.slice@1.0.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + get-proto: 1.0.1 + math-intrinsics: 1.1.0 + typed-array-buffer: 1.0.3 + typed-array-byte-offset: 1.0.4 + + typescript@4.9.5: {} + + typescript@5.9.3: {} + + typical@7.3.0: {} + + uglify-js@3.19.3: + optional: true + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 + + undici-types@6.19.8: {} + + undici-types@7.14.0: {} + + undici@6.22.0: {} + + uni-global@1.0.0: + dependencies: + type: 2.7.3 + + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.2.0 + + unicode-match-property-value-ecmascript@2.2.1: {} + + unicode-property-aliases-ecmascript@2.2.0: {} + + unique-string@2.0.0: + dependencies: + crypto-random-string: 2.0.0 + + universalify@0.1.2: {} + + universalify@2.0.1: {} + + untildify@3.0.3: {} + + untildify@4.0.0: {} + + update-browserslist-db@1.1.3(browserslist@4.26.3): + dependencies: + browserslist: 4.26.3 + escalade: 3.2.0 + picocolors: 1.1.1 + + update-notifier@5.1.0: + dependencies: + boxen: 5.1.2 + chalk: 4.1.2 + configstore: 5.0.1 + has-yarn: 2.1.0 + import-lazy: 2.1.0 + is-ci: 2.0.0 + is-installed-globally: 0.4.0 + is-npm: 5.0.0 + is-yarn-global: 0.3.0 + latest-version: 5.1.0 + pupa: 2.1.1 + semver: 7.7.3 + semver-diff: 3.1.1 + xdg-basedir: 4.0.0 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + url-join@4.0.1: {} + + url-parse-lax@3.0.0: + dependencies: + prepend-http: 2.0.0 + + url@0.10.3: + dependencies: + punycode: 1.3.2 + querystring: 0.2.0 + + urlencode@1.1.0: + dependencies: + iconv-lite: 0.4.24 + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.4 + optional: true + + util-deprecate@1.0.2: {} + + util@0.10.4: + dependencies: + inherits: 2.0.3 + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.2.0 + is-generator-function: 1.1.2 + is-typed-array: 1.1.15 + which-typed-array: 1.1.19 + + uuid@3.4.0: {} + + uuid@8.0.0: {} + + uuid@8.3.2: {} + + v8-compile-cache-lib@3.0.1: {} + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + velocityjs@2.1.5: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + watchpack@2.4.4: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + webidl-conversions@3.0.1: {} + + webpack-sources@3.3.3: {} + + webpack@5.102.1(esbuild@0.14.54): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.15.0 + acorn-import-phases: 1.0.4(acorn@8.15.0) + browserslist: 4.26.3 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.3 + es-module-lexer: 1.7.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.1 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.0 + terser-webpack-plugin: 5.3.14(esbuild@0.14.54)(webpack@5.102.1(esbuild@0.14.54)) + watchpack: 2.4.4 + webpack-sources: 3.3.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + whatwg-fetch@3.6.20: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-pm-runs@1.1.0: + optional: true + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wide-align@1.1.5: + dependencies: + string-width: 1.0.2 + optional: true + + widest-line@3.1.0: + dependencies: + string-width: 4.2.3 + + winston-transport@4.9.0: + dependencies: + logform: 2.7.0 + readable-stream: 3.6.2 + triple-beam: 1.4.1 + + winston@3.2.1: + dependencies: + async: 2.6.4 + diagnostics: 1.1.1 + is-stream: 1.1.0 + logform: 2.7.0 + one-time: 0.0.4 + readable-stream: 3.6.2 + stack-trace: 0.0.10 + triple-beam: 1.4.1 + winston-transport: 4.9.0 + + wordwrap@1.0.0: {} + + wordwrapjs@5.1.1: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + write-file-atomic@2.4.3: + dependencies: + graceful-fs: 4.2.11 + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + write-file-atomic@3.0.3: + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + xdg-basedir@4.0.0: {} + + xml2js@0.6.2: + dependencies: + sax: 1.2.1 + xmlbuilder: 11.0.1 + + xmlbuilder@11.0.1: {} + + xmlhttprequest-ssl@1.6.3: {} + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yaml-ast-parser@0.0.43: {} + + yamljs@0.3.0: + dependencies: + argparse: 1.0.10 + glob: 7.2.3 + + yargs-parser@20.2.9: {} + + yargs-parser@21.1.1: {} + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yeast@0.1.2: {} + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} + + zip-stream@4.1.1: + dependencies: + archiver-utils: 3.0.4 + compress-commons: 4.1.2 + readable-stream: 3.6.2 diff --git a/coins/tsconfig.json b/coins/tsconfig.json index ef1415800d..aec0ebfc2d 100644 --- a/coins/tsconfig.json +++ b/coins/tsconfig.json @@ -34,7 +34,6 @@ ], "exclude": [ "src/setupTestEnv.js", - "DefiLlama-Adapters/**/*.js", "src/**/*js", "src/cli/backfillDexVolumes" ] diff --git a/defi/.gitignore b/defi/.gitignore index b0753f83d0..4bf4bb89d9 100644 --- a/defi/.gitignore +++ b/defi/.gitignore @@ -29,4 +29,9 @@ src/adaptors/cli/*/output src/api2/metadata.json .cache src/api2/.api2-cache -*._lhash \ No newline at end of file +*._lhash + +dimension-adapters +DefiLlama-Adapters + +validation_report.json \ No newline at end of file diff --git a/defi/DefiLlama-Adapters b/defi/DefiLlama-Adapters deleted file mode 160000 index 88ebec403c..0000000000 --- a/defi/DefiLlama-Adapters +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 88ebec403c7a9bb39cc29ddafe0ca9f1ea044f40 diff --git a/defi/README.md b/defi/README.md index 59805cad3d..4567d8e170 100644 --- a/defi/README.md +++ b/defi/README.md @@ -54,19 +54,6 @@ Run general scripts: export AWS_REGION='eu-central-1' && export tableName='prod-table' && npx ts-node src/