56 lines
1.8 KiB
TypeScript
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 };
|