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

56 lines
1.8 KiB
TypeScript

import * as v from 'valibot';
import { statusSchema, tagSchema, trendsLinkSchema } from '../entities';
import { filteredArray } from '../entities/utils';
import { PIXELFED } from '../features';
import type { PlApiBaseClient } from '../client-base';
import type { GetTrendingLinks, GetTrendingStatuses, GetTrendingTags } from '../params/trends';
const trends = (client: PlApiBaseClient) => ({
/**
* View trending tags
* Tags that are being used more frequently within the past week.
* @see {@link https://docs.joinmastodon.org/methods/trends/#tags}
*/
getTrendingTags: async (params?: GetTrendingTags) => {
const response = await client.request(
client.features.version.software === PIXELFED
? '/api/v1.1/discover/posts/hashtags'
: '/api/v1/trends/tags',
{ params },
);
return v.parse(filteredArray(tagSchema), response.json);
},
/**
* View trending statuses
* Statuses that have been interacted with more than others.
* @see {@link https://docs.joinmastodon.org/methods/trends/#statuses}
*/
getTrendingStatuses: async (params?: GetTrendingStatuses) => {
const response = await client.request(
client.features.version.software === PIXELFED
? '/api/pixelfed/v2/discover/posts/trending'
: '/api/v1/trends/statuses',
{ params },
);
return v.parse(filteredArray(statusSchema), response.json);
},
/**
* View trending links
* Links that have been shared more than others.
* @see {@link https://docs.joinmastodon.org/methods/trends/#links}
*/
getTrendingLinks: async (params?: GetTrendingLinks) => {
const response = await client.request('/api/v1/trends/links', { params });
return v.parse(filteredArray(trendsLinkSchema), response.json);
},
});
export { trends };