aboutsummaryrefslogtreecommitdiff
path: root/apps/web/app/api/onboarding/extract-content/route.ts
diff options
context:
space:
mode:
authorMaheshtheDev <[email protected]>2026-01-15 21:53:53 +0000
committerMaheshtheDev <[email protected]>2026-01-15 21:53:53 +0000
commit59c294b29998a861a870629d513f6da74b3d76ac (patch)
tree265c9fe27984c6d322ba2e51b0fc91bc2302698d /apps/web/app/api/onboarding/extract-content/route.ts
parentchore: quick bugs squash across the elements and added few more changes (#671) (diff)
downloadsupermemory-59c294b29998a861a870629d513f6da74b3d76ac.tar.xz
supermemory-59c294b29998a861a870629d513f6da74b3d76ac.zip
feat: deep-research on user profile and tiptap integration (#672)01-14-feat_deep-research_on_user_profile
deep-research on user profile add novel integration tiptap 3.x integration
Diffstat (limited to 'apps/web/app/api/onboarding/extract-content/route.ts')
-rw-r--r--apps/web/app/api/onboarding/extract-content/route.ts61
1 files changed, 61 insertions, 0 deletions
diff --git a/apps/web/app/api/onboarding/extract-content/route.ts b/apps/web/app/api/onboarding/extract-content/route.ts
new file mode 100644
index 00000000..6cdb40d5
--- /dev/null
+++ b/apps/web/app/api/onboarding/extract-content/route.ts
@@ -0,0 +1,61 @@
+export interface ExaContentResult {
+ url: string
+ text: string
+ title: string
+ author?: string
+}
+
+interface ExaApiResponse {
+ results: ExaContentResult[]
+}
+
+export async function POST(request: Request) {
+ try {
+ const { urls } = await request.json()
+
+ if (!Array.isArray(urls) || urls.length === 0) {
+ return Response.json(
+ { error: "Invalid input: urls must be a non-empty array" },
+ { status: 400 },
+ )
+ }
+
+ if (!urls.every((url) => typeof url === "string" && url.trim())) {
+ return Response.json(
+ { error: "Invalid input: all urls must be non-empty strings" },
+ { status: 400 },
+ )
+ }
+
+ const response = await fetch("https://api.exa.ai/contents", {
+ method: "POST",
+ headers: {
+ "x-api-key": process.env.EXA_API_KEY ?? "",
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ urls,
+ text: true,
+ livecrawl: "fallback",
+ }),
+ })
+
+ if (!response.ok) {
+ console.error(
+ "Exa API request failed:",
+ response.status,
+ response.statusText,
+ )
+ return Response.json(
+ { error: "Failed to fetch content from Exa API" },
+ { status: 500 },
+ )
+ }
+
+ const data: ExaApiResponse = await response.json()
+ return Response.json({ results: data.results })
+ } catch (error) {
+ console.error("Exa API request error:", error)
+ return Response.json({ error: "Internal server error" }, { status: 500 })
+ }
+}