diff --git a/surfsense_web/contracts/types/prompts.types.ts b/surfsense_web/contracts/types/prompts.types.ts index a5c895bc9..4d1bf3fb9 100644 --- a/surfsense_web/contracts/types/prompts.types.ts +++ b/surfsense_web/contracts/types/prompts.types.ts @@ -9,19 +9,29 @@ export const promptRead = z.object({ mode: z.enum(["transform", "explore"]), icon: z.string().nullable(), search_space_id: z.number().nullable(), + is_public: z.boolean(), created_at: z.string(), }); export type PromptRead = z.infer; +export const publicPromptRead = promptRead.extend({ + author_name: z.string().nullable(), +}); + +export type PublicPromptRead = z.infer; + export const promptsListResponse = z.array(promptRead); +export const publicPromptsListResponse = z.array(publicPromptRead); + export const promptCreateRequest = z.object({ name: z.string().min(1).max(200), prompt: z.string().min(1), mode: z.enum(["transform", "explore"]), icon: z.string().max(50).nullable().optional(), search_space_id: z.number().nullable().optional(), + is_public: z.boolean().optional(), }); export type PromptCreateRequest = z.infer; @@ -31,6 +41,7 @@ export const promptUpdateRequest = z.object({ prompt: z.string().min(1).optional(), mode: z.enum(["transform", "explore"]).optional(), icon: z.string().max(50).nullable().optional(), + is_public: z.boolean().optional(), }); export type PromptUpdateRequest = z.infer; diff --git a/surfsense_web/lib/apis/prompts-api.service.ts b/surfsense_web/lib/apis/prompts-api.service.ts index 5c445c02a..38c2ffb4e 100644 --- a/surfsense_web/lib/apis/prompts-api.service.ts +++ b/surfsense_web/lib/apis/prompts-api.service.ts @@ -4,8 +4,9 @@ import { promptCreateRequest, promptDeleteResponse, promptRead, - promptUpdateRequest, promptsListResponse, + promptUpdateRequest, + publicPromptsListResponse, } from "@/contracts/types/prompts.types"; import { ValidationError } from "@/lib/error"; import { baseApiService } from "./base-api.service"; @@ -49,6 +50,14 @@ class PromptsApiService { delete = async (promptId: number) => { return baseApiService.delete(`/api/v1/prompts/${promptId}`, promptDeleteResponse); }; + + listPublic = async () => { + return baseApiService.get("/api/v1/prompts/public", publicPromptsListResponse); + }; + + copy = async (promptId: number) => { + return baseApiService.post(`/api/v1/prompts/${promptId}/copy`, promptRead, {}); + }; } export const promptsApiService = new PromptsApiService();