diff --git a/apps/api/src/__tests__/snips/billing.test.ts b/apps/api/src/__tests__/snips/billing.test.ts index 7dc52382..fc0fd669 100644 --- a/apps/api/src/__tests__/snips/billing.test.ts +++ b/apps/api/src/__tests__/snips/billing.test.ts @@ -107,6 +107,7 @@ describe("Billing tests", () => { // crawl 1: regular fc.dev crawl (x credits) crawl({ url: "https://firecrawl.dev", + limit: 10, }), // crawl 2: fc.dev crawl with json (5y credits) @@ -123,7 +124,8 @@ describe("Billing tests", () => { required: ["four_word_summary"], }, }, - } + }, + limit: 10, }) ]); diff --git a/apps/api/src/controllers/v1/credit-usage.ts b/apps/api/src/controllers/v1/credit-usage.ts index 4499a063..794861a5 100644 --- a/apps/api/src/controllers/v1/credit-usage.ts +++ b/apps/api/src/controllers/v1/credit-usage.ts @@ -10,16 +10,15 @@ export async function creditUsageController( ): Promise { try { // If we already have the credit usage info from auth, use it - // TEMP: cache issues - mogery - // if (req.acuc) { - // res.json({ - // success: true, - // data: { - // remaining_credits: req.acuc.remaining_credits, - // }, - // }); - // return; - // } + if (req.acuc) { + res.json({ + success: true, + data: { + remaining_credits: req.acuc.remaining_credits, + }, + }); + return; + } // Otherwise fetch fresh data const chunk = await getACUCTeam(req.auth.team_id, false, false, RateLimiterMode.Scrape); diff --git a/apps/api/src/controllers/v1/scrape.ts b/apps/api/src/controllers/v1/scrape.ts index 75998c87..a97d0e63 100644 --- a/apps/api/src/controllers/v1/scrape.ts +++ b/apps/api/src/controllers/v1/scrape.ts @@ -42,7 +42,7 @@ export async function scrapeController( }); // - const isDirectToBullMQ = process.env.SEARCH_PREVIEW_TOKEN === req.body.__searchPreviewToken; + const isDirectToBullMQ = process.env.SEARCH_PREVIEW_TOKEN !== undefined && process.env.SEARCH_PREVIEW_TOKEN === req.body.__searchPreviewToken; await addScrapeJob( { diff --git a/apps/api/src/controllers/v1/search.ts b/apps/api/src/controllers/v1/search.ts index 92f3becf..ceacce4c 100644 --- a/apps/api/src/controllers/v1/search.ts +++ b/apps/api/src/controllers/v1/search.ts @@ -172,8 +172,7 @@ export async function searchController( }; const startTime = new Date().getTime(); const costTracking = new CostTracking(); - const isSearchPreview = - process.env.SEARCH_PREVIEW_TOKEN === req.body.__searchPreviewToken; + const isSearchPreview = process.env.SEARCH_PREVIEW_TOKEN !== undefined && process.env.SEARCH_PREVIEW_TOKEN === req.body.__searchPreviewToken; try { req.body = searchRequestSchema.parse(req.body); diff --git a/apps/api/src/controllers/v1/token-usage.ts b/apps/api/src/controllers/v1/token-usage.ts index 356cdb9f..1e4f6116 100644 --- a/apps/api/src/controllers/v1/token-usage.ts +++ b/apps/api/src/controllers/v1/token-usage.ts @@ -10,16 +10,15 @@ export async function tokenUsageController( ): Promise { try { // If we already have the token usage info from auth, use it - // TEMP: cache issues - mogery - // if (req.acuc) { - // res.json({ - // success: true, - // data: { - // remaining_tokens: req.acuc.remaining_credits, - // }, - // }); - // return; - // } + if (req.acuc) { + res.json({ + success: true, + data: { + remaining_tokens: req.acuc.remaining_credits, + }, + }); + return; + } // Otherwise fetch fresh data const chunk = await getACUCTeam(req.auth.team_id, false, false, RateLimiterMode.Extract); diff --git a/apps/api/src/services/queue-worker.ts b/apps/api/src/services/queue-worker.ts index 6d419873..cc4e1179 100644 --- a/apps/api/src/services/queue-worker.ts +++ b/apps/api/src/services/queue-worker.ts @@ -1049,6 +1049,15 @@ async function processKickoffJob(job: Job & { id: string }, token: string) { async function billScrapeJob(job: Job & { id: string }, document: Document, logger: Logger, costTracking?: CostTracking) { let creditsToBeBilled: number | null = null; + logger.warn("Billing scrape job", { + jobId: job.id, + teamId: job.data.team_id, + creditsToBeBilled, + is_scrape: job.data.is_scrape, + bypassBilling: job.data.internalOptions?.bypassBilling, + isTeamId: job.data.team_id === process.env.BACKGROUND_INDEX_TEAM_ID!, + isDBAuthentication: process.env.USE_DB_AUTHENTICATION === "true", + }); if (job.data.is_scrape !== true && !job.data.internalOptions?.bypassBilling) { creditsToBeBilled = await calculateCreditsToBeBilled(job.data.scrapeOptions, document, job.id, costTracking);