From 31d89f049b2e04855e25d85c44c0c4da52fe7efb Mon Sep 17 00:00:00 2001 From: hobokenchicken Date: Tue, 21 Apr 2026 15:25:21 -0400 Subject: [PATCH] fix(solana): graceful fallback to DB-only credits when blockchain unavailable Devnet airdrop faucet rate-limited. mintTokens() now returns a db-only signature instead of failing when Solana is unreachable, unfunded, or mint creation fails. This lets watch events and backfill still credit users in the database. Blockchain minting will resume automatically once SOL is available. --- backend/src/services/solana.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/backend/src/services/solana.ts b/backend/src/services/solana.ts index 370e0b2..ed5b00f 100644 --- a/backend/src/services/solana.ts +++ b/backend/src/services/solana.ts @@ -124,14 +124,15 @@ export async function getOrCreateTokenAccount( export async function mintTokens( userWalletAddress: string, amount: number, - metadata: { + _metadata: { sessionId: string; contentTitle: string; watchDurationMinutes: number; }, ): Promise { if (!mintAuthority) { - throw new Error("Mint authority not configured"); + console.warn("Mint authority not configured, using DB-only credits"); + return `db-only-${Date.now()}`; } try { @@ -139,7 +140,8 @@ export async function mintTokens( const mint = await getTokenMint(); if (!mint) { - throw new Error("Token mint not found"); + console.warn("Token mint not available, using DB-only credits"); + return `db-only-${Date.now()}`; } // Get or create user's token account @@ -166,8 +168,8 @@ export async function mintTokens( return signature; } catch (error) { - console.error("Failed to mint tokens:", error); - return null; + console.error("Solana minting failed, using DB-only credits:", error); + return `db-only-${Date.now()}`; } }