diff --git a/apps/api/src/controllers/auth.ts b/apps/api/src/controllers/auth.ts index 5546bc17..0367358f 100644 --- a/apps/api/src/controllers/auth.ts +++ b/apps/api/src/controllers/auth.ts @@ -37,17 +37,12 @@ function normalizedApiIsUuid(potentialUuid: string): boolean { return validate(potentialUuid); } -export async function setCachedACUC( - api_key: string, - acuc: - | AuthCreditUsageChunk - | ((acuc: AuthCreditUsageChunk) => AuthCreditUsageChunk) -) { +export async function setCachedACUC(api_key: string, acuc: AuthCreditUsageChunk | ((acuc: AuthCreditUsageChunk) => AuthCreditUsageChunk)) { const cacheKeyACUC = `acuc_${api_key}`; const redLockKey = `lock_${cacheKeyACUC}`; try { - await redlock.using([redLockKey], 10000, {}, async (signal) => { + await redlock.using([redLockKey], 10000, {}, async signal => { if (typeof acuc === "function") { acuc = acuc(JSON.parse(await getValue(cacheKeyACUC))); @@ -73,10 +68,7 @@ export async function setCachedACUC( } } -export async function getACUC( - api_key: string, - cacheOnly = false -): Promise { +export async function getACUC(api_key: string, cacheOnly = false): Promise { const cacheKeyACUC = `acuc_${api_key}`; const cachedACUC = await getValue(cacheKeyACUC); @@ -84,38 +76,18 @@ export async function getACUC( if (cachedACUC !== null) { return JSON.parse(cachedACUC); } else if (!cacheOnly) { - let data; - let error; - let retries = 0; - const maxRetries = 5; - - while (retries < maxRetries) { - ({ data, error } = await supabase_service.rpc( - "auth_credit_usage_chunk_test_3", - { input_key: api_key } - )); - - if (!error) { - break; - } - - Logger.warn( - `Failed to retrieve authentication and credit usage data after ${retries}, trying again...` - ); - retries++; - if (retries === maxRetries) { - throw new Error( - "Failed to retrieve authentication and credit usage data after 3 attempts: " + - JSON.stringify(error) - ); - } - - // Wait for a short time before retrying - await new Promise((resolve) => setTimeout(resolve, 200)); + const { data, error } = + await supabase_service.rpc("auth_credit_usage_chunk_test_3", { input_key: api_key }); + + if (error) { + throw new Error("Failed to retrieve authentication and credit usage data: " + JSON.stringify(error)); } - const chunk: AuthCreditUsageChunk | null = - data.length === 0 ? null : data[0].team_id === null ? null : data[0]; + const chunk: AuthCreditUsageChunk | null = data.length === 0 + ? null + : data[0].team_id === null + ? null + : data[0]; // NOTE: Should we cache null chunks? - mogery if (chunk !== null) { @@ -160,11 +132,7 @@ export async function supaAuthenticateUser( plan?: PlanType; chunk?: AuthCreditUsageChunk; }> { - const authHeader = - req.headers.authorization ?? - (req.headers["sec-websocket-protocol"] - ? `Bearer ${req.headers["sec-websocket-protocol"]}` - : null); + const authHeader = req.headers.authorization ?? (req.headers["sec-websocket-protocol"] ? `Bearer ${req.headers["sec-websocket-protocol"]}` : null); if (!authHeader) { return { success: false, error: "Unauthorized", status: 401 }; } @@ -194,7 +162,7 @@ export async function supaAuthenticateUser( rateLimiter = getRateLimiter(RateLimiterMode.CrawlStatus, token); } else { rateLimiter = getRateLimiter(RateLimiterMode.Preview, token); - } + } teamId = "preview"; } else { normalizedApi = parseApi(token); diff --git a/apps/api/src/services/billing/credit_billing.ts b/apps/api/src/services/billing/credit_billing.ts index 694d0e5c..3346e291 100644 --- a/apps/api/src/services/billing/credit_billing.ts +++ b/apps/api/src/services/billing/credit_billing.ts @@ -55,13 +55,11 @@ export async function supaCheckTeamCredits(chunk: AuthCreditUsageChunk, team_id: const creditsWillBeUsed = chunk.adjusted_credits_used + credits; - // In case chunk.price_credits is undefined, set it to a large number to avoid mistakes - const totalPriceCredits = chunk.price_credits ?? 100000000; // Removal of + credits - const creditUsagePercentage = creditsWillBeUsed / totalPriceCredits; + const creditUsagePercentage = creditsWillBeUsed / chunk.price_credits; // Compare the adjusted total credits used with the credits allowed by the plan - if (creditsWillBeUsed > totalPriceCredits) { + if (creditsWillBeUsed > chunk.price_credits) { sendNotification( team_id, NotificationType.LIMIT_REACHED,