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

337 lines
8.6 KiB
TypeScript

import * as v from 'valibot';
import { accountSchema, antennaSchema } from '../entities';
import { filteredArray } from '../entities/utils';
import type { PlApiBaseClient } from '../client-base';
import type { CreateAntennaParams, UpdateAntennaParams } from '../params/antennas';
type EmptyObject = Record<string, never>;
const antennas = (client: PlApiBaseClient) => ({
/**
* Requires features{@link Features.antennas}.
*/
fetchAntennas: async () => {
const response = await client.request('/api/v1/antennas');
return v.parse(filteredArray(antennaSchema), response.json);
},
/**
* Requires features{@link Features.antennas}.
*/
getAntennas: async (antennaId: string) => {
const response = await client.request(`/api/v1/antennas/${antennaId}`);
return v.parse(antennaSchema, response.json);
},
/**
* Requires features{@link Features.antennas}.
*/
createAntenna: async (params: CreateAntennaParams) => {
const response = await client.request('/api/v1/antennas', { method: 'POST', body: params });
return v.parse(antennaSchema, response.json);
},
/**
* Requires features{@link Features.antennas}.
*/
updateAntenna: async (antennaId: string, params: UpdateAntennaParams) => {
const response = await client.request(`/api/v1/antennas/${antennaId}`, {
method: 'PUT',
body: params,
});
return v.parse(antennaSchema, response.json);
},
/**
* Requires features{@link Features.antennas}.
*/
deleteAntenna: async (antennaId: string) => {
const response = await client.request<EmptyObject>(`/api/v1/antennas/${antennaId}`, {
method: 'DELETE',
});
return response.json;
},
/**
* Requires features{@link Features.antennas}.
*/
getAntennaAccounts: (antennaId: string) =>
client.paginatedGet(`/api/v1/antennas/${antennaId}/accounts`, {}, accountSchema),
/**
* Requires features{@link Features.antennas}.
*/
addAntennaAccounts: async (antennaId: string, accountIds: Array<string>) => {
const response = await client.request<EmptyObject>(`/api/v1/antennas/${antennaId}/accounts`, {
method: 'POST',
body: { account_ids: accountIds },
});
return response.json;
},
/**
* Requires features{@link Features.antennas}.
*/
removeAntennaAccounts: async (antennaId: string, accountIds: Array<string>) => {
const response = await client.request<EmptyObject>(`/api/v1/antennas/${antennaId}/accounts`, {
method: 'DELETE',
body: { account_ids: accountIds },
});
return response.json;
},
/**
* Requires features{@link Features.antennas}.
*/
getAntennaExcludedAccounts: (antennaId: string) =>
client.paginatedGet(`/api/v1/antennas/${antennaId}/exclude_accounts`, {}, accountSchema),
/**
* Requires features{@link Features.antennas}.
*/
addAntennaExcludedAccounts: async (antennaId: string, accountIds: Array<string>) => {
const response = await client.request<EmptyObject>(
`/api/v1/antennas/${antennaId}/exclude_accounts`,
{
method: 'POST',
body: { account_ids: accountIds },
},
);
return response.json;
},
/**
* Requires features{@link Features.antennas}.
*/
removeAntennaExcludedAccounts: async (antennaId: string, accountIds: Array<string>) => {
const response = await client.request<EmptyObject>(
`/api/v1/antennas/${antennaId}/exclude_accounts`,
{
method: 'DELETE',
body: { account_ids: accountIds },
},
);
return response.json;
},
/**
* Requires features{@link Features.antennas}.
*/
getAntennaDomains: async (antennaId: string) => {
const response = await client.request(`/api/v1/antennas/${antennaId}/domains`);
return v.parse(
v.object({
domains: filteredArray(v.string()),
exclude_domains: filteredArray(v.string()),
}),
response.json,
);
},
/**
* Requires features{@link Features.antennas}.
*/
addAntennaDomains: async (antennaId: string, domains: Array<string>) => {
const response = await client.request<EmptyObject>(`/api/v1/antennas/${antennaId}/domains`, {
method: 'POST',
body: { domains },
});
return response.json;
},
/**
* Requires features{@link Features.antennas}.
*/
removeAntennaDomains: async (antennaId: string, domains: Array<string>) => {
const response = await client.request<EmptyObject>(`/api/v1/antennas/${antennaId}/domains`, {
method: 'DELETE',
body: { domains },
});
return response.json;
},
/**
* Requires features{@link Features.antennas}.
*/
addAntennaExcludedDomains: async (antennaId: string, domains: Array<string>) => {
const response = await client.request<EmptyObject>(
`/api/v1/antennas/${antennaId}/exclude_domains`,
{
method: 'POST',
body: { domains },
},
);
return response.json;
},
/**
* Requires features{@link Features.antennas}.
*/
removeAntennaExcludedDomains: async (antennaId: string, domains: Array<string>) => {
const response = await client.request<EmptyObject>(
`/api/v1/antennas/${antennaId}/exclude_domains`,
{
method: 'DELETE',
body: { domains },
},
);
return response.json;
},
/**
* Requires features{@link Features.antennas}.
*/
getAntennaKeywords: async (antennaId: string) => {
const response = await client.request(`/api/v1/antennas/${antennaId}/keywords`);
return v.parse(
v.object({
keywords: filteredArray(v.string()),
exclude_keywords: filteredArray(v.string()),
}),
response.json,
);
},
/**
* Requires features{@link Features.antennas}.
*/
addAntennaKeywords: async (antennaId: string, keywords: Array<string>) => {
const response = await client.request<EmptyObject>(`/api/v1/antennas/${antennaId}/keywords`, {
method: 'POST',
body: { keywords },
});
return response.json;
},
/**
* Requires features{@link Features.antennas}.
*/
removeAntennaKeywords: async (antennaId: string, keywords: Array<string>) => {
const response = await client.request<EmptyObject>(`/api/v1/antennas/${antennaId}/keywords`, {
method: 'DELETE',
body: { keywords },
});
return response.json;
},
/**
* Requires features{@link Features.antennas}.
*/
addAntennaExcludedKeywords: async (antennaId: string, keywords: Array<string>) => {
const response = await client.request<EmptyObject>(
`/api/v1/antennas/${antennaId}/exclude_keywords`,
{
method: 'POST',
body: { keywords },
},
);
return response.json;
},
/**
* Requires features{@link Features.antennas}.
*/
removeAntennaExcludedKeywords: async (antennaId: string, keywords: Array<string>) => {
const response = await client.request<EmptyObject>(
`/api/v1/antennas/${antennaId}/exclude_keywords`,
{
method: 'DELETE',
body: { keywords },
},
);
return response.json;
},
/**
* Requires features{@link Features.antennas}.
*/
getAntennaTags: async (antennaId: string) => {
const response = await client.request(`/api/v1/antennas/${antennaId}/tags`);
return v.parse(
v.object({
tags: filteredArray(v.string()),
exclude_tags: filteredArray(v.string()),
}),
response.json,
);
},
/**
* Requires features{@link Features.antennas}.
*/
addAntennaTags: async (antennaId: string, tags: Array<string>) => {
const response = await client.request<EmptyObject>(`/api/v1/antennas/${antennaId}/tags`, {
method: 'POST',
body: { tags },
});
return response.json;
},
/**
* Requires features{@link Features.antennas}.
*/
removeAntennaTags: async (antennaId: string, tags: Array<string>) => {
const response = await client.request<EmptyObject>(`/api/v1/antennas/${antennaId}/tags`, {
method: 'DELETE',
body: { tags },
});
return response.json;
},
/**
* Requires features{@link Features.antennas}.
*/
addAntennaExcludedTags: async (antennaId: string, tags: Array<string>) => {
const response = await client.request<EmptyObject>(
`/api/v1/antennas/${antennaId}/exclude_tags`,
{
method: 'POST',
body: { tags },
},
);
return response.json;
},
/**
* Requires features{@link Features.antennas}.
*/
removeAntennaExcludedTags: async (antennaId: string, tags: Array<string>) => {
const response = await client.request<EmptyObject>(
`/api/v1/antennas/${antennaId}/exclude_tags`,
{
method: 'DELETE',
body: { tags },
},
);
return response.json;
},
});
export { antennas };