Fixed 267U.pre2

This commit is contained in:
2026-07-26 18:25:37 +09:00
parent 50bfaeafdf
commit 317d00a284
1286 changed files with 80222 additions and 1 deletions
@@ -0,0 +1,19 @@
import unfollow from "../../../../services/following/delete.js";
import { Followings } from "../../../../models/index.js";
import DbResolver from "../../db-resolver.js";
export default (async (actor, activity)=>{
const dbResolver = new DbResolver();
const follower = await dbResolver.getUserFromApId(activity.object);
if (follower == null) {
return "skip: follower not found";
}
const following = await Followings.findOneBy({
followerId: follower.id,
followeeId: actor.id
});
if (following) {
await unfollow(follower, actor);
return "ok: unfollowed";
}
return "skip: skip: not followed";
});
@@ -0,0 +1,13 @@
import { Notes } from "../../../../models/index.js";
import { getApId } from "../../type.js";
import deleteNote from "../../../../services/note/delete.js";
export const undoAnnounce = async (actor, activity)=>{
const uri = getApId(activity);
const note = await Notes.findOneBy({
uri,
userId: actor.id
});
if (!note) return "skip: no such Announce";
await deleteNote(actor, note);
return "ok: deleted";
};
@@ -0,0 +1,17 @@
import unblock from "../../../../services/blocking/delete.js";
import DbResolver from "../../db-resolver.js";
import { Users } from "../../../../models/index.js";
export default (async (actor, activity)=>{
const dbResolver = new DbResolver();
const blockee = await dbResolver.getUserFromApId(activity.object);
if (blockee == null) {
return "skip: blockee not found";
}
if (blockee.host != null) {
return "skip: The user you are trying to unblock is not a local user";
}
await unblock(await Users.findOneByOrFail({
id: actor.id
}), blockee);
return "ok";
});
@@ -0,0 +1,31 @@
import unfollow from "../../../../services/following/delete.js";
import cancelRequest from "../../../../services/following/requests/cancel.js";
import { FollowRequests, Followings } from "../../../../models/index.js";
import DbResolver from "../../db-resolver.js";
export default (async (actor, activity)=>{
const dbResolver = new DbResolver();
const followee = await dbResolver.getUserFromApId(activity.object);
if (followee == null) {
return "skip: followee not found";
}
if (followee.host != null) {
return "skip: The user you are trying to unfollow is not a local user";
}
const req = await FollowRequests.findOneBy({
followerId: actor.id,
followeeId: followee.id
});
const following = await Followings.findOneBy({
followerId: actor.id,
followeeId: followee.id
});
if (req) {
await cancelRequest(followee, actor);
return "ok: follow request canceled";
}
if (following) {
await unfollow(actor, followee);
return "ok: unfollowed";
}
return "skip: Not requested or followed";
});
@@ -0,0 +1,27 @@
import { isFollow, isBlock, isLike, isAnnounce, getApType, isAccept } from "../../type.js";
import unfollow from "./follow.js";
import unblock from "./block.js";
import undoLike from "./like.js";
import undoAccept from "./accept.js";
import { undoAnnounce } from "./announce.js";
import Resolver from "../../resolver.js";
import { apLogger } from "../../logger.js";
const logger = apLogger;
export default (async (actor, activity)=>{
if ("actor" in activity && actor.uri !== activity.actor) {
throw new Error("invalid actor");
}
const uri = activity.id || activity;
logger.info(`Undo: ${uri}`);
const resolver = new Resolver();
const object = await resolver.resolve(activity.object).catch((e)=>{
logger.error(`Resolution failed: ${e}`);
throw e;
});
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);
if (isAccept(object)) return await undoAccept(actor, object);
return `skip: unknown object type ${getApType(object)}`;
});
@@ -0,0 +1,15 @@
import { getApId } from "../../type.js";
import deleteReaction from "../../../../services/note/reaction/delete.js";
import { fetchNote } from "../../models/note.js";
/**
* Process Undo.Like activity
*/ export default (async (actor, activity)=>{
const targetUri = getApId(activity.object);
const note = await fetchNote(targetUri);
if (!note) return `skip: target note not found ${targetUri}`;
await deleteReaction(actor, note).catch((e)=>{
if (e.id === "60527ec9-b4cb-4a88-a6bd-32d3ad26817d") return;
throw e;
});
return "ok";
});