diff --git a/src/lib/chain-mapping/chains.ts b/src/lib/chain-mapping/chains.ts index d1a4a355..b932bbe0 100644 --- a/src/lib/chain-mapping/chains.ts +++ b/src/lib/chain-mapping/chains.ts @@ -104,6 +104,21 @@ const chainMapping: Record = { FVMT: "Filecoin Testnet", HEDERA: "Hedera", HEDERAT: "Hedera Testnet", + BERAT2: "Berachain Testnet", + BERA: "Berachain Mainnet", + BNB: "BNB Chain Mainnet", + BNT: "BNB Chain Testnet", + POLYGONA: "Polygon Amoy Testnet", + MOVEMENTT: "Movement Testnet", + HYPERLIQUID: "Hyperliquid Mainnet", + HYPERLIQUIDT: "Hyperliquid Testnet", + XLM: "Stellar Mainnet", + XLMT: "Stellar Testnet", + SONIC: "Sonic Mainnet", + BTC: "Bitcoin Mainnet", + BTCT: "Bitcoin Testnet", + BCH: "Bitcoin Cash Mainnet", + BCHT: "Bitcoin Cash Testnet", }; /** diff --git a/src/lib/icons/data/chain-icons.ts b/src/lib/icons/data/chain-icons.ts index 0f41e1fd..4852b13e 100644 --- a/src/lib/icons/data/chain-icons.ts +++ b/src/lib/icons/data/chain-icons.ts @@ -173,4 +173,20 @@ export const chainDictionary: { [key: string]: ChainInfo } = { secret2t: { name: "Secret Testnet", icon: "/icons/secret.png" }, hedera: { name: "Hedera", icon: "/icons/hedera.svg" }, hederat: { name: "Hedera Testnet", icon: "/icons/hedera.svg" }, + polygona: { name: "Polygon", icon: "/icons/polygon-pos.svg" }, + bnb: { name: "BNB Chain", icon: "/icons/binance-smart-chain.svg" }, + bnt: { name: "BNB Chain Testnet", icon: "/icons/binance-smart-chain.svg" }, + bera: { name: "Berachain", icon: "/icons/berachain-icon.webp" }, + berat: { name: "Berachain Testnet", icon: "/icons/berachain-icon.webp" }, + hyperliquid: { name: "Hyperliquid", icon: "/icons/HL-green.svg" }, + hyperliquidt: { name: "Hyperliquid Testnet", icon: "/icons/HL-green.svg" }, + xlm: { name: "Stellar", icon: "/icons/stellar.svg" }, + xlmt: { name: "Stellar Testnet", icon: "/icons/stellar.svg" }, + sonic: { name: "Sonic", icon: "/icons/sonic.svg" }, + union: { name: "Union", icon: "/icons/union.svg" }, + uniont: { name: "Union Testnet", icon: "/icons/union.svg" }, + btct: { name: "Bitcoin Testnet", icon: "/icons/bitcoin.svg" }, + bch: { name: "Bitcoin Cash", icon: "/icons/bitcoincash.svg" }, + bcht: { name: "Bitcoin Cash Testnet", icon: "/icons/bitcoincash.svg" }, + avaxt: { name: "Avalanche Testnet", icon: "/icons/avalanche.svg" }, }; diff --git a/src/redis/resources/index/IndexTopChainsResource.ts b/src/redis/resources/index/IndexTopChainsResource.ts index 41bf2c2f..80f02e45 100644 --- a/src/redis/resources/index/IndexTopChainsResource.ts +++ b/src/redis/resources/index/IndexTopChainsResource.ts @@ -87,7 +87,18 @@ export class IndexTopChainsResource extends RedisResourceBase chain.toLowerCase().trim()); const testnetChains = [ diff --git a/src/utils/db.ts b/src/utils/db.ts index 7f59098b..e7430659 100644 --- a/src/utils/db.ts +++ b/src/utils/db.ts @@ -10,6 +10,7 @@ import { MaskPassword, JSONStringify } from './fmt'; interface DbConnection { db: PostgresJsDatabase; + sqlClient: ReturnType; lastUsed: number; inUse: boolean; createdAt: number; @@ -194,10 +195,11 @@ class DbConnectionPoolClass { for (let attempt = 0; attempt < urls.length; attempt++) { try { const url = await this.getNextValidUrl(urls); - const db = await this.createDbConnection(url); + const { db, sqlClient } = await this.createDbConnection(url); await db.select({ now: sql`NOW()` }).from(sql`(SELECT 1) AS foo`).limit(1); return { db, + sqlClient, lastUsed: Date.now(), inUse: false, createdAt: Date.now(), @@ -225,7 +227,7 @@ class DbConnectionPoolClass { throw lastError || new Error('Failed to connect to any database URL'); } - private async createDbConnection(url: string): Promise { + private async createDbConnection(url: string): Promise<{ db: PostgresJsDatabase; sqlClient: ReturnType }> { const config = this.connectionString === "jsinfo" ? { idle_timeout: 60 * 2, @@ -240,7 +242,7 @@ class DbConnectionPoolClass { }; const queryClient = postgres(url, config); - return drizzle(queryClient); + return { db: drizzle(queryClient), sqlClient: queryClient }; } private async getConnection(queryKey: string): Promise { @@ -305,9 +307,9 @@ class DbConnectionPoolClass { try { return await queryFn(conn.db).finally(async () => { // Close the postgres client - if (this.connections.includes(conn)) return; + if (!this.connections.includes(conn)) return; - await (conn.db as any).client.end(); + await conn.sqlClient.end(); // Remove from connections array this.connections = this.connections.filter(c => c.id !== conn.id);