diff --git a/apps/presentation/dashboard/src/data/chat.ts b/apps/presentation/dashboard/src/data/chat.ts index cc4a4a62c6..b83e54bf7f 100644 --- a/apps/presentation/dashboard/src/data/chat.ts +++ b/apps/presentation/dashboard/src/data/chat.ts @@ -2377,3 +2377,28 @@ export async function updateGoalOwnership(body: { goal_id: string; mode: Executi throw error; } } + + +const privateConversationSchema = z.object({ + binding_id: z.string(), app_ref: z.string(), context_kind: z.literal("project"), + project_ref: z.string(), project_title: z.string(), context_available: z.boolean(), executor_endpoint_id: z.string(), + grant: z.literal("workspace_read"), listener_status: z.string(), + pending_count: z.number().int(), recovery_count: z.number().int(), +}); +const privateConversationsSchema = z.object({ok: z.literal(true), revision: z.number().int(), + connections: z.array(privateConversationSchema)}); +export type PrivateConversation = z.infer; +export async function fetchPrivateConversations() { + return privateConversationsSchema.parse(await requestJson("/api/chat/lark/private-conversations")); +} +export async function connectPrivateConversation(appRef: string, projectRef: string, executor: string) { + return privateConversationsSchema.parse(await requestJson("/api/chat/lark/private-conversations", { + method: "POST", headers: {"Content-Type": "application/json"}, + body: JSON.stringify({app_ref: appRef, project_ref: projectRef, executor_endpoint_id: executor}), + })); +} +export async function disconnectPrivateConversation(bindingId: string, revision: number) { + return privateConversationsSchema.parse(await requestJson("/api/chat/lark/private-conversations", { + method: "DELETE", headers: {"Content-Type": "application/json"}, body: JSON.stringify({binding_id: bindingId, revision}), + })); +} diff --git a/apps/presentation/dashboard/src/features/personal-workspace/lark-settings-page.tsx b/apps/presentation/dashboard/src/features/personal-workspace/lark-settings-page.tsx index 07ef1c6b8a..cade2c603e 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/lark-settings-page.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/lark-settings-page.tsx @@ -1,3 +1,4 @@ +import {PrivateConversationPanel} from "./private-conversation-panel"; import { useEffect, useMemo, useRef, useState } from "react"; import { Bot, @@ -539,6 +540,7 @@ export function LarkSettingsPage({ )} +