librechat-data-provider 0.3.8 → 0.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../src/api-endpoints.ts","../../src/request.ts","../../src/headers-helpers.ts","../../src/data-service.ts","../../src/keys.ts","../../src/react-query/react-query-service.ts","../../src/react-query/assistants.ts"],"sourcesContent":["export const user = () => '/api/user';\n\nexport const balance = () => '/api/balance';\n\nexport const userPlugins = () => '/api/user/plugins';\n\nexport const messages = (conversationId: string, messageId?: string) =>\n `/api/messages/${conversationId}${messageId ? `/${messageId}` : ''}`;\n\nconst keysEndpoint = '/api/keys';\n\nexport const keys = () => keysEndpoint;\n\nexport const userKeyQuery = (name: string) => `${keysEndpoint}?name=${name}`;\n\nexport const revokeUserKey = (name: string) => `${keysEndpoint}/${name}`;\n\nexport const revokeAllUserKeys = () => `${keysEndpoint}?all=true`;\n\nexport const abortRequest = (endpoint: string) => `/api/ask/${endpoint}/abort`;\n\nexport const conversations = (pageNumber: string) => `/api/convos?pageNumber=${pageNumber}`;\n\nexport const conversationById = (id: string) => `/api/convos/${id}`;\n\nexport const updateConversation = () => '/api/convos/update';\n\nexport const deleteConversation = () => '/api/convos/clear';\n\nexport const search = (q: string, pageNumber: string) =>\n `/api/search?q=${q}&pageNumber=${pageNumber}`;\n\nexport const searchEnabled = () => '/api/search/enable';\n\nexport const presets = () => '/api/presets';\n\nexport const deletePreset = () => '/api/presets/delete';\n\nexport const aiEndpoints = () => '/api/endpoints';\n\nexport const endpointsConfigOverride = () => '/api/endpoints/config/override';\n\nexport const models = () => '/api/models';\n\nexport const tokenizer = () => '/api/tokenizer';\n\nexport const login = () => '/api/auth/login';\n\nexport const logout = () => '/api/auth/logout';\n\nexport const register = () => '/api/auth/register';\n\nexport const loginFacebook = () => '/api/auth/facebook';\n\nexport const loginGoogle = () => '/api/auth/google';\n\nexport const refreshToken = (retry?: boolean) => `/api/auth/refresh${retry ? '?retry=true' : ''}`;\n\nexport const requestPasswordReset = () => '/api/auth/requestPasswordReset';\n\nexport const resetPassword = () => '/api/auth/resetPassword';\n\nexport const plugins = () => '/api/plugins';\n\nexport const config = () => '/api/config';\n\nexport const assistants = (id?: string) => `/api/assistants${id ? `/${id}` : ''}`;\n\nexport const files = () => '/api/files';\n\nexport const images = () => `${files()}/images`;\n\nexport const avatar = () => `${images()}/avatar`;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport axios, { AxiosRequestConfig, AxiosError } from 'axios';\nimport { setTokenHeader } from './headers-helpers';\nimport * as endpoints from './api-endpoints';\n\nasync function _get<T>(url: string, options?: AxiosRequestConfig): Promise<T> {\n const response = await axios.get(url, { ...options });\n return response.data;\n}\n\nasync function _post(url: string, data?: any) {\n const response = await axios.post(url, JSON.stringify(data), {\n headers: { 'Content-Type': 'application/json' },\n });\n return response.data;\n}\n\nasync function _postMultiPart(url: string, formData: FormData, options?: AxiosRequestConfig) {\n const response = await axios.post(url, formData, {\n ...options,\n headers: { 'Content-Type': 'multipart/form-data' },\n });\n return response.data;\n}\n\nasync function _put(url: string, data?: any) {\n const response = await axios.put(url, JSON.stringify(data), {\n headers: { 'Content-Type': 'application/json' },\n });\n return response.data;\n}\n\nasync function _delete<T>(url: string): Promise<T> {\n const response = await axios.delete(url);\n return response.data;\n}\n\nasync function _deleteWithOptions<T>(url: string, options?: AxiosRequestConfig): Promise<T> {\n const response = await axios.delete(url, { ...options });\n return response.data;\n}\n\nasync function _patch(url: string, data?: any) {\n const response = await axios.patch(url, JSON.stringify(data), {\n headers: { 'Content-Type': 'application/json' },\n });\n return response.data;\n}\n\nlet isRefreshing = false;\nlet failedQueue: { resolve: (value?: any) => void; reject: (reason?: any) => void }[] = [];\n\nconst refreshToken = (retry?: boolean) => _post(endpoints.refreshToken(retry));\n\nconst processQueue = (error: AxiosError | null, token: string | null = null) => {\n failedQueue.forEach((prom) => {\n if (error) {\n prom.reject(error);\n } else {\n prom.resolve(token);\n }\n });\n failedQueue = [];\n};\n\naxios.interceptors.response.use(\n (response) => response,\n async (error) => {\n const originalRequest = error.config;\n\n if (error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n if (isRefreshing) {\n try {\n const token = await new Promise((resolve, reject) => {\n failedQueue.push({ resolve, reject });\n });\n originalRequest.headers['Authorization'] = 'Bearer ' + token;\n return await axios(originalRequest);\n } catch (err) {\n return Promise.reject(err);\n }\n }\n\n isRefreshing = true;\n\n try {\n const { token } = await refreshToken(\n // Handle edge case where we get a blank screen if the initial 401 error is from a refresh token request\n originalRequest.url?.includes('api/auth/refresh') ? true : false,\n );\n\n if (token) {\n originalRequest.headers['Authorization'] = 'Bearer ' + token;\n setTokenHeader(token);\n window.dispatchEvent(new CustomEvent('tokenUpdated', { detail: token }));\n processQueue(null, token);\n return await axios(originalRequest);\n } else {\n window.location.href = '/login';\n }\n } catch (err) {\n processQueue(err as AxiosError, null);\n return Promise.reject(err);\n } finally {\n isRefreshing = false;\n }\n }\n\n return Promise.reject(error);\n },\n);\n\nexport default {\n get: _get,\n post: _post,\n postMultiPart: _postMultiPart,\n put: _put,\n delete: _delete,\n deleteWithOptions: _deleteWithOptions,\n patch: _patch,\n refreshToken,\n};\n","import axios from 'axios';\n\nexport function setAcceptLanguageHeader(value: string): void {\n axios.defaults.headers.common['Accept-Language'] = value;\n}\n\nexport function setTokenHeader(token: string) {\n axios.defaults.headers.common['Authorization'] = 'Bearer ' + token;\n}\n","import * as f from './types/files';\nimport * as m from './types/mutations';\nimport * as a from './types/assistants';\nimport * as t from './types';\nimport * as s from './schemas';\nimport request from './request';\nimport * as endpoints from './api-endpoints';\n\nexport function getConversations(pageNumber: string): Promise<t.TGetConversationsResponse> {\n return request.get(endpoints.conversations(pageNumber));\n}\n\nexport function abortRequestWithMessage(\n endpoint: string,\n abortKey: string,\n message: string,\n): Promise<void> {\n return request.post(endpoints.abortRequest(endpoint), { arg: { abortKey, message } });\n}\n\nexport function deleteConversation(payload: t.TDeleteConversationRequest) {\n //todo: this should be a DELETE request\n return request.post(endpoints.deleteConversation(), { arg: payload });\n}\n\nexport function clearAllConversations(): Promise<unknown> {\n return request.post(endpoints.deleteConversation(), { arg: {} });\n}\n\nexport function revokeUserKey(name: string): Promise<unknown> {\n return request.delete(endpoints.revokeUserKey(name));\n}\n\nexport function revokeAllUserKeys(): Promise<unknown> {\n return request.delete(endpoints.revokeAllUserKeys());\n}\n\nexport function getMessagesByConvoId(conversationId: string): Promise<s.TMessage[]> {\n if (conversationId === 'new') {\n return Promise.resolve([]);\n }\n return request.get(endpoints.messages(conversationId));\n}\n\nexport function getConversationById(id: string): Promise<s.TConversation> {\n return request.get(endpoints.conversationById(id));\n}\n\nexport function updateConversation(\n payload: t.TUpdateConversationRequest,\n): Promise<t.TUpdateConversationResponse> {\n return request.post(endpoints.updateConversation(), { arg: payload });\n}\n\nexport function updateMessage(payload: t.TUpdateMessageRequest): Promise<unknown> {\n const { conversationId, messageId, text } = payload;\n if (!conversationId) {\n throw new Error('conversationId is required');\n }\n\n return request.put(endpoints.messages(conversationId, messageId), { text });\n}\n\nexport function updateUserKey(payload: t.TUpdateUserKeyRequest) {\n const { value } = payload;\n if (!value) {\n throw new Error('value is required');\n }\n\n return request.put(endpoints.keys(), payload);\n}\n\nexport function getPresets(): Promise<s.TPreset[]> {\n return request.get(endpoints.presets());\n}\n\nexport function createPreset(payload: s.TPreset): Promise<s.TPreset> {\n return request.post(endpoints.presets(), payload);\n}\n\nexport function updatePreset(payload: s.TPreset): Promise<s.TPreset> {\n return request.post(endpoints.presets(), payload);\n}\n\nexport function deletePreset(arg: s.TPreset | undefined): Promise<m.PresetDeleteResponse> {\n return request.post(endpoints.deletePreset(), arg);\n}\n\nexport function getSearchEnabled(): Promise<boolean> {\n return request.get(endpoints.searchEnabled());\n}\n\nexport function getUser(): Promise<t.TUser> {\n return request.get(endpoints.user());\n}\n\nexport function getUserBalance(): Promise<string> {\n return request.get(endpoints.balance());\n}\n\nexport const searchConversations = async (\n q: string,\n pageNumber: string,\n): Promise<t.TSearchResults> => {\n return request.get(endpoints.search(q, pageNumber));\n};\n\nexport const updateTokenCount = (text: string) => {\n return request.post(endpoints.tokenizer(), { arg: text });\n};\n\nexport const login = (payload: t.TLoginUser) => {\n return request.post(endpoints.login(), payload);\n};\n\nexport const logout = () => {\n return request.post(endpoints.logout());\n};\n\nexport const register = (payload: t.TRegisterUser) => {\n return request.post(endpoints.register(), payload);\n};\n\nexport const userKeyQuery = (name: string): Promise<t.TCheckUserKeyResponse> =>\n request.get(endpoints.userKeyQuery(name));\n\nexport const getLoginGoogle = () => {\n return request.get(endpoints.loginGoogle());\n};\n\nexport const requestPasswordReset = (\n payload: t.TRequestPasswordReset,\n): Promise<t.TRequestPasswordResetResponse> => {\n return request.post(endpoints.requestPasswordReset(), payload);\n};\n\nexport const resetPassword = (payload: t.TResetPassword) => {\n return request.post(endpoints.resetPassword(), payload);\n};\n\nexport const getAvailablePlugins = (): Promise<s.TPlugin[]> => {\n return request.get(endpoints.plugins());\n};\n\nexport const updateUserPlugins = (payload: t.TUpdateUserPlugins) => {\n return request.post(endpoints.userPlugins(), payload);\n};\n\n/* Config */\n\nexport const getStartupConfig = (): Promise<t.TStartupConfig> => {\n return request.get(endpoints.config());\n};\n\nexport const getAIEndpoints = (): Promise<t.TEndpointsConfig> => {\n return request.get(endpoints.aiEndpoints());\n};\n\nexport const getModels = async (): Promise<t.TModelsConfig> => {\n return request.get(endpoints.models());\n};\n\nexport const getEndpointsConfigOverride = (): Promise<unknown | boolean> => {\n return request.get(endpoints.endpointsConfigOverride());\n};\n\n/* Assistants */\n\nexport const createAssistant = (data: a.AssistantCreateParams): Promise<a.Assistant> => {\n return request.post(endpoints.assistants(), data);\n};\n\nexport const getAssistantById = (assistant_id: string): Promise<a.Assistant> => {\n return request.get(endpoints.assistants(assistant_id));\n};\n\nexport const updateAssistant = (\n assistant_id: string,\n data: a.AssistantUpdateParams,\n): Promise<a.Assistant> => {\n return request.patch(endpoints.assistants(assistant_id), data);\n};\n\nexport const deleteAssistant = (assistant_id: string): Promise<void> => {\n return request.delete(endpoints.assistants(assistant_id));\n};\n\nexport const listAssistants = (\n params?: a.AssistantListParams,\n): Promise<a.AssistantListResponse> => {\n return request.get(endpoints.assistants(), { params });\n};\n\n/* Files */\n\nexport const getFiles = (): Promise<f.TFile[]> => {\n return request.get(endpoints.files());\n};\n\nexport const uploadImage = (data: FormData): Promise<f.TFileUpload> => {\n return request.postMultiPart(endpoints.images(), data);\n};\n\nexport const uploadAvatar = (data: FormData): Promise<f.AvatarUploadResponse> => {\n return request.postMultiPart(endpoints.avatar(), data);\n};\n\nexport const deleteFiles = async (files: f.BatchFile[]): Promise<f.DeleteFilesResponse> =>\n request.deleteWithOptions(endpoints.files(), {\n data: { files },\n });\n","export enum QueryKeys {\n messages = 'messages',\n allConversations = 'allConversations',\n conversation = 'conversation',\n searchEnabled = 'searchEnabled',\n user = 'user',\n name = 'name', // user key name\n models = 'models',\n balance = 'balance',\n endpoints = 'endpoints',\n presets = 'presets',\n searchResults = 'searchResults',\n tokenCount = 'tokenCount',\n availablePlugins = 'availablePlugins',\n startupConfig = 'startupConfig',\n assistants = 'assistants',\n assistant = 'assistant',\n endpointsConfigOverride = 'endpointsConfigOverride',\n files = 'files',\n}\n\nexport enum MutationKeys {\n imageUpload = 'imageUpload',\n fileDelete = 'fileDelete',\n updatePreset = 'updatePreset',\n deletePreset = 'deletePreset',\n logoutUser = 'logoutUser',\n avatarUpload = 'avatarUpload',\n}\n","import {\n UseQueryOptions,\n useQuery,\n useMutation,\n useQueryClient,\n UseMutationResult,\n QueryObserverResult,\n} from '@tanstack/react-query';\nimport * as t from '../types';\nimport * as s from '../schemas';\nimport * as m from '../types/mutations';\nimport * as dataService from '../data-service';\nimport request from '../request';\nimport { QueryKeys } from '../keys';\n\nexport const useAbortRequestWithMessage = (): UseMutationResult<\n void,\n Error,\n { endpoint: string; abortKey: string; message: string }\n> => {\n const queryClient = useQueryClient();\n return useMutation(\n ({ endpoint, abortKey, message }) =>\n dataService.abortRequestWithMessage(endpoint, abortKey, message),\n {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.balance]);\n },\n },\n );\n};\n\nexport const useGetUserQuery = (\n config?: UseQueryOptions<t.TUser>,\n): QueryObserverResult<t.TUser> => {\n return useQuery<t.TUser>([QueryKeys.user], () => dataService.getUser(), {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n retry: false,\n ...config,\n });\n};\n\nexport const useGetMessagesByConvoId = <TData = s.TMessage[]>(\n id: string,\n config?: UseQueryOptions<s.TMessage[], unknown, TData>,\n): QueryObserverResult<TData> => {\n return useQuery<s.TMessage[], unknown, TData>(\n [QueryKeys.messages, id],\n () => dataService.getMessagesByConvoId(id),\n {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n ...config,\n },\n );\n};\n\nexport const useGetUserBalance = (\n config?: UseQueryOptions<string>,\n): QueryObserverResult<string> => {\n return useQuery<string>([QueryKeys.balance], () => dataService.getUserBalance(), {\n refetchOnWindowFocus: true,\n refetchOnReconnect: true,\n refetchOnMount: true,\n ...config,\n });\n};\n\nexport const useGetConversationByIdQuery = (\n id: string,\n config?: UseQueryOptions<s.TConversation>,\n): QueryObserverResult<s.TConversation> => {\n return useQuery<s.TConversation>(\n [QueryKeys.conversation, id],\n () => dataService.getConversationById(id),\n {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n ...config,\n },\n );\n};\n\n/* like above, but first try the convos query data */\nexport const useGetConvoIdQuery = (\n id: string,\n config?: UseQueryOptions<s.TConversation>,\n): QueryObserverResult<s.TConversation> => {\n const queryClient = useQueryClient();\n return useQuery<s.TConversation>(\n [QueryKeys.conversation, id],\n () => {\n const defaultQuery = () => dataService.getConversationById(id);\n\n const convosQueryKey = [QueryKeys.allConversations, { pageNumber: '1', active: true }];\n const convosQuery = queryClient.getQueryData<t.TGetConversationsResponse>(convosQueryKey);\n\n if (!convosQuery) {\n return defaultQuery();\n }\n\n const convo = convosQuery.conversations?.find((c) => c.conversationId === id);\n if (convo) {\n return convo;\n }\n\n return defaultQuery();\n },\n {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n ...config,\n },\n );\n};\n\n//This isn't ideal because its just a query and we're using mutation, but it was the only way\n//to make it work with how the Chat component is structured\nexport const useGetConversationByIdMutation = (id: string): UseMutationResult<s.TConversation> => {\n const queryClient = useQueryClient();\n return useMutation(() => dataService.getConversationById(id), {\n // onSuccess: (res: s.TConversation) => {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.conversation, id]);\n },\n });\n};\n\nexport const useUpdateConversationMutation = (\n id: string,\n): UseMutationResult<\n t.TUpdateConversationResponse,\n unknown,\n t.TUpdateConversationRequest,\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation(\n (payload: t.TUpdateConversationRequest) => dataService.updateConversation(payload),\n {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.conversation, id]);\n queryClient.invalidateQueries([QueryKeys.allConversations]);\n },\n },\n );\n};\n\nexport const useUpdateMessageMutation = (\n id: string,\n): UseMutationResult<unknown, unknown, t.TUpdateMessageRequest, unknown> => {\n const queryClient = useQueryClient();\n return useMutation((payload: t.TUpdateMessageRequest) => dataService.updateMessage(payload), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.messages, id]);\n },\n });\n};\n\nexport const useUpdateUserKeysMutation = (): UseMutationResult<\n t.TUser,\n unknown,\n t.TUpdateUserKeyRequest,\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation((payload: t.TUpdateUserKeyRequest) => dataService.updateUserKey(payload), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.name]);\n },\n });\n};\n\nexport const useDeleteConversationMutation = (\n id?: string,\n): UseMutationResult<\n t.TDeleteConversationResponse,\n unknown,\n t.TDeleteConversationRequest,\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation(\n (payload: t.TDeleteConversationRequest) => dataService.deleteConversation(payload),\n {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.conversation, id]);\n queryClient.invalidateQueries([QueryKeys.allConversations]);\n },\n },\n );\n};\n\nexport const useClearConversationsMutation = (): UseMutationResult<unknown> => {\n const queryClient = useQueryClient();\n return useMutation(() => dataService.clearAllConversations(), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.allConversations]);\n },\n });\n};\n\nexport const useRevokeUserKeyMutation = (name: string): UseMutationResult<unknown> => {\n const queryClient = useQueryClient();\n return useMutation(() => dataService.revokeUserKey(name), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.name]);\n },\n });\n};\n\nexport const useRevokeAllUserKeysMutation = (): UseMutationResult<unknown> => {\n const queryClient = useQueryClient();\n return useMutation(() => dataService.revokeAllUserKeys(), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.name]);\n },\n });\n};\n\nexport const useGetConversationsQuery = (\n pageNumber: string,\n config?: UseQueryOptions<t.TGetConversationsResponse>,\n): QueryObserverResult<t.TGetConversationsResponse> => {\n return useQuery<t.TGetConversationsResponse>(\n [QueryKeys.allConversations, { pageNumber, active: true }],\n () => dataService.getConversations(pageNumber),\n {\n refetchOnReconnect: false,\n refetchOnMount: false,\n retry: 1,\n ...config,\n },\n );\n};\n\nexport const useGetSearchEnabledQuery = (\n config?: UseQueryOptions<boolean>,\n): QueryObserverResult<boolean> => {\n return useQuery<boolean>([QueryKeys.searchEnabled], () => dataService.getSearchEnabled(), {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n ...config,\n });\n};\n\nexport const useGetEndpointsQuery = <TData = t.TEndpointsConfig>(\n config?: UseQueryOptions<t.TEndpointsConfig, unknown, TData>,\n): QueryObserverResult<TData> => {\n return useQuery<t.TEndpointsConfig, unknown, TData>(\n [QueryKeys.endpoints],\n () => dataService.getAIEndpoints(),\n {\n staleTime: Infinity,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n ...config,\n },\n );\n};\n\nexport const useGetModelsQuery = (\n config?: UseQueryOptions<t.TModelsConfig>,\n): QueryObserverResult<t.TModelsConfig> => {\n return useQuery<t.TModelsConfig>([QueryKeys.models], () => dataService.getModels(), {\n staleTime: Infinity,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n ...config,\n });\n};\n\nexport const useCreatePresetMutation = (): UseMutationResult<\n s.TPreset,\n unknown,\n s.TPreset,\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation((payload: s.TPreset) => dataService.createPreset(payload), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.presets]);\n },\n });\n};\n\nexport const useDeletePresetMutation = (): UseMutationResult<\n m.PresetDeleteResponse,\n unknown,\n s.TPreset | undefined,\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation((payload: s.TPreset | undefined) => dataService.deletePreset(payload), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.presets]);\n },\n });\n};\n\nexport const useSearchQuery = (\n searchQuery: string,\n pageNumber: string,\n config?: UseQueryOptions<t.TSearchResults>,\n): QueryObserverResult<t.TSearchResults> => {\n return useQuery<t.TSearchResults>(\n [QueryKeys.searchResults, pageNumber, searchQuery],\n () => dataService.searchConversations(searchQuery, pageNumber),\n {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n ...config,\n },\n );\n};\n\nexport const useUpdateTokenCountMutation = (): UseMutationResult<\n t.TUpdateTokenCountResponse,\n unknown,\n { text: string },\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation(({ text }: { text: string }) => dataService.updateTokenCount(text), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.tokenCount]);\n },\n });\n};\n\nexport const useLoginUserMutation = (): UseMutationResult<\n t.TLoginResponse,\n unknown,\n t.TLoginUser,\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation((payload: t.TLoginUser) => dataService.login(payload), {\n onMutate: () => {\n queryClient.removeQueries();\n localStorage.removeItem('lastConversationSetup');\n localStorage.removeItem('lastSelectedModel');\n localStorage.removeItem('lastSelectedTools');\n localStorage.removeItem('filesToDelete');\n localStorage.removeItem('lastAssistant');\n },\n });\n};\n\nexport const useRegisterUserMutation = (): UseMutationResult<\n unknown,\n unknown,\n t.TRegisterUser,\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation((payload: t.TRegisterUser) => dataService.register(payload), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.user]);\n },\n });\n};\n\nexport const useRefreshTokenMutation = (): UseMutationResult<\n t.TRefreshTokenResponse,\n unknown,\n unknown,\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation(() => request.refreshToken(), {\n onMutate: () => {\n queryClient.removeQueries();\n },\n });\n};\n\nexport const useUserKeyQuery = (\n name: string,\n config?: UseQueryOptions<t.TCheckUserKeyResponse>,\n): QueryObserverResult<t.TCheckUserKeyResponse> => {\n return useQuery<t.TCheckUserKeyResponse>(\n [QueryKeys.name, name],\n () => {\n if (!name) {\n return Promise.resolve({ expiresAt: '' });\n }\n return dataService.userKeyQuery(name);\n },\n {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n retry: false,\n ...config,\n },\n );\n};\n\nexport const useRequestPasswordResetMutation = (): UseMutationResult<\n t.TRequestPasswordResetResponse,\n unknown,\n t.TRequestPasswordReset,\n unknown\n> => {\n return useMutation((payload: t.TRequestPasswordReset) =>\n dataService.requestPasswordReset(payload),\n );\n};\n\nexport const useResetPasswordMutation = (): UseMutationResult<\n unknown,\n unknown,\n t.TResetPassword,\n unknown\n> => {\n return useMutation((payload: t.TResetPassword) => dataService.resetPassword(payload));\n};\n\nexport const useAvailablePluginsQuery = (): QueryObserverResult<s.TPlugin[]> => {\n return useQuery<s.TPlugin[]>(\n [QueryKeys.availablePlugins],\n () => dataService.getAvailablePlugins(),\n {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n },\n );\n};\n\nexport const useUpdateUserPluginsMutation = (): UseMutationResult<\n t.TUser,\n unknown,\n t.TUpdateUserPlugins,\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation((payload: t.TUpdateUserPlugins) => dataService.updateUserPlugins(payload), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.user]);\n },\n });\n};\n\nexport const useGetStartupConfig = (): QueryObserverResult<t.TStartupConfig> => {\n return useQuery<t.TStartupConfig>(\n [QueryKeys.startupConfig],\n () => dataService.getStartupConfig(),\n {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n },\n );\n};\n","import { useQuery, useMutation, useQueryClient, useInfiniteQuery } from '@tanstack/react-query';\nimport type {\n UseQueryOptions,\n UseMutationResult,\n QueryObserverResult,\n UseInfiniteQueryOptions,\n} from '@tanstack/react-query';\nimport * as t from '../types/assistants';\nimport * as dataService from '../data-service';\nimport { QueryKeys } from '../keys';\n\n/**\n * Hook for listing all assistants, with optional parameters provided for pagination and sorting\n */\nexport const useListAssistantsQuery = <TData = t.AssistantListResponse>(\n params?: t.AssistantListParams,\n config?: UseQueryOptions<t.AssistantListResponse, unknown, TData>,\n): QueryObserverResult<TData> => {\n return useQuery<t.AssistantListResponse, unknown, TData>(\n [QueryKeys.assistants, params],\n () => dataService.listAssistants(params),\n {\n // Example selector to sort them by created_at\n // select: (res) => {\n // return res.data.sort((a, b) => a.created_at - b.created_at);\n // },\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n retry: false,\n ...config,\n },\n );\n};\n\nexport const useListAssistantsInfiniteQuery = (\n params?: t.AssistantListParams,\n config?: UseInfiniteQueryOptions<t.AssistantListResponse, Error>,\n) => {\n return useInfiniteQuery<t.AssistantListResponse, Error>(\n ['assistantsList', params],\n ({ pageParam = '' }) => dataService.listAssistants({ ...params, after: pageParam }),\n {\n getNextPageParam: (lastPage) => {\n // lastPage is of type AssistantListResponse, you can use the has_more and last_id from it directly\n if (lastPage.has_more) {\n return lastPage.last_id;\n }\n return undefined;\n },\n ...config,\n },\n );\n};\n\n/**\n * Hook for creating a new assistant\n */\nexport const useCreateAssistantMutation = (): UseMutationResult<\n t.Assistant,\n Error,\n t.AssistantCreateParams\n> => {\n const queryClient = useQueryClient();\n return useMutation(\n (newAssistantData: t.AssistantCreateParams) => dataService.createAssistant(newAssistantData),\n {\n onSuccess: () => {\n // Invalidate and refetch assistants query to update list\n queryClient.invalidateQueries([QueryKeys.assistants]);\n },\n },\n );\n};\n\n/**\n * Hook for retrieving details about a single assistant\n */\nexport const useGetAssistantByIdQuery = (\n assistant_id: string,\n config?: UseQueryOptions<t.Assistant>,\n): QueryObserverResult<t.Assistant> => {\n return useQuery<t.Assistant>(\n [QueryKeys.assistant, assistant_id],\n () => dataService.getAssistantById(assistant_id),\n {\n enabled: !!assistant_id, // Query will not execute until the assistant_id exists\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n retry: false,\n ...config,\n },\n );\n};\n\n/**\n * Hook for updating an assistant\n */\nexport const useUpdateAssistantMutation = (): UseMutationResult<\n t.Assistant,\n Error,\n { assistant_id: string; data: t.AssistantUpdateParams }\n> => {\n const queryClient = useQueryClient();\n return useMutation(\n ({ assistant_id, data }: { assistant_id: string; data: t.AssistantUpdateParams }) =>\n dataService.updateAssistant(assistant_id, data),\n {\n onSuccess: (_, { assistant_id }) => {\n // Invalidate and refetch assistant details query\n queryClient.invalidateQueries([QueryKeys.assistant, assistant_id]);\n // Optionally invalidate and refetch list of assistants\n queryClient.invalidateQueries([QueryKeys.assistants]);\n },\n },\n );\n};\n\n/**\n * Hook for deleting an assistant\n */\nexport const useDeleteAssistantMutation = (): UseMutationResult<\n void,\n Error,\n { assistant_id: string }\n> => {\n const queryClient = useQueryClient();\n return useMutation(\n ({ assistant_id }: { assistant_id: string }) => dataService.deleteAssistant(assistant_id),\n {\n onSuccess: () => {\n // Invalidate and refetch assistant list query\n queryClient.invalidateQueries([QueryKeys.assistants]);\n },\n },\n );\n};\n"],"names":["messages","conversationId","messageId","concat","keysEndpoint","search","q","pageNumber","assistants","id","_post","url","data","axios","post","JSON","stringify","headers","_a","sent","isRefreshing","failedQueue","refreshToken","retry","endpoints.refreshToken","processQueue","error","token","forEach","prom","reject","resolve","interceptors","response","use","__awaiter","originalRequest","config","status","_retry","Promise","push","_b","err_1","includes","defaults","common","setTokenHeader","window","dispatchEvent","CustomEvent","detail","location","href","err_2","request","get","options","__assign","postMultiPart","formData","put","delete","deleteWithOptions","patch","revokeUserKey","name","endpoints.revokeUserKey","revokeAllUserKeys","getConversationById","endpoints.conversationById","updateUserKey","payload","value","Error","QueryKeys","MutationKeys","userKeyQuery","endpoints.userKeyQuery","listAssistants","params","endpoints.assistants","useAbortRequestWithMessage","queryClient","useQueryClient","useMutation","endpoint","abortKey","message","endpoints.abortRequest","arg","dataService.abortRequestWithMessage","onSuccess","invalidateQueries","balance","useGetUserQuery","useQuery","user","refetchOnWindowFocus","refetchOnReconnect","refetchOnMount","useGetMessagesByConvoId","endpoints.messages","useGetUserBalance","useGetConversationByIdQuery","conversation","dataService.getConversationById","useGetConvoIdQuery","defaultQuery","convosQueryKey","allConversations","active","convosQuery","getQueryData","convo","conversations","find","c","useGetConversationByIdMutation","useUpdateConversationMutation","dataService.updateConversation","useUpdateMessageMutation","text","dataService.updateMessage","useUpdateUserKeysMutation","dataService.updateUserKey","useDeleteConversationMutation","dataService.deleteConversation","useClearConversationsMutation","useRevokeUserKeyMutation","dataService.revokeUserKey","useRevokeAllUserKeysMutation","dataService.revokeAllUserKeys","useGetConversationsQuery","endpoints.conversations","dataService.getConversations","useGetSearchEnabledQuery","searchEnabled","useGetEndpointsQuery","endpoints","staleTime","Infinity","useGetModelsQuery","models","useCreatePresetMutation","dataService.createPreset","presets","useDeletePresetMutation","useSearchQuery","searchQuery","searchResults","endpoints.search","dataService.searchConversations","useUpdateTokenCountMutation","dataService.updateTokenCount","tokenCount","useLoginUserMutation","dataService.login","onMutate","removeQueries","localStorage","removeItem","useRegisterUserMutation","dataService.register","useRefreshTokenMutation","useUserKeyQuery","dataService.userKeyQuery","expiresAt","useRequestPasswordResetMutation","dataService.requestPasswordReset","useResetPasswordMutation","dataService.resetPassword","useAvailablePluginsQuery","availablePlugins","useUpdateUserPluginsMutation","dataService.updateUserPlugins","useGetStartupConfig","startupConfig","useListAssistantsQuery","dataService.listAssistants","useListAssistantsInfiniteQuery","useInfiniteQuery","pageParam","after","getNextPageParam","lastPage","has_more","last_id","useCreateAssistantMutation","newAssistantData","useGetAssistantByIdQuery","assistant_id","assistant","dataService.getAssistantById","enabled","useUpdateAssistantMutation","dataService.updateAssistant","_","useDeleteAssistantMutation","dataService.deleteAssistant"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../../src/api-endpoints.ts","../../src/request.ts","../../src/headers-helpers.ts","../../src/data-service.ts","../../src/keys.ts","../../src/react-query/react-query-service.ts","../../src/react-query/assistants.ts"],"sourcesContent":["export const user = () => '/api/user';\n\nexport const balance = () => '/api/balance';\n\nexport const userPlugins = () => '/api/user/plugins';\n\nexport const messages = (conversationId: string, messageId?: string) =>\n `/api/messages/${conversationId}${messageId ? `/${messageId}` : ''}`;\n\nconst keysEndpoint = '/api/keys';\n\nexport const keys = () => keysEndpoint;\n\nexport const userKeyQuery = (name: string) => `${keysEndpoint}?name=${name}`;\n\nexport const revokeUserKey = (name: string) => `${keysEndpoint}/${name}`;\n\nexport const revokeAllUserKeys = () => `${keysEndpoint}?all=true`;\n\nexport const abortRequest = (endpoint: string) => `/api/ask/${endpoint}/abort`;\n\nexport const conversations = (pageNumber: string) => `/api/convos?pageNumber=${pageNumber}`;\n\nexport const conversationById = (id: string) => `/api/convos/${id}`;\n\nexport const genTitle = () => '/api/convos/gen_title';\n\nexport const updateConversation = () => '/api/convos/update';\n\nexport const deleteConversation = () => '/api/convos/clear';\n\nexport const search = (q: string, pageNumber: string) =>\n `/api/search?q=${q}&pageNumber=${pageNumber}`;\n\nexport const searchEnabled = () => '/api/search/enable';\n\nexport const presets = () => '/api/presets';\n\nexport const deletePreset = () => '/api/presets/delete';\n\nexport const aiEndpoints = () => '/api/endpoints';\n\nexport const endpointsConfigOverride = () => '/api/endpoints/config/override';\n\nexport const models = () => '/api/models';\n\nexport const tokenizer = () => '/api/tokenizer';\n\nexport const login = () => '/api/auth/login';\n\nexport const logout = () => '/api/auth/logout';\n\nexport const register = () => '/api/auth/register';\n\nexport const loginFacebook = () => '/api/auth/facebook';\n\nexport const loginGoogle = () => '/api/auth/google';\n\nexport const refreshToken = (retry?: boolean) => `/api/auth/refresh${retry ? '?retry=true' : ''}`;\n\nexport const requestPasswordReset = () => '/api/auth/requestPasswordReset';\n\nexport const resetPassword = () => '/api/auth/resetPassword';\n\nexport const plugins = () => '/api/plugins';\n\nexport const config = () => '/api/config';\n\nexport const assistants = (id?: string) => `/api/assistants${id ? `/${id}` : ''}`;\n\nexport const files = () => '/api/files';\n\nexport const images = () => `${files()}/images`;\n\nexport const avatar = () => `${images()}/avatar`;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport axios, { AxiosRequestConfig, AxiosError } from 'axios';\nimport { setTokenHeader } from './headers-helpers';\nimport * as endpoints from './api-endpoints';\n\nasync function _get<T>(url: string, options?: AxiosRequestConfig): Promise<T> {\n const response = await axios.get(url, { ...options });\n return response.data;\n}\n\nasync function _post(url: string, data?: any) {\n const response = await axios.post(url, JSON.stringify(data), {\n headers: { 'Content-Type': 'application/json' },\n });\n return response.data;\n}\n\nasync function _postMultiPart(url: string, formData: FormData, options?: AxiosRequestConfig) {\n const response = await axios.post(url, formData, {\n ...options,\n headers: { 'Content-Type': 'multipart/form-data' },\n });\n return response.data;\n}\n\nasync function _put(url: string, data?: any) {\n const response = await axios.put(url, JSON.stringify(data), {\n headers: { 'Content-Type': 'application/json' },\n });\n return response.data;\n}\n\nasync function _delete<T>(url: string): Promise<T> {\n const response = await axios.delete(url);\n return response.data;\n}\n\nasync function _deleteWithOptions<T>(url: string, options?: AxiosRequestConfig): Promise<T> {\n const response = await axios.delete(url, { ...options });\n return response.data;\n}\n\nasync function _patch(url: string, data?: any) {\n const response = await axios.patch(url, JSON.stringify(data), {\n headers: { 'Content-Type': 'application/json' },\n });\n return response.data;\n}\n\nlet isRefreshing = false;\nlet failedQueue: { resolve: (value?: any) => void; reject: (reason?: any) => void }[] = [];\n\nconst refreshToken = (retry?: boolean) => _post(endpoints.refreshToken(retry));\n\nconst processQueue = (error: AxiosError | null, token: string | null = null) => {\n failedQueue.forEach((prom) => {\n if (error) {\n prom.reject(error);\n } else {\n prom.resolve(token);\n }\n });\n failedQueue = [];\n};\n\naxios.interceptors.response.use(\n (response) => response,\n async (error) => {\n const originalRequest = error.config;\n\n if (error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n if (isRefreshing) {\n try {\n const token = await new Promise((resolve, reject) => {\n failedQueue.push({ resolve, reject });\n });\n originalRequest.headers['Authorization'] = 'Bearer ' + token;\n return await axios(originalRequest);\n } catch (err) {\n return Promise.reject(err);\n }\n }\n\n isRefreshing = true;\n\n try {\n const { token } = await refreshToken(\n // Handle edge case where we get a blank screen if the initial 401 error is from a refresh token request\n originalRequest.url?.includes('api/auth/refresh') ? true : false,\n );\n\n if (token) {\n originalRequest.headers['Authorization'] = 'Bearer ' + token;\n setTokenHeader(token);\n window.dispatchEvent(new CustomEvent('tokenUpdated', { detail: token }));\n processQueue(null, token);\n return await axios(originalRequest);\n } else {\n window.location.href = '/login';\n }\n } catch (err) {\n processQueue(err as AxiosError, null);\n return Promise.reject(err);\n } finally {\n isRefreshing = false;\n }\n }\n\n return Promise.reject(error);\n },\n);\n\nexport default {\n get: _get,\n post: _post,\n postMultiPart: _postMultiPart,\n put: _put,\n delete: _delete,\n deleteWithOptions: _deleteWithOptions,\n patch: _patch,\n refreshToken,\n};\n","import axios from 'axios';\n\nexport function setAcceptLanguageHeader(value: string): void {\n axios.defaults.headers.common['Accept-Language'] = value;\n}\n\nexport function setTokenHeader(token: string) {\n axios.defaults.headers.common['Authorization'] = 'Bearer ' + token;\n}\n","import * as f from './types/files';\nimport * as q from './types/queries';\nimport * as m from './types/mutations';\nimport * as a from './types/assistants';\nimport * as t from './types';\nimport * as s from './schemas';\nimport request from './request';\nimport * as endpoints from './api-endpoints';\n\nexport function getConversations(pageNumber: string): Promise<t.TGetConversationsResponse> {\n return request.get(endpoints.conversations(pageNumber));\n}\n\nexport function abortRequestWithMessage(\n endpoint: string,\n abortKey: string,\n message: string,\n): Promise<void> {\n return request.post(endpoints.abortRequest(endpoint), { arg: { abortKey, message } });\n}\n\nexport function deleteConversation(payload: t.TDeleteConversationRequest) {\n //todo: this should be a DELETE request\n return request.post(endpoints.deleteConversation(), { arg: payload });\n}\n\nexport function clearAllConversations(): Promise<unknown> {\n return request.post(endpoints.deleteConversation(), { arg: {} });\n}\n\nexport function revokeUserKey(name: string): Promise<unknown> {\n return request.delete(endpoints.revokeUserKey(name));\n}\n\nexport function revokeAllUserKeys(): Promise<unknown> {\n return request.delete(endpoints.revokeAllUserKeys());\n}\n\nexport function getMessagesByConvoId(conversationId: string): Promise<s.TMessage[]> {\n if (conversationId === 'new') {\n return Promise.resolve([]);\n }\n return request.get(endpoints.messages(conversationId));\n}\n\nexport function getConversationById(id: string): Promise<s.TConversation> {\n return request.get(endpoints.conversationById(id));\n}\n\nexport function updateConversation(\n payload: t.TUpdateConversationRequest,\n): Promise<t.TUpdateConversationResponse> {\n return request.post(endpoints.updateConversation(), { arg: payload });\n}\n\nexport function genTitle(payload: m.TGenTitleRequest): Promise<m.TGenTitleResponse> {\n return request.post(endpoints.genTitle(), payload);\n}\n\nexport function updateMessage(payload: t.TUpdateMessageRequest): Promise<unknown> {\n const { conversationId, messageId, text } = payload;\n if (!conversationId) {\n throw new Error('conversationId is required');\n }\n\n return request.put(endpoints.messages(conversationId, messageId), { text });\n}\n\nexport function updateUserKey(payload: t.TUpdateUserKeyRequest) {\n const { value } = payload;\n if (!value) {\n throw new Error('value is required');\n }\n\n return request.put(endpoints.keys(), payload);\n}\n\nexport function getPresets(): Promise<s.TPreset[]> {\n return request.get(endpoints.presets());\n}\n\nexport function createPreset(payload: s.TPreset): Promise<s.TPreset> {\n return request.post(endpoints.presets(), payload);\n}\n\nexport function updatePreset(payload: s.TPreset): Promise<s.TPreset> {\n return request.post(endpoints.presets(), payload);\n}\n\nexport function deletePreset(arg: s.TPreset | undefined): Promise<m.PresetDeleteResponse> {\n return request.post(endpoints.deletePreset(), arg);\n}\n\nexport function getSearchEnabled(): Promise<boolean> {\n return request.get(endpoints.searchEnabled());\n}\n\nexport function getUser(): Promise<t.TUser> {\n return request.get(endpoints.user());\n}\n\nexport function getUserBalance(): Promise<string> {\n return request.get(endpoints.balance());\n}\n\nexport const searchConversations = async (\n q: string,\n pageNumber: string,\n): Promise<t.TSearchResults> => {\n return request.get(endpoints.search(q, pageNumber));\n};\n\nexport const updateTokenCount = (text: string) => {\n return request.post(endpoints.tokenizer(), { arg: text });\n};\n\nexport const login = (payload: t.TLoginUser) => {\n return request.post(endpoints.login(), payload);\n};\n\nexport const logout = () => {\n return request.post(endpoints.logout());\n};\n\nexport const register = (payload: t.TRegisterUser) => {\n return request.post(endpoints.register(), payload);\n};\n\nexport const userKeyQuery = (name: string): Promise<t.TCheckUserKeyResponse> =>\n request.get(endpoints.userKeyQuery(name));\n\nexport const getLoginGoogle = () => {\n return request.get(endpoints.loginGoogle());\n};\n\nexport const requestPasswordReset = (\n payload: t.TRequestPasswordReset,\n): Promise<t.TRequestPasswordResetResponse> => {\n return request.post(endpoints.requestPasswordReset(), payload);\n};\n\nexport const resetPassword = (payload: t.TResetPassword) => {\n return request.post(endpoints.resetPassword(), payload);\n};\n\nexport const getAvailablePlugins = (): Promise<s.TPlugin[]> => {\n return request.get(endpoints.plugins());\n};\n\nexport const updateUserPlugins = (payload: t.TUpdateUserPlugins) => {\n return request.post(endpoints.userPlugins(), payload);\n};\n\n/* Config */\n\nexport const getStartupConfig = (): Promise<t.TStartupConfig> => {\n return request.get(endpoints.config());\n};\n\nexport const getAIEndpoints = (): Promise<t.TEndpointsConfig> => {\n return request.get(endpoints.aiEndpoints());\n};\n\nexport const getModels = async (): Promise<t.TModelsConfig> => {\n return request.get(endpoints.models());\n};\n\nexport const getEndpointsConfigOverride = (): Promise<unknown | boolean> => {\n return request.get(endpoints.endpointsConfigOverride());\n};\n\n/* Assistants */\n\nexport const createAssistant = (data: a.AssistantCreateParams): Promise<a.Assistant> => {\n return request.post(endpoints.assistants(), data);\n};\n\nexport const getAssistantById = (assistant_id: string): Promise<a.Assistant> => {\n return request.get(endpoints.assistants(assistant_id));\n};\n\nexport const updateAssistant = (\n assistant_id: string,\n data: a.AssistantUpdateParams,\n): Promise<a.Assistant> => {\n return request.patch(endpoints.assistants(assistant_id), data);\n};\n\nexport const deleteAssistant = (assistant_id: string): Promise<void> => {\n return request.delete(endpoints.assistants(assistant_id));\n};\n\nexport const listAssistants = (\n params?: a.AssistantListParams,\n): Promise<a.AssistantListResponse> => {\n return request.get(endpoints.assistants(), { params });\n};\n\n/* Files */\n\nexport const getFiles = (): Promise<f.TFile[]> => {\n return request.get(endpoints.files());\n};\n\nexport const uploadImage = (data: FormData): Promise<f.TFileUpload> => {\n return request.postMultiPart(endpoints.images(), data);\n};\n\nexport const uploadAvatar = (data: FormData): Promise<f.AvatarUploadResponse> => {\n return request.postMultiPart(endpoints.avatar(), data);\n};\n\nexport const deleteFiles = async (files: f.BatchFile[]): Promise<f.DeleteFilesResponse> =>\n request.deleteWithOptions(endpoints.files(), {\n data: { files },\n });\n\n/* conversations */\n\nexport const listConversations = (\n params?: q.ConversationListParams,\n): Promise<q.ConversationListResponse> => {\n // Assuming params has a pageNumber property\n const pageNumber = params?.pageNumber || '1'; // Default to page 1 if not provided\n return request.get(endpoints.conversations(pageNumber));\n};\n\nexport const listConversationsByQuery = (\n params?: q.ConversationListParams & { searchQuery?: string },\n): Promise<q.ConversationListResponse> => {\n const pageNumber = params?.pageNumber || '1'; // Default to page 1 if not provided\n const searchQuery = params?.searchQuery || ''; // If no search query is provided, default to an empty string\n // Update the endpoint to handle a search query\n if (searchQuery !== '') {\n return request.get(endpoints.search(searchQuery, pageNumber));\n } else {\n return request.get(endpoints.conversations(pageNumber));\n }\n};\n","export enum QueryKeys {\n messages = 'messages',\n allConversations = 'allConversations',\n searchConversations = 'searchConversations',\n conversation = 'conversation',\n searchEnabled = 'searchEnabled',\n user = 'user',\n name = 'name', // user key name\n models = 'models',\n balance = 'balance',\n endpoints = 'endpoints',\n presets = 'presets',\n searchResults = 'searchResults',\n tokenCount = 'tokenCount',\n availablePlugins = 'availablePlugins',\n startupConfig = 'startupConfig',\n assistants = 'assistants',\n assistant = 'assistant',\n endpointsConfigOverride = 'endpointsConfigOverride',\n files = 'files',\n}\n\nexport enum MutationKeys {\n imageUpload = 'imageUpload',\n fileDelete = 'fileDelete',\n updatePreset = 'updatePreset',\n deletePreset = 'deletePreset',\n logoutUser = 'logoutUser',\n avatarUpload = 'avatarUpload',\n}\n","import {\n UseQueryOptions,\n useQuery,\n useMutation,\n useQueryClient,\n UseMutationResult,\n QueryObserverResult,\n} from '@tanstack/react-query';\nimport * as t from '../types';\nimport * as s from '../schemas';\nimport * as m from '../types/mutations';\nimport * as dataService from '../data-service';\nimport request from '../request';\nimport { QueryKeys } from '../keys';\n\nexport const useAbortRequestWithMessage = (): UseMutationResult<\n void,\n Error,\n { endpoint: string; abortKey: string; message: string }\n> => {\n const queryClient = useQueryClient();\n return useMutation(\n ({ endpoint, abortKey, message }) =>\n dataService.abortRequestWithMessage(endpoint, abortKey, message),\n {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.balance]);\n },\n },\n );\n};\n\nexport const useGetUserQuery = (\n config?: UseQueryOptions<t.TUser>,\n): QueryObserverResult<t.TUser> => {\n return useQuery<t.TUser>([QueryKeys.user], () => dataService.getUser(), {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n retry: false,\n ...config,\n });\n};\n\nexport const useGetMessagesByConvoId = <TData = s.TMessage[]>(\n id: string,\n config?: UseQueryOptions<s.TMessage[], unknown, TData>,\n): QueryObserverResult<TData> => {\n return useQuery<s.TMessage[], unknown, TData>(\n [QueryKeys.messages, id],\n () => dataService.getMessagesByConvoId(id),\n {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n ...config,\n },\n );\n};\n\nexport const useGetUserBalance = (\n config?: UseQueryOptions<string>,\n): QueryObserverResult<string> => {\n return useQuery<string>([QueryKeys.balance], () => dataService.getUserBalance(), {\n refetchOnWindowFocus: true,\n refetchOnReconnect: true,\n refetchOnMount: true,\n ...config,\n });\n};\n\nexport const useGetConversationByIdQuery = (\n id: string,\n config?: UseQueryOptions<s.TConversation>,\n): QueryObserverResult<s.TConversation> => {\n return useQuery<s.TConversation>(\n [QueryKeys.conversation, id],\n () => dataService.getConversationById(id),\n {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n ...config,\n },\n );\n};\n\n//This isn't ideal because its just a query and we're using mutation, but it was the only way\n//to make it work with how the Chat component is structured\nexport const useGetConversationByIdMutation = (id: string): UseMutationResult<s.TConversation> => {\n const queryClient = useQueryClient();\n return useMutation(() => dataService.getConversationById(id), {\n // onSuccess: (res: s.TConversation) => {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.conversation, id]);\n },\n });\n};\n\nexport const useUpdateMessageMutation = (\n id: string,\n): UseMutationResult<unknown, unknown, t.TUpdateMessageRequest, unknown> => {\n const queryClient = useQueryClient();\n return useMutation((payload: t.TUpdateMessageRequest) => dataService.updateMessage(payload), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.messages, id]);\n },\n });\n};\n\nexport const useUpdateUserKeysMutation = (): UseMutationResult<\n t.TUser,\n unknown,\n t.TUpdateUserKeyRequest,\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation((payload: t.TUpdateUserKeyRequest) => dataService.updateUserKey(payload), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.name]);\n },\n });\n};\n\nexport const useClearConversationsMutation = (): UseMutationResult<unknown> => {\n const queryClient = useQueryClient();\n return useMutation(() => dataService.clearAllConversations(), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.allConversations]);\n },\n });\n};\n\nexport const useRevokeUserKeyMutation = (name: string): UseMutationResult<unknown> => {\n const queryClient = useQueryClient();\n return useMutation(() => dataService.revokeUserKey(name), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.name]);\n },\n });\n};\n\nexport const useRevokeAllUserKeysMutation = (): UseMutationResult<unknown> => {\n const queryClient = useQueryClient();\n return useMutation(() => dataService.revokeAllUserKeys(), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.name]);\n },\n });\n};\n\nexport const useGetConversationsQuery = (\n pageNumber: string,\n config?: UseQueryOptions<t.TGetConversationsResponse>,\n): QueryObserverResult<t.TGetConversationsResponse> => {\n return useQuery<t.TGetConversationsResponse>(\n [QueryKeys.allConversations],\n () => dataService.getConversations(pageNumber),\n {\n refetchOnReconnect: false,\n refetchOnMount: false,\n retry: 1,\n ...config,\n },\n );\n};\n\nexport const useGetSearchEnabledQuery = (\n config?: UseQueryOptions<boolean>,\n): QueryObserverResult<boolean> => {\n return useQuery<boolean>([QueryKeys.searchEnabled], () => dataService.getSearchEnabled(), {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n ...config,\n });\n};\n\nexport const useGetEndpointsQuery = <TData = t.TEndpointsConfig>(\n config?: UseQueryOptions<t.TEndpointsConfig, unknown, TData>,\n): QueryObserverResult<TData> => {\n return useQuery<t.TEndpointsConfig, unknown, TData>(\n [QueryKeys.endpoints],\n () => dataService.getAIEndpoints(),\n {\n staleTime: Infinity,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n ...config,\n },\n );\n};\n\nexport const useGetModelsQuery = (\n config?: UseQueryOptions<t.TModelsConfig>,\n): QueryObserverResult<t.TModelsConfig> => {\n return useQuery<t.TModelsConfig>([QueryKeys.models], () => dataService.getModels(), {\n staleTime: Infinity,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n ...config,\n });\n};\n\nexport const useCreatePresetMutation = (): UseMutationResult<\n s.TPreset,\n unknown,\n s.TPreset,\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation((payload: s.TPreset) => dataService.createPreset(payload), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.presets]);\n },\n });\n};\n\nexport const useDeletePresetMutation = (): UseMutationResult<\n m.PresetDeleteResponse,\n unknown,\n s.TPreset | undefined,\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation((payload: s.TPreset | undefined) => dataService.deletePreset(payload), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.presets]);\n },\n });\n};\n\nexport const useSearchQuery = (\n searchQuery: string,\n pageNumber: string,\n config?: UseQueryOptions<t.TSearchResults>,\n): QueryObserverResult<t.TSearchResults> => {\n return useQuery<t.TSearchResults>(\n [QueryKeys.searchResults, pageNumber, searchQuery],\n () => dataService.searchConversations(searchQuery, pageNumber),\n {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n ...config,\n },\n );\n};\n\nexport const useUpdateTokenCountMutation = (): UseMutationResult<\n t.TUpdateTokenCountResponse,\n unknown,\n { text: string },\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation(({ text }: { text: string }) => dataService.updateTokenCount(text), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.tokenCount]);\n },\n });\n};\n\nexport const useLoginUserMutation = (): UseMutationResult<\n t.TLoginResponse,\n unknown,\n t.TLoginUser,\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation((payload: t.TLoginUser) => dataService.login(payload), {\n onMutate: () => {\n queryClient.removeQueries();\n localStorage.removeItem('lastConversationSetup');\n localStorage.removeItem('lastSelectedModel');\n localStorage.removeItem('lastSelectedTools');\n localStorage.removeItem('filesToDelete');\n localStorage.removeItem('lastAssistant');\n },\n });\n};\n\nexport const useRegisterUserMutation = (): UseMutationResult<\n unknown,\n unknown,\n t.TRegisterUser,\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation((payload: t.TRegisterUser) => dataService.register(payload), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.user]);\n },\n });\n};\n\nexport const useRefreshTokenMutation = (): UseMutationResult<\n t.TRefreshTokenResponse,\n unknown,\n unknown,\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation(() => request.refreshToken(), {\n onMutate: () => {\n queryClient.removeQueries();\n },\n });\n};\n\nexport const useUserKeyQuery = (\n name: string,\n config?: UseQueryOptions<t.TCheckUserKeyResponse>,\n): QueryObserverResult<t.TCheckUserKeyResponse> => {\n return useQuery<t.TCheckUserKeyResponse>(\n [QueryKeys.name, name],\n () => {\n if (!name) {\n return Promise.resolve({ expiresAt: '' });\n }\n return dataService.userKeyQuery(name);\n },\n {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n retry: false,\n ...config,\n },\n );\n};\n\nexport const useRequestPasswordResetMutation = (): UseMutationResult<\n t.TRequestPasswordResetResponse,\n unknown,\n t.TRequestPasswordReset,\n unknown\n> => {\n return useMutation((payload: t.TRequestPasswordReset) =>\n dataService.requestPasswordReset(payload),\n );\n};\n\nexport const useResetPasswordMutation = (): UseMutationResult<\n unknown,\n unknown,\n t.TResetPassword,\n unknown\n> => {\n return useMutation((payload: t.TResetPassword) => dataService.resetPassword(payload));\n};\n\nexport const useAvailablePluginsQuery = (): QueryObserverResult<s.TPlugin[]> => {\n return useQuery<s.TPlugin[]>(\n [QueryKeys.availablePlugins],\n () => dataService.getAvailablePlugins(),\n {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n },\n );\n};\n\nexport const useUpdateUserPluginsMutation = (): UseMutationResult<\n t.TUser,\n unknown,\n t.TUpdateUserPlugins,\n unknown\n> => {\n const queryClient = useQueryClient();\n return useMutation((payload: t.TUpdateUserPlugins) => dataService.updateUserPlugins(payload), {\n onSuccess: () => {\n queryClient.invalidateQueries([QueryKeys.user]);\n },\n });\n};\n\nexport const useGetStartupConfig = (): QueryObserverResult<t.TStartupConfig> => {\n return useQuery<t.TStartupConfig>(\n [QueryKeys.startupConfig],\n () => dataService.getStartupConfig(),\n {\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n },\n );\n};\n","import { useQuery, useMutation, useQueryClient, useInfiniteQuery } from '@tanstack/react-query';\nimport type {\n UseQueryOptions,\n UseMutationResult,\n QueryObserverResult,\n UseInfiniteQueryOptions,\n} from '@tanstack/react-query';\nimport * as t from '../types/assistants';\nimport * as dataService from '../data-service';\nimport { QueryKeys } from '../keys';\n\n/**\n * Hook for listing all assistants, with optional parameters provided for pagination and sorting\n */\nexport const useListAssistantsQuery = <TData = t.AssistantListResponse>(\n params?: t.AssistantListParams,\n config?: UseQueryOptions<t.AssistantListResponse, unknown, TData>,\n): QueryObserverResult<TData> => {\n return useQuery<t.AssistantListResponse, unknown, TData>(\n [QueryKeys.assistants, params],\n () => dataService.listAssistants(params),\n {\n // Example selector to sort them by created_at\n // select: (res) => {\n // return res.data.sort((a, b) => a.created_at - b.created_at);\n // },\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n retry: false,\n ...config,\n },\n );\n};\n\nexport const useListAssistantsInfiniteQuery = (\n params?: t.AssistantListParams,\n config?: UseInfiniteQueryOptions<t.AssistantListResponse, Error>,\n) => {\n return useInfiniteQuery<t.AssistantListResponse, Error>(\n ['assistantsList', params],\n ({ pageParam = '' }) => dataService.listAssistants({ ...params, after: pageParam }),\n {\n getNextPageParam: (lastPage) => {\n // lastPage is of type AssistantListResponse, you can use the has_more and last_id from it directly\n if (lastPage.has_more) {\n return lastPage.last_id;\n }\n return undefined;\n },\n ...config,\n },\n );\n};\n\n/**\n * Hook for creating a new assistant\n */\nexport const useCreateAssistantMutation = (): UseMutationResult<\n t.Assistant,\n Error,\n t.AssistantCreateParams\n> => {\n const queryClient = useQueryClient();\n return useMutation(\n (newAssistantData: t.AssistantCreateParams) => dataService.createAssistant(newAssistantData),\n {\n onSuccess: () => {\n // Invalidate and refetch assistants query to update list\n queryClient.invalidateQueries([QueryKeys.assistants]);\n },\n },\n );\n};\n\n/**\n * Hook for retrieving details about a single assistant\n */\nexport const useGetAssistantByIdQuery = (\n assistant_id: string,\n config?: UseQueryOptions<t.Assistant>,\n): QueryObserverResult<t.Assistant> => {\n return useQuery<t.Assistant>(\n [QueryKeys.assistant, assistant_id],\n () => dataService.getAssistantById(assistant_id),\n {\n enabled: !!assistant_id, // Query will not execute until the assistant_id exists\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n retry: false,\n ...config,\n },\n );\n};\n\n/**\n * Hook for updating an assistant\n */\nexport const useUpdateAssistantMutation = (): UseMutationResult<\n t.Assistant,\n Error,\n { assistant_id: string; data: t.AssistantUpdateParams }\n> => {\n const queryClient = useQueryClient();\n return useMutation(\n ({ assistant_id, data }: { assistant_id: string; data: t.AssistantUpdateParams }) =>\n dataService.updateAssistant(assistant_id, data),\n {\n onSuccess: (_, { assistant_id }) => {\n // Invalidate and refetch assistant details query\n queryClient.invalidateQueries([QueryKeys.assistant, assistant_id]);\n // Optionally invalidate and refetch list of assistants\n queryClient.invalidateQueries([QueryKeys.assistants]);\n },\n },\n );\n};\n\n/**\n * Hook for deleting an assistant\n */\nexport const useDeleteAssistantMutation = (): UseMutationResult<\n void,\n Error,\n { assistant_id: string }\n> => {\n const queryClient = useQueryClient();\n return useMutation(\n ({ assistant_id }: { assistant_id: string }) => dataService.deleteAssistant(assistant_id),\n {\n onSuccess: () => {\n // Invalidate and refetch assistant list query\n queryClient.invalidateQueries([QueryKeys.assistants]);\n },\n },\n );\n};\n"],"names":["messages","conversationId","messageId","concat","keysEndpoint","search","q","pageNumber","assistants","id","_post","url","data","axios","post","JSON","stringify","headers","_a","sent","isRefreshing","failedQueue","refreshToken","retry","endpoints.refreshToken","processQueue","error","token","forEach","prom","reject","resolve","interceptors","response","use","__awaiter","originalRequest","config","status","_retry","Promise","push","_b","err_1","includes","defaults","common","setTokenHeader","window","dispatchEvent","CustomEvent","detail","location","href","err_2","request","get","options","__assign","postMultiPart","formData","put","delete","deleteWithOptions","patch","revokeUserKey","name","endpoints.revokeUserKey","revokeAllUserKeys","getConversationById","endpoints.conversationById","updateUserKey","payload","value","Error","QueryKeys","MutationKeys","userKeyQuery","endpoints.userKeyQuery","listAssistants","params","endpoints.assistants","useAbortRequestWithMessage","queryClient","useQueryClient","useMutation","endpoint","abortKey","message","endpoints.abortRequest","arg","dataService.abortRequestWithMessage","onSuccess","invalidateQueries","balance","useGetUserQuery","useQuery","user","refetchOnWindowFocus","refetchOnReconnect","refetchOnMount","useGetMessagesByConvoId","endpoints.messages","useGetUserBalance","useGetConversationByIdQuery","conversation","dataService.getConversationById","useGetConversationByIdMutation","useUpdateMessageMutation","text","dataService.updateMessage","useUpdateUserKeysMutation","dataService.updateUserKey","useClearConversationsMutation","allConversations","useRevokeUserKeyMutation","dataService.revokeUserKey","useRevokeAllUserKeysMutation","dataService.revokeAllUserKeys","useGetConversationsQuery","endpoints.conversations","dataService.getConversations","useGetSearchEnabledQuery","searchEnabled","useGetEndpointsQuery","endpoints","staleTime","Infinity","useGetModelsQuery","models","useCreatePresetMutation","dataService.createPreset","presets","useDeletePresetMutation","useSearchQuery","searchQuery","searchResults","endpoints.search","dataService.searchConversations","useUpdateTokenCountMutation","dataService.updateTokenCount","tokenCount","useLoginUserMutation","dataService.login","onMutate","removeQueries","localStorage","removeItem","useRegisterUserMutation","dataService.register","useRefreshTokenMutation","useUserKeyQuery","dataService.userKeyQuery","expiresAt","useRequestPasswordResetMutation","dataService.requestPasswordReset","useResetPasswordMutation","dataService.resetPassword","useAvailablePluginsQuery","availablePlugins","useUpdateUserPluginsMutation","dataService.updateUserPlugins","useGetStartupConfig","startupConfig","useListAssistantsQuery","dataService.listAssistants","useListAssistantsInfiniteQuery","useInfiniteQuery","pageParam","after","getNextPageParam","lastPage","has_more","last_id","useCreateAssistantMutation","newAssistantData","useGetAssistantByIdQuery","assistant_id","assistant","dataService.getAssistantById","enabled","useUpdateAssistantMutation","dataService.updateAssistant","_","useDeleteAssistantMutation","dataService.deleteAssistant"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "librechat-data-provider",
3
- "version": "0.3.8",
3
+ "version": "0.3.9",
4
4
  "description": "data services for librechat apps",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.es.js",
@@ -23,6 +23,8 @@ export const conversations = (pageNumber: string) => `/api/convos?pageNumber=${p
23
23
 
24
24
  export const conversationById = (id: string) => `/api/convos/${id}`;
25
25
 
26
+ export const genTitle = () => '/api/convos/gen_title';
27
+
26
28
  export const updateConversation = () => '/api/convos/update';
27
29
 
28
30
  export const deleteConversation = () => '/api/convos/clear';
package/src/config.ts CHANGED
@@ -30,6 +30,12 @@ export const configSchema = z.object({
30
30
  version: z.string(),
31
31
  cache: z.boolean(),
32
32
  fileStrategy: fileSourceSchema.optional(),
33
+ registration: z
34
+ .object({
35
+ socialLogins: z.array(z.string()).optional(),
36
+ allowedDomains: z.array(z.string()).optional(),
37
+ })
38
+ .optional(),
33
39
  endpoints: z
34
40
  .object({
35
41
  custom: z.array(endpointSchema.partial()),
@@ -37,6 +43,8 @@ export const configSchema = z.object({
37
43
  .strict(),
38
44
  });
39
45
 
46
+ export type TCustomConfig = z.infer<typeof configSchema>;
47
+
40
48
  export enum KnownEndpoints {
41
49
  mistral = 'mistral',
42
50
  openrouter = 'openrouter',
@@ -91,8 +99,11 @@ export const defaultModels = {
91
99
  'claude-instant-1-100k',
92
100
  ],
93
101
  [EModelEndpoint.openAI]: [
102
+ 'gpt-3.5-turbo-0125',
94
103
  'gpt-3.5-turbo-16k-0613',
95
104
  'gpt-3.5-turbo-16k',
105
+ 'gpt-4-turbo-preview',
106
+ 'gpt-4-0125-preview',
96
107
  'gpt-4-1106-preview',
97
108
  'gpt-3.5-turbo',
98
109
  'gpt-3.5-turbo-1106',
@@ -158,6 +169,10 @@ export enum CacheKeys {
158
169
  * Key for the plugins cache.
159
170
  */
160
171
  PLUGINS = 'plugins',
172
+ /**
173
+ * Key for the title generation cache.
174
+ */
175
+ GEN_TITLE = 'genTitle',
161
176
  /**
162
177
  * Key for the model config cache.
163
178
  */
@@ -166,6 +181,10 @@ export enum CacheKeys {
166
181
  * Key for the default endpoint config cache.
167
182
  */
168
183
  ENDPOINT_CONFIG = 'endpointsConfig',
184
+ /**
185
+ * Key for accessing the model token config cache.
186
+ */
187
+ TOKEN_CONFIG = 'tokenConfig',
169
188
  /**
170
189
  * Key for the custom config cache.
171
190
  */
@@ -1,4 +1,5 @@
1
1
  import * as f from './types/files';
2
+ import * as q from './types/queries';
2
3
  import * as m from './types/mutations';
3
4
  import * as a from './types/assistants';
4
5
  import * as t from './types';
@@ -52,6 +53,10 @@ export function updateConversation(
52
53
  return request.post(endpoints.updateConversation(), { arg: payload });
53
54
  }
54
55
 
56
+ export function genTitle(payload: m.TGenTitleRequest): Promise<m.TGenTitleResponse> {
57
+ return request.post(endpoints.genTitle(), payload);
58
+ }
59
+
55
60
  export function updateMessage(payload: t.TUpdateMessageRequest): Promise<unknown> {
56
61
  const { conversationId, messageId, text } = payload;
57
62
  if (!conversationId) {
@@ -209,3 +214,26 @@ export const deleteFiles = async (files: f.BatchFile[]): Promise<f.DeleteFilesRe
209
214
  request.deleteWithOptions(endpoints.files(), {
210
215
  data: { files },
211
216
  });
217
+
218
+ /* conversations */
219
+
220
+ export const listConversations = (
221
+ params?: q.ConversationListParams,
222
+ ): Promise<q.ConversationListResponse> => {
223
+ // Assuming params has a pageNumber property
224
+ const pageNumber = params?.pageNumber || '1'; // Default to page 1 if not provided
225
+ return request.get(endpoints.conversations(pageNumber));
226
+ };
227
+
228
+ export const listConversationsByQuery = (
229
+ params?: q.ConversationListParams & { searchQuery?: string },
230
+ ): Promise<q.ConversationListResponse> => {
231
+ const pageNumber = params?.pageNumber || '1'; // Default to page 1 if not provided
232
+ const searchQuery = params?.searchQuery || ''; // If no search query is provided, default to an empty string
233
+ // Update the endpoint to handle a search query
234
+ if (searchQuery !== '') {
235
+ return request.get(endpoints.search(searchQuery, pageNumber));
236
+ } else {
237
+ return request.get(endpoints.conversations(pageNumber));
238
+ }
239
+ };
package/src/index.ts CHANGED
@@ -5,6 +5,7 @@ export * from './parsers';
5
5
  /* types (exports schemas from `./types` as they contain needed in other defs) */
6
6
  export * from './types';
7
7
  export * from './types/assistants';
8
+ export * from './types/queries';
8
9
  export * from './types/files';
9
10
  export * from './types/mutations';
10
11
  /* query/mutation keys */
package/src/keys.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export enum QueryKeys {
2
2
  messages = 'messages',
3
3
  allConversations = 'allConversations',
4
+ searchConversations = 'searchConversations',
4
5
  conversation = 'conversation',
5
6
  searchEnabled = 'searchEnabled',
6
7
  user = 'user',
@@ -85,40 +85,6 @@ export const useGetConversationByIdQuery = (
85
85
  );
86
86
  };
87
87
 
88
- /* like above, but first try the convos query data */
89
- export const useGetConvoIdQuery = (
90
- id: string,
91
- config?: UseQueryOptions<s.TConversation>,
92
- ): QueryObserverResult<s.TConversation> => {
93
- const queryClient = useQueryClient();
94
- return useQuery<s.TConversation>(
95
- [QueryKeys.conversation, id],
96
- () => {
97
- const defaultQuery = () => dataService.getConversationById(id);
98
-
99
- const convosQueryKey = [QueryKeys.allConversations, { pageNumber: '1', active: true }];
100
- const convosQuery = queryClient.getQueryData<t.TGetConversationsResponse>(convosQueryKey);
101
-
102
- if (!convosQuery) {
103
- return defaultQuery();
104
- }
105
-
106
- const convo = convosQuery.conversations?.find((c) => c.conversationId === id);
107
- if (convo) {
108
- return convo;
109
- }
110
-
111
- return defaultQuery();
112
- },
113
- {
114
- refetchOnWindowFocus: false,
115
- refetchOnReconnect: false,
116
- refetchOnMount: false,
117
- ...config,
118
- },
119
- );
120
- };
121
-
122
88
  //This isn't ideal because its just a query and we're using mutation, but it was the only way
123
89
  //to make it work with how the Chat component is structured
124
90
  export const useGetConversationByIdMutation = (id: string): UseMutationResult<s.TConversation> => {
@@ -131,26 +97,6 @@ export const useGetConversationByIdMutation = (id: string): UseMutationResult<s.
131
97
  });
132
98
  };
133
99
 
134
- export const useUpdateConversationMutation = (
135
- id: string,
136
- ): UseMutationResult<
137
- t.TUpdateConversationResponse,
138
- unknown,
139
- t.TUpdateConversationRequest,
140
- unknown
141
- > => {
142
- const queryClient = useQueryClient();
143
- return useMutation(
144
- (payload: t.TUpdateConversationRequest) => dataService.updateConversation(payload),
145
- {
146
- onSuccess: () => {
147
- queryClient.invalidateQueries([QueryKeys.conversation, id]);
148
- queryClient.invalidateQueries([QueryKeys.allConversations]);
149
- },
150
- },
151
- );
152
- };
153
-
154
100
  export const useUpdateMessageMutation = (
155
101
  id: string,
156
102
  ): UseMutationResult<unknown, unknown, t.TUpdateMessageRequest, unknown> => {
@@ -176,26 +122,6 @@ export const useUpdateUserKeysMutation = (): UseMutationResult<
176
122
  });
177
123
  };
178
124
 
179
- export const useDeleteConversationMutation = (
180
- id?: string,
181
- ): UseMutationResult<
182
- t.TDeleteConversationResponse,
183
- unknown,
184
- t.TDeleteConversationRequest,
185
- unknown
186
- > => {
187
- const queryClient = useQueryClient();
188
- return useMutation(
189
- (payload: t.TDeleteConversationRequest) => dataService.deleteConversation(payload),
190
- {
191
- onSuccess: () => {
192
- queryClient.invalidateQueries([QueryKeys.conversation, id]);
193
- queryClient.invalidateQueries([QueryKeys.allConversations]);
194
- },
195
- },
196
- );
197
- };
198
-
199
125
  export const useClearConversationsMutation = (): UseMutationResult<unknown> => {
200
126
  const queryClient = useQueryClient();
201
127
  return useMutation(() => dataService.clearAllConversations(), {
@@ -228,7 +154,7 @@ export const useGetConversationsQuery = (
228
154
  config?: UseQueryOptions<t.TGetConversationsResponse>,
229
155
  ): QueryObserverResult<t.TGetConversationsResponse> => {
230
156
  return useQuery<t.TGetConversationsResponse>(
231
- [QueryKeys.allConversations, { pageNumber, active: true }],
157
+ [QueryKeys.allConversations],
232
158
  () => dataService.getConversations(pageNumber),
233
159
  {
234
160
  refetchOnReconnect: false,
@@ -1,5 +1,13 @@
1
1
  import { TPreset } from '../types';
2
2
 
3
+ export type TGenTitleRequest = {
4
+ conversationId: string;
5
+ };
6
+
7
+ export type TGenTitleResponse = {
8
+ title: string;
9
+ };
10
+
3
11
  export type PresetDeleteResponse = {
4
12
  acknowledged: boolean;
5
13
  deletedCount: number;
@@ -0,0 +1,34 @@
1
+ import type { InfiniteData } from '@tanstack/react-query';
2
+ import type { TMessage, TConversation } from '../schemas';
3
+ export type Conversation = {
4
+ id: string;
5
+ createdAt: number;
6
+ participants: string[];
7
+ lastMessage: string;
8
+ conversations: TConversation[];
9
+ };
10
+
11
+ // Parameters for listing conversations (e.g., for pagination)
12
+ export type ConversationListParams = {
13
+ limit?: number;
14
+ before?: string | null;
15
+ after?: string | null;
16
+ order?: 'asc' | 'desc';
17
+ pageNumber: string; // Add this line
18
+ conversationId?: string;
19
+ };
20
+
21
+ // Type for the response from the conversation list API
22
+ export type ConversationListResponse = {
23
+ conversations: TConversation[];
24
+ pageNumber: string;
25
+ pageSize: string | number;
26
+ pages: string | number;
27
+ messages: TMessage[];
28
+ };
29
+
30
+ export type ConversationData = InfiniteData<ConversationListResponse>;
31
+ export type ConversationUpdater = (
32
+ data: ConversationData,
33
+ conversation: TConversation,
34
+ ) => ConversationData;
package/src/types.ts CHANGED
@@ -47,6 +47,8 @@ export type TPluginAction = {
47
47
  auth?: unknown;
48
48
  };
49
49
 
50
+ export type GroupedConversations = [key: string, TConversation[]][];
51
+
50
52
  export type TUpdateUserPlugins = {
51
53
  pluginKey: string;
52
54
  action: string;
@@ -102,9 +104,7 @@ export type TUpdateConversationRequest = {
102
104
  title: string;
103
105
  };
104
106
 
105
- export type TUpdateConversationResponse = {
106
- data: TConversation;
107
- };
107
+ export type TUpdateConversationResponse = TConversation;
108
108
 
109
109
  export type TDeleteConversationRequest = {
110
110
  conversationId?: string;
@@ -189,13 +189,14 @@ export type TResetPassword = {
189
189
 
190
190
  export type TStartupConfig = {
191
191
  appTitle: string;
192
- googleLoginEnabled: boolean;
192
+ socialLogins?: string[];
193
+ discordLoginEnabled: boolean;
193
194
  facebookLoginEnabled: boolean;
194
- openidLoginEnabled: boolean;
195
195
  githubLoginEnabled: boolean;
196
+ googleLoginEnabled: boolean;
197
+ openidLoginEnabled: boolean;
196
198
  openidLabel: string;
197
199
  openidImageUrl: string;
198
- discordLoginEnabled: boolean;
199
200
  serverDomain: string;
200
201
  emailLoginEnabled: boolean;
201
202
  registrationEnabled: boolean;