Add API types for status and related objects (#29792)
This commit is contained in:
		
							parent
							
								
									07635228e2
								
							
						
					
					
						commit
						e47a3d00fe
					
				
							
								
								
									
										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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user