aboutsummaryrefslogtreecommitdiff
path: root/apps/web/app
diff options
context:
space:
mode:
authorDhravya Shah <[email protected]>2024-08-06 11:20:29 -0700
committerGitHub <[email protected]>2024-08-06 11:20:29 -0700
commit7fc39cd770e4b2f55c6fdae1fa02fe0a66a93f6d (patch)
tree82e6a03099b50441c2fe9a9bf8e8ddf7afa293e5 /apps/web/app
parentMerge pull request #219 from Deepakchowdavarapu/readme-issue (diff)
parentupdated kv and queues (diff)
downloadsupermemory-7fc39cd770e4b2f55c6fdae1fa02fe0a66a93f6d.tar.xz
supermemory-7fc39cd770e4b2f55c6fdae1fa02fe0a66a93f6d.zip
Merge pull request #193 from supermemoryai/kush/be-queue
Kush/be queue
Diffstat (limited to 'apps/web/app')
-rw-r--r--apps/web/app/(auth)/onboarding/page.tsx2
-rw-r--r--apps/web/app/(dash)/(memories)/content.tsx2
-rw-r--r--apps/web/app/(dash)/(memories)/space/[spaceid]/page.tsx2
-rw-r--r--apps/web/app/(dash)/dialogContentContainer.tsx4
-rw-r--r--apps/web/app/(dash)/menu.tsx14
-rw-r--r--apps/web/app/actions/doers.ts502
-rw-r--r--apps/web/app/actions/fetchers.ts2
-rw-r--r--apps/web/app/api/chat/history/route.ts2
-rw-r--r--apps/web/app/api/chat/route.ts2
-rw-r--r--apps/web/app/api/ensureAuth.ts2
-rw-r--r--apps/web/app/api/getCount/route.ts2
-rw-r--r--apps/web/app/api/me/route.ts2
-rw-r--r--apps/web/app/api/memories/route.ts2
-rw-r--r--apps/web/app/api/spaces/route.ts2
-rw-r--r--apps/web/app/api/store/friend/route.ts44
-rw-r--r--apps/web/app/api/store/helper.ts20
-rw-r--r--apps/web/app/api/telegram/route.ts2
17 files changed, 288 insertions, 320 deletions
diff --git a/apps/web/app/(auth)/onboarding/page.tsx b/apps/web/app/(auth)/onboarding/page.tsx
index 93e07e73..9a6ac481 100644
--- a/apps/web/app/(auth)/onboarding/page.tsx
+++ b/apps/web/app/(auth)/onboarding/page.tsx
@@ -294,7 +294,7 @@ function StepThree({ currStep }: { currStep: number }) {
});
if (cont.success) {
- toast.success("Memory created", {
+ toast.success("Memory queued", {
richColors: true,
});
} else {
diff --git a/apps/web/app/(dash)/(memories)/content.tsx b/apps/web/app/(dash)/(memories)/content.tsx
index 179b4ef2..6e2659cb 100644
--- a/apps/web/app/(dash)/(memories)/content.tsx
+++ b/apps/web/app/(dash)/(memories)/content.tsx
@@ -1,6 +1,6 @@
"use client";
-import { Content, StoredSpace } from "@/server/db/schema";
+import { Content, StoredSpace } from "@repo/db/schema";
import { MemoriesIcon, NextIcon, SearchIcon, UrlIcon } from "@repo/ui/icons";
import {
ArrowLeftIcon,
diff --git a/apps/web/app/(dash)/(memories)/space/[spaceid]/page.tsx b/apps/web/app/(dash)/(memories)/space/[spaceid]/page.tsx
index ed1ea1cc..8ad9d9cc 100644
--- a/apps/web/app/(dash)/(memories)/space/[spaceid]/page.tsx
+++ b/apps/web/app/(dash)/(memories)/space/[spaceid]/page.tsx
@@ -3,7 +3,7 @@ import { redirect } from "next/navigation";
import MemoriesPage from "../../content";
import { db } from "@/server/db";
import { and, eq } from "drizzle-orm";
-import { spacesAccess } from "@/server/db/schema";
+import { spacesAccess } from "@repo/db/schema";
import { auth } from "@/server/auth";
async function Page({ params: { spaceid } }: { params: { spaceid: number } }) {
diff --git a/apps/web/app/(dash)/dialogContentContainer.tsx b/apps/web/app/(dash)/dialogContentContainer.tsx
index 4e8d81ef..1a11ac6d 100644
--- a/apps/web/app/(dash)/dialogContentContainer.tsx
+++ b/apps/web/app/(dash)/dialogContentContainer.tsx
@@ -1,4 +1,4 @@
-import { StoredSpace } from "@/server/db/schema";
+import { StoredSpace } from "@repo/db/schema";
import { useEffect, useMemo, useState } from "react";
import { createMemory, createSpace } from "../actions/doers";
import ComboboxWithCreate from "@repo/ui/shadcn/combobox";
@@ -76,7 +76,7 @@ export function DialogContentContainer({
setSelectedSpaces([]);
if (cont.success) {
- toast.success("Memory created", {
+ toast.success("Memory queued", {
richColors: true,
});
} else {
diff --git a/apps/web/app/(dash)/menu.tsx b/apps/web/app/(dash)/menu.tsx
index 7eac5a56..1c0ce1ee 100644
--- a/apps/web/app/(dash)/menu.tsx
+++ b/apps/web/app/(dash)/menu.tsx
@@ -28,7 +28,7 @@ import { getSpaces } from "../actions/fetchers";
import { HomeIcon } from "@heroicons/react/24/solid";
import { createMemory, createSpace } from "../actions/doers";
import ComboboxWithCreate from "@repo/ui/shadcn/combobox";
-import { StoredSpace } from "@/server/db/schema";
+import { StoredSpace } from "@repo/db/schema";
import useMeasure from "react-use-measure";
import { useKeyPress } from "@/lib/useKeyPress";
@@ -121,9 +121,14 @@ function Menu() {
setContent("");
setSelectedSpaces([]);
if (cont.success) {
+ toast.success("Memory queued", {
+ richColors: true,
+ });
+ } else {
+ toast.error(`Memory creation failed: ${cont.error}`);
+ throw new Error(`Memory creation failed: ${cont.error}`);
return cont;
}
- throw new Error(`Memory creation failed: ${cont.error}`);
};
return (
@@ -275,10 +280,7 @@ function Menu() {
]);
setSelectedSpaces((prev) => [...prev, creationTask.data!]);
} else {
- toast.error(
- "Space creation failed: " + creationTask.error ??
- "Unknown error",
- );
+ toast.error("Space creation failed: " + creationTask.error);
}
}}
placeholder="Select or create a new space."
diff --git a/apps/web/app/actions/doers.ts b/apps/web/app/actions/doers.ts
index 9750a705..c11d5f0a 100644
--- a/apps/web/app/actions/doers.ts
+++ b/apps/web/app/actions/doers.ts
@@ -11,13 +11,13 @@ import {
spacesAccess,
storedContent,
users,
-} from "../../server/db/schema";
+} from "@repo/db/schema";
import { ServerActionReturnType } from "./types";
import { auth } from "../../server/auth";
import { Tweet } from "react-tweet/api";
-import { getMetaData } from "@/lib/get-metadata";
+// import { getMetaData } from "@/lib/get-metadata";
import { and, eq, inArray, sql } from "drizzle-orm";
-import { LIMITS } from "@/lib/constants";
+import { LIMITS } from "@repo/shared-types";
import { ChatHistory } from "@repo/shared-types";
import { decipher } from "@/server/encrypt";
import { redirect } from "next/navigation";
@@ -104,25 +104,6 @@ const typeDecider = (content: string): "page" | "tweet" | "note" => {
}
};
-export const limit = async (
- userId: string,
- type = "page",
- items: number = 1,
-) => {
- const countResult = await db
- .select({
- count: sql<number>`count(*)`.mapWith(Number),
- })
- .from(storedContent)
- .where(and(eq(storedContent.userId, userId), eq(storedContent.type, type)));
-
- const currentCount = countResult[0]?.count || 0;
- const totalLimit = LIMITS[type as keyof typeof LIMITS];
- const remainingLimit = totalLimit - currentCount;
-
- return items <= remainingLimit;
-};
-
export const addUserToSpace = async (userEmail: string, spaceId: number) => {
const data = await auth();
@@ -208,122 +189,15 @@ export const createMemory = async (input: {
return { error: "Not authenticated", success: false };
}
- const type = typeDecider(input.content);
-
- let pageContent = input.content;
- let metadata: Awaited<ReturnType<typeof getMetaData>>;
- let vectorData: string;
-
- if (!(await limit(data.user.id, type))) {
- return {
- success: false,
- data: 0,
- error: `You have exceeded the limit of ${LIMITS[type as keyof typeof LIMITS]} ${type}s.`,
- };
- }
-
- let noteId = 0;
-
- if (type === "page") {
- const response = await fetch("https://md.dhr.wtf/?url=" + input.content, {
- headers: {
- Authorization: "Bearer " + process.env.BACKEND_SECURITY_KEY,
- },
- });
- pageContent = await response.text();
- vectorData = pageContent;
- try {
- metadata = await getMetaData(input.content);
- } catch (e) {
- return {
- success: false,
- error: "Failed to fetch metadata for the page. Please try again later.",
- };
- }
- } else if (type === "tweet") {
- //Request the worker for the entire thread
-
- let thread: string;
- let errorOccurred: boolean = false;
-
- try {
- const cf_thread_endpoint = process.env.THREAD_CF_WORKER;
- const authKey = process.env.THREAD_CF_AUTH;
- const threadRequest = await fetch(cf_thread_endpoint, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- Authorization: authKey,
- },
- body: JSON.stringify({ url: input.content }),
- });
-
- if (threadRequest.status !== 200) {
- throw new Error(
- `Failed to fetch the thread: ${input.content}, Reason: ${threadRequest.statusText}`,
- );
- }
-
- thread = await threadRequest.text();
- if (thread.trim().length === 2) {
- console.log("Thread is an empty array");
- throw new Error(
- "[THREAD FETCHING SERVICE] Got no content form thread worker",
- );
- }
- } catch (e) {
- console.log("[THREAD FETCHING SERVICE] Failed to fetch the thread", e);
- errorOccurred = true;
- }
-
- const tweet = await getTweetData(input.content.split("/").pop() as string);
-
- pageContent = tweetToMd(tweet);
- console.log("THis ishte page content!!", pageContent);
- //@ts-ignore
- vectorData = errorOccurred ? JSON.stringify(pageContent) : thread;
- metadata = {
- baseUrl: input.content,
- description: tweet.text.slice(0, 200),
- image: tweet.user.profile_image_url_https,
- title: `Tweet by ${tweet.user.name}`,
- };
- } else if (type === "note") {
- pageContent = input.content;
- vectorData = pageContent;
- noteId = new Date().getTime();
- metadata = {
- baseUrl: `https://supermemory.ai/note/${noteId}`,
- description: `Note created at ${new Date().toLocaleString()}`,
- image: "https://supermemory.ai/logo.png",
- title: `${pageContent.slice(0, 20)} ${pageContent.length > 20 ? "..." : ""}`,
- };
- } else {
- return {
- success: false,
- data: 0,
- error: "Invalid type",
- };
- }
-
- let storeToSpaces = input.spaces;
-
- if (!storeToSpaces) {
- storeToSpaces = [];
- }
-
- const vectorSaveResponse = await fetch(
+ // make the backend reqeust for the queue here
+ const vectorSaveResponses = await fetch(
`${process.env.BACKEND_BASE_URL}/api/add`,
{
method: "POST",
body: JSON.stringify({
- pageContent: vectorData,
- title: metadata.title,
- description: metadata.description,
- url: metadata.baseUrl,
- spaces: storeToSpaces.map((spaceId) => spaceId.toString()),
+ url: input.content,
+ spaces: input.spaces,
user: data.user.id,
- type,
}),
headers: {
"Content-Type": "application/json",
@@ -331,126 +205,262 @@ export const createMemory = async (input: {
},
},
);
-
- if (!vectorSaveResponse.ok) {
- const errorData = await vectorSaveResponse.text();
- console.error(errorData);
- return {
- success: false,
- data: 0,
- error: `Failed to save to vector store. Backend returned error: ${errorData}`,
- };
- }
-
- let contentId: number;
-
- const response = (await vectorSaveResponse.json()) as {
+ const response = (await vectorSaveResponses.json()) as {
status: string;
- chunkedInput: string;
message?: string;
};
- try {
- if (response.status !== "ok") {
- if (response.status === "error") {
- return {
- success: false,
- data: 0,
- error: response.message,
- };
- } else {
- return {
- success: false,
- data: 0,
- error: `Failed to save to vector store. Backend returned error: ${response.message}`,
- };
- }
- }
- } catch (e) {
+ if (response.status !== "ok") {
return {
success: false,
data: 0,
- error: `Failed to save to vector store. Backend returned error: ${e}`,
+ error: response.message,
};
}
- const saveToDbUrl =
- (metadata.baseUrl.split("#supermemory-user-")[0] ?? metadata.baseUrl) +
- "#supermemory-user-" +
- data.user.id;
-
- // Insert into database
- try {
- const insertResponse = await db
- .insert(storedContent)
- .values({
- content: pageContent,
- title: metadata.title,
- description: metadata.description,
- url: saveToDbUrl,
- baseUrl: saveToDbUrl,
- image: metadata.image,
- savedAt: new Date(),
- userId: data.user.id,
- type,
- noteId,
- })
- .returning({ id: storedContent.id });
- revalidatePath("/memories");
- revalidatePath("/home");
-
- if (!insertResponse[0]?.id) {
- return {
- success: false,
- data: 0,
- error: "Something went wrong while saving the document to the database",
- };
- }
-
- contentId = insertResponse[0]?.id;
- } catch (e) {
- const error = e as Error;
- console.log("Error: ", error.message);
-
- if (
- error.message.includes(
- "D1_ERROR: UNIQUE constraint failed: storedContent.baseUrl",
- )
- ) {
- return {
- success: false,
- data: 0,
- error: "Content already exists",
- };
- }
-
- return {
- success: false,
- data: 0,
- error: "Failed to save to database with error: " + error.message,
- };
- }
-
- if (storeToSpaces.length > 0) {
- // Adding the many-to-many relationship between content and spaces
- const spaceData = await db
- .select()
- .from(space)
- .where(
- and(inArray(space.id, storeToSpaces), eq(space.user, data.user.id)),
- )
- .all();
-
- await Promise.all(
- spaceData.map(async (s) => {
- await db
- .insert(contentToSpace)
- .values({ contentId: contentId, spaceId: s.id });
-
- await db.update(space).set({ numItems: s.numItems + 1 });
- }),
- );
- }
+ // const type = typeDecider(input.content);
+
+ // let pageContent = input.content;
+ // let metadata: Awaited<ReturnType<typeof getMetaData>>;
+ // let vectorData: string;
+
+ // if (!(await limit(data.user.id, type))) {
+ // return {
+ // success: false,
+ // data: 0,
+ // error: `You have exceeded the limit of ${LIMITS[type as keyof typeof LIMITS]} ${type}s.`,
+ // };
+ // } --> How would this fit in the backend???
+
+ // let noteId = 0;
+
+ // if (type === "page") {
+ // const response = await fetch("https://md.dhr.wtf/?url=" + input.content, {
+ // headers: {
+ // Authorization: "Bearer " + process.env.BACKEND_SECURITY_KEY,
+ // },
+ // });
+ // pageContent = await response.text();
+ // vectorData = pageContent;
+ // try {
+ // metadata = await getMetaData(input.content);
+ // } catch (e) {
+ // return {
+ // success: false,
+ // error: "Failed to fetch metadata for the page. Please try again later.",
+ // };
+ // }
+ // } else if (type === "tweet") {
+ // //Request the worker for the entire thread
+
+ // let thread: string;
+ // let errorOccurred: boolean = false;
+
+ // try {
+ // const cf_thread_endpoint = process.env.THREAD_CF_WORKER;
+ // const authKey = process.env.THREAD_CF_AUTH;
+ // const threadRequest = await fetch(cf_thread_endpoint, {
+ // method: "POST",
+ // headers: {
+ // "Content-Type": "application/json",
+ // Authorization: authKey,
+ // },
+ // body: JSON.stringify({ url: input.content }),
+ // });
+
+ // if (threadRequest.status !== 200) {
+ // throw new Error(
+ // `Failed to fetch the thread: ${input.content}, Reason: ${threadRequest.statusText}`,
+ // );
+ // }
+
+ // thread = await threadRequest.text();
+ // if (thread.trim().length === 2) {
+ // console.log("Thread is an empty array");
+ // throw new Error(
+ // "[THREAD FETCHING SERVICE] Got no content form thread worker",
+ // );
+ // }
+ // } catch (e) {
+ // console.log("[THREAD FETCHING SERVICE] Failed to fetch the thread", e);
+ // errorOccurred = true;
+ // }
+
+ // const tweet = await getTweetData(input.content.split("/").pop() as string);
+
+ // pageContent = tweetToMd(tweet);
+ // console.log("THis ishte page content!!", pageContent);
+ // //@ts-ignore
+ // vectorData = errorOccurred ? JSON.stringify(pageContent) : thread;
+ // metadata = {
+ // baseUrl: input.content,
+ // description: tweet.text.slice(0, 200),
+ // image: tweet.user.profile_image_url_https,
+ // title: `Tweet by ${tweet.user.name}`,
+ // };
+ // } else if (type === "note") {
+ // pageContent = input.content;
+ // vectorData = pageContent;
+ // noteId = new Date().getTime();
+ // metadata = {
+ // baseUrl: `https://supermemory.ai/note/${noteId}`,
+ // description: `Note created at ${new Date().toLocaleString()}`,
+ // image: "https://supermemory.ai/logo.png",
+ // title: `${pageContent.slice(0, 20)} ${pageContent.length > 20 ? "..." : ""}`,
+ // };
+ // } else {
+ // return {
+ // success: false,
+ // data: 0,
+ // error: "Invalid type",
+ // };
+ // }
+
+ // let storeToSpaces = input.spaces;
+
+ // if (!storeToSpaces) {
+ // storeToSpaces = [];
+ // }
+
+ // const vectorSaveResponse = await fetch(
+ // `${process.env.BACKEND_BASE_URL}/api/add`,
+ // {
+ // method: "POST",
+ // body: JSON.stringify({
+ // pageContent: vectorData,
+ // title: metadata.title,
+ // description: metadata.description,
+ // url: metadata.baseUrl,
+ // spaces: storeToSpaces.map((spaceId) => spaceId.toString()),
+ // user: data.user.id,
+ // type,
+ // }),
+ // headers: {
+ // "Content-Type": "application/json",
+ // Authorization: "Bearer " + process.env.BACKEND_SECURITY_KEY,
+ // },
+ // },
+ // );
+
+ // if (!vectorSaveResponse.ok) {
+ // const errorData = await vectorSaveResponse.text();
+ // console.error(errorData);
+ // return {
+ // success: false,
+ // data: 0,
+ // error: `Failed to save to vector store. Backend returned error: ${errorData}`,
+ // };
+ // }
+
+ // let contentId: number;
+
+ // const response = (await vectorSaveResponse.json()) as {
+ // status: string;
+ // chunkedInput: string;
+ // message?: string;
+ // };
+
+ // try {
+ // if (response.status !== "ok") {
+ // if (response.status === "error") {
+ // return {
+ // success: false,
+ // data: 0,
+ // error: response.message,
+ // };
+ // } else {
+ // return {
+ // success: false,
+ // data: 0,
+ // error: `Failed to save to vector store. Backend returned error: ${response.message}`,
+ // };
+ // }
+ // }
+ // } catch (e) {
+ // return {
+ // success: false,
+ // data: 0,
+ // error: `Failed to save to vector store. Backend returned error: ${e}`,
+ // };
+ // }
+
+ // const saveToDbUrl =
+ // (metadata.baseUrl.split("#supermemory-user-")[0] ?? metadata.baseUrl) +
+ // "#supermemory-user-" +
+ // data.user.id;
+
+ // // Insert into database
+ // try {
+ // const insertResponse = await db
+ // .insert(storedContent)
+ // .values({
+ // content: pageContent,
+ // title: metadata.title,
+ // description: metadata.description,
+ // url: saveToDbUrl,
+ // baseUrl: saveToDbUrl,
+ // image: metadata.image,
+ // savedAt: new Date(),
+ // userId: data.user.id,
+ // type,
+ // noteId,
+ // })
+ // .returning({ id: storedContent.id });
+ // revalidatePath("/memories");
+ // revalidatePath("/home");
+
+ // if (!insertResponse[0]?.id) {
+ // return {
+ // success: false,
+ // data: 0,
+ // error: "Something went wrong while saving the document to the database",
+ // };
+ // }
+
+ // contentId = insertResponse[0]?.id;
+ // } catch (e) {
+ // const error = e as Error;
+ // console.log("Error: ", error.message);
+
+ // if (
+ // error.message.includes(
+ // "D1_ERROR: UNIQUE constraint failed: storedContent.baseUrl",
+ // )
+ // ) {
+ // return {
+ // success: false,
+ // data: 0,
+ // error: "Content already exists",
+ // };
+ // }
+
+ // return {
+ // success: false,
+ // data: 0,
+ // error: "Failed to save to database with error: " + error.message,
+ // };
+ // }
+
+ // if (storeToSpaces.length > 0) {
+ // // Adding the many-to-many relationship between content and spaces
+ // const spaceData = await db
+ // .select()
+ // .from(space)
+ // .where(
+ // and(inArray(space.id, storeToSpaces), eq(space.user, data.user.id)),
+ // )
+ // .all();
+
+ // await Promise.all(
+ // spaceData.map(async (s) => {
+ // await db
+ // .insert(contentToSpace)
+ // .values({ contentId: contentId, spaceId: s.id });
+
+ // await db.update(space).set({ numItems: s.numItems + 1 });
+ // }),
+ // );
+ // }
return {
success: true,
@@ -828,9 +838,9 @@ export async function getQuerySuggestions() {
};
}
- const fullQuery = content
- .map((c) => `${c.title} \n\n${c.content}`)
- .join(" ");
+ const fullQuery = (
+ content?.map((c) => `${c.title} \n\n${c.content}`) ?? []
+ ).join(" ");
const suggestionsCall = (await env.AI.run(
// @ts-ignore
diff --git a/apps/web/app/actions/fetchers.ts b/apps/web/app/actions/fetchers.ts
index 5f72089a..f00feb3c 100644
--- a/apps/web/app/actions/fetchers.ts
+++ b/apps/web/app/actions/fetchers.ts
@@ -15,7 +15,7 @@ import {
StoredSpace,
User,
users,
-} from "../../server/db/schema";
+} from "@repo/db/schema";
import { ServerActionReturnType } from "./types";
import { auth } from "../../server/auth";
import { ChatHistory, SourceZod } from "@repo/shared-types";
diff --git a/apps/web/app/api/chat/history/route.ts b/apps/web/app/api/chat/history/route.ts
index 98b66064..197b8ee6 100644
--- a/apps/web/app/api/chat/history/route.ts
+++ b/apps/web/app/api/chat/history/route.ts
@@ -2,7 +2,7 @@ import { NextRequest } from "next/server";
import { ensureAuth } from "../../ensureAuth";
import { db } from "@/server/db";
import { eq } from "drizzle-orm";
-import { chatThreads } from "@/server/db/schema";
+import { chatThreads } from "@repo/db/schema";
export const runtime = "edge";
diff --git a/apps/web/app/api/chat/route.ts b/apps/web/app/api/chat/route.ts
index a14c96df..78878e40 100644
--- a/apps/web/app/api/chat/route.ts
+++ b/apps/web/app/api/chat/route.ts
@@ -8,7 +8,7 @@ import {
import { ensureAuth } from "../ensureAuth";
import { z } from "zod";
import { db } from "@/server/db";
-import { chatHistory as chatHistoryDb, chatThreads } from "@/server/db/schema";
+import { chatHistory as chatHistoryDb, chatThreads } from "@repo/db/schema";
import { and, eq, gt, sql } from "drizzle-orm";
import { join } from "path";
diff --git a/apps/web/app/api/ensureAuth.ts b/apps/web/app/api/ensureAuth.ts
index 1fcd2914..92a5e3e8 100644
--- a/apps/web/app/api/ensureAuth.ts
+++ b/apps/web/app/api/ensureAuth.ts
@@ -1,6 +1,6 @@
import { NextRequest } from "next/server";
import { db } from "../../server/db";
-import { accounts, sessions, users } from "../../server/db/schema";
+import { accounts, sessions, users } from "@repo/db/schema";
import { eq } from "drizzle-orm";
export async function ensureAuth(req: NextRequest) {
diff --git a/apps/web/app/api/getCount/route.ts b/apps/web/app/api/getCount/route.ts
index f91b7b94..4fd77efd 100644
--- a/apps/web/app/api/getCount/route.ts
+++ b/apps/web/app/api/getCount/route.ts
@@ -1,6 +1,6 @@
import { db } from "@/server/db";
import { and, eq, ne, sql } from "drizzle-orm";
-import { sessions, storedContent, users } from "@/server/db/schema";
+import { sessions, storedContent, users } from "@repo/db/schema";
import { type NextRequest, NextResponse } from "next/server";
import { ensureAuth } from "../ensureAuth";
diff --git a/apps/web/app/api/me/route.ts b/apps/web/app/api/me/route.ts
index ab408f3e..25aa27bc 100644
--- a/apps/web/app/api/me/route.ts
+++ b/apps/web/app/api/me/route.ts
@@ -1,6 +1,6 @@
import { db } from "@/server/db";
import { eq } from "drizzle-orm";
-import { sessions, users } from "@/server/db/schema";
+import { sessions, users } from "@repo/db/schema";
import { type NextRequest, NextResponse } from "next/server";
export const runtime = "edge";
diff --git a/apps/web/app/api/memories/route.ts b/apps/web/app/api/memories/route.ts
index acb43b5d..0084524e 100644
--- a/apps/web/app/api/memories/route.ts
+++ b/apps/web/app/api/memories/route.ts
@@ -6,7 +6,7 @@ import {
contentToSpace,
storedContent,
users,
-} from "@/server/db/schema";
+} from "@repo/db/schema";
import { ensureAuth } from "../ensureAuth";
export const runtime = "edge";
diff --git a/apps/web/app/api/spaces/route.ts b/apps/web/app/api/spaces/route.ts
index e85e07ed..27ff0dfb 100644
--- a/apps/web/app/api/spaces/route.ts
+++ b/apps/web/app/api/spaces/route.ts
@@ -1,5 +1,5 @@
import { db } from "@/server/db";
-import { space } from "@/server/db/schema";
+import { space } from "@repo/db/schema";
import { eq } from "drizzle-orm";
import { NextRequest, NextResponse } from "next/server";
import { ensureAuth } from "../ensureAuth";
diff --git a/apps/web/app/api/store/friend/route.ts b/apps/web/app/api/store/friend/route.ts
deleted file mode 100644
index 554b1cee..00000000
--- a/apps/web/app/api/store/friend/route.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { type NextRequest } from "next/server";
-import { createMemoryFromAPI } from "../helper";
-
-type FriendData = {
- id: string;
- created_at: string;
- transcript: string;
- structured: {
- title: string;
- overview: string;
- action_items: [
- {
- description: string;
- },
- ];
- };
-};
-
-export async function POST(req: NextRequest) {
- const body: FriendData = await req.json();
-
- const userId = new URL(req.url).searchParams.get("uid");
-
- if (!userId) {
- return new Response(
- JSON.stringify({ status: 400, body: "Missing user ID" }),
- );
- }
-
- await createMemoryFromAPI({
- data: {
- title: "Friend: " + body.structured.title,
- description: body.structured.overview,
- pageContent:
- body.transcript + "\n\n" + JSON.stringify(body.structured.action_items),
- spaces: [],
- type: "note",
- url: "https://basedhardware.com",
- },
- userId: userId,
- });
-
- return new Response(JSON.stringify({ status: 200, body: "success" }));
-}
diff --git a/apps/web/app/api/store/helper.ts b/apps/web/app/api/store/helper.ts
index a2c04dc1..db13ca91 100644
--- a/apps/web/app/api/store/helper.ts
+++ b/apps/web/app/api/store/helper.ts
@@ -1,22 +1,22 @@
import { z } from "zod";
import { db } from "@/server/db";
-import { contentToSpace, space, storedContent } from "@/server/db/schema";
+import { contentToSpace, space, storedContent } from "@repo/db/schema";
import { and, eq, inArray } from "drizzle-orm";
-import { LIMITS } from "@/lib/constants";
-import { limit } from "@/app/actions/doers";
+// import { LIMITS } from "@repo/shared-types";
+// import { limit } from "@/app/actions/doers";
import { type AddFromAPIType } from "@repo/shared-types";
export const createMemoryFromAPI = async (input: {
data: AddFromAPIType;
userId: string;
}) => {
- if (!(await limit(input.userId, input.data.type))) {
- return {
- success: false,
- data: 0,
- error: `You have exceeded the limit of ${LIMITS[input.data.type as keyof typeof LIMITS]} ${input.data.type}s.`,
- };
- }
+ // if (!(await limit(input.userId, input.data.type))) {
+ // return {
+ // success: false,
+ // data: 0,
+ // error: `You have exceeded the limit of ${LIMITS[input.data.type as keyof typeof LIMITS]} ${input.data.type}s.`,
+ // };
+ // }
const vectorSaveResponse = await fetch(
`${process.env.BACKEND_BASE_URL}/api/add`,
diff --git a/apps/web/app/api/telegram/route.ts b/apps/web/app/api/telegram/route.ts
index 06499c7d..c629e409 100644
--- a/apps/web/app/api/telegram/route.ts
+++ b/apps/web/app/api/telegram/route.ts
@@ -1,5 +1,5 @@
import { db } from "@/server/db";
-import { storedContent, users } from "@/server/db/schema";
+import { storedContent, users } from "@repo/db/schema";
import { cipher } from "@/server/encrypt";
import { eq } from "drizzle-orm";
import { Bot, webhookCallback } from "grammy";