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