diff options
| author | mei23 <m@m544.net> | 2018-09-01 20:17:30 +0900 |
|---|---|---|
| committer | mei23 <m@m544.net> | 2018-09-01 20:23:01 +0900 |
| commit | 57a63d38aaae33331c0272cbcbc3f5d254cfd93d (patch) | |
| tree | d46e619743c4a3710855afd2df978565143ef4b1 /src/services/i/update.ts | |
| parent | Receive Update activity (diff) | |
| download | sharkey-57a63d38aaae33331c0272cbcbc3f5d254cfd93d.tar.gz sharkey-57a63d38aaae33331c0272cbcbc3f5d254cfd93d.tar.bz2 sharkey-57a63d38aaae33331c0272cbcbc3f5d254cfd93d.zip | |
Send Update activity
Diffstat (limited to 'src/services/i/update.ts')
| -rw-r--r-- | src/services/i/update.ts | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/services/i/update.ts b/src/services/i/update.ts new file mode 100644 index 0000000000..25b55b0355 --- /dev/null +++ b/src/services/i/update.ts @@ -0,0 +1,38 @@ +import * as mongo from 'mongodb'; +import User, { isLocalUser, isRemoteUser } from '../../models/user'; +import Following from '../../models/following'; +import renderPerson from '../../remote/activitypub/renderer/person'; +import renderUpdate from '../../remote/activitypub/renderer/update'; +import packAp from '../../remote/activitypub/renderer'; +import { deliver } from '../../queue'; + +export async function publishToFollowers(userId: mongo.ObjectID) { + const user = await User.findOne({ + _id: userId + }); + + const followers = await Following.find({ + followeeId: user._id + }); + + const queue: string[] = []; + + // フォロワーがリモートユーザーかつ投稿者がローカルユーザーならUpdateを配信 + if (isLocalUser(user)) { + followers.map(following => { + const follower = following._follower; + + if (isRemoteUser(follower)) { + const inbox = follower.sharedInbox || follower.inbox; + if (!queue.includes(inbox)) queue.push(inbox); + } + }); + + if (queue.length > 0) { + const content = packAp(renderUpdate(await renderPerson(user), user)); + queue.forEach(inbox => { + deliver(user, content, inbox); + }); + } + } +} |