mizzkey/src/remote/activitypub/kernel/announce/note.ts

46 lines
1.2 KiB
TypeScript
Raw Normal View History

2018-04-07 23:55:26 +02:00
import * as debug from 'debug';
import Resolver from '../../resolver';
import post from '../../../../services/note/create';
2018-04-08 21:08:56 +02:00
import { IRemoteUser } from '../../../../models/user';
2018-04-07 23:55:26 +02:00
import { IAnnounce, INote } from '../../type';
2018-04-17 09:05:50 +02:00
import { fetchNote, resolveNote } from '../../models/note';
2018-04-07 23:55:26 +02:00
const log = debug('misskey:activitypub');
/**
*
*/
export default async function(resolver: Resolver, actor: IRemoteUser, activity: IAnnounce, note: INote): Promise<void> {
const uri = activity.id || activity;
if (typeof uri !== 'string') {
throw new Error('invalid announce');
}
// 既に同じURIを持つものが登録されていないかチェック
2018-04-08 21:08:56 +02:00
const exist = await fetchNote(uri);
2018-04-07 23:55:26 +02:00
if (exist) {
return;
}
2018-04-08 21:08:56 +02:00
const renote = await resolveNote(note);
2018-04-07 23:55:26 +02:00
log(`Creating the (Re)Note: ${uri}`);
//#region Visibility
let visibility = 'public';
if (!activity.to.includes('https://www.w3.org/ns/activitystreams#Public')) visibility = 'unlisted';
if (activity.cc.length == 0) visibility = 'private';
// TODO
if (visibility != 'public') throw new Error('unspported visibility');
//#endergion
await post(actor, {
createdAt: new Date(activity.published),
renote,
visibility,
uri
});
}