Add API types for status and related objects (#29792)
This commit is contained in:
parent
07635228e2
commit
e47a3d00fe
7 changed files with 143 additions and 1 deletions
22
app/javascript/mastodon/api_types/media_attachments.ts
Normal file
22
app/javascript/mastodon/api_types/media_attachments.ts
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
// See app/serializers/rest/media_attachment_serializer.rb
|
||||||
|
|
||||||
|
export type MediaAttachmentType =
|
||||||
|
| 'image'
|
||||||
|
| 'gifv'
|
||||||
|
| 'video'
|
||||||
|
| 'unknown'
|
||||||
|
| 'audio';
|
||||||
|
|
||||||
|
export interface ApiMediaAttachmentJSON {
|
||||||
|
id: string;
|
||||||
|
type: MediaAttachmentType;
|
||||||
|
url: string;
|
||||||
|
preview_url: string;
|
||||||
|
remoteUrl: string;
|
||||||
|
preview_remote_url: string;
|
||||||
|
text_url: string;
|
||||||
|
// TODO: how to define this?
|
||||||
|
meta: unknown;
|
||||||
|
description?: string;
|
||||||
|
blurhash: string;
|
||||||
|
}
|
23
app/javascript/mastodon/api_types/polls.ts
Normal file
23
app/javascript/mastodon/api_types/polls.ts
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
import type { ApiCustomEmojiJSON } from './custom_emoji';
|
||||||
|
|
||||||
|
// See app/serializers/rest/poll_serializer.rb
|
||||||
|
|
||||||
|
export interface ApiPollOptionJSON {
|
||||||
|
title: string;
|
||||||
|
votes_count: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ApiPollJSON {
|
||||||
|
id: string;
|
||||||
|
expires_at: string;
|
||||||
|
expired: boolean;
|
||||||
|
multiple: boolean;
|
||||||
|
votes_count: number;
|
||||||
|
voters_count: number;
|
||||||
|
|
||||||
|
options: ApiPollOptionJSON[];
|
||||||
|
emojis: ApiCustomEmojiJSON[];
|
||||||
|
|
||||||
|
voted: boolean;
|
||||||
|
own_votes: number[];
|
||||||
|
}
|
91
app/javascript/mastodon/api_types/statuses.ts
Normal file
91
app/javascript/mastodon/api_types/statuses.ts
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
// See app/serializers/rest/status_serializer.rb
|
||||||
|
|
||||||
|
import type { ApiAccountJSON } from './accounts';
|
||||||
|
import type { ApiCustomEmojiJSON } from './custom_emoji';
|
||||||
|
import type { ApiMediaAttachmentJSON } from './media_attachments';
|
||||||
|
import type { ApiPollJSON } from './polls';
|
||||||
|
|
||||||
|
// See app/modals/status.rb
|
||||||
|
export type StatusVisibility =
|
||||||
|
| 'public'
|
||||||
|
| 'unlisted'
|
||||||
|
| 'private'
|
||||||
|
// | 'limited' // This is never exposed to the API (they become `private`)
|
||||||
|
| 'direct';
|
||||||
|
|
||||||
|
export interface ApiStatusApplicationJSON {
|
||||||
|
name: string;
|
||||||
|
website: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ApiTagJSON {
|
||||||
|
name: string;
|
||||||
|
url: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ApiMentionJSON {
|
||||||
|
id: string;
|
||||||
|
username: string;
|
||||||
|
url: string;
|
||||||
|
acct: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ApiPreviewCardJSON {
|
||||||
|
url: string;
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
language: string;
|
||||||
|
type: string;
|
||||||
|
author_name: string;
|
||||||
|
author_url: string;
|
||||||
|
provider_name: string;
|
||||||
|
provider_url: string;
|
||||||
|
html: string;
|
||||||
|
width: number;
|
||||||
|
height: number;
|
||||||
|
image: string;
|
||||||
|
image_description: string;
|
||||||
|
embed_url: string;
|
||||||
|
blurhash: string;
|
||||||
|
published_at: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ApiStatusJSON {
|
||||||
|
id: string;
|
||||||
|
created_at: string;
|
||||||
|
in_reply_to_id?: string;
|
||||||
|
in_reply_to_account_id?: string;
|
||||||
|
sensitive: boolean;
|
||||||
|
spoiler_text?: string;
|
||||||
|
visibility: StatusVisibility;
|
||||||
|
language: string;
|
||||||
|
uri: string;
|
||||||
|
url: string;
|
||||||
|
replies_count: number;
|
||||||
|
reblogs_count: number;
|
||||||
|
favorites_count: number;
|
||||||
|
edited_at?: string;
|
||||||
|
|
||||||
|
favorited?: boolean;
|
||||||
|
reblogged?: boolean;
|
||||||
|
muted?: boolean;
|
||||||
|
bookmarked?: boolean;
|
||||||
|
pinned?: boolean;
|
||||||
|
|
||||||
|
// filtered: FilterResult[]
|
||||||
|
filtered: unknown; // TODO
|
||||||
|
content?: string;
|
||||||
|
text?: string;
|
||||||
|
|
||||||
|
reblog?: ApiStatusJSON;
|
||||||
|
application?: ApiStatusApplicationJSON;
|
||||||
|
account: ApiAccountJSON;
|
||||||
|
media_attachments: ApiMediaAttachmentJSON[];
|
||||||
|
mentions: ApiMentionJSON[];
|
||||||
|
|
||||||
|
tags: ApiTagJSON[];
|
||||||
|
emojis: ApiCustomEmojiJSON[];
|
||||||
|
|
||||||
|
card?: ApiPreviewCardJSON;
|
||||||
|
poll?: ApiPollJSON;
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
export type StatusVisibility = 'public' | 'unlisted' | 'private' | 'direct';
|
export type { StatusVisibility } from 'mastodon/api_types/statuses';
|
||||||
|
|
||||||
// Temporary until we type it correctly
|
// Temporary until we type it correctly
|
||||||
export type Status = Immutable.Map<string, unknown>;
|
export type Status = Immutable.Map<string, unknown>;
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
class REST::MediaAttachmentSerializer < ActiveModel::Serializer
|
class REST::MediaAttachmentSerializer < ActiveModel::Serializer
|
||||||
include RoutingHelper
|
include RoutingHelper
|
||||||
|
|
||||||
|
# Please update `app/javascript/mastodon/api_types/media_attachments.ts` when making changes to the attributes
|
||||||
|
|
||||||
attributes :id, :type, :url, :preview_url,
|
attributes :id, :type, :url, :preview_url,
|
||||||
:remote_url, :preview_remote_url, :text_url, :meta,
|
:remote_url, :preview_remote_url, :text_url, :meta,
|
||||||
:description, :blurhash
|
:description, :blurhash
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class REST::PollSerializer < ActiveModel::Serializer
|
class REST::PollSerializer < ActiveModel::Serializer
|
||||||
|
# Please update `app/javascript/mastodon/api_types/polls.ts` when making changes to the attributes
|
||||||
|
|
||||||
attributes :id, :expires_at, :expired,
|
attributes :id, :expires_at, :expired,
|
||||||
:multiple, :votes_count, :voters_count
|
:multiple, :votes_count, :voters_count
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
class REST::StatusSerializer < ActiveModel::Serializer
|
class REST::StatusSerializer < ActiveModel::Serializer
|
||||||
include FormattingHelper
|
include FormattingHelper
|
||||||
|
|
||||||
|
# Please update `app/javascript/mastodon/api_types/statuses.ts` when making changes to the attributes
|
||||||
|
|
||||||
attributes :id, :created_at, :in_reply_to_id, :in_reply_to_account_id,
|
attributes :id, :created_at, :in_reply_to_id, :in_reply_to_account_id,
|
||||||
:sensitive, :spoiler_text, :visibility, :language,
|
:sensitive, :spoiler_text, :visibility, :language,
|
||||||
:uri, :url, :replies_count, :reblogs_count,
|
:uri, :url, :replies_count, :reblogs_count,
|
||||||
|
|
Loading…
Reference in a new issue