Compare commits

..

No commits in common. "6123df0ebdc0c3eca63b1f4a943bd87dd1c4b53c" and "0569bc3e15e40a29d3922ae3d0abfc5f74a113f9" have entirely different histories.

3 changed files with 8 additions and 16 deletions

View file

@ -1,5 +1,4 @@
import cluster from 'node:cluster';
import net from 'node:net';
import Xev from 'xev';
import Logger from '@/services/logger.js';
@ -26,8 +25,6 @@ export async function boot(): Promise<void> {
process.title = `Foundkey (${process.env.mode})`;
}
net.setDefaultAutoSelectFamily(true);
if (cluster.isPrimary || envOption.disableClustering) {
await masterMain();

View file

@ -319,14 +319,9 @@ export async function resolveNote(value: string | IObject, resolver: Resolver):
throw new StatusError('cannot resolve local note', 400, 'cannot resolve local note');
}
/*
If the Note Object attached is specified here instead of uri
after fetching from a remote server and registering, the note is
generated without going through server fetch, but the attached
Note Object may be spoofed, so always specify uri for server
Therefore, server fetching is always performed by specifying uri.
*/
// リモートサーバーからフェッチしてきて登録
// ここでuriの代わりに添付されてきたNote Objectが指定されていると、サーバーフェッチを経ずにートが生成されるが
// 添付されてきたNote Objectは偽装されている可能性があるため、常にuriを指定してサーバーフェッチを行う。
return await createNote(uri, resolver, true);
} finally {
unlock();

View file

@ -27,7 +27,7 @@ import { db } from '@/db/postgre.js';
import { fromHtml } from '@/mfm/from-html.js';
import { Resolver } from '@/remote/activitypub/resolver.js';
import { apLogger } from '../logger.js';
import { isCollectionOrOrderedCollection, isCollection, IActor, getApId, getOneApHrefNullable, IObject, isPropertyValue, getApType, isActor, isPost } from '../type.js';
import { isCollectionOrOrderedCollection, isCollection, IActor, getApId, getOneApHrefNullable, IObject, isPropertyValue, getApType, isActor } from '../type.js';
import { extractApHashtags, extractEmojis } from './tag.js';
import { resolveNote } from './note.js';
import { resolveImage } from './image.js';
@ -459,17 +459,17 @@ async function updateFeatured(userId: User['id'], resolver: Resolver) {
const unresolvedItems = isCollection(collection) ? collection.items : collection.orderedItems;
const items = await Promise.all(toArray(unresolvedItems).map(x => resolver.resolve(x)));
// Resolve and register Notes
// Resolve and regist Notes
const limit = promiseLimit<Note | null>(2);
const featuredNotes = await Promise.all(items
.filter(item => isPost(item))
.filter(item => getApType(item) === 'Note') // TODO: Noteでなくてもいいかも
.slice(0, 5)
.map(item => limit(() => resolveNote(item, resolver).catch(() => null))));
.map(item => limit(() => resolveNote(item, resolver))));
await db.transaction(async transactionalEntityManager => {
await transactionalEntityManager.delete(UserNotePining, { userId: user.id });
// TODO: For now, generate the id at a different time and maintain the order.
// とりあえずidを別の時間で生成して順番を維持
let td = 0;
for (const note of featuredNotes.filter(note => note != null)) {
td -= 1000;