diff --git a/lib/fetchTranscript.ts b/lib/fetchTranscript.ts new file mode 100644 index 0000000..1d67f9d --- /dev/null +++ b/lib/fetchTranscript.ts @@ -0,0 +1,32 @@ +/** + * Fetches transcript content from a URL with optional authentication + * @param url The URL to fetch the transcript from + * @param username Optional username for Basic Auth + * @param password Optional password for Basic Auth + * @returns The transcript content or null if fetching fails + */ +export async function fetchTranscriptContent( + url: string, + username?: string, + password?: string +): Promise { + try { + const authHeader = + username && password + ? "Basic " + Buffer.from(`${username}:${password}`).toString("base64") + : undefined; + + const response = await fetch(url, { + headers: authHeader ? { Authorization: authHeader } : {}, + }); + + if (!response.ok) { + process.stderr.write(`Error fetching transcript from ${url}: ${response.statusText}\n`); + return null; + } + return await response.text(); + } catch (error) { + process.stderr.write(`Failed to fetch transcript from ${url}: ${error}\n`); + return null; + } +} diff --git a/lib/scheduler.ts b/lib/scheduler.ts index 25b0242..e6bb7bb 100644 --- a/lib/scheduler.ts +++ b/lib/scheduler.ts @@ -2,6 +2,7 @@ import cron from "node-cron"; import { prisma } from "./prisma"; import { fetchAndParseCsv } from "./csvFetcher"; +import { fetchTranscriptContent } from "./fetchTranscript"; interface SessionCreateData { id: string; @@ -10,41 +11,6 @@ interface SessionCreateData { [key: string]: unknown; } -/** - * Fetches transcript content from a URL with optional authentication - * @param url The URL to fetch the transcript from - * @param username Optional username for Basic Auth - * @param password Optional password for Basic Auth - * @returns The transcript content or null if fetching fails - */ -async function fetchTranscriptContent( - url: string, - username?: string, - password?: string -): Promise { - try { - const authHeader = - username && password - ? "Basic " + Buffer.from(`${username}:${password}`).toString("base64") - : undefined; - - const response = await fetch(url, { - headers: authHeader ? { Authorization: authHeader } : {}, - }); - - if (!response.ok) { - process.stderr.write( - `Error fetching transcript: ${response.statusText}\n` - ); - return null; - } - return await response.text(); - } catch (error) { - process.stderr.write(`Failed to fetch transcript: ${error}\n`); - return null; - } -} - export function startScheduler() { cron.schedule("*/15 * * * *", async () => { const companies = await prisma.company.findMany(); diff --git a/pages/api/admin/refresh-sessions.ts b/pages/api/admin/refresh-sessions.ts index 0c38b22..9fa3420 100644 --- a/pages/api/admin/refresh-sessions.ts +++ b/pages/api/admin/refresh-sessions.ts @@ -2,6 +2,7 @@ import { NextApiRequest, NextApiResponse } from "next"; import { fetchAndParseCsv } from "../../../lib/csvFetcher"; import { prisma } from "../../../lib/prisma"; +import { fetchTranscriptContent } from "../../../lib/fetchTranscript"; interface SessionCreateData { id: string; @@ -11,41 +12,6 @@ interface SessionCreateData { [key: string]: unknown; } -/** - * Fetches transcript content from a URL with optional authentication - * @param url The URL to fetch the transcript from - * @param username Optional username for Basic Auth - * @param password Optional password for Basic Auth - * @returns The transcript content or null if fetching fails - */ -async function fetchTranscriptContent( - url: string, - username?: string, - password?: string -): Promise { - try { - const authHeader = - username && password - ? "Basic " + Buffer.from(`${username}:${password}`).toString("base64") - : undefined; - - const response = await fetch(url, { - headers: authHeader ? { Authorization: authHeader } : {}, - }); - - if (!response.ok) { - process.stderr.write( - `Error fetching transcript: ${response.statusText}\n` - ); - return null; - } - return await response.text(); - } catch (error) { - process.stderr.write(`Failed to fetch transcript: ${error}\n`); - return null; - } -} - export default async function handler( req: NextApiRequest, res: NextApiResponse