2019-09-26 19:58:28 +00:00
|
|
|
import { IObject, isCreate, isDelete, isUpdate, isFollow, isAccept, isReject, isAdd, isRemove, isAnnounce, isLike, isUndo, isBlock, isCollectionOrOrderedCollection, isCollection } from '../type';
|
2019-04-07 12:50:36 +00:00
|
|
|
import { IRemoteUser } from '../../../models/entities/user';
|
2018-03-31 10:55:00 +00:00
|
|
|
import create from './create';
|
2018-04-03 08:50:52 +00:00
|
|
|
import performDeleteActivity from './delete';
|
2019-03-07 12:19:32 +00:00
|
|
|
import performUpdateActivity from './update';
|
2018-04-02 10:50:40 +00:00
|
|
|
import follow from './follow';
|
2018-04-03 07:33:16 +00:00
|
|
|
import undo from './undo';
|
2018-04-07 08:05:14 +00:00
|
|
|
import like from './like';
|
2018-04-07 21:55:26 +00:00
|
|
|
import announce from './announce';
|
2018-05-31 15:42:37 +00:00
|
|
|
import accept from './accept';
|
|
|
|
import reject from './reject';
|
2018-10-02 07:27:36 +00:00
|
|
|
import add from './add';
|
|
|
|
import remove from './remove';
|
2018-10-29 11:32:42 +00:00
|
|
|
import block from './block';
|
2019-02-03 09:16:57 +00:00
|
|
|
import { apLogger } from '../logger';
|
2019-09-26 19:58:28 +00:00
|
|
|
import Resolver from '../resolver';
|
|
|
|
import { toArray } from '../../../prelude/array';
|
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
2018-04-04 14:12:35 +00:00
|
|
|
|
2019-09-26 19:58:28 +00:00
|
|
|
async function performOneActivity(actor: IRemoteUser, activity: IObject): Promise<void> {
|
2019-06-21 06:42:07 +00:00
|
|
|
if (actor.isSuspended) return;
|
|
|
|
|
2019-09-26 19:58:28 +00:00
|
|
|
if (isCreate(activity)) {
|
2018-04-04 16:22:41 +00:00
|
|
|
await create(actor, activity);
|
2019-09-26 19:58:28 +00:00
|
|
|
} else if (isDelete(activity)) {
|
2018-04-04 16:22:41 +00:00
|
|
|
await performDeleteActivity(actor, activity);
|
2019-09-26 19:58:28 +00:00
|
|
|
} else if (isUpdate(activity)) {
|
2019-03-07 12:19:32 +00:00
|
|
|
await performUpdateActivity(actor, activity);
|
2019-09-26 19:58:28 +00:00
|
|
|
} else if (isFollow(activity)) {
|
2018-04-04 16:22:41 +00:00
|
|
|
await follow(actor, activity);
|
2019-09-26 19:58:28 +00:00
|
|
|
} else if (isAccept(activity)) {
|
2018-05-31 15:42:37 +00:00
|
|
|
await accept(actor, activity);
|
2019-09-26 19:58:28 +00:00
|
|
|
} else if (isReject(activity)) {
|
2018-05-31 15:42:37 +00:00
|
|
|
await reject(actor, activity);
|
2019-09-26 19:58:28 +00:00
|
|
|
} else if (isAdd(activity)) {
|
2019-02-03 09:16:57 +00:00
|
|
|
await add(actor, activity).catch(err => apLogger.error(err));
|
2019-09-26 19:58:28 +00:00
|
|
|
} else if (isRemove(activity)) {
|
2019-02-03 09:16:57 +00:00
|
|
|
await remove(actor, activity).catch(err => apLogger.error(err));
|
2019-09-26 19:58:28 +00:00
|
|
|
} else if (isAnnounce(activity)) {
|
2018-04-07 21:55:26 +00:00
|
|
|
await announce(actor, activity);
|
2019-09-26 19:58:28 +00:00
|
|
|
} else if (isLike(activity)) {
|
2018-04-07 08:05:14 +00:00
|
|
|
await like(actor, activity);
|
2019-09-26 19:58:28 +00:00
|
|
|
} else if (isUndo(activity)) {
|
2018-04-04 16:22:41 +00:00
|
|
|
await undo(actor, activity);
|
2019-09-26 19:58:28 +00:00
|
|
|
} else if (isBlock(activity)) {
|
2018-10-29 11:32:42 +00:00
|
|
|
await block(actor, activity);
|
2019-09-26 19:58:28 +00:00
|
|
|
} else {
|
2019-02-03 09:16:57 +00:00
|
|
|
apLogger.warn(`unknown activity type: ${(activity as any).type}`);
|
2018-04-04 14:12:35 +00:00
|
|
|
}
|
2019-09-26 19:58:28 +00:00
|
|
|
}
|