refactor (backend): port renderTombstone to backend-rs

This commit is contained in:
naskya 2024-08-02 20:49:53 +09:00
parent 5035eb6849
commit 35564ceecc
No known key found for this signature in database
GPG key ID: 712D413B3A9FED5C
7 changed files with 46 additions and 19 deletions

View file

@ -129,7 +129,8 @@ export interface ApFollow {
export type ApObject = 'Accept'|
'Emoji'|
'Follow'|
'Image';
'Image'|
'Tombstone';
export interface App {
id: string
@ -142,6 +143,11 @@ export interface App {
callbackUrl: string | null
}
export interface ApTombstone {
id: string
type: ApObject
}
export interface AttestationChallenge {
id: string
userId: string
@ -1299,6 +1305,8 @@ export declare function renderFollow(follower: UserLike, followee: UserLike, req
export declare function renderFollowRelay(relayId: string): Promise<ApFollow>
export declare function renderTombstone(noteId: string): ApTombstone
export interface RenoteMuting {
id: string
createdAt: DateTimeWithTimeZone

View file

@ -442,6 +442,7 @@ module.exports.renderAccept = nativeBinding.renderAccept
module.exports.renderEmoji = nativeBinding.renderEmoji
module.exports.renderFollow = nativeBinding.renderFollow
module.exports.renderFollowRelay = nativeBinding.renderFollowRelay
module.exports.renderTombstone = nativeBinding.renderTombstone
module.exports.safeForSql = nativeBinding.safeForSql
module.exports.sendPushNotification = nativeBinding.sendPushNotification
module.exports.shouldNyaify = nativeBinding.shouldNyaify

View file

@ -1,6 +1,7 @@
pub mod accept;
pub mod emoji;
pub mod follow;
pub mod tombstone;
pub trait ActivityPubObject {}
@ -10,6 +11,7 @@ pub enum ApObject {
Emoji,
Follow,
Image,
Tombstone,
}
const AS_PUBLIC_URL: &str = "https://www.w3.org/ns/activitystreams#Public";

View file

@ -0,0 +1,25 @@
use super::*;
use crate::config::CONFIG;
#[macros::export(object)]
pub struct ApTombstone {
pub id: String,
pub r#type: ApObject,
}
impl ActivityPubObject for ApTombstone {}
impl ApTombstone {
#[allow(dead_code)] // TODO: remove this line
fn new(note_id: String) -> Self {
Self {
id: format!("{}/notes/{}", CONFIG.url, note_id),
r#type: ApObject::Tombstone,
}
}
}
#[macros::ts_export]
pub fn render_tombstone(note_id: String) -> ApTombstone {
ApTombstone::new(note_id)
}

View file

@ -1,4 +0,0 @@
export default (id: string) => ({
id,
type: "Tombstone",
});

View file

@ -1,10 +1,12 @@
import { config } from "@/config.js";
import { MessagingMessages, Users } from "@/models/index.js";
import type { MessagingMessage } from "@/models/entities/messaging-message.js";
import { publishToChatStream, publishToGroupChatStream } from "backend-rs";
import {
publishToChatStream,
publishToGroupChatStream,
renderTombstone,
} from "backend-rs";
import { renderActivity } from "@/remote/activitypub/renderer/index.js";
import renderDelete from "@/remote/activitypub/renderer/delete.js";
import renderTombstone from "@/remote/activitypub/renderer/tombstone.js";
import { deliver } from "@/queue/index.js";
export async function deleteMessage(message: MessagingMessage) {
@ -36,10 +38,7 @@ async function postDeleteMessage(message: MessagingMessage) {
if (Users.isLocalUser(user) && Users.isRemoteUser(recipient)) {
const activity = renderActivity(
renderDelete(
renderTombstone(`${config.url}/notes/${message.id}`),
user,
),
renderDelete(renderTombstone(message.id), user),
);
deliver(user.id, activity, recipient.inbox);
}

View file

@ -3,7 +3,6 @@ import renderDelete from "@/remote/activitypub/renderer/delete.js";
import renderAnnounce from "@/remote/activitypub/renderer/announce.js";
import { renderUndo } from "@/remote/activitypub/renderer/undo.js";
import { renderActivity } from "@/remote/activitypub/renderer/index.js";
import renderTombstone from "@/remote/activitypub/renderer/tombstone.js";
import { config } from "@/config.js";
import type { User, ILocalUser, IRemoteUser } from "@/models/entities/user.js";
import type { Note, IMentionedRemoteUsers } from "@/models/entities/note.js";
@ -16,7 +15,7 @@ import { countSameRenotes } from "@/misc/count-same-renotes.js";
import { registerOrFetchInstanceDoc } from "@/services/register-or-fetch-instance-doc.js";
import { deliverToRelays } from "@/services/relay.js";
import type { IActivity } from "@/remote/activitypub/type.js";
import { NoteEvent, publishToNoteStream } from "backend-rs";
import { NoteEvent, publishToNoteStream, renderTombstone } from "backend-rs";
async function recalculateNotesCountOfLocalUser(user: {
id: User["id"];
@ -102,7 +101,7 @@ export default async function (
),
user.id,
)
: renderDelete(renderTombstone(`${config.url}/notes/${note.id}`), user),
: renderDelete(renderTombstone(note.id), user),
);
deliverToConcerned(user, note, content);
@ -127,10 +126,7 @@ export default async function (
affectedLocalUsers[cascadingNote.user.id] ??= cascadingNote.user;
if (cascadingNote.localOnly) continue; // filter out local-only notes
const content = renderActivity(
renderDelete(
renderTombstone(`${config.url}/notes/${cascadingNote.id}`),
cascadingNote.user,
),
renderDelete(renderTombstone(cascadingNote.id), cascadingNote.user),
);
deliverToConcerned(cascadingNote.user, cascadingNote, content);
}