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:
@ -1,7 +1,7 @@
|
||||
import Resolver from '../../resolver';
|
||||
import { IRemoteUser } from '../../../../models/entities/user';
|
||||
import announceNote from './note';
|
||||
import { IAnnounce, INote, validPost, getApId } from '../../type';
|
||||
import { IAnnounce, validPost, getApId } from '../../type';
|
||||
import { apLogger } from '../../logger';
|
||||
|
||||
const logger = apLogger;
|
||||
@ -23,7 +23,7 @@ export default async (actor: IRemoteUser, activity: IAnnounce): Promise<void> =>
|
||||
}
|
||||
|
||||
if (validPost.includes(object.type)) {
|
||||
announceNote(resolver, actor, activity, object as INote);
|
||||
announceNote(resolver, actor, activity, object);
|
||||
} else {
|
||||
logger.warn(`Unknown announce type: ${object.type}`);
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
import Resolver from '../../resolver';
|
||||
import post from '../../../../services/note/create';
|
||||
import { IRemoteUser, User } from '../../../../models/entities/user';
|
||||
import { IAnnounce, INote, getApId, getApIds } from '../../type';
|
||||
import { IAnnounce, IObject, getApId, getApIds } from '../../type';
|
||||
import { fetchNote, resolveNote } from '../../models/note';
|
||||
import { resolvePerson } from '../../models/person';
|
||||
import { apLogger } from '../../logger';
|
||||
@ -14,7 +14,7 @@ const logger = apLogger;
|
||||
/**
|
||||
* アナウンスアクティビティを捌きます
|
||||
*/
|
||||
export default async function(resolver: Resolver, actor: IRemoteUser, activity: IAnnounce, note: INote): Promise<void> {
|
||||
export default async function(resolver: Resolver, actor: IRemoteUser, activity: IAnnounce, note: IObject): Promise<void> {
|
||||
const uri = getApId(activity);
|
||||
|
||||
// アナウンサーが凍結されていたらスキップ
|
||||
|
@ -1,5 +1,5 @@
|
||||
import config from '../../../../config';
|
||||
import { IBlock } from '../../type';
|
||||
import { IBlock, getApId } from '../../type';
|
||||
import block from '../../../../services/blocking/create';
|
||||
import { apLogger } from '../../logger';
|
||||
import { Users } from '../../../../models';
|
||||
@ -8,10 +8,9 @@ import { IRemoteUser } from '../../../../models/entities/user';
|
||||
const logger = apLogger;
|
||||
|
||||
export default async (actor: IRemoteUser, activity: IBlock): Promise<void> => {
|
||||
const id = typeof activity.object == 'string' ? activity.object : activity.object.id;
|
||||
if (id == null) throw new Error('missing id');
|
||||
const id = getApId(activity.object);
|
||||
|
||||
const uri = activity.id || activity;
|
||||
const uri = getApId(activity);
|
||||
|
||||
logger.info(`Block: ${uri}`);
|
||||
|
||||
|
@ -1,13 +1,13 @@
|
||||
import Resolver from '../../resolver';
|
||||
import { IRemoteUser } from '../../../../models/entities/user';
|
||||
import { createNote, fetchNote } from '../../models/note';
|
||||
import { getApId } from '../../type';
|
||||
import { getApId, IObject } from '../../type';
|
||||
import { getApLock } from '../../../../misc/app-lock';
|
||||
|
||||
/**
|
||||
* 投稿作成アクティビティを捌きます
|
||||
*/
|
||||
export default async function(resolver: Resolver, actor: IRemoteUser, note: any, silent = false): Promise<void> {
|
||||
export default async function(resolver: Resolver, actor: IRemoteUser, note: IObject, silent = false): Promise<void> {
|
||||
const uri = getApId(note);
|
||||
|
||||
const unlock = await getApLock(uri);
|
||||
|
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user