From fb03b1fca89e6e154d9e941b02eed8c781b4c2e3 Mon Sep 17 00:00:00 2001 From: Shivaditya Shivganesh Date: Sat, 4 Jan 2025 00:26:01 -0500 Subject: [PATCH] fix: update env script, scraper function deploys on cloudflare --- .github/workflows/build.yml | 4 +- bun.lockb | Bin 395919 -> 388700 bytes functions/issue-scraper.ts | 358 +++++++++++++++++++++++++++--- functions/types.ts | 1 + src/home/authentication.ts | 5 +- src/home/scraper/issue-scraper.ts | 343 +++------------------------- 6 files changed, 373 insertions(+), 338 deletions(-) mode change 100755 => 100644 bun.lockb diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 51732f58..26660eb5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,8 +28,8 @@ jobs: yarn yarn build env: # Set environment variables for the build - SUPABASE_URL: "https://wfzpewmlyiozupulbuur.supabase.co" - SUPABASE_ANON_KEY: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6IndmenBld21seWlvenVwdWxidXVyIiwicm9sZSI6ImFub24iLCJpYXQiOjE2OTU2NzQzMzksImV4cCI6MjAxMTI1MDMzOX0.SKIL3Q0NOBaMehH0ekFspwgcu3afp3Dl9EDzPqs1nKs" + SUPABASE_URL: ${{ secrets.SUPABASE_URL }} + SUPABASE_ANON_KEY: ${{ secrets.SUPABASE_ANON_KEY }} - name: Upload build artifact uses: actions/upload-artifact@v4 diff --git a/bun.lockb b/bun.lockb old mode 100755 new mode 100644 index a5cb0c51c50e34f962127dae9273875aa9ccdeaf..8b8774f5a75a42354840be40dd589ebf897d2f40 GIT binary patch delta 83082 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 GeE$c*Dfb5e delta 87323 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 SIaJy0t~?2sPPvBX`F{Y3KXUj0 diff --git a/functions/issue-scraper.ts b/functions/issue-scraper.ts index 2f288669..e9f79a83 100644 --- a/functions/issue-scraper.ts +++ b/functions/issue-scraper.ts @@ -1,41 +1,349 @@ import { Context } from "./types"; +import { SupabaseClient } from "@supabase/supabase-js"; +import { VoyageAIClient } from "voyageai"; +import { Octokit } from "@octokit/rest"; +import markdownit from "markdown-it"; +import plainTextPlugin from "markdown-it-plain-text"; +import { validatePOST } from "./validators"; + +interface MarkdownItWithPlainText extends markdownit { + plainText: string; + } + +interface IssueMetadata { + nodeId: string; + number: number; + title: string; + body: string; + state: string; + repositoryName: string; + repositoryId: number; + assignees: string[]; + authorId: number; + createdAt: string; + closedAt: string | null; + stateReason: string | null; + updatedAt: string; + } + + interface IssueNode { + id: string; + number: number; + title: string; + body: string; + state: string; + stateReason: string | null; + createdAt: string; + updatedAt: string; + closedAt: string | null; + author: { + login: string; + } | null; + assignees: { + nodes: Array<{ + login: string; + }>; + }; + repository: { + id: string; + name: string; + owner: { + login: string; + }; + }; + } + + interface GraphQlSearchResponse { + search: { + pageInfo: { + hasNextPage: boolean; + endCursor: string | null; + }; + nodes: Array; + }; + } export const corsHeaders = { - "Access-Control-Allow-Origin": "*", - "Access-Control-Allow-Methods": "GET", - "Access-Control-Allow-Headers": "Content-Type", + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Methods": "GET", + "Access-Control-Allow-Headers": "Content-Type", }; export async function onRequest(ctx: Context): Promise { - const { request, env } = ctx; - const url = new URL(request.url); + const { request, env } = ctx; - try { - switch (request.method) { - case "GET": - if (url.searchParams.has("key")) { - const key = url.searchParams.get("key") as string; - return new Response("GET request with key: " + key + JSON.stringify(env.SUPABASE_ANON_KEY), { + try { + switch (request.method) { + case "POST": { + const result = await validatePOST(request); + if (!result.isValid || !result.gitHubUserId) { + return new Response("Unauthorized", { + headers: corsHeaders, + status: 400, + }); + } + try { + const supabase = new SupabaseClient(env.SUPABASE_URL, env.SUPABASE_ANON_KEY); + const response = await issueScraper(result.gitHubUserId, supabase, env.VOYAGEAI_API_KEY, result.authToken); + return new Response(response, { + headers: corsHeaders, + status: 200, + }); + } catch (error) { + console.error("Error processing request:", error); + return new Response("Internal Server Error", { + headers: corsHeaders, + status: 500, + }); + } + } + + default: + return new Response("Method Not Allowed", { + headers: corsHeaders, + status: 405, + }); + } + } catch (error) { + console.error("Error processing request:", error); + return new Response("Internal Server Error", { headers: corsHeaders, - status: 200, - }); + status: 500, + }); + } +} + + +function markdownToPlainText(markdown: string | null): string | null { + if (!markdown) return markdown; + const md = markdownit() as MarkdownItWithPlainText; + md.use(plainTextPlugin); + md.render(markdown); + return md.plainText; +} + + +const SEARCH_ISSUES_QUERY = ` + query SearchIssues($searchText: String!, $after: String) { + search( + query: $searchText, + type: ISSUE, + first: 100, + after: $after + ) { + pageInfo { + hasNextPage + endCursor + } + nodes { + ... on Issue { + id + number + title + body + state + stateReason + createdAt + updatedAt + closedAt + author { + login + } + assignees(first: 10) { + nodes { + login + } + } + repository { + id + name + owner { + login + } + } + } + } + } + } +`; + +async function fetchAuthorId(octokit: InstanceType, login: string): Promise { + try { + const response = await octokit.rest.users.getByUsername({ username: login }); + return response.data.id; + } catch (error) { + console.error(`Error fetching author ID for ${login}:`, error); + return -1; + } +} + +async function fetchUserIssues(octokit: InstanceType, username: string): Promise { + const allIssues: IssueNode[] = []; + let hasNextPage = true; + let cursor: string | null = null; + + const searchText = `assignee:${username} is:issue is:closed`; + + while (hasNextPage) { + const variables: { searchText: string; after?: string } = { + searchText, + }; + if (cursor) { + variables.after = cursor; + } + + const response: GraphQlSearchResponse = await octokit.graphql(SEARCH_ISSUES_QUERY, variables); + + const completedIssues = response.search.nodes.filter((issue) => issue.stateReason === "COMPLETED"); + allIssues.push(...completedIssues); + + hasNextPage = response.search.pageInfo.hasNextPage; + cursor = response.search.pageInfo.endCursor; + + if (!cursor) break; + } + + return allIssues; +} + +// Pulls issues from GitHub and stores them in Supabase +async function issueScraper(username: string, supabase: SupabaseClient, voyageApiKey: string, token?: string): Promise { + try { + + if (!username) { + throw new Error("Username is required"); + } + + const context = { + adapters: {}, + logger: { + info: (message: string, data: Record) => console.log("INFO:", message + ":", data), + error: (message: string, data: Record) => console.error("ERROR:", message + ":", data), + }, + octokit: new Octokit(token ? { auth: token } : {}), + }; + + const voyageClient = new VoyageAIClient({ apiKey: voyageApiKey }); + const issues = await fetchUserIssues(context.octokit, username); + const processedIssues: Array<{ issue: IssueMetadata; error?: string }> = []; + + for (const issue of issues) { + try { + const authorId = issue.author?.login ? await fetchAuthorId(context.octokit, issue.author.login) : -1; + const repoOwner = issue.repository.owner.login; + + const metadata: IssueMetadata = { + nodeId: issue.id, + number: issue.number, + title: issue.title || "", + body: issue.body || "", + state: issue.state, + stateReason: issue.stateReason, + repositoryName: issue.repository.name, + repositoryId: parseInt(issue.repository.id), + assignees: (issue.assignees?.nodes || []).map((assignee) => assignee.login), + authorId, + createdAt: issue.createdAt, + closedAt: issue.closedAt, + updatedAt: issue.updatedAt, + }; + const markdown = metadata.body + " " + metadata.title; + const plaintext = markdownToPlainText(markdown); + if (!plaintext || plaintext === null) { + throw new Error("Error converting markdown to plaintext"); + } + const embeddingObject = await voyageClient.embed({ + input: markdown, + model: "voyage-large-2-instruct", + inputType: "document", + }); + const embedding = (embeddingObject.data && embeddingObject.data[0]?.embedding) || {}; + const payload = { + issue: metadata, + action: "created", + sender: { + login: username, + }, + repository: { + id: parseInt(issue.repository.id), + node_id: issue.repository.id, + name: issue.repository.name, + full_name: `${repoOwner}/${issue.repository.name}`, + owner: { + login: repoOwner, + id: authorId, + type: "User", + site_admin: false, + }, + }, + }; + //Check if the user is authenticated + if (!supabase.auth.getUser()) { + throw new Error("User is not authenticated"); } - return new Response("GET request without key", { - headers: corsHeaders, - status: 200, + + const { error } = await supabase.from("issues").upsert({ + id: metadata.nodeId, + markdown, + plaintext, + embedding: JSON.stringify(embedding), + author_id: metadata.authorId, + modified_at: metadata.updatedAt, + payload: payload, }); - default: - return new Response("Method Not Allowed", { - headers: corsHeaders, - status: 405, + processedIssues.push({ + issue: metadata, + error: error ? `Error storing issue: ${error.message}` : undefined, + }); + } catch (error) { + processedIssues.push({ + issue: { + nodeId: issue.id, + number: issue.number, + title: issue.title || "", + body: issue.body || "", + state: issue.state, + stateReason: issue.stateReason, + repositoryName: issue.repository.name, + repositoryId: parseInt(issue.repository.id), + assignees: [], + authorId: -1, + createdAt: issue.createdAt, + closedAt: issue.closedAt, + updatedAt: issue.updatedAt, + }, + error: `Error processing issue: ${error instanceof Error ? error.message : "Unknown error"}`, }); + } } + + return JSON.stringify( + { + success: true, + stats: { + storageSuccessful: processedIssues.filter((p) => !p.error).length, + storageFailed: processedIssues.filter((p) => p.error).length, + }, + errors: processedIssues + .filter((p) => p.error) + .map((p) => ({ + type: "storage", + name: `${p.issue.repositoryName}#${p.issue.number}`, + error: p.error, + })), + issues: processedIssues.map((p) => ({ + number: p.issue.number, + title: p.issue.title, + repo: p.issue.repositoryName, + error: p.error, + })), + }, + null, + 2 + ); } catch (error) { - console.error("Error processing request:", error); - return new Response("Internal Server Error", { - headers: corsHeaders, - status: 500, - }); + console.error("Error in issueScraper:", error); + throw error; } } diff --git a/functions/types.ts b/functions/types.ts index 47b54d05..5b06f3cf 100644 --- a/functions/types.ts +++ b/functions/types.ts @@ -16,6 +16,7 @@ export interface ValidationResult { isValid: boolean; gitHubUserId?: string; referralCode?: string; + authToken?: string; } export type Context = EventContext>; diff --git a/src/home/authentication.ts b/src/home/authentication.ts index aea78839..b15f00e1 100644 --- a/src/home/authentication.ts +++ b/src/home/authentication.ts @@ -4,6 +4,7 @@ import { GitHubUser } from "./github-types"; import { trackReferralCode } from "./register-referral"; import { displayGitHubUserInformation } from "./rendering/display-github-user-information"; import { renderGitHubLoginButton } from "./rendering/render-github-login-button"; +import { startIssueScraper } from "./scraper/issue-scraper"; // import { issueScraper } from "./scraper/issue-scraper"; export async function authentication() { @@ -23,7 +24,7 @@ export async function authentication() { await displayGitHubUserInformation(gitHubUser); // <-- Issue Scraper here --> // const supabase = getSupabase(); - // const githubUserName = gitHubUser.login; - //await issueScraper(githubUserName, supabase, accessToken || undefined); + const githubUserName = gitHubUser.login; + await startIssueScraper(githubUserName); } } diff --git a/src/home/scraper/issue-scraper.ts b/src/home/scraper/issue-scraper.ts index 9310cde4..9c969a54 100644 --- a/src/home/scraper/issue-scraper.ts +++ b/src/home/scraper/issue-scraper.ts @@ -1,315 +1,40 @@ -import { SupabaseClient } from "@supabase/supabase-js"; -import { VoyageAIClient } from "voyageai"; -import { Octokit } from "@octokit/rest"; -import markdownit from "markdown-it"; -import plainTextPlugin from "markdown-it-plain-text"; +import { checkSupabaseSession } from "../rendering/render-github-login-button"; -declare const VOYAGEAI_API_KEY: string; // @DEV: passed in at build time check build/esbuild-build.ts +export async function startIssueScraper(username: string) { + const supabaseAuth = await checkSupabaseSession(); -interface MarkdownItWithPlainText extends markdownit { - plainText: string; -} + // Check if 24 hours have passed since last fetch + const lastFetchKey = `lastFetch_${username}`; + const lastFetch = localStorage.getItem(lastFetchKey); + const now = Date.now(); -function markdownToPlainText(markdown: string | null): string | null { - if (!markdown) return markdown; - const md = markdownit() as MarkdownItWithPlainText; - md.use(plainTextPlugin); - md.render(markdown); - return md.plainText; -} - -interface IssueMetadata { - nodeId: string; - number: number; - title: string; - body: string; - state: string; - repositoryName: string; - repositoryId: number; - assignees: string[]; - authorId: number; - createdAt: string; - closedAt: string | null; - stateReason: string | null; - updatedAt: string; -} - -interface IssueNode { - id: string; - number: number; - title: string; - body: string; - state: string; - stateReason: string | null; - createdAt: string; - updatedAt: string; - closedAt: string | null; - author: { - login: string; - } | null; - assignees: { - nodes: Array<{ - login: string; - }>; - }; - repository: { - id: string; - name: string; - owner: { - login: string; - }; - }; -} - -interface GraphQlSearchResponse { - search: { - pageInfo: { - hasNextPage: boolean; - endCursor: string | null; - }; - nodes: Array; - }; -} - -const SEARCH_ISSUES_QUERY = ` - query SearchIssues($searchText: String!, $after: String) { - search( - query: $searchText, - type: ISSUE, - first: 100, - after: $after - ) { - pageInfo { - hasNextPage - endCursor - } - nodes { - ... on Issue { - id - number - title - body - state - stateReason - createdAt - updatedAt - closedAt - author { - login - } - assignees(first: 10) { - nodes { - login - } - } - repository { - id - name - owner { - login - } - } - } - } - } - } -`; - -async function fetchAuthorId(octokit: InstanceType, login: string): Promise { - try { - const response = await octokit.rest.users.getByUsername({ username: login }); - return response.data.id; - } catch (error) { - console.error(`Error fetching author ID for ${login}:`, error); - return -1; - } -} - -async function fetchUserIssues(octokit: InstanceType, username: string): Promise { - const allIssues: IssueNode[] = []; - let hasNextPage = true; - let cursor: string | null = null; - - const searchText = `assignee:${username} is:issue is:closed`; - - while (hasNextPage) { - const variables: { searchText: string; after?: string } = { - searchText, - }; - if (cursor) { - variables.after = cursor; - } - - const response: GraphQlSearchResponse = await octokit.graphql(SEARCH_ISSUES_QUERY, variables); - - const completedIssues = response.search.nodes.filter((issue) => issue.stateReason === "COMPLETED"); - allIssues.push(...completedIssues); - - hasNextPage = response.search.pageInfo.hasNextPage; - cursor = response.search.pageInfo.endCursor; - - if (!cursor) break; + if (lastFetch && now - Number(lastFetch) < 24 * 60 * 60 * 1000) { + return JSON.stringify({ + success: true, + message: "Skipping fetch - last fetch was less than 24 hours ago", + }); } - - return allIssues; -} - -// Pulls issues from GitHub and stores them in Supabase -export async function issueScraper(username: string, supabase: SupabaseClient, token?: string): Promise { - try { - // Check if 24 hours have passed since last fetch - const lastFetchKey = `lastFetch_${username}`; - const lastFetch = localStorage.getItem(lastFetchKey); - const now = Date.now(); - - if (lastFetch && now - Number(lastFetch) < 24 * 60 * 60 * 1000) { - return JSON.stringify({ - success: true, - message: "Skipping fetch - last fetch was less than 24 hours ago", - }); - } - - if (!username) { - throw new Error("Username is required"); - } - - if (VOYAGEAI_API_KEY === undefined) { - throw new Error("Required environment `VOYAGEAI_API_KEY` is missing"); - } - - const context = { - adapters: {}, - logger: { - info: (message: string, data: Record) => console.log("INFO:", message + ":", data), - error: (message: string, data: Record) => console.error("ERROR:", message + ":", data), - }, - octokit: new Octokit(token ? { auth: token } : {}), - }; - - const voyageClient = new VoyageAIClient({ apiKey: VOYAGEAI_API_KEY }); - const issues = await fetchUserIssues(context.octokit, username); - const processedIssues: Array<{ issue: IssueMetadata; error?: string }> = []; - - for (const issue of issues) { - try { - const authorId = issue.author?.login ? await fetchAuthorId(context.octokit, issue.author.login) : -1; - const repoOwner = issue.repository.owner.login; - - const metadata: IssueMetadata = { - nodeId: issue.id, - number: issue.number, - title: issue.title || "", - body: issue.body || "", - state: issue.state, - stateReason: issue.stateReason, - repositoryName: issue.repository.name, - repositoryId: parseInt(issue.repository.id), - assignees: (issue.assignees?.nodes || []).map((assignee) => assignee.login), - authorId, - createdAt: issue.createdAt, - closedAt: issue.closedAt, - updatedAt: issue.updatedAt, - }; - const markdown = metadata.body + " " + metadata.title; - const plaintext = markdownToPlainText(markdown); - if (!plaintext || plaintext === null) { - throw new Error("Error converting markdown to plaintext"); - } - const embeddingObject = await voyageClient.embed({ - input: markdown, - model: "voyage-large-2-instruct", - inputType: "document", - }); - const embedding = (embeddingObject.data && embeddingObject.data[0]?.embedding) || {}; - const payload = { - issue: metadata, - action: "created", - sender: { - login: username, - }, - repository: { - id: parseInt(issue.repository.id), - node_id: issue.repository.id, - name: issue.repository.name, - full_name: `${repoOwner}/${issue.repository.name}`, - owner: { - login: repoOwner, - id: authorId, - type: "User", - site_admin: false, - }, - }, - }; - //Check if the user is authenticated - if (!supabase.auth.getUser()) { - throw new Error("User is not authenticated"); - } - - const { error } = await supabase.from("issues").upsert({ - id: metadata.nodeId, - markdown, - plaintext, - embedding: JSON.stringify(embedding), - author_id: metadata.authorId, - modified_at: metadata.updatedAt, - payload: payload, - }); - - processedIssues.push({ - issue: metadata, - error: error ? `Error storing issue: ${error.message}` : undefined, - }); - } catch (error) { - processedIssues.push({ - issue: { - nodeId: issue.id, - number: issue.number, - title: issue.title || "", - body: issue.body || "", - state: issue.state, - stateReason: issue.stateReason, - repositoryName: issue.repository.name, - repositoryId: parseInt(issue.repository.id), - assignees: [], - authorId: -1, - createdAt: issue.createdAt, - closedAt: issue.closedAt, - updatedAt: issue.updatedAt, - }, - error: `Error processing issue: ${error instanceof Error ? error.message : "Unknown error"}`, - }); - } - } - - // Update last fetch timestamp + + const response = await fetch("/issue-scraper", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + authToken: supabaseAuth.provider_token, + }), + }); + + if (response.status === 200) { localStorage.setItem(lastFetchKey, now.toString()); - - return JSON.stringify( - { - success: true, - stats: { - storageSuccessful: processedIssues.filter((p) => !p.error).length, - storageFailed: processedIssues.filter((p) => p.error).length, - }, - errors: processedIssues - .filter((p) => p.error) - .map((p) => ({ - type: "storage", - name: `${p.issue.repositoryName}#${p.issue.number}`, - error: p.error, - })), - issues: processedIssues.map((p) => ({ - number: p.issue.number, - title: p.issue.title, - repo: p.issue.repositoryName, - error: p.error, - })), - }, - null, - 2 - ); - } catch (error) { - console.error("Error in issueScraper:", error); - throw error; + return JSON.stringify({ + success: true, + message: "Successfully fetched issues", + }); + } else { + return JSON.stringify({ + success: false, + message: `Failed to fetch issues. Status: ${response.status}`, + }); } -} +} \ No newline at end of file