improve announce handling
This commit is contained in:
parent
318af6aaca
commit
d3e17e0c82
|
|
@ -38,7 +38,7 @@ import { ApPersonService } from './models/ApPersonService.js';
|
||||||
import { ApQuestionService } from './models/ApQuestionService.js';
|
import { ApQuestionService } from './models/ApQuestionService.js';
|
||||||
import { GlobalEventService } from '@/core/GlobalEventService.js';
|
import { GlobalEventService } from '@/core/GlobalEventService.js';
|
||||||
import type { Resolver } from './ApResolverService.js';
|
import type { Resolver } from './ApResolverService.js';
|
||||||
import type { IAccept, IAdd, IAnnounce, IBlock, ICreate, IDelete, IFlag, IFollow, ILike, IObject, IReject, IRemove, IUndo, IUpdate, IMove } from './type.js';
|
import type { IAccept, IAdd, IAnnounce, IBlock, ICreate, IDelete, IFlag, IFollow, ILike, IObject, IReject, IRemove, IUndo, IUpdate, IMove, IPost } from './type.js';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ApInboxService {
|
export class ApInboxService {
|
||||||
|
|
@ -267,13 +267,20 @@ export class ApInboxService {
|
||||||
|
|
||||||
this.logger.info(`Announce: ${uri}`);
|
this.logger.info(`Announce: ${uri}`);
|
||||||
|
|
||||||
const targetUri = getApId(activity.object);
|
const resolver = this.apResolverService.createResolver();
|
||||||
|
|
||||||
return await this.announceNote(actor, activity, targetUri);
|
const target = await resolver.resolve(activity.object).catch(e => {
|
||||||
|
this.logger.error(`Resolution failed: ${e}`);
|
||||||
|
return e;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (isPost(target)) return await this.announceNote(actor, activity, target);
|
||||||
|
|
||||||
|
return `skip: unknown object type ${getApType(target)}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
private async announceNote(actor: MiRemoteUser, activity: IAnnounce, targetUri: string): Promise<string | void> {
|
private async announceNote(actor: MiRemoteUser, activity: IAnnounce, target: IPost): Promise<string | void> {
|
||||||
const uri = getApId(activity);
|
const uri = getApId(activity);
|
||||||
|
|
||||||
if (actor.isSuspended) {
|
if (actor.isSuspended) {
|
||||||
|
|
@ -296,16 +303,15 @@ export class ApInboxService {
|
||||||
// Announce対象をresolve
|
// Announce対象をresolve
|
||||||
let renote;
|
let renote;
|
||||||
try {
|
try {
|
||||||
renote = await this.apNoteService.resolveNote(targetUri);
|
renote = await this.apNoteService.resolveNote(target);
|
||||||
if (renote == null) return 'announce target is null';
|
if (renote == null) return 'announce target is null';
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// 対象が4xxならスキップ
|
// 対象が4xxならスキップ
|
||||||
if (err instanceof StatusError) {
|
if (err instanceof StatusError) {
|
||||||
if (!err.isRetryable) {
|
if (!err.isRetryable) {
|
||||||
return `Ignored announce target ${targetUri} - ${err.statusCode}`;
|
return `Ignored announce target ${target.id} - ${err.statusCode}`;
|
||||||
}
|
}
|
||||||
|
return `Error in announce target ${target.id} - ${err.statusCode}`;
|
||||||
return `Error in announce target ${targetUri} - ${err.statusCode}`;
|
|
||||||
}
|
}
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -327,3 +327,4 @@ export const isAnnounce = (object: IObject): object is IAnnounce => getApType(ob
|
||||||
export const isBlock = (object: IObject): object is IBlock => getApType(object) === 'Block';
|
export const isBlock = (object: IObject): object is IBlock => getApType(object) === 'Block';
|
||||||
export const isFlag = (object: IObject): object is IFlag => getApType(object) === 'Flag';
|
export const isFlag = (object: IObject): object is IFlag => getApType(object) === 'Flag';
|
||||||
export const isMove = (object: IObject): object is IMove => getApType(object) === 'Move';
|
export const isMove = (object: IObject): object is IMove => getApType(object) === 'Move';
|
||||||
|
export const isNote = (object: IObject): object is IPost => getApType(object) === 'Note';
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue