diff --git a/src/models/follow-request.ts b/src/models/follow-request.ts index fdb20011f..8ed131c80 100644 --- a/src/models/follow-request.ts +++ b/src/models/follow-request.ts @@ -17,10 +17,12 @@ export type IFollowRequest = { _followee: { host: string; inbox?: string; + sharedInbox?: string; }, _follower: { host: string; inbox?: string; + sharedInbox?: string; } }; diff --git a/src/models/following.ts b/src/models/following.ts index 4712379a7..8aa588f55 100644 --- a/src/models/following.ts +++ b/src/models/following.ts @@ -16,10 +16,12 @@ export type IFollowing = { _followee: { host: string; inbox?: string; + sharedInbox?: string; }, _follower: { host: string; inbox?: string; + sharedInbox?: string; } }; diff --git a/src/services/following/create.ts b/src/services/following/create.ts index ea78a781e..e1164c0bd 100644 --- a/src/services/following/create.ts +++ b/src/services/following/create.ts @@ -22,11 +22,13 @@ export default async function(follower: IUser, followee: IUser) { // 非正規化 _follower: { host: follower.host, - inbox: isRemoteUser(follower) ? follower.inbox : undefined + inbox: isRemoteUser(follower) ? follower.inbox : undefined, + sharedInbox: isRemoteUser(follower) ? follower.sharedInbox : undefined }, _followee: { host: followee.host, - inbox: isRemoteUser(followee) ? followee.inbox : undefined + inbox: isRemoteUser(followee) ? followee.inbox : undefined, + sharedInbox: isRemoteUser(followee) ? followee.sharedInbox : undefined } }); diff --git a/src/services/following/requests/accept.ts b/src/services/following/requests/accept.ts index c874adc16..0a7674a4b 100644 --- a/src/services/following/requests/accept.ts +++ b/src/services/following/requests/accept.ts @@ -18,11 +18,13 @@ export default async function(followee: IUser, follower: IUser) { // 非正規化 _follower: { host: follower.host, - inbox: isRemoteUser(follower) ? follower.inbox : undefined + inbox: isRemoteUser(follower) ? follower.inbox : undefined, + sharedInbox: isRemoteUser(follower) ? follower.sharedInbox : undefined }, _followee: { host: followee.host, - inbox: isRemoteUser(followee) ? followee.inbox : undefined + inbox: isRemoteUser(followee) ? followee.inbox : undefined, + sharedInbox: isRemoteUser(followee) ? followee.sharedInbox : undefined } }); diff --git a/src/services/following/requests/create.ts b/src/services/following/requests/create.ts index 98936f32e..1b474dd8b 100644 --- a/src/services/following/requests/create.ts +++ b/src/services/following/requests/create.ts @@ -17,11 +17,13 @@ export default async function(follower: IUser, followee: IUser) { // 非正規化 _follower: { host: follower.host, - inbox: isRemoteUser(follower) ? follower.inbox : undefined + inbox: isRemoteUser(follower) ? follower.inbox : undefined, + sharedInbox: isRemoteUser(follower) ? follower.sharedInbox : undefined }, _followee: { host: followee.host, - inbox: isRemoteUser(followee) ? followee.inbox : undefined + inbox: isRemoteUser(followee) ? followee.inbox : undefined, + sharedInbox: isRemoteUser(followee) ? followee.sharedInbox : undefined } }); diff --git a/src/services/note/create.ts b/src/services/note/create.ts index 7bc2dddc4..8536b8b56 100644 --- a/src/services/note/create.ts +++ b/src/services/note/create.ts @@ -403,7 +403,9 @@ async function publishToFollowers(note: INote, noteObj: any, user: IUser, noteAc followeeId: note.userId }); - followers.map(async (following) => { + const queue: string[] = []; + + followers.map(following => { const follower = following._follower; if (isLocalUser(follower)) { @@ -423,10 +425,15 @@ async function publishToFollowers(note: INote, noteObj: any, user: IUser, noteAc } else { // フォロワーがリモートユーザーかつ投稿者がローカルユーザーなら投稿を配信 if (isLocalUser(user)) { - deliver(user, noteActivity, follower.inbox); + const inbox = follower.sharedInbox || follower.inbox; + if (!queue.includes(inbox)) queue.push(inbox); } } }); + + queue.forEach(inbox => { + deliver(user, noteActivity, inbox); + }); } function deliverNoteToMentionedRemoteUsers(mentionedUsers: IUser[], user: ILocalUser, noteActivity: any) {