masto
Version:
Mastodon API client for JavaScript, TypeScript, Node.js, browsers
103 lines (102 loc) • 6.7 kB
TypeScript
import { type Account } from "./account.js";
import { type AccountWarning } from "./account-warning.js";
import { type RelationshipSeveranceEvent } from "./relationship-severance-event.js";
import { type Report } from "./report.js";
import { type Status } from "./status.js";
export interface GroupedNotificationsResults {
/** Accounts referenced by grouped notifications. */
accounts: Account[];
/** Partial accounts referenced by grouped notifications. Those are only returned when requesting grouped notifications with `expand_accounts=partial_avatars`. */
partialAccounts?: PartialAccountWithAvatar[];
/** Statuses referenced by grouped notifications. */
statuses: Status[];
/** The grouped notifications themselves. */
notificationGroups: NotificationGroup[];
}
/** These are stripped-down versions of {@link Account} that only contain what is necessary to display a list of avatars, as well as a few other useful properties. The aim is to cut back on expensive server-side serialization and reduce the network payload size of notification groups. */
export type PartialAccountWithAvatar = Pick<Account, "id" | "acct" | "url" | "avatar" | "avatarStatic" | "locked" | "bot">;
interface BaseNotificationGroup<T> {
/** Group key identifying the grouped notifications. Should be treated as an opaque value. */
groupKey: string;
/** Total number of individual notifications that are part of this notification group. */
notificationsCount: number;
/** The type of event that resulted in the notifications in this group. */
type: T;
/** ID of the most recent notification in the group. */
mostRecentNotificationId: string;
/** ID of the oldest notification from this group represented within the current page. This is only returned when paginating through notification groups. Useful when polling new notifications. */
pageMinId?: string;
/** ID of the newest notification from this group represented within the current page. This is only returned when paginating through notification groups. Useful when polling new notifications. */
pageMaxId?: string;
/** Date at which the most recent notification from this group within the current page has been created. This is only returned when paginating through notification groups. */
latestPageNotificationAt?: string;
/** IDs of some of the accounts who most recently triggered notifications in this group. */
sampleAccountIds: string;
/** ID of the Status that was the object of the notification. Attached when type of the notification is favourite, reblog, status, mention, poll, or update. */
statusId?: undefined | null;
/** Report that was the object of the notification. Attached when type of the notification is admin.report. */
report?: undefined | null;
/** Summary of the event that caused follow relationships to be severed. Attached when type of the notification is severed_relationships. */
event?: undefined | null;
/** Moderation warning that caused the notification. Attached when type of the notification is moderation_warning. */
moderationWarning?: undefined | null;
}
type NotificationGroupPlain<T> = BaseNotificationGroup<T>;
type NotificationGroupWithStatusId<T> = BaseNotificationGroup<T> & {
/** ID of the Status that was the object of the notification. Attached when type of the notification is favourite, reblog, status, mention, poll, or update. */
statusId: string;
};
type NotificationGroupWithReport<T> = BaseNotificationGroup<T> & {
/** Report that was the object of the notification. Attached when type of the notification is admin.report. */
report: Report;
};
type NotificationGroupWithEvent<T> = BaseNotificationGroup<T> & {
/** Summary of the event that caused follow relationships to be severed. Attached when type of the notification is severed_relationships. */
event: RelationshipSeveranceEvent;
};
type NotificationGroupWithModerationWarning<T> = BaseNotificationGroup<T> & {
/** Moderation warning that caused the notification. Attached when type of the notification is moderation_warning. */
moderationWarning: AccountWarning;
};
/** Someone mentioned you in their status */
export type MentionNotificationGroup = NotificationGroupWithStatusId<"mention">;
/** Someone you enabled notifications for has posted a status */
export type StatusNotificationGroup = NotificationGroupWithStatusId<"status">;
/** Someone boosted one of your statuses */
export type ReblogNotificationGroup = NotificationGroupWithStatusId<"reblog">;
/** Someone followed you */
export type FollowNotificationGroup = NotificationGroupPlain<"follow">;
/** Someone requested to follow you */
export type FollowRequestNotificationGroup = NotificationGroupPlain<"follow_request">;
/** Someone favourited one of your statuses */
export type FavouriteNotificationGroup = NotificationGroupWithStatusId<"favourite">;
/** A poll you have voted in or created has ended */
export type PollNotificationGroup = NotificationGroupWithStatusId<"poll">;
/** A status you interacted with has been edited */
export type UpdateNotificationGroup = NotificationGroupWithStatusId<"update">;
/** Someone signed up (optionally sent to admins) */
export type AdminSignUpNotificationGroup = NotificationGroupPlain<"admin.sign_up">;
/** A new report has been filed */
export type AdminReportNotificationGroup = NotificationGroupWithReport<"admin.report">;
/** Some of your follow relationships have been severed as a result of a moderation or block event */
export type SeveredRelationshipsNotificationGroup = NotificationGroupWithEvent<"severed_relationships">;
/** A moderator has taken action against your account or has sent you a warning */
export type ModerationWarningNotificationGroup = NotificationGroupWithModerationWarning<"moderation_warning">;
export interface NotificationGroupRegistry {
mention: MentionNotificationGroup;
status: StatusNotificationGroup;
reblog: ReblogNotificationGroup;
follow: FollowNotificationGroup;
follow_request: FollowRequestNotificationGroup;
favourite: FavouriteNotificationGroup;
poll: PollNotificationGroup;
update: UpdateNotificationGroup;
"admin.sign_up": AdminSignUpNotificationGroup;
"admin.report": AdminReportNotificationGroup;
severed_relationships: SeveredRelationshipsNotificationGroup;
moderation_warning: ModerationWarningNotificationGroup;
}
/** Group key identifying the grouped notifications. Should be treated as an opaque value. */
export type NotificationGroup = NotificationGroupRegistry[keyof NotificationGroupRegistry];
export type NotificationGroupType = NotificationGroup["type"];
export {};