aboutsummaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorDhravya <[email protected]>2024-04-12 23:22:51 -0700
committerDhravya <[email protected]>2024-04-12 23:22:51 -0700
commitee9c598013deb9cf20882e6971267942d0832d7b (patch)
tree021cf9ca808d1df024d7f63b007eb7bcecc49aac /apps
parentmark runtime=edge for spaces (diff)
downloadarchived-supermemory-ee9c598013deb9cf20882e6971267942d0832d7b.tar.xz
archived-supermemory-ee9c598013deb9cf20882e6971267942d0832d7b.zip
bookmark tweets feature
Diffstat (limited to 'apps')
-rw-r--r--apps/extension/src/SideBar.tsx14
-rw-r--r--apps/extension/src/background.ts27
-rw-r--r--apps/web/src/app/api/vectorizeTweets/route.ts61
3 files changed, 98 insertions, 4 deletions
diff --git a/apps/extension/src/SideBar.tsx b/apps/extension/src/SideBar.tsx
index 9ecb8afa..4cce9a17 100644
--- a/apps/extension/src/SideBar.tsx
+++ b/apps/extension/src/SideBar.tsx
@@ -65,6 +65,14 @@ function SideBar({ jwt }: { jwt: string }) {
saveToUser: string;
}
+ function sendBookmarkedTweetsToAPI(tweets: TweetData[], token: string) {
+ chrome.runtime.sendMessage({
+ type: "sendBookmarkedTweets",
+ jwt: token,
+ tweets,
+ });
+ }
+
const fetchBookmarks = () => {
const tweets: TweetData[] = []; // Initialize an empty array to hold all tweet elements
@@ -161,11 +169,9 @@ function SideBar({ jwt }: { jwt: string }) {
observer.observe(document.body, { childList: true, subtree: true });
function downloadTweetsAsJson(tweetsArray: TweetData[]) {
+ setLog([...log, "Saving the tweets to our database..."]);
+ sendBookmarkedTweetsToAPI(tweetsArray, jwt);
setIsImportingTweets(false);
- const jsonData = JSON.stringify(tweetsArray); // Convert the array to JSON
-
- // TODO: send jsonData to the API
- console.log(jsonData);
}
};
diff --git a/apps/extension/src/background.ts b/apps/extension/src/background.ts
index 44931dc4..7e12bba4 100644
--- a/apps/extension/src/background.ts
+++ b/apps/extension/src/background.ts
@@ -5,6 +5,15 @@ const backendUrl =
? "http://localhost:3000"
: "https://supermemory.dhr.wtf";
+interface TweetData {
+ tweetText: string;
+ postUrl: string;
+ authorName: string;
+ handle: string;
+ time: string;
+ saveToUser: string;
+}
+
// TODO: Implement getting bookmarks from Twitter API directly
// let authorizationHeader: string | null = null;
// let csrfToken: string | null = null;
@@ -105,4 +114,22 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
// cookies: cookies
// });
// }
+ else if (request.type === "sendBookmarkedTweets") {
+ const jwt = request.jwt;
+ const tweets = request.tweets as TweetData[];
+
+ (async () => {
+ await fetch(`${backendUrl}/api/vectorizeTweets`, {
+ method: "POST",
+ headers: {
+ Authorization: `Bearer ${jwt}`,
+ },
+ body: JSON.stringify(tweets),
+ }).then(async (response) => {
+ return response.json();
+ });
+ })();
+
+ return true;
+ }
});
diff --git a/apps/web/src/app/api/vectorizeTweets/route.ts b/apps/web/src/app/api/vectorizeTweets/route.ts
new file mode 100644
index 00000000..5dfb22f1
--- /dev/null
+++ b/apps/web/src/app/api/vectorizeTweets/route.ts
@@ -0,0 +1,61 @@
+import { db } from "@/server/db";
+import { eq } from "drizzle-orm";
+import { sessions, storedContent, users } from "@/server/db/schema";
+import { type NextRequest, NextResponse } from "next/server";
+import { env } from "@/env";
+
+export const runtime = "edge";
+
+interface TweetData {
+ tweetText: string;
+ postUrl: string;
+ authorName: string;
+ handle: string;
+ time: string;
+ saveToUser: string;
+}
+
+export async function POST(req: NextRequest) {
+ const token =
+ req.cookies.get("next-auth.session-token")?.value ??
+ req.cookies.get("__Secure-authjs.session-token")?.value ??
+ req.cookies.get("authjs.session-token")?.value ??
+ req.headers.get("Authorization")?.replace("Bearer ", "");
+
+ if (!token) {
+ return new Response(
+ JSON.stringify({ message: "Invalid Key, session not found." }),
+ { status: 404 },
+ );
+ }
+
+ const sessionData = await db
+ .select()
+ .from(sessions)
+ .where(eq(sessions.sessionToken, token!));
+
+ if (!sessionData || sessionData.length === 0) {
+ return new Response(
+ JSON.stringify({ message: "Invalid Key, session not found." }),
+ { status: 404 },
+ );
+ }
+
+ const body = (await req.json()) as TweetData[];
+
+ const resp = await fetch(
+ `https://cf-ai-backend.dhravya.workers.dev/batchUploadTweets`,
+ {
+ headers: {
+ "X-Custom-Auth-Key": env.BACKEND_SECURITY_KEY,
+ },
+ method: "POST",
+ body: JSON.stringify(body),
+ },
+ );
+
+ return new Response(await resp.text(), {
+ status: resp.status,
+ headers: resp.headers,
+ });
+}