Files
ncd-fe/packages/pl-api/lib/client/lists.ts
nicole mikołajczyk a4dd5e0358 pl-api: reimport TypeObject, need to eep
Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>
2026-02-27 02:32:38 +01:00

131 lines
3.8 KiB
TypeScript

import * as v from 'valibot';
import { accountSchema, listSchema } from '@/entities';
import { filteredArray } from '@/entities/utils';
import type { PlApiBaseClient } from '@/client-base';
import type { CreateListParams, GetListAccountsParams, UpdateListParams } from '@/params/lists';
import type { EmptyObject } from '@/utils/types';
const lists = (client: PlApiBaseClient) => ({
/**
* View your lists
* Fetch all lists that the user owns.
* @see {@link https://docs.joinmastodon.org/methods/lists/#get}
*/
getLists: async () => {
const response = await client.request('/api/v1/lists');
return v.parse(filteredArray(listSchema), response.json);
},
/**
* Show a single list
* Fetch the list with the given ID. Used for verifying the title of a list, and which replies to show within that list.
* @see {@link https://docs.joinmastodon.org/methods/lists/#get-one}
*/
getList: async (listId: string) => {
const response = await client.request(`/api/v1/lists/${listId}`);
return v.parse(listSchema, response.json);
},
/**
* Create a list
* Create a new list.
* @see {@link https://docs.joinmastodon.org/methods/lists/#create}
*/
createList: async (params: CreateListParams) => {
const response = await client.request('/api/v1/lists', { method: 'POST', body: params });
return v.parse(listSchema, response.json);
},
/**
* Update a list
* Change the title of a list, or which replies to show.
* @see {@link https://docs.joinmastodon.org/methods/lists/#update}
*/
updateList: async (listId: string, params: UpdateListParams) => {
const response = await client.request(`/api/v1/lists/${listId}`, {
method: 'PUT',
body: params,
});
return v.parse(listSchema, response.json);
},
/**
* Delete a list
* @see {@link https://docs.joinmastodon.org/methods/lists/#delete}
*/
deleteList: async (listId: string) => {
const response = await client.request<EmptyObject>(`/api/v1/lists/${listId}`, {
method: 'DELETE',
});
return response.json;
},
/**
* View accounts in a list
* @see {@link https://docs.joinmastodon.org/methods/lists/#accounts}
*/
getListAccounts: (listId: string, params?: GetListAccountsParams) =>
client.paginatedGet(`/api/v1/lists/${listId}/accounts`, { params }, accountSchema),
/**
* Add accounts to a list
* Add accounts to the given list. Note that the user must be following these accounts.
* @see {@link https://docs.joinmastodon.org/methods/lists/#accounts-add}
*/
addListAccounts: async (listId: string, accountIds: string[]) => {
const response = await client.request<EmptyObject>(`/api/v1/lists/${listId}/accounts`, {
method: 'POST',
body: { account_ids: accountIds },
});
return response.json;
},
/**
* Remove accounts from list
* Remove accounts from the given list.
* @see {@link https://docs.joinmastodon.org/methods/lists/#accounts-remove}
*/
deleteListAccounts: async (listId: string, accountIds: string[]) => {
const response = await client.request<EmptyObject>(`/api/v1/lists/${listId}/accounts`, {
method: 'DELETE',
body: { account_ids: accountIds },
});
return response.json;
},
/**
* Add a list to favourites
*
* Requires features{@link Features.listsFavourite}.
*/
favouriteList: async (listId: string) => {
const response = await client.request(`/api/v1/lists/${listId}/favourite`, { method: 'POST' });
return v.parse(listSchema, response.json);
},
/**
* Remove a list from favourites
*
* Requires features{@link Features.listsFavourite}.
*/
unfavouriteList: async (listId: string) => {
const response = await client.request(`/api/v1/lists/${listId}/unfavourite`, {
method: 'POST',
});
return v.parse(listSchema, response.json);
},
});
export { lists };