Supports Array ActivityStreams type (#7536)

* Supports Array type

* Fix

* Fix Service to Note

* Update type.ts

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
This commit is contained in:
MeiMei 2021-05-31 13:04:13 +09:00 committed by GitHub
parent b608f63a1a
commit caf40e40fb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 76 additions and 82 deletions

View file

@ -1,12 +1,12 @@
import Resolver from '../../resolver';
import { IRemoteUser } from '../../../../models/entities/user';
import acceptFollow from './follow';
import { IAccept, IFollow } from '../../type';
import { IAccept, isFollow, getApType } from '../../type';
import { apLogger } from '../../logger';
const logger = apLogger;
export default async (actor: IRemoteUser, activity: IAccept): Promise<void> => {
export default async (actor: IRemoteUser, activity: IAccept): Promise<string> => {
const uri = activity.id || activity;
logger.info(`Accept: ${uri}`);
@ -18,13 +18,7 @@ export default async (actor: IRemoteUser, activity: IAccept): Promise<void> => {
throw e;
});
switch (object.type) {
case 'Follow':
acceptFollow(actor, object as IFollow);
break;
if (isFollow(object)) return await acceptFollow(actor, object);
default:
logger.warn(`Unknown accept type: ${object.type}`);
break;
}
return `skip: Unknown Accept type: ${getApType(object)}`;
};

View file

@ -1,7 +1,7 @@
import Resolver from '../../resolver';
import { IRemoteUser } from '../../../../models/entities/user';
import createNote from './note';
import { ICreate, getApId, validPost } from '../../type';
import { ICreate, getApId, isPost, getApType } from '../../type';
import { apLogger } from '../../logger';
import { toArray, concat, unique } from '../../../../prelude/array';
@ -35,9 +35,9 @@ export default async (actor: IRemoteUser, activity: ICreate): Promise<void> => {
throw e;
});
if (validPost.includes(object.type)) {
if (isPost(object)) {
createNote(resolver, actor, object, false, activity);
} else {
logger.warn(`Unknown type: ${object.type}`);
logger.warn(`Unknown type: ${getApType(object)}`);
}
};

View file

@ -1,12 +1,12 @@
import Resolver from '../../resolver';
import { IRemoteUser } from '../../../../models/entities/user';
import rejectFollow from './follow';
import { IReject, IFollow } from '../../type';
import { IReject, isFollow, getApType } from '../../type';
import { apLogger } from '../../logger';
const logger = apLogger;
export default async (actor: IRemoteUser, activity: IReject): Promise<void> => {
export default async (actor: IRemoteUser, activity: IReject): Promise<string> => {
const uri = activity.id || activity;
logger.info(`Reject: ${uri}`);
@ -18,13 +18,7 @@ export default async (actor: IRemoteUser, activity: IReject): Promise<void> => {
throw e;
});
switch (object.type) {
case 'Follow':
rejectFollow(actor, object as IFollow);
break;
if (isFollow(object)) return await rejectFollow(actor, object);
default:
logger.warn(`Unknown reject type: ${object.type}`);
break;
}
return `skip: Unknown Reject type: ${getApType(object)}`;
};

View file

@ -3,14 +3,15 @@ import { IRemoteUser } from '../../../../models/entities/user';
import { IAnnounce, getApId } from '../../type';
import deleteNote from '../../../../services/note/delete';
export const undoAnnounce = async (actor: IRemoteUser, activity: IAnnounce): Promise<void> => {
export const undoAnnounce = async (actor: IRemoteUser, activity: IAnnounce): Promise<string> => {
const uri = getApId(activity);
const note = await Notes.findOne({
uri
});
if (!note) return;
if (!note) return 'skip: no such Announce';
await deleteNote(actor, note);
return 'ok: deleted';
};

View file

@ -1,5 +1,5 @@
import { IRemoteUser } from '../../../../models/entities/user';
import { IUndo, IFollow, IBlock, ILike, IAnnounce } from '../../type';
import { IUndo, isFollow, isBlock, isLike, isAnnounce, getApType } from '../../type';
import unfollow from './follow';
import unblock from './block';
import undoLike from './like';
@ -9,7 +9,7 @@ import { apLogger } from '../../logger';
const logger = apLogger;
export default async (actor: IRemoteUser, activity: IUndo): Promise<void> => {
export default async (actor: IRemoteUser, activity: IUndo): Promise<string> => {
if ('actor' in activity && actor.uri !== activity.actor) {
throw new Error('invalid actor');
}
@ -25,20 +25,10 @@ export default async (actor: IRemoteUser, activity: IUndo): Promise<void> => {
throw e;
});
switch (object.type) {
case 'Follow':
unfollow(actor, object as IFollow);
break;
case 'Block':
unblock(actor, object as IBlock);
break;
case 'Like':
case 'EmojiReaction':
case 'EmojiReact':
undoLike(actor, object as ILike);
break;
case 'Announce':
undoAnnounce(actor, object as IAnnounce);
break;
}
if (isFollow(object)) return await unfollow(actor, object);
if (isBlock(object)) return await unblock(actor, object);
if (isLike(object)) return await undoLike(actor, object);
if (isAnnounce(object)) return await undoAnnounce(actor, object);
return `skip: unknown object type ${getApType(object)}`;
};

View file

@ -1,5 +1,5 @@
import { IRemoteUser } from '../../../../models/entities/user';
import { IUpdate, validActor } from '../../type';
import { getApType, IUpdate, isActor } from '../../type';
import { apLogger } from '../../logger';
import { updateQuestion } from '../../models/question';
import Resolver from '../../resolver';
@ -22,13 +22,13 @@ export default async (actor: IRemoteUser, activity: IUpdate): Promise<string> =>
throw e;
});
if (validActor.includes(object.type)) {
if (isActor(object)) {
await updatePerson(actor.uri!, resolver, object);
return `ok: Person updated`;
} else if (object.type === 'Question') {
} else if (getApType(object) === 'Question') {
await updateQuestion(object).catch(e => console.log(e));
return `ok: Question updated`;
} else {
return `skip: Unknown type: ${object.type}`;
return `skip: Unknown type: ${getApType(object)}`;
}
};