diff --git a/surfsense_web/components/layout/ui/sidebar/InboxSidebar.tsx b/surfsense_web/components/layout/ui/sidebar/InboxSidebar.tsx index 0a749f71c..b47634b8d 100644 --- a/surfsense_web/components/layout/ui/sidebar/InboxSidebar.tsx +++ b/surfsense_web/components/layout/ui/sidebar/InboxSidebar.tsx @@ -7,7 +7,6 @@ import { Check, CheckCheck, CheckCircle2, - Copy, History, Inbox, LayoutGrid, @@ -42,14 +41,7 @@ import { Spinner } from "@/components/ui/spinner"; import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { getConnectorIcon } from "@/contracts/enums/connectorIcons"; -import { - type ConnectorIndexingMetadata, - isChatClonedMetadata, - isChatCloneFailedMetadata, - isConnectorIndexingMetadata, - isNewMentionMetadata, - type NewMentionMetadata, -} from "@/contracts/types/inbox.types"; +import { isConnectorIndexingMetadata, isNewMentionMetadata } from "@/contracts/types/inbox.types"; import type { InboxItem } from "@/hooks/use-inbox"; import { useMediaQuery } from "@/hooks/use-media-query"; import { cn } from "@/lib/utils"; @@ -213,15 +205,11 @@ export function InboxSidebar({ [inboxItems] ); - // Status tab includes: connector indexing, document processing, chat clone notifications + // Status tab includes: connector indexing, document processing const statusItems = useMemo( () => inboxItems.filter( - (item) => - item.type === "connector_indexing" || - item.type === "document_processing" || - item.type === "chat_cloned" || - item.type === "chat_clone_failed" + (item) => item.type === "connector_indexing" || item.type === "document_processing" ), [inboxItems] ); @@ -342,17 +330,7 @@ export function InboxSidebar({ router.push(url); } } - } else if (item.type === "chat_cloned") { - // Navigate to the cloned chat - if (isChatClonedMetadata(item.metadata)) { - const { search_space_id, thread_id } = item.metadata; - const url = `/dashboard/${search_space_id}/new-chat/${thread_id}`; - onOpenChange(false); - onCloseMobileSidebar?.(); - router.push(url); - } } - // chat_clone_failed: just mark as read, no navigation }, [markAsRead, router, onOpenChange, onCloseMobileSidebar] ); @@ -412,24 +390,6 @@ export function InboxSidebar({ ); } - // For chat cloned success, show green copy icon - if (item.type === "chat_cloned") { - return ( -
- -
- ); - } - - // For chat clone failed, show red alert icon - if (item.type === "chat_clone_failed") { - return ( -
- -
- ); - } - // For status items (connector/document), show status icons // Safely access status from metadata const metadata = item.metadata as Record; diff --git a/surfsense_web/contracts/types/inbox.types.ts b/surfsense_web/contracts/types/inbox.types.ts index 4240700dc..0983bbc55 100644 --- a/surfsense_web/contracts/types/inbox.types.ts +++ b/surfsense_web/contracts/types/inbox.types.ts @@ -9,8 +9,6 @@ export const inboxItemTypeEnum = z.enum([ "connector_indexing", "document_processing", "new_mention", - "chat_cloned", - "chat_clone_failed", ]); /** @@ -90,22 +88,6 @@ export const newMentionMetadata = z.object({ content_preview: z.string(), }); -/** - * Chat cloned success metadata schema - */ -export const chatClonedMetadata = z.object({ - thread_id: z.number(), - search_space_id: z.number(), -}); - -/** - * Chat clone failed metadata schema - */ -export const chatCloneFailedMetadata = z.object({ - share_token: z.string(), - error: z.string(), -}); - /** * Union of all inbox item metadata types * Use this when the inbox item type is unknown @@ -114,8 +96,6 @@ export const inboxItemMetadata = z.union([ connectorIndexingMetadata, documentProcessingMetadata, newMentionMetadata, - chatClonedMetadata, - chatCloneFailedMetadata, baseInboxItemMetadata, ]); @@ -153,16 +133,6 @@ export const newMentionInboxItem = inboxItem.extend({ metadata: newMentionMetadata, }); -export const chatClonedInboxItem = inboxItem.extend({ - type: z.literal("chat_cloned"), - metadata: chatClonedMetadata, -}); - -export const chatCloneFailedInboxItem = inboxItem.extend({ - type: z.literal("chat_clone_failed"), - metadata: chatCloneFailedMetadata, -}); - // ============================================================================= // API Request/Response Schemas // ============================================================================= @@ -259,33 +229,13 @@ export function isNewMentionMetadata(metadata: unknown): metadata is NewMentionM return newMentionMetadata.safeParse(metadata).success; } -/** - * Type guard for ChatClonedMetadata - */ -export function isChatClonedMetadata(metadata: unknown): metadata is ChatClonedMetadata { - return chatClonedMetadata.safeParse(metadata).success; -} - -/** - * Type guard for ChatCloneFailedMetadata - */ -export function isChatCloneFailedMetadata(metadata: unknown): metadata is ChatCloneFailedMetadata { - return chatCloneFailedMetadata.safeParse(metadata).success; -} - /** * Safe metadata parser - returns typed metadata or null */ export function parseInboxItemMetadata( type: InboxItemTypeEnum, metadata: unknown -): - | ConnectorIndexingMetadata - | DocumentProcessingMetadata - | NewMentionMetadata - | ChatClonedMetadata - | ChatCloneFailedMetadata - | null { +): ConnectorIndexingMetadata | DocumentProcessingMetadata | NewMentionMetadata | null { switch (type) { case "connector_indexing": { const result = connectorIndexingMetadata.safeParse(metadata); @@ -299,14 +249,6 @@ export function parseInboxItemMetadata( const result = newMentionMetadata.safeParse(metadata); return result.success ? result.data : null; } - case "chat_cloned": { - const result = chatClonedMetadata.safeParse(metadata); - return result.success ? result.data : null; - } - case "chat_clone_failed": { - const result = chatCloneFailedMetadata.safeParse(metadata); - return result.success ? result.data : null; - } default: return null; } @@ -323,15 +265,11 @@ export type BaseInboxItemMetadata = z.infer; export type ConnectorIndexingMetadata = z.infer; export type DocumentProcessingMetadata = z.infer; export type NewMentionMetadata = z.infer; -export type ChatClonedMetadata = z.infer; -export type ChatCloneFailedMetadata = z.infer; export type InboxItemMetadata = z.infer; export type InboxItem = z.infer; export type ConnectorIndexingInboxItem = z.infer; export type DocumentProcessingInboxItem = z.infer; export type NewMentionInboxItem = z.infer; -export type ChatClonedInboxItem = z.infer; -export type ChatCloneFailedInboxItem = z.infer; // API Request/Response types export type GetNotificationsRequest = z.infer; diff --git a/surfsense_web/hooks/use-inbox.ts b/surfsense_web/hooks/use-inbox.ts index 656de18a8..4c26ddcb9 100644 --- a/surfsense_web/hooks/use-inbox.ts +++ b/surfsense_web/hooks/use-inbox.ts @@ -119,15 +119,6 @@ export function useInbox( async function startSync() { try { - // Check for force resync flag (e.g., after clone from public page) - if (localStorage.getItem("surfsense_force_notif_resync") === "true") { - console.log("[useInbox] Force resync flag detected, clearing notifications"); - await client.db.exec("DELETE FROM notifications"); - localStorage.removeItem("surfsense_force_notif_resync"); - // Reset sync key to force a fresh sync - userSyncKeyRef.current = null; - } - const cutoffDate = getSyncCutoffDate(); const userSyncKey = `inbox_${userId}_${cutoffDate}`; diff --git a/surfsense_web/lib/apis/base-api.service.ts b/surfsense_web/lib/apis/base-api.service.ts index a87d4deaf..b14818ac1 100644 --- a/surfsense_web/lib/apis/base-api.service.ts +++ b/surfsense_web/lib/apis/base-api.service.ts @@ -26,7 +26,7 @@ class BaseApiService { noAuthEndpoints: string[] = ["/auth/jwt/login", "/auth/register", "/auth/refresh"]; // Prefixes that don't require auth (checked with startsWith) - noAuthPrefixes: string[] = ["/api/v1/public/"]; + noAuthPrefixes: string[] = ["/api/v1/public/", "/api/v1/podcasts/"]; // Use a getter to always read fresh token from localStorage // This ensures the token is always up-to-date after login/logout