refactor: APIエンドポイントファイルの定義を良い感じにする (#8154)
* Fix API Schema Error * Delete SimpleSchema/SimpleObj and Move schemas to dedicated files * Userのスキーマを分割してみる * define packMany type * add , * Ensure enum schema and Make "as const" put once * test? * Revert "test?" This reverts commit 97dc9bfa70851bfb7d1cf38e883f8df20fb78b79. * Revert "Fix API Schema Error" This reverts commit 21b6176d974ed8e3eb73723ad21a105c5d297323. * ✌️ * clean up * test? * wip * wip * better schema def * ✌️ * fix * add minLength property * wip * wip * wip * anyOf/oneOf/allOfに対応? ~ relation.ts * refactor! * Define MinimumSchema * wip * wip * anyOf/oneOf/allOfが動作するようにUnionSchemaTypeを修正 * anyOf/oneOf/allOfが動作するようにUnionSchemaTypeを修正 * Update packages/backend/src/misc/schema.ts Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com> * fix * array oneOfをより正確な型に * array oneOfをより正確な型に * wip * ✌️ * なんかもういろいろ * remove * very good schema * api schema * wip * refactor: awaitAllの型定義を変えてみる * fix * specify types in awaitAll * specify types in awaitAll * ✌️ * wip * ... * ✌️ * AllowDateはやめておく * 不必要なoptional: false, nullable: falseを廃止 * Packedが展開されないように * 続packed * wip * define note type * wip * UserDetailedをMeDetailedかUserDetailedNotMeかを区別できるように * wip * wip * wip specify user type of other schemas * ok * convertSchemaToOpenApiSchemaを改修 * convertSchemaToOpenApiSchemaを改修 * Fix * fix * ✌️ * wip * 分割代入ではなくallOfで定義するように Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
This commit is contained in:
		
							parent
							
								
									a8fad1b61c
								
							
						
					
					
						commit
						efb0ffc4ec
					
				
					 358 changed files with 3623 additions and 3417 deletions
				
			
		
							
								
								
									
										89
									
								
								packages/backend/src/models/schema/antenna.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								packages/backend/src/models/schema/antenna.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,89 @@
 | 
			
		|||
export const packedAntennaSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		name: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		keywords: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'array',
 | 
			
		||||
				optional: false, nullable: false,
 | 
			
		||||
				items: {
 | 
			
		||||
					type: 'string',
 | 
			
		||||
					optional: false, nullable: false,
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		excludeKeywords: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'array',
 | 
			
		||||
				optional: false, nullable: false,
 | 
			
		||||
				items: {
 | 
			
		||||
					type: 'string',
 | 
			
		||||
					optional: false, nullable: false,
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		src: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			enum: ['home', 'all', 'users', 'list', 'group'],
 | 
			
		||||
		},
 | 
			
		||||
		userListId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		userGroupId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		users: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'string',
 | 
			
		||||
				optional: false, nullable: false,
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		caseSensitive: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			default: false,
 | 
			
		||||
		},
 | 
			
		||||
		notify: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		withReplies: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			default: false,
 | 
			
		||||
		},
 | 
			
		||||
		withFile: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		hasUnreadNote: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			default: false,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										33
									
								
								packages/backend/src/models/schema/app.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								packages/backend/src/models/schema/app.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
export const packedAppSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		name: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		callbackUrl: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		permission: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'string',
 | 
			
		||||
				optional: false, nullable: false,
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		secret: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		isAuthorized: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										26
									
								
								packages/backend/src/models/schema/blocking.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								packages/backend/src/models/schema/blocking.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
export const packedBlockingSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		blockeeId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		blockee: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			ref: 'UserDetailed',
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										51
									
								
								packages/backend/src/models/schema/channel.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								packages/backend/src/models/schema/channel.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,51 @@
 | 
			
		|||
export const packedChannelSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		lastNotedAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		name: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		description: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		bannerUrl: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			format: 'url',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		notesCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		usersCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		isFollowing: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		userId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										38
									
								
								packages/backend/src/models/schema/clip.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								packages/backend/src/models/schema/clip.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
export const packedClipSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		userId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		user: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			ref: 'UserLite',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		name: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		description: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		isPublic: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										107
									
								
								packages/backend/src/models/schema/drive-file.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								packages/backend/src/models/schema/drive-file.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,107 @@
 | 
			
		|||
export const packedDriveFileSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		name: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			example: 'lenna.jpg',
 | 
			
		||||
		},
 | 
			
		||||
		type: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			example: 'image/jpeg',
 | 
			
		||||
		},
 | 
			
		||||
		md5: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'md5',
 | 
			
		||||
			example: '15eca7fba0480996e2245f5185bf39f2',
 | 
			
		||||
		},
 | 
			
		||||
		size: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			example: 51469,
 | 
			
		||||
		},
 | 
			
		||||
		isSensitive: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		blurhash: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		properties: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			properties: {
 | 
			
		||||
				width: {
 | 
			
		||||
					type: 'number',
 | 
			
		||||
					optional: true, nullable: false,
 | 
			
		||||
					example: 1280,
 | 
			
		||||
				},
 | 
			
		||||
				height: {
 | 
			
		||||
					type: 'number',
 | 
			
		||||
					optional: true, nullable: false,
 | 
			
		||||
					example: 720,
 | 
			
		||||
				},
 | 
			
		||||
				orientation: {
 | 
			
		||||
					type: 'number',
 | 
			
		||||
					optional: true, nullable: false,
 | 
			
		||||
					example: 8,
 | 
			
		||||
				},
 | 
			
		||||
				avgColor: {
 | 
			
		||||
					type: 'string',
 | 
			
		||||
					optional: true, nullable: false,
 | 
			
		||||
					example: 'rgb(40,65,87)',
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		url: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
			format: 'url',
 | 
			
		||||
		},
 | 
			
		||||
		thumbnailUrl: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
			format: 'url',
 | 
			
		||||
		},
 | 
			
		||||
		comment: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		folderId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		folder: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
			ref: 'DriveFolder',
 | 
			
		||||
		},
 | 
			
		||||
		userId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		user: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
			ref: 'UserLite',
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										39
									
								
								packages/backend/src/models/schema/drive-folder.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								packages/backend/src/models/schema/drive-folder.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
export const packedDriveFolderSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		name: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		foldersCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		filesCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		parentId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		parent: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
			ref: 'DriveFolder',
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										36
									
								
								packages/backend/src/models/schema/emoji.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								packages/backend/src/models/schema/emoji.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
export const packedEmojiSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		aliases: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'string',
 | 
			
		||||
				optional: false, nullable: false,
 | 
			
		||||
				format: 'id',
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		name: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		category: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		host: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		url: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										105
									
								
								packages/backend/src/models/schema/federation-instance.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								packages/backend/src/models/schema/federation-instance.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,105 @@
 | 
			
		|||
import config from "@/config";
 | 
			
		||||
 | 
			
		||||
export const packedFederationInstanceSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		caughtAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		host: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			example: 'misskey.example.com',
 | 
			
		||||
		},
 | 
			
		||||
		usersCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		notesCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		followingCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		followersCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		driveUsage: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		driveFiles: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		latestRequestSentAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		lastCommunicatedAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		isNotResponding: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		isSuspended: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		softwareName: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
			example: 'misskey',
 | 
			
		||||
		},
 | 
			
		||||
		softwareVersion: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
			example: config.version,
 | 
			
		||||
		},
 | 
			
		||||
		openRegistrations: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
			example: true,
 | 
			
		||||
		},
 | 
			
		||||
		name: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		description: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		maintainerName: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		maintainerEmail: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		iconUrl: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
			format: 'url',
 | 
			
		||||
		},
 | 
			
		||||
		infoUpdatedAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										36
									
								
								packages/backend/src/models/schema/following.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								packages/backend/src/models/schema/following.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
export const packedFollowingSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		followeeId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		followee: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
			ref: 'UserDetailed',
 | 
			
		||||
		},
 | 
			
		||||
		followerId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		follower: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
			ref: 'UserDetailed',
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										69
									
								
								packages/backend/src/models/schema/gallery-post.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								packages/backend/src/models/schema/gallery-post.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,69 @@
 | 
			
		|||
export const packedGalleryPostSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		updatedAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		title: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		description: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		userId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		user: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			ref: 'UserLite',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		fileIds: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'string',
 | 
			
		||||
				optional: false, nullable: false,
 | 
			
		||||
				format: 'id',
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		files: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'object',
 | 
			
		||||
				optional: false, nullable: false,
 | 
			
		||||
				ref: 'DriveFile',
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		tags: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'string',
 | 
			
		||||
				optional: false, nullable: false,
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		isSensitive: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										34
									
								
								packages/backend/src/models/schema/hashtag.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								packages/backend/src/models/schema/hashtag.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
export const packedHashtagSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		tag: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			example: 'misskey',
 | 
			
		||||
		},
 | 
			
		||||
		mentionedUsersCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		mentionedLocalUsersCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		mentionedRemoteUsersCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		attachedUsersCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		attachedLocalUsersCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		attachedRemoteUsersCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										73
									
								
								packages/backend/src/models/schema/messaging-message.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								packages/backend/src/models/schema/messaging-message.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,73 @@
 | 
			
		|||
export const packedMessagingMessageSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		userId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		user: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			ref: 'UserLite',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		text: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		fileId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		file: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
			ref: 'DriveFile',
 | 
			
		||||
		},
 | 
			
		||||
		recipientId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		recipient: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
			ref: 'UserLite',
 | 
			
		||||
		},
 | 
			
		||||
		groupId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		group: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
			ref: 'UserGroup',
 | 
			
		||||
		},
 | 
			
		||||
		isRead: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		reads: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'string',
 | 
			
		||||
				optional: false, nullable: false,
 | 
			
		||||
				format: 'id',
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										26
									
								
								packages/backend/src/models/schema/muting.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								packages/backend/src/models/schema/muting.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
export const packedMutingSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		muteeId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		mutee: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			ref: 'UserDetailed',
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										26
									
								
								packages/backend/src/models/schema/note-favorite.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								packages/backend/src/models/schema/note-favorite.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
export const packedNoteFavoriteSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		note: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			ref: 'Note',
 | 
			
		||||
		},
 | 
			
		||||
		noteId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										25
									
								
								packages/backend/src/models/schema/note-reaction.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								packages/backend/src/models/schema/note-reaction.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
export const packedNoteReactionSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		user: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			ref: 'UserLite',
 | 
			
		||||
		},
 | 
			
		||||
		type: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										183
									
								
								packages/backend/src/models/schema/note.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								packages/backend/src/models/schema/note.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,183 @@
 | 
			
		|||
export const packedNoteSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		text: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		cw: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		userId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		user: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			ref: 'UserLite',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		replyId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		renoteId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		reply: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
			ref: 'Note',
 | 
			
		||||
		},
 | 
			
		||||
		renote: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
			ref: 'Note',
 | 
			
		||||
		},
 | 
			
		||||
		isHidden: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		visibility: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		mentions: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'string',
 | 
			
		||||
				optional: false, nullable: false,
 | 
			
		||||
				format: 'id',
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		visibleUserIds: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'string',
 | 
			
		||||
				optional: false, nullable: false,
 | 
			
		||||
				format: 'id',
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		fileIds: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'string',
 | 
			
		||||
				optional: false, nullable: false,
 | 
			
		||||
				format: 'id',
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		files: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'object',
 | 
			
		||||
				optional: false, nullable: false,
 | 
			
		||||
				ref: 'DriveFile',
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		tags: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'string',
 | 
			
		||||
				optional: false, nullable: false,
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		poll: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		channelId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		channel: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'object',
 | 
			
		||||
				optional: false, nullable: false,
 | 
			
		||||
				properties: {
 | 
			
		||||
					id: {
 | 
			
		||||
						type: 'string',
 | 
			
		||||
						optional: false, nullable: false,
 | 
			
		||||
					},
 | 
			
		||||
					name: {
 | 
			
		||||
						type: 'string',
 | 
			
		||||
						optional: false, nullable: true,
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		localOnly: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		emojis: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'object',
 | 
			
		||||
				optional: false, nullable: false,
 | 
			
		||||
				properties: {
 | 
			
		||||
					name: {
 | 
			
		||||
						type: 'string',
 | 
			
		||||
						optional: false, nullable: false,
 | 
			
		||||
					},
 | 
			
		||||
					url: {
 | 
			
		||||
						type: 'string',
 | 
			
		||||
						optional: false, nullable: true,
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		reactions: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		renoteCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		repliesCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		uri: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		url: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: true, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		myReaction: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										66
									
								
								packages/backend/src/models/schema/notification.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								packages/backend/src/models/schema/notification.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,66 @@
 | 
			
		|||
import { notificationTypes } from "@/types";
 | 
			
		||||
 | 
			
		||||
export const packedNotificationSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		isRead: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		type: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			enum: [...notificationTypes],
 | 
			
		||||
		},
 | 
			
		||||
		user: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			ref: 'UserLite',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		userId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		note: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			ref: 'Note',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		reaction: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		choice: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		invitation: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		body: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		header: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		icon: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: true, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										51
									
								
								packages/backend/src/models/schema/page.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								packages/backend/src/models/schema/page.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,51 @@
 | 
			
		|||
export const packedPageSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		updatedAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		title: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		name: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		summary: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: true,
 | 
			
		||||
		},
 | 
			
		||||
		content: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		variables: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		userId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		user: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			ref: 'UserLite',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										25
									
								
								packages/backend/src/models/schema/queue.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								packages/backend/src/models/schema/queue.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
export const packedQueueCountSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		waiting: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		active: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		completed: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		failed: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		delayed: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										34
									
								
								packages/backend/src/models/schema/user-group.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								packages/backend/src/models/schema/user-group.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
export const packedUserGroupSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		name: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		ownerId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		userIds: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			nullable: false, optional: true,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'string',
 | 
			
		||||
				nullable: false, optional: false,
 | 
			
		||||
				format: 'id',
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										29
									
								
								packages/backend/src/models/schema/user-list.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								packages/backend/src/models/schema/user-list.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
export const packedUserListSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		name: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			optional: false, nullable: false,
 | 
			
		||||
		},
 | 
			
		||||
		userIds: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			nullable: false, optional: true,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'string',
 | 
			
		||||
				nullable: false, optional: false,
 | 
			
		||||
				format: 'id',
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
							
								
								
									
										467
									
								
								packages/backend/src/models/schema/user.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										467
									
								
								packages/backend/src/models/schema/user.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,467 @@
 | 
			
		|||
export const packedUserLiteSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		id: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
			example: 'xxxxxxxxxx',
 | 
			
		||||
		},
 | 
			
		||||
		name: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			example: '藍',
 | 
			
		||||
		},
 | 
			
		||||
		username: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
			example: 'ai',
 | 
			
		||||
		},
 | 
			
		||||
		host: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			example: 'misskey.example.com',
 | 
			
		||||
		},
 | 
			
		||||
		avatarUrl: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			format: 'url',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		avatarBlurhash: {
 | 
			
		||||
			type: 'any',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		avatarColor: {
 | 
			
		||||
			type: 'any',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			default: null,
 | 
			
		||||
		},
 | 
			
		||||
		isAdmin: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: true,
 | 
			
		||||
			default: false,
 | 
			
		||||
		},
 | 
			
		||||
		isModerator: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: true,
 | 
			
		||||
			default: false,
 | 
			
		||||
		},
 | 
			
		||||
		isBot: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: true,
 | 
			
		||||
		},
 | 
			
		||||
		isCat: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: true,
 | 
			
		||||
		},
 | 
			
		||||
		emojis: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'object',
 | 
			
		||||
				nullable: false, optional: false,
 | 
			
		||||
				properties: {
 | 
			
		||||
					name: {
 | 
			
		||||
						type: 'string',
 | 
			
		||||
						nullable: false, optional: false,
 | 
			
		||||
					},
 | 
			
		||||
					url: {
 | 
			
		||||
						type: 'string',
 | 
			
		||||
						nullable: false, optional: false,
 | 
			
		||||
						format: 'url',
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		onlineStatus: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			format: 'url',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			enum: ['unknown', 'online', 'active', 'offline'],
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
 | 
			
		||||
export const packedUserDetailedNotMeOnlySchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		url: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			format: 'url',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		uri: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			format: 'uri',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		createdAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		updatedAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		lastFetchedAt: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			format: 'date-time',
 | 
			
		||||
		},
 | 
			
		||||
		bannerUrl: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			format: 'url',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		bannerBlurhash: {
 | 
			
		||||
			type: 'any',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		bannerColor: {
 | 
			
		||||
			type: 'any',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			default: null,
 | 
			
		||||
		},
 | 
			
		||||
		isLocked: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		isSilenced: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		isSuspended: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
			example: false,
 | 
			
		||||
		},
 | 
			
		||||
		description: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			example: 'Hi masters, I am Ai!',
 | 
			
		||||
		},
 | 
			
		||||
		location: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		birthday: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			example: '2018-03-12',
 | 
			
		||||
		},
 | 
			
		||||
		lang: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			example: 'ja-JP',
 | 
			
		||||
		},
 | 
			
		||||
		fields: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
			items: {
 | 
			
		||||
					type: 'object',
 | 
			
		||||
					nullable: false, optional: false,
 | 
			
		||||
					properties: {
 | 
			
		||||
						name: {
 | 
			
		||||
							type: 'string',
 | 
			
		||||
							nullable: false, optional: false,
 | 
			
		||||
						},
 | 
			
		||||
						value: {
 | 
			
		||||
							type: 'string',
 | 
			
		||||
							nullable: false, optional: false,
 | 
			
		||||
						},
 | 
			
		||||
					},
 | 
			
		||||
					maxLength: 4,
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		followersCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		followingCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		notesCount: {
 | 
			
		||||
			type: 'number',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		pinnedNoteIds: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'string',
 | 
			
		||||
				nullable: false, optional: false,
 | 
			
		||||
				format: 'id',
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		pinnedNotes: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'object',
 | 
			
		||||
				nullable: false, optional: false,
 | 
			
		||||
				ref: 'Note',
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		pinnedPageId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		pinnedPage: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			ref: 'Page',
 | 
			
		||||
		},
 | 
			
		||||
		publicReactions: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		twoFactorEnabled: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
			default: false,
 | 
			
		||||
		},
 | 
			
		||||
		usePasswordLessLogin: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
			default: false,
 | 
			
		||||
		},
 | 
			
		||||
		securityKeys: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
			default: false,
 | 
			
		||||
		},
 | 
			
		||||
		//#region relations
 | 
			
		||||
		isFollowing: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: true,
 | 
			
		||||
		},
 | 
			
		||||
		isFollowed: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: true,
 | 
			
		||||
		},
 | 
			
		||||
		hasPendingFollowRequestFromYou: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: true,
 | 
			
		||||
		},
 | 
			
		||||
		hasPendingFollowRequestToYou: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: true,
 | 
			
		||||
		},
 | 
			
		||||
		isBlocking: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: true,
 | 
			
		||||
		},
 | 
			
		||||
		isBlocked: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: true,
 | 
			
		||||
		},
 | 
			
		||||
		isMuted: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: true,
 | 
			
		||||
		},
 | 
			
		||||
		//#endregion
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
 | 
			
		||||
export const packedMeDetailedOnlySchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	properties: {
 | 
			
		||||
		avatarId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		bannerId: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			format: 'id',
 | 
			
		||||
		},
 | 
			
		||||
		injectFeaturedNote: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		receiveAnnouncementEmail: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		alwaysMarkNsfw: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		carefulBot: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		autoAcceptFollowed: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		noCrawle: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		isExplorable: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		isDeleted: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		hideOnlineStatus: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		hasUnreadSpecifiedNotes: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		hasUnreadMentions: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		hasUnreadAnnouncement: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		hasUnreadAntenna: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		hasUnreadChannel: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		hasUnreadMessagingMessage: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		hasUnreadNotification: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		hasPendingReceivedFollowRequest: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		integrations: {
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
		},
 | 
			
		||||
		mutedWords: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			nullable: false, optional: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'array',
 | 
			
		||||
				nullable: false, optional: false,
 | 
			
		||||
				items: {
 | 
			
		||||
					type: 'string',
 | 
			
		||||
					nullable: false, optional: false,
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		mutedInstances: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'string',
 | 
			
		||||
				nullable: false, optional: false,
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		mutingNotificationTypes: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'string',
 | 
			
		||||
				nullable: false, optional: false,
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		emailNotificationTypes: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			nullable: true, optional: false,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'string',
 | 
			
		||||
				nullable: false, optional: false,
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		//#region secrets
 | 
			
		||||
		email: {
 | 
			
		||||
			type: 'string',
 | 
			
		||||
			nullable: true, optional: true,
 | 
			
		||||
		},
 | 
			
		||||
		emailVerified: {
 | 
			
		||||
			type: 'boolean',
 | 
			
		||||
			nullable: true, optional: true,
 | 
			
		||||
		},
 | 
			
		||||
		securityKeysList: {
 | 
			
		||||
			type: 'array',
 | 
			
		||||
			nullable: false, optional: true,
 | 
			
		||||
			items: {
 | 
			
		||||
				type: 'object',
 | 
			
		||||
				nullable: false, optional: false,
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		//#endregion
 | 
			
		||||
	},
 | 
			
		||||
} as const;
 | 
			
		||||
 | 
			
		||||
export const packedUserDetailedNotMeSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	allOf: [
 | 
			
		||||
		{
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			ref: 'UserLite',
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			ref: 'UserDetailedNotMeOnly',
 | 
			
		||||
		},
 | 
			
		||||
	],
 | 
			
		||||
} as const;
 | 
			
		||||
 | 
			
		||||
export const packedMeDetailedSchema = {
 | 
			
		||||
	type: 'object',
 | 
			
		||||
	allOf: [
 | 
			
		||||
		{
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			ref: 'UserLite',
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			ref: 'UserDetailedNotMeOnly',
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			ref: 'MeDetailedOnly',
 | 
			
		||||
		},
 | 
			
		||||
	],
 | 
			
		||||
} as const;
 | 
			
		||||
 | 
			
		||||
export const packedUserDetailedSchema = {
 | 
			
		||||
	oneOf: [
 | 
			
		||||
		{
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			ref: 'UserDetailedNotMe',
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			ref: 'MeDetailed',
 | 
			
		||||
		},
 | 
			
		||||
	],
 | 
			
		||||
} as const;
 | 
			
		||||
 | 
			
		||||
export const packedUserSchema = {
 | 
			
		||||
	oneOf: [
 | 
			
		||||
		{
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			ref: 'UserLite',
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			type: 'object',
 | 
			
		||||
			ref: 'UserDetailed',
 | 
			
		||||
		},
 | 
			
		||||
	],
 | 
			
		||||
} as const;
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue