Spaces:
Paused
Paused
| import { Request, Response } from "express"; | |
| import { authenticateUser } from "../auth"; | |
| import { RateLimiterMode } from "../../../src/types"; | |
| import { supabase_service } from "../../../src/services/supabase"; | |
| import { logger } from "../../../src/lib/logger"; | |
| import { getCrawl, saveCrawl } from "../../../src/lib/crawl-redis"; | |
| import * as Sentry from "@sentry/node"; | |
| import { configDotenv } from "dotenv"; | |
| import { redisConnection } from "../../services/queue-service"; | |
| configDotenv(); | |
| export async function crawlCancelController(req: Request, res: Response) { | |
| try { | |
| const useDbAuthentication = process.env.USE_DB_AUTHENTICATION === "true"; | |
| const auth = await authenticateUser(req, res, RateLimiterMode.CrawlStatus); | |
| if (!auth.success) { | |
| return res.status(auth.status).json({ error: auth.error }); | |
| } | |
| const { team_id } = auth; | |
| redisConnection.sadd("teams_using_v0", team_id) | |
| .catch(error => logger.error("Failed to add team to teams_using_v0", { error, team_id })); | |
| const sc = await getCrawl(req.params.jobId); | |
| if (!sc) { | |
| return res.status(404).json({ error: "Job not found" }); | |
| } | |
| // check if the job belongs to the team | |
| if (useDbAuthentication) { | |
| const { data, error: supaError } = await supabase_service | |
| .from("bulljobs_teams") | |
| .select("*") | |
| .eq("job_id", req.params.jobId) | |
| .eq("team_id", team_id); | |
| if (supaError) { | |
| return res.status(500).json({ error: supaError.message }); | |
| } | |
| if (data.length === 0) { | |
| return res.status(403).json({ error: "Unauthorized" }); | |
| } | |
| } | |
| try { | |
| sc.cancelled = true; | |
| await saveCrawl(req.params.jobId, sc); | |
| } catch (error) { | |
| logger.error(error); | |
| } | |
| res.json({ | |
| status: "cancelled", | |
| }); | |
| } catch (error) { | |
| Sentry.captureException(error); | |
| logger.error(error); | |
| return res.status(500).json({ error: error.message }); | |
| } | |
| } | |