Files
ncd-fe/packages/pl-api/lib/client/circles.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

101 lines
2.9 KiB
TypeScript

import * as v from 'valibot';
import { accountSchema, circleSchema, statusSchema } from '@/entities';
import { filteredArray } from '@/entities/utils';
import type { PlApiBaseClient } from '@/client-base';
import type { GetCircleAccountsParams, GetCircleStatusesParams } from '@/params/circles';
import type { EmptyObject } from '@/utils/types';
const circles = (client: PlApiBaseClient) => ({
/**
* Requires features{@link Features.circles}.
*/
fetchCircles: async () => {
const response = await client.request('/api/v1/circles');
return v.parse(filteredArray(circleSchema), response.json);
},
/**
* Requires features{@link Features.circles}.
*/
getCircle: async (circleId: string) => {
const response = await client.request(`/api/v1/circles/${circleId}`);
return v.parse(circleSchema, response.json);
},
/**
* Requires features{@link Features.circles}.
*/
createCircle: async (title: string) => {
const response = await client.request('/api/v1/circles', { method: 'POST', body: { title } });
return v.parse(circleSchema, response.json);
},
/**
* Requires features{@link Features.circles}.
*/
updateCircle: async (circleId: string, title: string) => {
const response = await client.request(`/api/v1/circles/${circleId}`, {
method: 'PUT',
body: { title },
});
return v.parse(circleSchema, response.json);
},
/**
* Requires features{@link Features.circles}.
*/
deleteCircle: async (circleId: string) => {
const response = await client.request<EmptyObject>(`/api/v1/circles/${circleId}`, {
method: 'DELETE',
});
return response.json;
},
/**
* View accounts in a circle
* Requires features{@link Features.circles}.
*/
getCircleAccounts: (circleId: string, params?: GetCircleAccountsParams) =>
client.paginatedGet(`/api/v1/circles/${circleId}/accounts`, { params }, accountSchema),
/**
* Add accounts to a circle
* Add accounts to the given circle. Note that the user must be following these accounts.
* Requires features{@link Features.circles}.
*/
addCircleAccounts: async (circleId: string, accountIds: string[]) => {
const response = await client.request<EmptyObject>(`/api/v1/circles/${circleId}/accounts`, {
method: 'POST',
body: { account_ids: accountIds },
});
return response.json;
},
/**
* Remove accounts from circle
* Remove accounts from the given circle.
* Requires features{@link Features.circles}.
*/
deleteCircleAccounts: async (circleId: string, accountIds: string[]) => {
const response = await client.request<EmptyObject>(`/api/v1/circles/${circleId}/accounts`, {
method: 'DELETE',
body: { account_ids: accountIds },
});
return response.json;
},
getCircleStatuses: (circleId: string, params: GetCircleStatusesParams) =>
client.paginatedGet(`/api/v1/circles/${circleId}/statuses`, { params }, statusSchema),
});
export { circles };