"use client"; import React, { useEffect, useState } from "react"; import Image from "next/image"; import logo from "@/public/SurfSense.png"; import { FileCheck } from "lucide-react"; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/components/ui/collapsible"; import { Table, TableBody, TableCell, TableRow, } from "@/components/ui/table"; import MarkDownTest from "./markdown"; import { useRouter } from "next/navigation"; type Document = { BrowsingSessionId: string; VisitedWebPageURL: string; VisitedWebPageTitle: string; VisitedWebPageDateWithTimeInISOString: string; VisitedWebPageReffererURL: string; VisitedWebPageVisitDurationInMilliseconds: number; VisitedWebPageContent: string; }; // type Description = { // response: string; // }; // type NormalResponse = { // response: string; // relateddocs: Document[]; // }; // type ChatMessage = { // type: string; // userquery: string; // message: NormalResponse | string; // }; function ProtectedPage() { // const navigate = useNavigate(); const router = useRouter(); const [loading, setLoading] = useState(false); const [currentChat, setCurrentChat] = useState([]); useEffect(() => { const verifyToken = async () => { const token = window.localStorage.getItem('token'); // console.log(token) try { const response = await fetch(`${process.env.NEXT_PUBLIC_BACKEND_URL!}/verify-token/${token}`); if (!response.ok) { throw new Error('Token verification failed'); }else{ const NEO4JURL = localStorage.getItem('neourl'); const NEO4JUSERNAME = localStorage.getItem('neouser'); const NEO4JPASSWORD = localStorage.getItem('neopass'); const OPENAIKEY = localStorage.getItem('openaikey'); const check = (NEO4JURL && NEO4JUSERNAME && NEO4JPASSWORD && OPENAIKEY) if(!check){ router.push('/settings'); } } } catch (error) { window.localStorage.removeItem('token'); router.push('/login'); } }; verifyToken(); }, [router]); const handleSubmit = async (formData: any) => { setLoading(true); const query = formData.get("query"); if (!query) { console.log("Query cant be empty!!"); return; } const requestOptions = { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ query: query, neourl: localStorage.getItem('neourl'), neouser: localStorage.getItem('neouser'), neopass: localStorage.getItem('neopass'), openaikey: localStorage.getItem('openaikey'), apisecretkey: process.env.NEXT_PUBLIC_API_SECRET_KEY }), }; fetch(`${process.env.NEXT_PUBLIC_BACKEND_URL!}/`, requestOptions) .then(res=>res.json()) .then(data=> { let cur = currentChat; cur.push({ type: "normal", userquery: query, message: data, }); setCurrentChat([...cur]); setLoading(false); }); }; const getDocDescription = async (document: Document) => { setLoading(true); const requestOptions = { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ query: JSON.stringify(document), neourl: localStorage.getItem('neourl'), neouser: localStorage.getItem('neouser'), neopass: localStorage.getItem('neopass'), openaikey: localStorage.getItem('openaikey'), apisecretkey: process.env.NEXT_PUBLIC_API_SECRET_KEY }), }; const response = await fetch( `${process.env.NEXT_PUBLIC_BACKEND_URL!}/kb/doc`, requestOptions ); const res = await response.json(); let cur = currentChat; cur.push({ type: "description", doctitle: document.VisitedWebPageTitle, message: res.response, }); setLoading(false); setCurrentChat([...cur]); // console.log(document); }; if (currentChat) { return ( <>

Welcome to SurfSense

🧠 Ask Your Knowledge Graph Brain 🧠

{currentChat.map((chat, index) => { // console.log("chat", chat); if (chat.type === "normal") { return (

{chat.userquery}

SurfSense Response:

Related Browsing Sessions

{ //@ts-ignore chat.message.relateddocs.map((doc) => { return ( {doc.VisitedWebPageTitle} Browsing Session Id {doc.BrowsingSessionId} URL {doc.VisitedWebPageURL} Reffering URL {doc.VisitedWebPageReffererURL} Date & Time Visited { doc.VisitedWebPageDateWithTimeInISOString } Visit Duration (In Milliseconds) { doc.VisitedWebPageVisitDurationInMilliseconds }
); }) }
); } if (chat.type === "description") { return (

{chat.doctitle}

); } })}
aiicon New Chat
); } } export default ProtectedPage;