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
 | 
			
		||||
export type Status = Immutable.Map<string, unknown>;
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,8 @@
 | 
			
		||||
class REST::MediaAttachmentSerializer < ActiveModel::Serializer
 | 
			
		||||
  include RoutingHelper
 | 
			
		||||
 | 
			
		||||
  # Please update `app/javascript/mastodon/api_types/media_attachments.ts` when making changes to the attributes
 | 
			
		||||
 | 
			
		||||
  attributes :id, :type, :url, :preview_url,
 | 
			
		||||
             :remote_url, :preview_remote_url, :text_url, :meta,
 | 
			
		||||
             :description, :blurhash
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,8 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
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,
 | 
			
		||||
             :multiple, :votes_count, :voters_count
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,8 @@
 | 
			
		||||
class REST::StatusSerializer < ActiveModel::Serializer
 | 
			
		||||
  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,
 | 
			
		||||
             :sensitive, :spoiler_text, :visibility, :language,
 | 
			
		||||
             :uri, :url, :replies_count, :reblogs_count,
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user