pl-api: Add some newer Mastodon methods

Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
marcin mikołajczak 2024-10-28 00:10:25 +01:00
parent 72aa5c69d0
commit 822e7e2287
4 changed files with 65 additions and 17 deletions

View file

@ -169,6 +169,7 @@ import type {
GetTrendingLinks, GetTrendingLinks,
GetTrendingStatuses, GetTrendingStatuses,
GetTrendingTags, GetTrendingTags,
GetUnreadNotificationCountParams,
GroupTimelineParams, GroupTimelineParams,
HashtagTimelineParams, HashtagTimelineParams,
HomeTimelineParams, HomeTimelineParams,
@ -2524,13 +2525,30 @@ class PlApiClient {
return response.json as {}; return response.json as {};
}, },
/**
* Get the number of unread notification
* Get the (capped) number of unread notifications for the current user.
*
* Requires features{@link Features['notificationsGetUnreadCount']}.
* @see {@link https://docs.joinmastodon.org/methods/notifications/#unread-count}
*/
getUnreadNotificationCount: async (params?: GetUnreadNotificationCountParams) => {
const response = await this.request('/api/v1/notifications/unread_count', { params });
return v.parse(v.object({
count: v.number(),
}), response.json);
},
/** /**
* Get the filtering policy for notifications * Get the filtering policy for notifications
* Notifications filtering policy for the user. * Notifications filtering policy for the user.
*
* Requires features{@link Features['notificationsPolicy']}.
* @see {@link https://docs.joinmastodon.org/methods/notifications/#get-policy} * @see {@link https://docs.joinmastodon.org/methods/notifications/#get-policy}
*/ */
getNotificationPolicy: async () => { getNotificationPolicy: async () => {
const response = await this.request('/api/v1/notifications/policy'); const response = await this.request('/api/v2/notifications/policy');
return v.parse(notificationPolicySchema, response.json); return v.parse(notificationPolicySchema, response.json);
}, },
@ -2538,10 +2556,12 @@ class PlApiClient {
/** /**
* Update the filtering policy for notifications * Update the filtering policy for notifications
* Update the users notifications filtering policy. * Update the users notifications filtering policy.
*
* Requires features{@link Features['notificationsPolicy']}.
* @see {@link https://docs.joinmastodon.org/methods/notifications/#update-the-filtering-policy-for-notifications} * @see {@link https://docs.joinmastodon.org/methods/notifications/#update-the-filtering-policy-for-notifications}
*/ */
updateNotificationPolicy: async (params: UpdateNotificationPolicyRequest) => { updateNotificationPolicy: async (params: UpdateNotificationPolicyRequest) => {
const response = await this.request('/api/v1/notifications/policy', { method: 'POST', body: params }); const response = await this.request('/api/v2/notifications/policy', { method: 'PATCH', body: params });
return v.parse(notificationPolicySchema, response.json); return v.parse(notificationPolicySchema, response.json);
}, },

View file

@ -1,11 +1,14 @@
import * as v from 'valibot'; import * as v from 'valibot';
const notificationPolicyRuleSchema = v.picklist(['accept', 'filter', 'drop']);
/** @see {@link https://docs.joinmastodon.org/entities/NotificationPolicy} */ /** @see {@link https://docs.joinmastodon.org/entities/NotificationPolicy} */
const notificationPolicySchema = v.object({ const notificationPolicySchema = v.object({
filter_not_following: v.boolean(), for_not_following: notificationPolicyRuleSchema,
filter_not_followers: v.boolean(), for_not_followers: notificationPolicyRuleSchema,
filter_new_accounts: v.boolean(), for_new_accounts: notificationPolicyRuleSchema,
filter_private_mentions: v.boolean(), for_private_mentions: notificationPolicyRuleSchema,
for_limited_accounts: notificationPolicyRuleSchema,
summary: v.object({ summary: v.object({
pending_requests_count: v.pipe(v.number(), v.integer()), pending_requests_count: v.pipe(v.number(), v.integer()),
pending_notifications_count: v.pipe(v.number(), v.integer()), pending_notifications_count: v.pipe(v.number(), v.integer()),

View file

@ -833,6 +833,11 @@ const getFeatures = (instance: Instance) => {
*/ */
notificationsExcludeVisibilities: v.software === PLEROMA, notificationsExcludeVisibilities: v.software === PLEROMA,
/**
* @see GET /api/v1/notifications/unread_count
*/
notificationsGetUnreadCount: instance.api_versions.mastodon >= 1,
/** /**
* Allows specifying notification types to include, rather than to exclude. * Allows specifying notification types to include, rather than to exclude.
* @see GET /api/v1/notifications * @see GET /api/v1/notifications
@ -846,6 +851,12 @@ const getFeatures = (instance: Instance) => {
v.software === GOTOSOCIAL, v.software === GOTOSOCIAL,
]), ]),
/**
* @see GET /api/v2/notifications/policy
* @see PATCH /api/v2/notifications/policy
*/
notificationsPolicy: instance.api_versions.mastodon >= 1,
pleromaAdminAccounts: v.software === PLEROMA, pleromaAdminAccounts: v.software === PLEROMA,
/** /**

View file

@ -1,11 +1,11 @@
import type { PaginationParams } from './common'; import type { PaginationParams } from './common';
interface GetNotificationParams extends PaginationParams { interface GetNotificationParams extends PaginationParams {
/** Array of String. Types to include in the result. */ /** Types to include in the result. */
types?: string[]; types?: string[];
/** Array of String. Types to exclude from the results. */ /** Types to exclude from the results. */
exclude_types?: string[]; exclude_types?: string[];
/** String. Return only notifications received from the specified account. */ /** Return only notifications received from the specified account. */
account_id?: string; account_id?: string;
/** /**
* will exclude the notifications for activities with the given visibilities. The parameter accepts an array of visibility types (`public`, `unlisted`, `private`, `direct`). * will exclude the notifications for activities with the given visibilities. The parameter accepts an array of visibility types (`public`, `unlisted`, `private`, `direct`).
@ -14,21 +14,35 @@ interface GetNotificationParams extends PaginationParams {
exclude_visibilities?: string[]; exclude_visibilities?: string[];
} }
interface GetUnreadNotificationCountParams {
/** Maximum number of results to return. Defaults to 100 notifications. Max 1000 notifications. */
limit?: number;
/** Types of notifications that should count towards unread notifications. */
types?: string[];
/** Types of notifications that should not count towards unread notifications */
exclude_types?: string[];
/** Only count unread notifications received from the specified account. */
account_id?: string;
}
interface UpdateNotificationPolicyRequest { interface UpdateNotificationPolicyRequest {
/** Boolean. Whether to filter notifications from accounts the user is not following. */ /** Whether to `accept`, `filter` or `drop` notifications from accounts the user is not following. */
filter_not_following?: boolean; for_not_following?: boolean;
/** Boolean. Whether to filter notifications from accounts that are not following the user. */ /** Whether to `accept`, `filter` or `drop` notifications from accounts that are not following the user. */
filter_not_followers?: boolean; for_not_followers?: boolean;
/** Boolean. Whether to filter notifications from accounts created in the past 30 days. */ /** Whether to `accept`, `filter` or `drop` notifications from accounts created in the past 30 days. */
filter_new_accounts?: boolean; for_new_accounts?: boolean;
/** Boolean. Whether to filter notifications from private mentions. Replies to private mentions initiated by the user, as well as accounts the user follows, are never filtered. */ /** Whether to `accept`, `filter` or `drop` notifications from private mentions. drop will prevent creation of the notification object altogether (without preventing the underlying activity), */
filter_private_mentions?: boolean; for_private_mentions?: boolean;
/** Whether to `accept`, `filter` or `drop` notifications from accounts that were limited by a moderator. */
for_limited_accounts?: boolean;
} }
type GetNotificationRequestsParams = PaginationParams; type GetNotificationRequestsParams = PaginationParams;
export type { export type {
GetNotificationParams, GetNotificationParams,
GetUnreadNotificationCountParams,
UpdateNotificationPolicyRequest, UpdateNotificationPolicyRequest,
GetNotificationRequestsParams, GetNotificationRequestsParams,
}; };