From ba2cbd6e7c4f9d72551be3d7ff52347905bf721b Mon Sep 17 00:00:00 2001 From: QSchlegel Date: Sun, 14 Dec 2025 13:18:24 +0100 Subject: [PATCH 1/6] Enhance configuration and optimize caching for improved performance - Updated next.config.js to allow unoptimized images for local proxy API routes and added tree-shaking optimizations. - Introduced bundle analyzer configuration to assist in analyzing the build size when the ANALYZE environment variable is set. - Modified package.json to include a new script for analyzing the build. - Refactored caching strategies in various API routes to optimize performance and reduce external API calls. - Implemented caching middleware for tRPC queries to improve data fetching efficiency. - Enhanced user and wallet data hooks with improved caching and stale time settings. --- SECURITY_VULNERABILITIES_ANALYSIS.md | 1 + next.config.js | 19 +- package.json | 3 +- prisma/schema.prisma | 13 +- .../common/cardano-objects/connect-wallet.tsx | 19 +- .../common/overall-layout/layout.tsx | 101 ++++++-- .../common/overall-layout/loading.tsx | 2 +- .../overall-layout/proxy-data-loader.tsx | 76 +++--- src/components/pages/homepage/index.tsx | 31 ++- .../homepage/wallets/SectionExplanation.tsx | 1 + .../wallets/WalletBalanceSkeleton.tsx | 1 + src/components/pages/wallet/dapps/index.tsx | 32 ++- .../wallet/governance/ballot/BallotModal.tsx | 6 +- .../ballot/FloatingBallotSidebar.tsx | 2 +- .../pages/wallet/governance/ballot/ballot.tsx | 32 +-- .../wallet/governance/cCommitee/voteCC.tsx | 4 +- .../pages/wallet/governance/card-info.tsx | 179 +++++++-------- .../governance/clarity/card-clarity.tsx | 12 +- .../governance/drep/RegisterDrepModal.tsx | 33 +++ .../governance/drep/UpdateDrepModal.tsx | 33 +++ .../wallet/governance/drep/registerDrep.tsx | 109 +++------ .../pages/wallet/governance/drep/retire.tsx | 39 ++-- .../wallet/governance/drep/updateDrep.tsx | 57 +++-- .../pages/wallet/governance/index.tsx | 6 +- .../wallet/governance/proposal/index.tsx | 12 +- .../governance/proposal/voteButtton.tsx | 4 +- .../pages/wallet/governance/proposals.tsx | 68 +++--- .../wallet/new-transaction/utxoSelector.tsx | 65 +++--- src/hooks/useAllTransactions.ts | 8 +- src/hooks/useAvailableUtxos.ts | 9 +- src/hooks/usePendingTransactions.ts | 75 ++++++ src/hooks/useTransaction.ts | 57 ++++- src/hooks/useUser.ts | 2 + src/hooks/useUserWallets.ts | 2 + src/hooks/useWalletBalances.ts | 94 ++++++-- src/lib/zustand/proxy.ts | 26 ++- src/lib/zustand/wallet-balances.ts | 98 ++++++++ src/pages/api/local/og.ts | 5 + src/pages/api/local/proxy.ts | 3 +- src/pages/api/v1/freeUtxos.ts | 9 +- src/pages/api/v1/lookupMultisigWallet.ts | 2 + src/pages/api/v1/nativeScript.ts | 2 + src/pages/api/v1/walletIds.ts | 2 + src/server/api/middleware/cache.ts | 144 ++++++++++++ src/server/api/routers/proxy.ts | 78 ++++--- src/server/api/trpc.ts | 8 +- src/styles/globals.css | 11 + src/utils/api.ts | 28 +++ src/utils/blockchain-cache.ts | 217 ++++++++++++++++++ src/utils/multisigSDK.ts | 32 +++ src/utils/query-invalidation.ts | 119 ++++++++++ 51 files changed, 1533 insertions(+), 458 deletions(-) create mode 100644 src/components/pages/wallet/governance/drep/RegisterDrepModal.tsx create mode 100644 src/components/pages/wallet/governance/drep/UpdateDrepModal.tsx create mode 100644 src/lib/zustand/wallet-balances.ts create mode 100644 src/server/api/middleware/cache.ts create mode 100644 src/utils/blockchain-cache.ts create mode 100644 src/utils/query-invalidation.ts diff --git a/SECURITY_VULNERABILITIES_ANALYSIS.md b/SECURITY_VULNERABILITIES_ANALYSIS.md index 50e8546f..0fca82a6 100644 --- a/SECURITY_VULNERABILITIES_ANALYSIS.md +++ b/SECURITY_VULNERABILITIES_ANALYSIS.md @@ -203,3 +203,4 @@ Most vulnerabilities are low-risk for production use, but should be addressed th - Monitoring for package updates + diff --git a/next.config.js b/next.config.js index fb1ecbde..66398139 100644 --- a/next.config.js +++ b/next.config.js @@ -44,6 +44,8 @@ const config = { hostname: "gateway.pinata.cloud", }, ], + // Allow unoptimized images for local proxy API routes + unoptimized: false, }, // Turbopack configuration (Next.js 16+) // Empty config silences the warning about webpack/turbopack conflict @@ -56,8 +58,23 @@ const config = { asyncWebAssembly: true, layers: true, }; + + // Optimize tree-shaking by ensuring proper module resolution + config.optimization = { + ...config.optimization, + usedExports: true, + sideEffects: false, + }; + return config; }, }; -export default config; +// Bundle analyzer - only enable when ANALYZE env var is set +const withBundleAnalyzer = process.env.ANALYZE === 'true' + ? require('@next/bundle-analyzer')({ + enabled: true, + }) + : (config) => config; + +export default withBundleAnalyzer(config); diff --git a/package.json b/package.json index b87a4c10..aa9a2e6b 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,8 @@ "test": "jest", "test:watch": "jest --watch", "test:coverage": "jest --coverage", - "test:ci": "jest --ci --coverage --watchAll=false" + "test:ci": "jest --ci --coverage --watchAll=false", + "analyze": "ANALYZE=true npm run build" }, "dependencies": { "@auth/prisma-adapter": "^2.11.1", diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 827fd056..68b8a591 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -3,8 +3,8 @@ generator client { } datasource db { - provider = "postgresql" - url = env("DATABASE_URL") + provider = "postgresql" + url = env("DATABASE_URL") // For Supabase + Vercel serverless optimization: // - DATABASE_URL: Use Supabase's connection pooling URL (Transaction mode) // Example: postgresql://user:pass@host:6543/db?pgbouncer=true @@ -55,6 +55,10 @@ model Transaction { txHash String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt + + @@index([walletId]) + @@index([state]) + @@index([walletId, state]) } model Signable { @@ -122,6 +126,11 @@ model Proxy { createdAt DateTime @default(now()) updatedAt DateTime @updatedAt userId String? + + @@index([walletId]) + @@index([userId]) + @@index([walletId, isActive]) + @@index([userId, isActive]) } model BalanceSnapshot { diff --git a/src/components/common/cardano-objects/connect-wallet.tsx b/src/components/common/cardano-objects/connect-wallet.tsx index c3186125..3dc49ee5 100644 --- a/src/components/common/cardano-objects/connect-wallet.tsx +++ b/src/components/common/cardano-objects/connect-wallet.tsx @@ -320,31 +320,31 @@ function ConnectWalletContent({ if (isConnecting) { return ( <> - - Connecting... + + Connecting... ); } if (isConnected && isLoading) { return ( <> - - Loading... + + Loading... ); } if (isConnected && user && !userLoading) { return ( <> - - {connectedWalletName || "Connected"} + + {connectedWalletName || "Connected"} ); } return ( <> - - Connect Wallet + + Connect Wallet ); }; @@ -355,7 +355,8 @@ function ConnectWalletContent({