import type { AxiosResponse } from 'axios'; import type * as t from './types'; import * as endpoints from './api-endpoints'; import * as a from './types/assistants'; import * as ag from './types/agents'; import * as m from './types/mutations'; import * as q from './types/queries'; import * as f from './types/files'; import * as config from './config'; import request from './request'; import * as s from './schemas'; import * as r from './roles'; export function revokeUserKey(name: string): Promise { return request.delete(endpoints.revokeUserKey(name)); } export function revokeAllUserKeys(): Promise { return request.delete(endpoints.revokeAllUserKeys()); } export function deleteUser(): Promise { return request.delete(endpoints.deleteUser()); } export function getSharedMessages(shareId: string): Promise { return request.get(endpoints.shareMessages(shareId)); } export const listSharedLinks = async ( params: q.SharedLinksListParams, ): Promise => { const { pageSize, isPublic, sortBy, sortDirection, search, cursor } = params; return request.get( endpoints.getSharedLinks(pageSize, isPublic, sortBy, sortDirection, search, cursor), ); }; export function getSharedLink(conversationId: string): Promise { return request.get(endpoints.getSharedLink(conversationId)); } export function createSharedLink(conversationId: string): Promise { return request.post(endpoints.createSharedLink(conversationId)); } export function updateSharedLink(shareId: string): Promise { return request.patch(endpoints.updateSharedLink(shareId)); } export function deleteSharedLink(shareId: string): Promise { return request.delete(endpoints.shareMessages(shareId)); } export function updateUserKey(payload: t.TUpdateUserKeyRequest) { const { value } = payload; if (!value) { throw new Error('value is required'); } return request.put(endpoints.keys(), payload); } export function getPresets(): Promise { return request.get(endpoints.presets()); } export function createPreset(payload: s.TPreset): Promise { return request.post(endpoints.presets(), payload); } export function updatePreset(payload: s.TPreset): Promise { return request.post(endpoints.presets(), payload); } export function deletePreset(arg: s.TPreset | undefined): Promise { return request.post(endpoints.deletePreset(), arg); } export function getSearchEnabled(): Promise { return request.get(endpoints.searchEnabled()); } export function getUser(): Promise { return request.get(endpoints.user()); } export function getUserBalance(): Promise { return request.get(endpoints.balance()); } export const updateTokenCount = (text: string) => { return request.post(endpoints.tokenizer(), { arg: text }); }; export const login = (payload: t.TLoginUser): Promise => { return request.post(endpoints.login(), payload); }; export const logout = (): Promise => { return request.post(endpoints.logout()); }; export const register = (payload: t.TRegisterUser) => { return request.post(endpoints.register(), payload); }; export const userKeyQuery = (name: string): Promise => request.get(endpoints.userKeyQuery(name)); export const getLoginGoogle = () => { return request.get(endpoints.loginGoogle()); }; export const requestPasswordReset = ( payload: t.TRequestPasswordReset, ): Promise => { return request.post(endpoints.requestPasswordReset(), payload); }; export const resetPassword = (payload: t.TResetPassword) => { return request.post(endpoints.resetPassword(), payload); }; export const verifyEmail = (payload: t.TVerifyEmail): Promise => { return request.post(endpoints.verifyEmail(), payload); }; export const resendVerificationEmail = ( payload: t.TResendVerificationEmail, ): Promise => { return request.post(endpoints.resendVerificationEmail(), payload); }; export const getAvailablePlugins = (): Promise => { return request.get(endpoints.plugins()); }; export const updateUserPlugins = (payload: t.TUpdateUserPlugins) => { return request.post(endpoints.userPlugins(), payload); }; /* Config */ export const getStartupConfig = (): Promise< config.TStartupConfig & { mcpCustomUserVars?: Record; } > => { return request.get(endpoints.config()); }; export const getAIEndpoints = (): Promise => { return request.get(endpoints.aiEndpoints()); }; export const getModels = async (): Promise => { return request.get(endpoints.models()); }; export const getEndpointsConfigOverride = (): Promise => { return request.get(endpoints.endpointsConfigOverride()); }; /* Assistants */ export const createAssistant = ({ version, ...data }: a.AssistantCreateParams): Promise => { return request.post(endpoints.assistants({ version }), data); }; export const getAssistantById = ({ endpoint, assistant_id, version, }: { endpoint: s.AssistantsEndpoint; assistant_id: string; version: number | string | number; }): Promise => { return request.get( endpoints.assistants({ path: assistant_id, endpoint, version, }), ); }; export const updateAssistant = ({ assistant_id, data, version, }: { assistant_id: string; data: a.AssistantUpdateParams; version: number | string; }): Promise => { return request.patch( endpoints.assistants({ path: assistant_id, version, }), data, ); }; export const deleteAssistant = ({ assistant_id, model, endpoint, version, }: m.DeleteAssistantBody & { version: number | string }): Promise => { return request.delete( endpoints.assistants({ path: assistant_id, options: { model, endpoint }, version, }), ); }; export const listAssistants = ( params: a.AssistantListParams, version: number | string, ): Promise => { return request.get( endpoints.assistants({ version, options: params, }), ); }; export function getAssistantDocs({ endpoint, version, }: { endpoint: s.AssistantsEndpoint | string; version: number | string; }): Promise { if (!s.isAssistantsEndpoint(endpoint)) { return Promise.resolve([]); } return request.get( endpoints.assistants({ path: 'documents', version, options: { endpoint }, endpoint: endpoint as s.AssistantsEndpoint, }), ); } /* Tools */ export const getAvailableTools = ( _endpoint: s.AssistantsEndpoint | s.EModelEndpoint.agents, version?: number | string, ): Promise => { let path = ''; if (s.isAssistantsEndpoint(_endpoint)) { const endpoint = _endpoint as s.AssistantsEndpoint; path = endpoints.assistants({ path: 'tools', endpoint: endpoint, version: version ?? config.defaultAssistantsVersion[endpoint], }); } else { path = endpoints.agents({ path: 'tools', }); } return request.get(path); }; export const getVerifyAgentToolAuth = ( params: q.VerifyToolAuthParams, ): Promise => { return request.get( endpoints.agents({ path: `tools/${params.toolId}/auth`, }), ); }; export const callTool = ({ toolId, toolParams, }: { toolId: T; toolParams: m.ToolParams; }): Promise => { return request.post( endpoints.agents({ path: `tools/${toolId}/call`, }), toolParams, ); }; export const getToolCalls = (params: q.GetToolCallParams): Promise => { return request.get( endpoints.agents({ path: 'tools/calls', options: params, }), ); }; /* Files */ export const getFiles = (): Promise => { return request.get(endpoints.files()); }; export const getFileConfig = (): Promise => { return request.get(`${endpoints.files()}/config`); }; export const uploadImage = ( data: FormData, signal?: AbortSignal | null, ): Promise => { const requestConfig = signal ? { signal } : undefined; return request.postMultiPart(endpoints.images(), data, requestConfig); }; export const uploadFile = (data: FormData, signal?: AbortSignal | null): Promise => { const requestConfig = signal ? { signal } : undefined; return request.postMultiPart(endpoints.files(), data, requestConfig); }; /* actions */ export const updateAction = (data: m.UpdateActionVariables): Promise => { const { assistant_id, version, ...body } = data; return request.post( endpoints.assistants({ path: `actions/${assistant_id}`, version, }), body, ); }; export function getActions(): Promise { return request.get( endpoints.agents({ path: 'actions', }), ); } export const deleteAction = async ({ assistant_id, action_id, model, version, endpoint, }: m.DeleteActionVariables & { version: number | string }): Promise => request.delete( endpoints.assistants({ path: `actions/${assistant_id}/${action_id}/${model}`, version, endpoint, }), ); /** * Agents */ export const createAgent = ({ ...data }: a.AgentCreateParams): Promise => { return request.post(endpoints.agents({}), data); }; export const getAgentById = ({ agent_id }: { agent_id: string }): Promise => { return request.get( endpoints.agents({ path: agent_id, }), ); }; export const updateAgent = ({ agent_id, data, }: { agent_id: string; data: a.AgentUpdateParams; }): Promise => { return request.patch( endpoints.agents({ path: agent_id, }), data, ); }; export const duplicateAgent = ({ agent_id, }: m.DuplicateAgentBody): Promise<{ agent: a.Agent; actions: ag.Action[] }> => { return request.post( endpoints.agents({ path: `${agent_id}/duplicate`, }), ); }; export const deleteAgent = ({ agent_id }: m.DeleteAgentBody): Promise => { return request.delete( endpoints.agents({ path: agent_id, }), ); }; export const listAgents = (params: a.AgentListParams): Promise => { return request.get( endpoints.agents({ options: params, }), ); }; export const revertAgentVersion = ({ agent_id, version_index, }: { agent_id: string; version_index: number; }): Promise => request.post(endpoints.revertAgentVersion(agent_id), { version_index }); /* Tools */ export const getAvailableAgentTools = (): Promise => { return request.get( endpoints.agents({ path: 'tools', }), ); }; /* Actions */ export const updateAgentAction = ( data: m.UpdateAgentActionVariables, ): Promise => { const { agent_id, ...body } = data; return request.post( endpoints.agents({ path: `actions/${agent_id}`, }), body, ); }; export const deleteAgentAction = async ({ agent_id, action_id, }: m.DeleteAgentActionVariables): Promise => request.delete( endpoints.agents({ path: `actions/${agent_id}/${action_id}`, }), ); /** * Imports a conversations file. * * @param data - The FormData containing the file to import. * @returns A Promise that resolves to the import start response. */ export const importConversationsFile = (data: FormData): Promise => { return request.postMultiPart(endpoints.importConversation(), data); }; export const uploadAvatar = (data: FormData): Promise => { return request.postMultiPart(endpoints.avatar(), data); }; export const uploadAssistantAvatar = (data: m.AssistantAvatarVariables): Promise => { return request.postMultiPart( endpoints.assistants({ isAvatar: true, path: `${data.assistant_id}/avatar`, options: { model: data.model, endpoint: data.endpoint }, version: data.version, }), data.formData, ); }; export const uploadAgentAvatar = (data: m.AgentAvatarVariables): Promise => { return request.postMultiPart( `${endpoints.images()}/agents/${data.agent_id}/avatar`, data.formData, ); }; export const getFileDownload = async (userId: string, file_id: string): Promise => { return request.getResponse(`${endpoints.files()}/download/${userId}/${file_id}`, { responseType: 'blob', headers: { Accept: 'application/octet-stream', }, }); }; export const getCodeOutputDownload = async (url: string): Promise => { return request.getResponse(url, { responseType: 'blob', headers: { Accept: 'application/octet-stream', }, }); }; export const deleteFiles = async (payload: { files: f.BatchFile[]; agent_id?: string; assistant_id?: string; tool_resource?: a.EToolResources; }): Promise => request.deleteWithOptions(endpoints.files(), { data: payload, }); /* Speech */ export const speechToText = (data: FormData): Promise => { return request.postMultiPart(endpoints.speechToText(), data); }; export const textToSpeech = (data: FormData): Promise => { return request.postTTS(endpoints.textToSpeechManual(), data); }; export const getVoices = (): Promise => { return request.get(endpoints.textToSpeechVoices()); }; export const getCustomConfigSpeech = (): Promise => { return request.get(endpoints.getCustomConfigSpeech()); }; /* conversations */ export function duplicateConversation( payload: t.TDuplicateConvoRequest, ): Promise { return request.post(endpoints.duplicateConversation(), payload); } export function forkConversation(payload: t.TForkConvoRequest): Promise { return request.post(endpoints.forkConversation(), payload); } export function deleteConversation(payload: t.TDeleteConversationRequest) { return request.deleteWithOptions(endpoints.deleteConversation(), { data: { arg: payload } }); } export function clearAllConversations(): Promise { return request.delete(endpoints.deleteAllConversation()); } export const listConversations = ( params?: q.ConversationListParams, ): Promise => { return request.get(endpoints.conversations(params ?? {})); }; export function getConversations(cursor: string): Promise { return request.get(endpoints.conversations({ cursor })); } export function getConversationById(id: string): Promise { return request.get(endpoints.conversationById(id)); } export function updateConversation( payload: t.TUpdateConversationRequest, ): Promise { return request.post(endpoints.updateConversation(), { arg: payload }); } export function archiveConversation( payload: t.TArchiveConversationRequest, ): Promise { return request.post(endpoints.updateConversation(), { arg: payload }); } export function genTitle(payload: m.TGenTitleRequest): Promise { return request.post(endpoints.genTitle(), payload); } export const listMessages = (params?: q.MessagesListParams): Promise => { return request.get(endpoints.messages(params ?? {})); }; export function updateMessage(payload: t.TUpdateMessageRequest): Promise { const { conversationId, messageId, text } = payload; if (!conversationId) { throw new Error('conversationId is required'); } return request.put(endpoints.messages({ conversationId, messageId }), { text }); } export function updateMessageContent(payload: t.TUpdateMessageContent): Promise { const { conversationId, messageId, index, text } = payload; if (!conversationId) { throw new Error('conversationId is required'); } return request.put(endpoints.messages({ conversationId, messageId }), { text, index }); } export const editArtifact = async ({ messageId, ...params }: m.TEditArtifactRequest): Promise => { return request.post(`/api/messages/artifact/${messageId}`, params); }; export function getMessagesByConvoId(conversationId: string): Promise { if ( conversationId === config.Constants.NEW_CONVO || conversationId === config.Constants.PENDING_CONVO ) { return Promise.resolve([]); } return request.get(endpoints.messages({ conversationId })); } export function getPrompt(id: string): Promise<{ prompt: t.TPrompt }> { return request.get(endpoints.getPrompt(id)); } export function getPrompts(filter: t.TPromptsWithFilterRequest): Promise { return request.get(endpoints.getPromptsWithFilters(filter)); } export function getAllPromptGroups(): Promise { return request.get(endpoints.getAllPromptGroups()); } export function getPromptGroups( filter: t.TPromptGroupsWithFilterRequest, ): Promise { return request.get(endpoints.getPromptGroupsWithFilters(filter)); } export function getPromptGroup(id: string): Promise { return request.get(endpoints.getPromptGroup(id)); } export function createPrompt(payload: t.TCreatePrompt): Promise { return request.post(endpoints.postPrompt(), payload); } export function updatePromptGroup( variables: t.TUpdatePromptGroupVariables, ): Promise { return request.patch(endpoints.updatePromptGroup(variables.id), variables.payload); } export function deletePrompt(payload: t.TDeletePromptVariables): Promise { return request.delete(endpoints.deletePrompt(payload)); } export function makePromptProduction(id: string): Promise { return request.patch(endpoints.updatePromptTag(id)); } export function updatePromptLabels( variables: t.TUpdatePromptLabelsRequest, ): Promise { return request.patch(endpoints.updatePromptLabels(variables.id), variables.payload); } export function deletePromptGroup(id: string): Promise { return request.delete(endpoints.deletePromptGroup(id)); } export function getCategories(): Promise { return request.get(endpoints.getCategories()); } export function getRandomPrompts( variables: t.TGetRandomPromptsRequest, ): Promise { return request.get(endpoints.getRandomPrompts(variables.limit, variables.skip)); } /* Roles */ export function getRole(roleName: string): Promise { return request.get(endpoints.getRole(roleName)); } export function updatePromptPermissions( variables: m.UpdatePromptPermVars, ): Promise { return request.put(endpoints.updatePromptPermissions(variables.roleName), variables.updates); } export function updateAgentPermissions( variables: m.UpdateAgentPermVars, ): Promise { return request.put(endpoints.updateAgentPermissions(variables.roleName), variables.updates); } export function updateMemoryPermissions( variables: m.UpdateMemoryPermVars, ): Promise { return request.put(endpoints.updateMemoryPermissions(variables.roleName), variables.updates); } /* Tags */ export function getConversationTags(): Promise { return request.get(endpoints.conversationTags()); } export function createConversationTag( payload: t.TConversationTagRequest, ): Promise { return request.post(endpoints.conversationTags(), payload); } export function updateConversationTag( tag: string, payload: t.TConversationTagRequest, ): Promise { return request.put(endpoints.conversationTags(tag), payload); } export function deleteConversationTag(tag: string): Promise { return request.delete(endpoints.conversationTags(tag)); } export function addTagToConversation( conversationId: string, payload: t.TTagConversationRequest, ): Promise { return request.put(endpoints.addTagToConversation(conversationId), payload); } export function rebuildConversationTags(): Promise { return request.post(endpoints.conversationTags('rebuild')); } export function healthCheck(): Promise { return request.get(endpoints.health()); } export function getUserTerms(): Promise { return request.get(endpoints.userTerms()); } export function acceptTerms(): Promise { return request.post(endpoints.acceptUserTerms()); } export function getBanner(): Promise { return request.get(endpoints.banner()); } export function updateFeedback( conversationId: string, messageId: string, payload: t.TUpdateFeedbackRequest, ): Promise { return request.put(endpoints.feedback(conversationId, messageId), payload); } // 2FA export function enableTwoFactor(): Promise { return request.get(endpoints.enableTwoFactor()); } export function verifyTwoFactor(payload: t.TVerify2FARequest): Promise { return request.post(endpoints.verifyTwoFactor(), payload); } export function confirmTwoFactor(payload: t.TVerify2FARequest): Promise { return request.post(endpoints.confirmTwoFactor(), payload); } export function disableTwoFactor(): Promise { return request.post(endpoints.disableTwoFactor()); } export function regenerateBackupCodes(): Promise { return request.post(endpoints.regenerateBackupCodes()); } export function verifyTwoFactorTemp( payload: t.TVerify2FATempRequest, ): Promise { return request.post(endpoints.verifyTwoFactorTemp(), payload); } /* Memories */ export const getMemories = (): Promise => { return request.get(endpoints.memories()); }; export const deleteMemory = (key: string): Promise => { return request.delete(endpoints.memory(key)); }; export const updateMemory = ( key: string, value: string, originalKey?: string, ): Promise => { return request.patch(endpoints.memory(originalKey || key), { key, value }); }; export const updateMemoryPreferences = (preferences: { memories: boolean; }): Promise<{ updated: boolean; preferences: { memories: boolean } }> => { return request.patch(endpoints.memoryPreferences(), preferences); }; export const createMemory = (data: { key: string; value: string; }): Promise<{ created: boolean; memory: q.TUserMemory }> => { return request.post(endpoints.memories(), data); };