Files
ncd-fe/packages/pl-api/lib/client/chats.ts
nicole mikołajczyk d5d453e645 pl-api: allow importing parts of the client
Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>
2026-02-23 10:39:26 +01:00

118 lines
3.9 KiB
TypeScript

import * as v from 'valibot';
import { chatMessageSchema, chatSchema } from '../entities';
import type { PlApiBaseClient } from '../client-base';
import type {
CreateChatMessageParams,
GetChatMessagesParams,
GetChatsParams,
} from '../params/chats';
/** @see {@link https://docs.pleroma.social/backend/development/API/chats} */
const chats = (client: PlApiBaseClient) => ({
/**
* create or get an existing Chat for a certain recipient
* @see {@link https://docs.pleroma.social/backend/development/API/chats/#creating-or-getting-a-chat}
*/
createChat: async (accountId: string) => {
const response = await client.request(`/api/v1/pleroma/chats/by-account-id/${accountId}`, {
method: 'POST',
});
return v.parse(chatSchema, response.json);
},
/**
* @see {@link https://docs.pleroma.social/backend/development/API/chats/#creating-or-getting-a-chat}
*/
getChat: async (chatId: string) => {
const response = await client.request(`/api/v1/pleroma/chats/${chatId}`);
return v.parse(chatSchema, response.json);
},
/**
* Marking a chat as read
* mark a number of messages in a chat up to a certain message as read
* @see {@link https://docs.pleroma.social/backend/development/API/chats/#marking-a-chat-as-read}
*/
markChatAsRead: async (chatId: string, last_read_id: string) => {
const response = await client.request(`/api/v1/pleroma/chats/${chatId}/read`, {
method: 'POST',
body: { last_read_id },
});
return v.parse(chatSchema, response.json);
},
/**
* Marking a single chat message as read
* To set the `unread` property of a message to `false`
* https://docs.pleroma.social/backend/development/API/chats/#marking-a-single-chat-message-as-read
*/
markChatMessageAsRead: async (chatId: string, chatMessageId: string) => {
const response = await client.request(
`/api/v1/pleroma/chats/${chatId}/messages/${chatMessageId}/read`,
{ method: 'POST' },
);
return v.parse(chatSchema, response.json);
},
/**
* Getting a list of Chats
* This will return a list of chats that you have been involved in, sorted by their last update (so new chats will be at the top).
* @see {@link https://docs.pleroma.social/backend/development/API/chats/#getting-a-list-of-chats}
*/
getChats: (params?: GetChatsParams) =>
client.paginatedGet('/api/v2/pleroma/chats', { params }, chatSchema),
/**
* Getting the messages for a Chat
* For a given Chat id, you can get the associated messages with
*/
getChatMessages: (chatId: string, params?: GetChatMessagesParams) =>
client.paginatedGet(`/api/v1/pleroma/chats/${chatId}/messages`, { params }, chatMessageSchema),
/**
* Posting a chat message
* Posting a chat message for given Chat id works like this:
* @see {@link https://docs.pleroma.social/backend/development/API/chats/#posting-a-chat-message}
*/
createChatMessage: async (chatId: string, params: CreateChatMessageParams) => {
const response = await client.request(`/api/v1/pleroma/chats/${chatId}/messages`, {
method: 'POST',
body: params,
});
return v.parse(chatMessageSchema, response.json);
},
/**
* Deleting a chat message
* Deleting a chat message for given Chat id works like this:
* @see {@link https://docs.pleroma.social/backend/development/API/chats/#deleting-a-chat-message}
*/
deleteChatMessage: async (chatId: string, messageId: string) => {
const response = await client.request(`/api/v1/pleroma/chats/${chatId}/messages/${messageId}`, {
method: 'DELETE',
});
return v.parse(chatMessageSchema, response.json);
},
/**
* Deleting a chat
*
* Requires features{@link Features.chatsDelete}.
*/
deleteChat: async (chatId: string) => {
const response = await client.request(`/api/v1/pleroma/chats/${chatId}`, { method: 'DELETE' });
return v.parse(chatSchema, response.json);
},
});
export { chats };