From a97fb08af09fb91ee7a159c827ab6b60047860ed Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 22:20:21 +0900 Subject: [PATCH 01/24] add Packed type --- src/misc/schema.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/misc/schema.ts b/src/misc/schema.ts index d27c9eff99..4131875ef7 100644 --- a/src/misc/schema.ts +++ b/src/misc/schema.ts @@ -21,6 +21,9 @@ import { packedClipSchema } from '@/models/repositories/clip'; import { packedFederationInstanceSchema } from '@/models/repositories/federation-instance'; import { packedQueueCountSchema } from '@/models/repositories/queue'; import { packedGalleryPostSchema } from '@/models/repositories/gallery-post'; +import { packedEmojiSchema } from '@/models/repositories/emoji'; +import { packedReversiGameSchema } from '@/models/repositories/games/reversi/game'; +import { packedReversiMatchingSchema } from '@/models/repositories/games/reversi/matching'; export const refs = { User: packedUserSchema, @@ -45,8 +48,13 @@ export const refs = { Clip: packedClipSchema, FederationInstance: packedFederationInstanceSchema, GalleryPost: packedGalleryPostSchema, + Emoji: packedEmojiSchema, + ReversiGame: packedReversiGameSchema, + ReversiMatching: packedReversiMatchingSchema, }; +export type Packed = ObjType<(typeof refs[x])['properties']>; + export interface Schema extends SimpleSchema { items?: Schema; properties?: Obj; @@ -92,7 +100,7 @@ export type SchemaType

= p['type'] extends 'array' ? NullOrUndefined>[]> : p['type'] extends 'object' ? ( p['ref'] extends keyof typeof refs - ? NullOrUndefined> + ? NullOrUndefined> : NullOrUndefined>> ) : p['type'] extends 'any' ? NullOrUndefined : From 1f82a983848108a9ce44e5280837886ed00e45c1 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 22:34:27 +0900 Subject: [PATCH 02/24] note-reaction --- src/models/repositories/note-reaction.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/note-reaction.ts b/src/models/repositories/note-reaction.ts index e73a832109..ba74076f6c 100644 --- a/src/models/repositories/note-reaction.ts +++ b/src/models/repositories/note-reaction.ts @@ -1,18 +1,16 @@ import { EntityRepository, Repository } from 'typeorm'; import { NoteReaction } from '@/models/entities/note-reaction'; import { Users } from '../index'; -import { SchemaType } from '@/misc/schema'; +import { Packed } from '@/misc/schema'; import { convertLegacyReaction } from '@/misc/reaction-lib'; import { User } from '@/models/entities/user'; -export type PackedNoteReaction = SchemaType; - @EntityRepository(NoteReaction) export class NoteReactionRepository extends Repository { public async pack( src: NoteReaction['id'] | NoteReaction, me?: { id: User['id'] } | null | undefined - ): Promise { + ): Promise> { const reaction = typeof src === 'object' ? src : await this.findOneOrFail(src); return { From d7488715df4a956b52ee25a8350ea31a5e7978d8 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 22:40:18 +0900 Subject: [PATCH 03/24] user --- src/models/repositories/user.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/user.ts b/src/models/repositories/user.ts index 39c90cf5ed..b6f27e32e2 100644 --- a/src/models/repositories/user.ts +++ b/src/models/repositories/user.ts @@ -3,14 +3,12 @@ import { EntityRepository, Repository, In, Not } from 'typeorm'; import { User, ILocalUser, IRemoteUser } from '@/models/entities/user'; import { Notes, NoteUnreads, FollowRequests, Notifications, MessagingMessages, UserNotePinings, Followings, Blockings, Mutings, UserProfiles, UserSecurityKeys, UserGroupJoinings, Pages, Announcements, AnnouncementReads, Antennas, AntennaNotes, ChannelFollowings, Instances } from '../index'; import config from '@/config/index'; -import { SchemaType } from '@/misc/schema'; +import { Packed } from '@/misc/schema'; import { awaitAll } from '@/prelude/await-all'; import { populateEmojis } from '@/misc/populate-emojis'; import { getAntennas } from '@/misc/antenna-cache'; import { USER_ACTIVE_THRESHOLD, USER_ONLINE_THRESHOLD } from '@/const'; -export type PackedUser = SchemaType; - @EntityRepository(User) export class UserRepository extends Repository { public async getRelation(me: User['id'], target: User['id']) { @@ -164,7 +162,7 @@ export class UserRepository extends Repository { detail?: boolean, includeSecrets?: boolean, } - ): Promise { + ): Promise> { const opts = Object.assign({ detail: false, includeSecrets: false From 3eb79b23bcc23742919f9ad88e7926b4a5a5f15a Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 22:40:51 +0900 Subject: [PATCH 04/24] user-group --- src/models/repositories/user-group.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/user-group.ts b/src/models/repositories/user-group.ts index a76ac7b9d3..b38a2fb50d 100644 --- a/src/models/repositories/user-group.ts +++ b/src/models/repositories/user-group.ts @@ -1,15 +1,13 @@ import { EntityRepository, Repository } from 'typeorm'; import { UserGroup } from '@/models/entities/user-group'; import { UserGroupJoinings } from '../index'; -import { SchemaType } from '@/misc/schema'; - -export type PackedUserGroup = SchemaType; +import { Packed } from '@/misc/schema'; @EntityRepository(UserGroup) export class UserGroupRepository extends Repository { public async pack( src: UserGroup['id'] | UserGroup, - ): Promise { + ): Promise> { const userGroup = typeof src === 'object' ? src : await this.findOneOrFail(src); const users = await UserGroupJoinings.find({ From c9926414a0dcca06b7dc7c9deffdaedf52fc0c48 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 22:41:38 +0900 Subject: [PATCH 05/24] user-list --- src/models/repositories/user-list.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/user-list.ts b/src/models/repositories/user-list.ts index 809dbe0268..331c278e6f 100644 --- a/src/models/repositories/user-list.ts +++ b/src/models/repositories/user-list.ts @@ -1,15 +1,13 @@ import { EntityRepository, Repository } from 'typeorm'; import { UserList } from '@/models/entities/user-list'; import { UserListJoinings } from '../index'; -import { SchemaType } from '@/misc/schema'; - -export type PackedUserList = SchemaType; +import { Packed } from '@/misc/schema'; @EntityRepository(UserList) export class UserListRepository extends Repository { public async pack( src: UserList['id'] | UserList, - ): Promise { + ): Promise> { const userList = typeof src === 'object' ? src : await this.findOneOrFail(src); const users = await UserListJoinings.find({ From 677a6aae2afe13417d26f4dc47b3f7078b4cfc52 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 22:47:03 +0900 Subject: [PATCH 06/24] note --- src/misc/check-hit-antenna.ts | 4 ++-- src/models/repositories/note.ts | 8 +++----- src/server/api/stream/channels/channel.ts | 4 ++-- src/server/api/stream/channels/global-timeline.ts | 4 ++-- src/server/api/stream/channels/hashtag.ts | 4 ++-- src/server/api/stream/channels/home-timeline.ts | 4 ++-- src/server/api/stream/channels/hybrid-timeline.ts | 4 ++-- src/server/api/stream/channels/local-timeline.ts | 4 ++-- src/server/api/stream/channels/user-list.ts | 4 ++-- src/server/api/stream/index.ts | 8 ++++---- src/services/note/read.ts | 14 +++++++------- 11 files changed, 30 insertions(+), 32 deletions(-) diff --git a/src/misc/check-hit-antenna.ts b/src/misc/check-hit-antenna.ts index 38965f4b0d..3789054b26 100644 --- a/src/misc/check-hit-antenna.ts +++ b/src/misc/check-hit-antenna.ts @@ -3,13 +3,13 @@ import { Note } from '@/models/entities/note'; import { User } from '@/models/entities/user'; import { UserListJoinings, UserGroupJoinings } from '@/models/index'; import { getFullApAccount } from './convert-host'; -import { PackedNote } from '../models/repositories/note'; import { parseAcct } from '@/misc/acct'; +import { Packed } from './schema'; /** * noteUserFollowers / antennaUserFollowing はどちらか一方が指定されていればよい */ -export async function checkHitAntenna(antenna: Antenna, note: (Note | PackedNote), noteUser: { username: string; host: string | null; }, noteUserFollowers?: User['id'][], antennaUserFollowing?: User['id'][]): Promise { +export async function checkHitAntenna(antenna: Antenna, note: (Note | Packed<'Note'>), noteUser: { username: string; host: string | null; }, noteUserFollowers?: User['id'][], antennaUserFollowing?: User['id'][]): Promise { if (note.visibility === 'specified') return false; if (note.visibility === 'followers') { diff --git a/src/models/repositories/note.ts b/src/models/repositories/note.ts index 376a09d0c6..c0ac22b2db 100644 --- a/src/models/repositories/note.ts +++ b/src/models/repositories/note.ts @@ -3,15 +3,13 @@ import * as mfm from 'mfm-js'; import { Note } from '@/models/entities/note'; import { User } from '@/models/entities/user'; import { Users, PollVotes, DriveFiles, NoteReactions, Followings, Polls, Channels } from '../index'; -import { SchemaType } from '@/misc/schema'; +import { Packed } from '@/misc/schema'; import { nyaize } from '@/misc/nyaize'; import { awaitAll } from '@/prelude/await-all'; import { convertLegacyReaction, convertLegacyReactions, decodeReaction } from '@/misc/reaction-lib'; import { NoteReaction } from '@/models/entities/note-reaction'; import { aggregateNoteEmojis, populateEmojis, prefetchEmojis } from '@/misc/populate-emojis'; -export type PackedNote = SchemaType; - @EntityRepository(Note) export class NoteRepository extends Repository { public validateCw(x: string) { @@ -67,7 +65,7 @@ export class NoteRepository extends Repository { return true; } - private async hideNote(packedNote: PackedNote, meId: User['id'] | null) { + private async hideNote(packedNote: Packed<'Note'>, meId: User['id'] | null) { // TODO: isVisibleForMe を使うようにしても良さそう(型違うけど) let hide = false; @@ -137,7 +135,7 @@ export class NoteRepository extends Repository { myReactions: Map; }; } - ): Promise { + ): Promise> { const opts = Object.assign({ detail: true, skipHide: false diff --git a/src/server/api/stream/channels/channel.ts b/src/server/api/stream/channels/channel.ts index e6a9a6c696..72ddbf93b4 100644 --- a/src/server/api/stream/channels/channel.ts +++ b/src/server/api/stream/channels/channel.ts @@ -3,8 +3,8 @@ import Channel from '../channel'; import { Notes, Users } from '@/models/index'; import { isMutedUserRelated } from '@/misc/is-muted-user-related'; import { isBlockerUserRelated } from '@/misc/is-blocker-user-related'; -import { PackedNote } from '@/models/repositories/note'; import { User } from '@/models/entities/user'; +import { Packed } from '@/misc/schema'; export default class extends Channel { public readonly chName = 'channel'; @@ -25,7 +25,7 @@ export default class extends Channel { } @autobind - private async onNote(note: PackedNote) { + private async onNote(note: Packed<'Note'>) { if (note.channelId !== this.channelId) return; // リプライなら再pack diff --git a/src/server/api/stream/channels/global-timeline.ts b/src/server/api/stream/channels/global-timeline.ts index 384ed61409..f5983ab472 100644 --- a/src/server/api/stream/channels/global-timeline.ts +++ b/src/server/api/stream/channels/global-timeline.ts @@ -3,9 +3,9 @@ import { isMutedUserRelated } from '@/misc/is-muted-user-related'; import Channel from '../channel'; import { fetchMeta } from '@/misc/fetch-meta'; import { Notes } from '@/models/index'; -import { PackedNote } from '@/models/repositories/note'; import { checkWordMute } from '@/misc/check-word-mute'; import { isBlockerUserRelated } from '@/misc/is-blocker-user-related'; +import { Packed } from '@/misc/schema'; export default class extends Channel { public readonly chName = 'globalTimeline'; @@ -24,7 +24,7 @@ export default class extends Channel { } @autobind - private async onNote(note: PackedNote) { + private async onNote(note: Packed<'Note'>) { if (note.visibility !== 'public') return; if (note.channelId != null) return; diff --git a/src/server/api/stream/channels/hashtag.ts b/src/server/api/stream/channels/hashtag.ts index 997ab75f6d..281be4f2eb 100644 --- a/src/server/api/stream/channels/hashtag.ts +++ b/src/server/api/stream/channels/hashtag.ts @@ -2,9 +2,9 @@ import autobind from 'autobind-decorator'; import { isMutedUserRelated } from '@/misc/is-muted-user-related'; import Channel from '../channel'; import { Notes } from '@/models/index'; -import { PackedNote } from '@/models/repositories/note'; import { normalizeForSearch } from '@/misc/normalize-for-search'; import { isBlockerUserRelated } from '@/misc/is-blocker-user-related'; +import { Packed } from '@/misc/schema'; export default class extends Channel { public readonly chName = 'hashtag'; @@ -23,7 +23,7 @@ export default class extends Channel { } @autobind - private async onNote(note: PackedNote) { + private async onNote(note: Packed<'Note'>) { const noteTags = note.tags ? note.tags.map((t: string) => t.toLowerCase()) : []; const matched = this.q.some(tags => tags.every(tag => noteTags.includes(normalizeForSearch(tag)))); if (!matched) return; diff --git a/src/server/api/stream/channels/home-timeline.ts b/src/server/api/stream/channels/home-timeline.ts index 0e21ab552e..52e9aec250 100644 --- a/src/server/api/stream/channels/home-timeline.ts +++ b/src/server/api/stream/channels/home-timeline.ts @@ -2,9 +2,9 @@ import autobind from 'autobind-decorator'; import { isMutedUserRelated } from '@/misc/is-muted-user-related'; import Channel from '../channel'; import { Notes } from '@/models/index'; -import { PackedNote } from '@/models/repositories/note'; import { checkWordMute } from '@/misc/check-word-mute'; import { isBlockerUserRelated } from '@/misc/is-blocker-user-related'; +import { Packed } from '@/misc/schema'; export default class extends Channel { public readonly chName = 'homeTimeline'; @@ -18,7 +18,7 @@ export default class extends Channel { } @autobind - private async onNote(note: PackedNote) { + private async onNote(note: Packed<'Note'>) { if (note.channelId) { if (!this.followingChannels.has(note.channelId)) return; } else { diff --git a/src/server/api/stream/channels/hybrid-timeline.ts b/src/server/api/stream/channels/hybrid-timeline.ts index 0b28ff616b..51f95fc0cd 100644 --- a/src/server/api/stream/channels/hybrid-timeline.ts +++ b/src/server/api/stream/channels/hybrid-timeline.ts @@ -3,9 +3,9 @@ import { isMutedUserRelated } from '@/misc/is-muted-user-related'; import Channel from '../channel'; import { fetchMeta } from '@/misc/fetch-meta'; import { Notes } from '@/models/index'; -import { PackedNote } from '@/models/repositories/note'; import { checkWordMute } from '@/misc/check-word-mute'; import { isBlockerUserRelated } from '@/misc/is-blocker-user-related'; +import { Packed } from '@/misc/schema'; export default class extends Channel { public readonly chName = 'hybridTimeline'; @@ -22,7 +22,7 @@ export default class extends Channel { } @autobind - private async onNote(note: PackedNote) { + private async onNote(note: Packed<'Note'>) { // チャンネルの投稿ではなく、自分自身の投稿 または // チャンネルの投稿ではなく、その投稿のユーザーをフォローしている または // チャンネルの投稿ではなく、全体公開のローカルの投稿 または diff --git a/src/server/api/stream/channels/local-timeline.ts b/src/server/api/stream/channels/local-timeline.ts index 20061410c4..a6166c2be2 100644 --- a/src/server/api/stream/channels/local-timeline.ts +++ b/src/server/api/stream/channels/local-timeline.ts @@ -3,9 +3,9 @@ import { isMutedUserRelated } from '@/misc/is-muted-user-related'; import Channel from '../channel'; import { fetchMeta } from '@/misc/fetch-meta'; import { Notes } from '@/models/index'; -import { PackedNote } from '@/models/repositories/note'; import { checkWordMute } from '@/misc/check-word-mute'; import { isBlockerUserRelated } from '@/misc/is-blocker-user-related'; +import { Packed } from '@/misc/schema'; export default class extends Channel { public readonly chName = 'localTimeline'; @@ -24,7 +24,7 @@ export default class extends Channel { } @autobind - private async onNote(note: PackedNote) { + private async onNote(note: Packed<'Note'>) { if (note.user.host !== null) return; if (note.visibility !== 'public') return; if (note.channelId != null && !this.followingChannels.has(note.channelId)) return; diff --git a/src/server/api/stream/channels/user-list.ts b/src/server/api/stream/channels/user-list.ts index 0ca83cd658..63b254605b 100644 --- a/src/server/api/stream/channels/user-list.ts +++ b/src/server/api/stream/channels/user-list.ts @@ -3,8 +3,8 @@ import Channel from '../channel'; import { Notes, UserListJoinings, UserLists } from '@/models/index'; import { isMutedUserRelated } from '@/misc/is-muted-user-related'; import { User } from '@/models/entities/user'; -import { PackedNote } from '@/models/repositories/note'; import { isBlockerUserRelated } from '@/misc/is-blocker-user-related'; +import { Packed } from '@/misc/schema'; export default class extends Channel { public readonly chName = 'userList'; @@ -47,7 +47,7 @@ export default class extends Channel { } @autobind - private async onNote(note: PackedNote) { + private async onNote(note: Packed<'Note'>) { if (!this.listUsers.includes(note.userId)) return; if (['followers', 'specified'].includes(note.visibility)) { diff --git a/src/server/api/stream/index.ts b/src/server/api/stream/index.ts index f83bc9331e..ccd555e149 100644 --- a/src/server/api/stream/index.ts +++ b/src/server/api/stream/index.ts @@ -14,7 +14,7 @@ import { AccessToken } from '@/models/entities/access-token'; import { UserProfile } from '@/models/entities/user-profile'; import { publishChannelStream, publishGroupMessagingStream, publishMessagingStream } from '@/services/stream'; import { UserGroup } from '@/models/entities/user-group'; -import { PackedNote } from '@/models/repositories/note'; +import { Packed } from '@/misc/schema'; /** * Main stream connection @@ -31,7 +31,7 @@ export default class Connection { public subscriber: EventEmitter; private channels: Channel[] = []; private subscribingNotes: any = {}; - private cachedNotes: PackedNote[] = []; + private cachedNotes: Packed<'Note'>[] = []; constructor( wsConnection: websocket.connection, @@ -150,8 +150,8 @@ export default class Connection { } @autobind - public cacheNote(note: PackedNote) { - const add = (note: PackedNote) => { + public cacheNote(note: Packed<'Note'>) { + const add = (note: Packed<'Note'>) => { const existIndex = this.cachedNotes.findIndex(n => n.id === note.id); if (existIndex > -1) { this.cachedNotes[existIndex] = note; diff --git a/src/services/note/read.ts b/src/services/note/read.ts index 2e221d553a..f25f86da9c 100644 --- a/src/services/note/read.ts +++ b/src/services/note/read.ts @@ -6,15 +6,15 @@ import { Not, IsNull, In } from 'typeorm'; import { Channel } from '@/models/entities/channel'; import { checkHitAntenna } from '@/misc/check-hit-antenna'; import { getAntennas } from '@/misc/antenna-cache'; -import { PackedNote } from '@/models/repositories/note'; import { readNotificationByQuery } from '@/server/api/common/read-notification'; +import { Packed } from '@/misc/schema'; /** * Mark notes as read */ export default async function( userId: User['id'], - notes: (Note | PackedNote)[], + notes: (Note | Packed<'Note'>)[], info?: { following: Set; followingChannels: Set; @@ -34,10 +34,10 @@ export default async function( })).map(x => x.followeeId)); const myAntennas = (await getAntennas()).filter(a => a.userId === userId); - const readMentions: (Note | PackedNote)[] = []; - const readSpecifiedNotes: (Note | PackedNote)[] = []; - const readChannelNotes: (Note | PackedNote)[] = []; - const readAntennaNotes: (Note | PackedNote)[] = []; + const readMentions: (Note | Packed<'Note'>)[] = []; + const readSpecifiedNotes: (Note | Packed<'Note'>)[] = []; + const readChannelNotes: (Note | Packed<'Note'>)[] = []; + const readAntennaNotes: (Note | Packed<'Note'>)[] = []; for (const note of notes) { if (note.mentions && note.mentions.includes(userId)) { @@ -52,7 +52,7 @@ export default async function( if (note.user != null) { // たぶんnullになることは無いはずだけど一応 for (const antenna of myAntennas) { - if (checkHitAntenna(antenna, note, note.user as any, undefined, Array.from(following))) { + if (await checkHitAntenna(antenna, note, note.user as any, undefined, Array.from(following))) { readAntennaNotes.push(note); } } From 02f6142d018dbce0b56dec15fd18d04cbce80365 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 22:52:16 +0900 Subject: [PATCH 07/24] app, messaging-message --- src/models/repositories/app.ts | 6 ++---- src/models/repositories/messaging-message.ts | 6 ++---- src/services/push-notification.ts | 4 ++-- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/models/repositories/app.ts b/src/models/repositories/app.ts index 2287bd4390..3bd7af05a0 100644 --- a/src/models/repositories/app.ts +++ b/src/models/repositories/app.ts @@ -1,9 +1,7 @@ import { EntityRepository, Repository } from 'typeorm'; import { App } from '@/models/entities/app'; import { AccessTokens } from '../index'; -import { SchemaType } from '@/misc/schema'; - -export type PackedApp = SchemaType; +import { Packed } from '@/misc/schema'; @EntityRepository(App) export class AppRepository extends Repository { @@ -15,7 +13,7 @@ export class AppRepository extends Repository { includeSecret?: boolean, includeProfileImageIds?: boolean } - ): Promise { + ): Promise> { const opts = Object.assign({ detail: false, includeSecret: false, diff --git a/src/models/repositories/messaging-message.ts b/src/models/repositories/messaging-message.ts index f97905af2f..abdff63689 100644 --- a/src/models/repositories/messaging-message.ts +++ b/src/models/repositories/messaging-message.ts @@ -1,11 +1,9 @@ import { EntityRepository, Repository } from 'typeorm'; import { MessagingMessage } from '@/models/entities/messaging-message'; import { Users, DriveFiles, UserGroups } from '../index'; -import { SchemaType } from '@/misc/schema'; +import { Packed } from '@/misc/schema'; import { User } from '@/models/entities/user'; -export type PackedMessagingMessage = SchemaType; - @EntityRepository(MessagingMessage) export class MessagingMessageRepository extends Repository { public validateText(text: string): boolean { @@ -19,7 +17,7 @@ export class MessagingMessageRepository extends Repository { populateRecipient?: boolean, populateGroup?: boolean, } - ): Promise { + ): Promise> { const opts = options || { populateRecipient: true, populateGroup: true, diff --git a/src/services/push-notification.ts b/src/services/push-notification.ts index 5bd7499692..23781acbe2 100644 --- a/src/services/push-notification.ts +++ b/src/services/push-notification.ts @@ -3,10 +3,10 @@ import config from '@/config/index'; import { SwSubscriptions } from '@/models/index'; import { fetchMeta } from '@/misc/fetch-meta'; import { PackedNotification } from '../models/repositories/notification'; -import { PackedMessagingMessage } from '../models/repositories/messaging-message'; +import { Packed } from '@/misc/schema'; type notificationType = 'notification' | 'unreadMessagingMessage'; -type notificationBody = PackedNotification | PackedMessagingMessage; +type notificationBody = PackedNotification | Packed<'MessagingMessage'>; export default async function(userId: string, type: notificationType, body: notificationBody) { const meta = await fetchMeta(); From 295ad3521091617bfdc1146127bcfc5ad4aba275 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 22:53:06 +0900 Subject: [PATCH 08/24] notification --- src/models/repositories/notification.ts | 6 ++---- src/services/push-notification.ts | 3 +-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/models/repositories/notification.ts b/src/models/repositories/notification.ts index b7f9e3643c..d1cf9b087e 100644 --- a/src/models/repositories/notification.ts +++ b/src/models/repositories/notification.ts @@ -2,15 +2,13 @@ import { EntityRepository, In, Repository } from 'typeorm'; import { Users, Notes, UserGroupInvitations, AccessTokens, NoteReactions } from '../index'; import { Notification } from '@/models/entities/notification'; import { awaitAll } from '@/prelude/await-all'; -import { SchemaType } from '@/misc/schema'; +import { Packed } from '@/misc/schema'; import { Note } from '@/models/entities/note'; import { NoteReaction } from '@/models/entities/note-reaction'; import { User } from '@/models/entities/user'; import { aggregateNoteEmojis, prefetchEmojis } from '@/misc/populate-emojis'; import { notificationTypes } from '@/types'; -export type PackedNotification = SchemaType; - @EntityRepository(Notification) export class NotificationRepository extends Repository { public async pack( @@ -20,7 +18,7 @@ export class NotificationRepository extends Repository { myReactions: Map; }; } - ): Promise { + ): Promise> { const notification = typeof src === 'object' ? src : await this.findOneOrFail(src); const token = notification.appAccessTokenId ? await AccessTokens.findOneOrFail(notification.appAccessTokenId) : null; diff --git a/src/services/push-notification.ts b/src/services/push-notification.ts index 23781acbe2..5949d11b3b 100644 --- a/src/services/push-notification.ts +++ b/src/services/push-notification.ts @@ -2,11 +2,10 @@ import * as push from 'web-push'; import config from '@/config/index'; import { SwSubscriptions } from '@/models/index'; import { fetchMeta } from '@/misc/fetch-meta'; -import { PackedNotification } from '../models/repositories/notification'; import { Packed } from '@/misc/schema'; type notificationType = 'notification' | 'unreadMessagingMessage'; -type notificationBody = PackedNotification | Packed<'MessagingMessage'>; +type notificationBody = Packed<'Notification'> | Packed<'MessagingMessage'>; export default async function(userId: string, type: notificationType, body: notificationBody) { const meta = await fetchMeta(); From 59ac258272a02e27be8b5fb7a13d4b2b1e1ba8ea Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 22:54:15 +0900 Subject: [PATCH 09/24] drive-file --- src/models/repositories/drive-file.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/models/repositories/drive-file.ts b/src/models/repositories/drive-file.ts index 63bd020cbe..ddf9a46afd 100644 --- a/src/models/repositories/drive-file.ts +++ b/src/models/repositories/drive-file.ts @@ -4,14 +4,12 @@ import { Users, DriveFolders } from '../index'; import { User } from '@/models/entities/user'; import { toPuny } from '@/misc/convert-host'; import { awaitAll } from '@/prelude/await-all'; -import { SchemaType } from '@/misc/schema'; +import { Packed } from '@/misc/schema'; import config from '@/config/index'; import { query, appendQuery } from '@/prelude/url'; import { Meta } from '@/models/entities/meta'; import { fetchMeta } from '@/misc/fetch-meta'; -export type PackedDriveFile = SchemaType; - type PackOptions = { detail?: boolean, self?: boolean, @@ -99,12 +97,12 @@ export class DriveFileRepository extends Repository { return parseInt(sum, 10) || 0; } - public async pack(src: DriveFile['id'], options?: PackOptions): Promise; - public async pack(src: DriveFile, options?: PackOptions): Promise; + public async pack(src: DriveFile['id'], options?: PackOptions): Promise | null>; + public async pack(src: DriveFile, options?: PackOptions): Promise>; public async pack( src: DriveFile['id'] | DriveFile, options?: PackOptions - ): Promise { + ): Promise | null> { const opts = Object.assign({ detail: false, self: false From 8f67adb8174255617666264fd931e7a7d9592cf4 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 22:54:51 +0900 Subject: [PATCH 10/24] drive-folder --- src/models/repositories/drive-folder.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/drive-folder.ts b/src/models/repositories/drive-folder.ts index bc73018f29..8ef6f01b5d 100644 --- a/src/models/repositories/drive-folder.ts +++ b/src/models/repositories/drive-folder.ts @@ -2,9 +2,7 @@ import { EntityRepository, Repository } from 'typeorm'; import { DriveFolders, DriveFiles } from '../index'; import { DriveFolder } from '@/models/entities/drive-folder'; import { awaitAll } from '@/prelude/await-all'; -import { SchemaType } from '@/misc/schema'; - -export type PackedDriveFolder = SchemaType; +import { Packed } from '@/misc/schema'; @EntityRepository(DriveFolder) export class DriveFolderRepository extends Repository { @@ -20,7 +18,7 @@ export class DriveFolderRepository extends Repository { options?: { detail: boolean } - ): Promise { + ): Promise> { const opts = Object.assign({ detail: false }, options); From fad785bebf966cdb560f4d482bf052fbc59981ec Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 22:55:21 +0900 Subject: [PATCH 11/24] following --- src/models/repositories/following.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/following.ts b/src/models/repositories/following.ts index 24ddd0d676..b1f716069f 100644 --- a/src/models/repositories/following.ts +++ b/src/models/repositories/following.ts @@ -2,7 +2,7 @@ import { EntityRepository, Repository } from 'typeorm'; import { Users } from '../index'; import { Following } from '@/models/entities/following'; import { awaitAll } from '@/prelude/await-all'; -import { SchemaType } from '@/misc/schema'; +import { Packed } from '@/misc/schema'; import { User } from '@/models/entities/user'; type LocalFollowerFollowing = Following & { @@ -29,8 +29,6 @@ type RemoteFolloweeFollowing = Following & { followeeSharedInbox: string; }; -export type PackedFollowing = SchemaType; - @EntityRepository(Following) export class FollowingRepository extends Repository { public isLocalFollower(following: Following): following is LocalFollowerFollowing { @@ -56,7 +54,7 @@ export class FollowingRepository extends Repository { populateFollowee?: boolean; populateFollower?: boolean; } - ): Promise { + ): Promise> { const following = typeof src === 'object' ? src : await this.findOneOrFail(src); if (opts == null) opts = {}; From b98687244d67d595a73b374518a2264e37e71ff9 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 22:56:03 +0900 Subject: [PATCH 12/24] muting --- src/models/repositories/muting.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/muting.ts b/src/models/repositories/muting.ts index d957b1792d..869afd3c4e 100644 --- a/src/models/repositories/muting.ts +++ b/src/models/repositories/muting.ts @@ -2,17 +2,15 @@ import { EntityRepository, Repository } from 'typeorm'; import { Users } from '../index'; import { Muting } from '@/models/entities/muting'; import { awaitAll } from '@/prelude/await-all'; -import { SchemaType } from '@/misc/schema'; +import { Packed } from '@/misc/schema'; import { User } from '@/models/entities/user'; -export type PackedMuting = SchemaType; - @EntityRepository(Muting) export class MutingRepository extends Repository { public async pack( src: Muting['id'] | Muting, me?: { id: User['id'] } | null | undefined - ): Promise { + ): Promise> { const muting = typeof src === 'object' ? src : await this.findOneOrFail(src); return await awaitAll({ From 3d54fb24d5f776821ec2c65da6e13ead7296ee85 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 22:56:32 +0900 Subject: [PATCH 13/24] blocking --- src/models/repositories/blocking.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/blocking.ts b/src/models/repositories/blocking.ts index 515b3a6b16..ac60c9a4ce 100644 --- a/src/models/repositories/blocking.ts +++ b/src/models/repositories/blocking.ts @@ -2,17 +2,15 @@ import { EntityRepository, Repository } from 'typeorm'; import { Users } from '../index'; import { Blocking } from '@/models/entities/blocking'; import { awaitAll } from '@/prelude/await-all'; -import { SchemaType } from '@/misc/schema'; +import { Packed } from '@/misc/schema'; import { User } from '@/models/entities/user'; -export type PackedBlocking = SchemaType; - @EntityRepository(Blocking) export class BlockingRepository extends Repository { public async pack( src: Blocking['id'] | Blocking, me?: { id: User['id'] } | null | undefined - ): Promise { + ): Promise> { const blocking = typeof src === 'object' ? src : await this.findOneOrFail(src); return await awaitAll({ From 4dfebbd0fee3957c1f591703c158ed3860554556 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 22:56:55 +0900 Subject: [PATCH 14/24] hashtag --- src/models/repositories/hashtag.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/hashtag.ts b/src/models/repositories/hashtag.ts index ee42ad16b6..d52f6ba7c6 100644 --- a/src/models/repositories/hashtag.ts +++ b/src/models/repositories/hashtag.ts @@ -1,14 +1,12 @@ import { EntityRepository, Repository } from 'typeorm'; import { Hashtag } from '@/models/entities/hashtag'; -import { SchemaType } from '@/misc/schema'; - -export type PackedHashtag = SchemaType; +import { Packed } from '@/misc/schema'; @EntityRepository(Hashtag) export class HashtagRepository extends Repository { public async pack( src: Hashtag, - ): Promise { + ): Promise> { return { tag: src.name, mentionedUsersCount: src.mentionedUsersCount, From 2c7daf8f0ee4d1807abbd4eecc1e29ed4bb99ae7 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 22:57:23 +0900 Subject: [PATCH 15/24] page --- src/models/repositories/page.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/page.ts b/src/models/repositories/page.ts index 1a61e2c99c..3a3642d7ec 100644 --- a/src/models/repositories/page.ts +++ b/src/models/repositories/page.ts @@ -1,19 +1,17 @@ import { EntityRepository, Repository } from 'typeorm'; import { Page } from '@/models/entities/page'; -import { SchemaType } from '@/misc/schema'; +import { Packed } from '@/misc/schema'; import { Users, DriveFiles, PageLikes } from '../index'; import { awaitAll } from '@/prelude/await-all'; import { DriveFile } from '@/models/entities/drive-file'; import { User } from '@/models/entities/user'; -export type PackedPage = SchemaType; - @EntityRepository(Page) export class PageRepository extends Repository { public async pack( src: Page['id'] | Page, me?: { id: User['id'] } | null | undefined, - ): Promise { + ): Promise> { const meId = me ? me.id : null; const page = typeof src === 'object' ? src : await this.findOneOrFail(src); From 8e9cfb8a90a88de90b3396d83f2fb7cfb1f2d60f Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 23:03:58 +0900 Subject: [PATCH 16/24] app (with modifying schema) --- src/models/repositories/app.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/models/repositories/app.ts b/src/models/repositories/app.ts index 3bd7af05a0..c48d069558 100644 --- a/src/models/repositories/app.ts +++ b/src/models/repositories/app.ts @@ -50,13 +50,9 @@ export const packedAppSchema = { type: 'string' as const, optional: false as const, nullable: false as const }, - createdAt: { + callbackUrl: { type: 'string' as const, - optional: false as const, nullable: false as const - }, - lastUsedAt: { - type: 'string' as const, - optional: false as const, nullable: false as const + optional: false as const, nullable: true as const }, permission: { type: 'array' as const, From 5ed72999a9520e58e66823ba156a2bb54be2a7f6 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 23:04:48 +0900 Subject: [PATCH 17/24] import user? --- src/models/repositories/app.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/models/repositories/app.ts b/src/models/repositories/app.ts index c48d069558..0226edad11 100644 --- a/src/models/repositories/app.ts +++ b/src/models/repositories/app.ts @@ -2,6 +2,7 @@ import { EntityRepository, Repository } from 'typeorm'; import { App } from '@/models/entities/app'; import { AccessTokens } from '../index'; import { Packed } from '@/misc/schema'; +import { User } from '../entities/user'; @EntityRepository(App) export class AppRepository extends Repository { From df10aa40f4b2ff388423ad455f0c76dc598e6c07 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 23:05:28 +0900 Subject: [PATCH 18/24] channel --- src/models/repositories/channel.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/channel.ts b/src/models/repositories/channel.ts index 4bb829f570..5c7d095473 100644 --- a/src/models/repositories/channel.ts +++ b/src/models/repositories/channel.ts @@ -1,17 +1,15 @@ import { EntityRepository, Repository } from 'typeorm'; import { Channel } from '@/models/entities/channel'; -import { SchemaType } from '@/misc/schema'; +import { Packed } from '@/misc/schema'; import { DriveFiles, ChannelFollowings, NoteUnreads } from '../index'; import { User } from '@/models/entities/user'; -export type PackedChannel = SchemaType; - @EntityRepository(Channel) export class ChannelRepository extends Repository { public async pack( src: Channel['id'] | Channel, me?: { id: User['id'] } | null | undefined, - ): Promise { + ): Promise> { const channel = typeof src === 'object' ? src : await this.findOneOrFail(src); const meId = me ? me.id : null; From 3bf7e4bf02993aedcb31af4c4ccabc3d04ea45a8 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 23:06:04 +0900 Subject: [PATCH 19/24] antenna --- src/models/repositories/antenna.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/antenna.ts b/src/models/repositories/antenna.ts index e61eed5e08..657de55581 100644 --- a/src/models/repositories/antenna.ts +++ b/src/models/repositories/antenna.ts @@ -1,15 +1,13 @@ import { EntityRepository, Repository } from 'typeorm'; import { Antenna } from '@/models/entities/antenna'; -import { SchemaType } from '@/misc/schema'; +import { Packed } from '@/misc/schema'; import { AntennaNotes, UserGroupJoinings } from '../index'; -export type PackedAntenna = SchemaType; - @EntityRepository(Antenna) export class AntennaRepository extends Repository { public async pack( src: Antenna['id'] | Antenna, - ): Promise { + ): Promise> { const antenna = typeof src === 'object' ? src : await this.findOneOrFail(src); const hasUnreadNote = (await AntennaNotes.findOne({ antennaId: antenna.id, read: false })) != null; From 3a4e3d78b2a7af8be8c47e1d991eddac5c8afa60 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 23:06:27 +0900 Subject: [PATCH 20/24] clip --- src/models/repositories/clip.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/clip.ts b/src/models/repositories/clip.ts index e3d718bef4..7892811d48 100644 --- a/src/models/repositories/clip.ts +++ b/src/models/repositories/clip.ts @@ -1,16 +1,14 @@ import { EntityRepository, Repository } from 'typeorm'; import { Clip } from '@/models/entities/clip'; -import { SchemaType } from '@/misc/schema'; +import { Packed } from '@/misc/schema'; import { Users } from '../index'; import { awaitAll } from '@/prelude/await-all'; -export type PackedClip = SchemaType; - @EntityRepository(Clip) export class ClipRepository extends Repository { public async pack( src: Clip['id'] | Clip, - ): Promise { + ): Promise> { const clip = typeof src === 'object' ? src : await this.findOneOrFail(src); return await awaitAll({ From c71844c2921443120a6a9e62ac4feff157f101a9 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 23:07:45 +0900 Subject: [PATCH 21/24] gallery-post --- src/models/repositories/gallery-post.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/gallery-post.ts b/src/models/repositories/gallery-post.ts index afa22e9edf..4f666ff252 100644 --- a/src/models/repositories/gallery-post.ts +++ b/src/models/repositories/gallery-post.ts @@ -1,18 +1,16 @@ import { EntityRepository, Repository } from 'typeorm'; import { GalleryPost } from '@/models/entities/gallery-post'; -import { SchemaType } from '@/misc/schema'; +import { Packed } from '@/misc/schema'; import { Users, DriveFiles, GalleryLikes } from '../index'; import { awaitAll } from '@/prelude/await-all'; import { User } from '@/models/entities/user'; -export type PackedGalleryPost = SchemaType; - @EntityRepository(GalleryPost) export class GalleryPostRepository extends Repository { public async pack( src: GalleryPost['id'] | GalleryPost, me?: { id: User['id'] } | null | undefined, - ): Promise { + ): Promise> { const meId = me ? me.id : null; const post = typeof src === 'object' ? src : await this.findOneOrFail(src); From 77ed1d7dc4f891c8356a61d6647d524c02e25dfd Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 23:08:10 +0900 Subject: [PATCH 22/24] emoji --- src/models/repositories/emoji.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/emoji.ts b/src/models/repositories/emoji.ts index 24f03574fe..7985c27aba 100644 --- a/src/models/repositories/emoji.ts +++ b/src/models/repositories/emoji.ts @@ -1,14 +1,12 @@ import { EntityRepository, Repository } from 'typeorm'; import { Emoji } from '@/models/entities/emoji'; -import { SchemaType } from '@/misc/schema'; - -export type PackedEmoji = SchemaType; +import { Packed } from '@/misc/schema'; @EntityRepository(Emoji) export class EmojiRepository extends Repository { public async pack( src: Emoji['id'] | Emoji, - ): Promise { + ): Promise> { const emoji = typeof src === 'object' ? src : await this.findOneOrFail(src); return { From 6b72d888f82063f2f0d56170b36f5ffa94f6e6a1 Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 23:08:42 +0900 Subject: [PATCH 23/24] Packed --- src/models/repositories/games/reversi/game.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/games/reversi/game.ts b/src/models/repositories/games/reversi/game.ts index 121a3cad74..9adb386fa9 100644 --- a/src/models/repositories/games/reversi/game.ts +++ b/src/models/repositories/games/reversi/game.ts @@ -2,9 +2,7 @@ import { User } from '@/models/entities/user'; import { EntityRepository, Repository } from 'typeorm'; import { Users } from '../../../index'; import { ReversiGame } from '@/models/entities/games/reversi/game'; -import { SchemaType } from '@/misc/schema'; - -export type PackedReversiGame = SchemaType; +import { Packed } from '@/misc/schema'; @EntityRepository(ReversiGame) export class ReversiGameRepository extends Repository { @@ -14,7 +12,7 @@ export class ReversiGameRepository extends Repository { options?: { detail?: boolean } - ): Promise { + ): Promise> { const opts = Object.assign({ detail: true }, options); From f8df218bbbdbbac76b548a362cebbb39b5c5cd3d Mon Sep 17 00:00:00 2001 From: tamaina Date: Sun, 12 Sep 2021 23:09:17 +0900 Subject: [PATCH 24/24] reversi-matching --- src/models/repositories/games/reversi/matching.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/repositories/games/reversi/matching.ts b/src/models/repositories/games/reversi/matching.ts index 0cf3b9fd35..b4515800df 100644 --- a/src/models/repositories/games/reversi/matching.ts +++ b/src/models/repositories/games/reversi/matching.ts @@ -3,16 +3,14 @@ import { ReversiMatching } from '@/models/entities/games/reversi/matching'; import { Users } from '../../../index'; import { awaitAll } from '@/prelude/await-all'; import { User } from '@/models/entities/user'; -import { SchemaType } from '@/misc/schema'; - -export type PackedReversiMatching = SchemaType; +import { Packed } from '@/misc/schema'; @EntityRepository(ReversiMatching) export class ReversiMatchingRepository extends Repository { public async pack( src: ReversiMatching['id'] | ReversiMatching, me: { id: User['id'] } - ): Promise { + ): Promise> { const matching = typeof src === 'object' ? src : await this.findOneOrFail(src); return await awaitAll({