AP featured collectionの修正 / Collection Activityの対応 / typeの修正など (#5460)

* resolver type / fix updateFeatured

* type ApObject

* fix strange type

* AP Activity

* Collection Activityが失敗したらとりあえず無視
This commit is contained in:
MeiMei
2019-09-27 04:58:28 +09:00
committed by syuilo
parent 3a093f8bd7
commit e14509574d
10 changed files with 85 additions and 106 deletions

View File

@@ -1,4 +1,4 @@
import { Object } from '../type';
import { IObject, isCreate, isDelete, isUpdate, isFollow, isAccept, isReject, isAdd, isRemove, isAnnounce, isLike, isUndo, isBlock, isCollectionOrOrderedCollection, isCollection } from '../type';
import { IRemoteUser } from '../../../models/entities/user';
import create from './create';
import performDeleteActivity from './delete';
@@ -13,68 +13,53 @@ import add from './add';
import remove from './remove';
import block from './block';
import { apLogger } from '../logger';
import Resolver from '../resolver';
import { toArray } from '../../../prelude/array';
const self = async (actor: IRemoteUser, activity: Object): Promise<void> => {
export async function performActivity(actor: IRemoteUser, activity: IObject) {
if (isCollectionOrOrderedCollection(activity)) {
const resolver = new Resolver();
for (const item of toArray(isCollection(activity) ? activity.items : activity.orderedItems)) {
const act = await resolver.resolve(item);
try {
await performOneActivity(actor, act);
} catch (e) {
apLogger.error(e);
}
}
} else {
await performOneActivity(actor, activity);
}
}
async function performOneActivity(actor: IRemoteUser, activity: IObject): Promise<void> {
if (actor.isSuspended) return;
switch (activity.type) {
case 'Create':
if (isCreate(activity)) {
await create(actor, activity);
break;
case 'Delete':
} else if (isDelete(activity)) {
await performDeleteActivity(actor, activity);
break;
case 'Update':
} else if (isUpdate(activity)) {
await performUpdateActivity(actor, activity);
break;
case 'Follow':
} else if (isFollow(activity)) {
await follow(actor, activity);
break;
case 'Accept':
} else if (isAccept(activity)) {
await accept(actor, activity);
break;
case 'Reject':
} else if (isReject(activity)) {
await reject(actor, activity);
break;
case 'Add':
} else if (isAdd(activity)) {
await add(actor, activity).catch(err => apLogger.error(err));
break;
case 'Remove':
} else if (isRemove(activity)) {
await remove(actor, activity).catch(err => apLogger.error(err));
break;
case 'Announce':
} else if (isAnnounce(activity)) {
await announce(actor, activity);
break;
case 'Like':
} else if (isLike(activity)) {
await like(actor, activity);
break;
case 'Undo':
} else if (isUndo(activity)) {
await undo(actor, activity);
break;
case 'Block':
} else if (isBlock(activity)) {
await block(actor, activity);
break;
case 'Collection':
case 'OrderedCollection':
// TODO
break;
default:
} else {
apLogger.warn(`unknown activity type: ${(activity as any).type}`);
return;
}
};
export default self;
}