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