diff --git a/surfsense_web/contracts/types/inbox.types.ts b/surfsense_web/contracts/types/inbox.types.ts index 0983bbc55..9269a6935 100644 --- a/surfsense_web/contracts/types/inbox.types.ts +++ b/surfsense_web/contracts/types/inbox.types.ts @@ -9,6 +9,8 @@ export const inboxItemTypeEnum = z.enum([ "connector_indexing", "document_processing", "new_mention", + "chat_cloned", + "chat_clone_failed", ]); /** @@ -88,6 +90,22 @@ 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 @@ -96,6 +114,8 @@ export const inboxItemMetadata = z.union([ connectorIndexingMetadata, documentProcessingMetadata, newMentionMetadata, + chatClonedMetadata, + chatCloneFailedMetadata, baseInboxItemMetadata, ]); @@ -133,6 +153,16 @@ 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 // ============================================================================= @@ -229,13 +259,27 @@ 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 | null { +): ConnectorIndexingMetadata | DocumentProcessingMetadata | NewMentionMetadata | ChatClonedMetadata | ChatCloneFailedMetadata | null { switch (type) { case "connector_indexing": { const result = connectorIndexingMetadata.safeParse(metadata); @@ -249,6 +293,14 @@ 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; } @@ -265,11 +317,15 @@ 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;