refactor: Use ESM (#8358)

* wip

* wip

* fix

* clean up

* Update tsconfig.json

* Update activitypub.ts

* wip
This commit is contained in:
syuilo
2022-02-27 11:07:39 +09:00
committed by GitHub
parent 0a882471f3
commit d071d18dd7
737 changed files with 4135 additions and 3678 deletions

View File

@ -1,5 +1,5 @@
import * as crypto from 'crypto';
import { URL } from 'url';
import * as crypto from 'node:crypto';
import { URL } from 'node:url';
type Request = {
url: string;

View File

@ -1,9 +1,9 @@
import { ApObject, getApIds } from './type';
import Resolver from './resolver';
import { resolvePerson } from './models/person';
import { unique, concat } from '@/prelude/array';
import { ApObject, getApIds } from './type.js';
import Resolver from './resolver.js';
import { resolvePerson } from './models/person.js';
import { unique, concat } from '@/prelude/array.js';
import * as promiseLimit from 'promise-limit';
import { User, IRemoteUser } from '@/models/entities/user';
import { User, IRemoteUser } from '@/models/entities/user.js';
type Visibility = 'public' | 'home' | 'followers' | 'specified';

View File

@ -1,12 +1,12 @@
import config from '@/config/index';
import { Note } from '@/models/entities/note';
import { User, IRemoteUser } from '@/models/entities/user';
import { UserPublickey } from '@/models/entities/user-publickey';
import { MessagingMessage } from '@/models/entities/messaging-message';
import { Notes, Users, UserPublickeys, MessagingMessages } from '@/models/index';
import { IObject, getApId } from './type';
import { resolvePerson } from './models/person';
import escapeRegexp = require('escape-regexp');
import config from '@/config/index.js';
import { Note } from '@/models/entities/note.js';
import { User, IRemoteUser } from '@/models/entities/user.js';
import { UserPublickey } from '@/models/entities/user-publickey.js';
import { MessagingMessage } from '@/models/entities/messaging-message.js';
import { Notes, Users, UserPublickeys, MessagingMessages } from '@/models/index.js';
import { IObject, getApId } from './type.js';
import { resolvePerson } from './models/person.js';
import escapeRegexp from 'escape-regexp';
export default class DbResolver {
constructor() {

View File

@ -1,6 +1,6 @@
import { Users, Followings } from '@/models/index';
import { ILocalUser, IRemoteUser, User } from '@/models/entities/user';
import { deliver } from '@/queue/index';
import { Users, Followings } from '@/models/index.js';
import { ILocalUser, IRemoteUser, User } from '@/models/entities/user.js';
import { deliver } from '@/queue/index.js';
//#region types
interface IRecipe {

View File

@ -1,8 +1,8 @@
import { IRemoteUser } from '@/models/entities/user';
import accept from '@/services/following/requests/accept';
import { IFollow } from '../../type';
import DbResolver from '../../db-resolver';
import { relayAccepted } from '@/services/relay';
import { IRemoteUser } from '@/models/entities/user.js';
import accept from '@/services/following/requests/accept.js';
import { IFollow } from '../../type.js';
import DbResolver from '../../db-resolver.js';
import { relayAccepted } from '@/services/relay.js';
export default async (actor: IRemoteUser, activity: IFollow): Promise<string> => {
// ※ activityはこっちから投げたフォローリクエストなので、activity.actorは存在するローカルユーザーである必要がある

View File

@ -1,8 +1,8 @@
import Resolver from '../../resolver';
import { IRemoteUser } from '@/models/entities/user';
import acceptFollow from './follow';
import { IAccept, isFollow, getApType } from '../../type';
import { apLogger } from '../../logger';
import Resolver from '../../resolver.js';
import { IRemoteUser } from '@/models/entities/user.js';
import acceptFollow from './follow.js';
import { IAccept, isFollow, getApType } from '../../type.js';
import { apLogger } from '../../logger.js';
const logger = apLogger;

View File

@ -1,7 +1,7 @@
import { IRemoteUser } from '@/models/entities/user';
import { IAdd } from '../../type';
import { resolveNote } from '../../models/note';
import { addPinned } from '@/services/i/pin';
import { IRemoteUser } from '@/models/entities/user.js';
import { IAdd } from '../../type.js';
import { resolveNote } from '../../models/note.js';
import { addPinned } from '@/services/i/pin.js';
export default async (actor: IRemoteUser, activity: IAdd): Promise<void> => {
if ('actor' in activity && actor.uri !== activity.actor) {

View File

@ -1,8 +1,8 @@
import Resolver from '../../resolver';
import { IRemoteUser } from '@/models/entities/user';
import announceNote from './note';
import { IAnnounce, getApId } from '../../type';
import { apLogger } from '../../logger';
import Resolver from '../../resolver.js';
import { IRemoteUser } from '@/models/entities/user.js';
import announceNote from './note.js';
import { IAnnounce, getApId } from '../../type.js';
import { apLogger } from '../../logger.js';
const logger = apLogger;

View File

@ -1,14 +1,14 @@
import Resolver from '../../resolver';
import post from '@/services/note/create';
import { IRemoteUser } from '@/models/entities/user';
import { IAnnounce, getApId } from '../../type';
import { fetchNote, resolveNote } from '../../models/note';
import { apLogger } from '../../logger';
import { extractDbHost } from '@/misc/convert-host';
import { fetchMeta } from '@/misc/fetch-meta';
import { getApLock } from '@/misc/app-lock';
import { parseAudience } from '../../audience';
import { StatusError } from '@/misc/fetch';
import Resolver from '../../resolver.js';
import post from '@/services/note/create.js';
import { IRemoteUser } from '@/models/entities/user.js';
import { IAnnounce, getApId } from '../../type.js';
import { fetchNote, resolveNote } from '../../models/note.js';
import { apLogger } from '../../logger.js';
import { extractDbHost } from '@/misc/convert-host.js';
import { fetchMeta } from '@/misc/fetch-meta.js';
import { getApLock } from '@/misc/app-lock.js';
import { parseAudience } from '../../audience.js';
import { StatusError } from '@/misc/fetch.js';
const logger = apLogger;

View File

@ -1,7 +1,7 @@
import { IBlock } from '../../type';
import block from '@/services/blocking/create';
import { IRemoteUser } from '@/models/entities/user';
import DbResolver from '../../db-resolver';
import { IBlock } from '../../type.js';
import block from '@/services/blocking/create.js';
import { IRemoteUser } from '@/models/entities/user.js';
import DbResolver from '../../db-resolver.js';
export default async (actor: IRemoteUser, activity: IBlock): Promise<string> => {
// ※ activity.objectにブロック対象があり、それは存在するローカルユーザーのはず

View File

@ -1,9 +1,9 @@
import Resolver from '../../resolver';
import { IRemoteUser } from '@/models/entities/user';
import createNote from './note';
import { ICreate, getApId, isPost, getApType } from '../../type';
import { apLogger } from '../../logger';
import { toArray, concat, unique } from '@/prelude/array';
import Resolver from '../../resolver.js';
import { IRemoteUser } from '@/models/entities/user.js';
import createNote from './note.js';
import { ICreate, getApId, isPost, getApType } from '../../type.js';
import { apLogger } from '../../logger.js';
import { toArray, concat, unique } from '@/prelude/array.js';
const logger = apLogger;

View File

@ -1,10 +1,10 @@
import Resolver from '../../resolver';
import { IRemoteUser } from '@/models/entities/user';
import { createNote, fetchNote } from '../../models/note';
import { getApId, IObject, ICreate } from '../../type';
import { getApLock } from '@/misc/app-lock';
import { extractDbHost } from '@/misc/convert-host';
import { StatusError } from '@/misc/fetch';
import Resolver from '../../resolver.js';
import { IRemoteUser } from '@/models/entities/user.js';
import { createNote, fetchNote } from '../../models/note.js';
import { getApId, IObject, ICreate } from '../../type.js';
import { getApLock } from '@/misc/app-lock.js';
import { extractDbHost } from '@/misc/convert-host.js';
import { StatusError } from '@/misc/fetch.js';
/**
* 投稿作成アクティビティを捌きます

View File

@ -1,7 +1,7 @@
import { apLogger } from '../../logger';
import { createDeleteAccountJob } from '@/queue';
import { IRemoteUser } from '@/models/entities/user';
import { Users } from '@/models/index';
import { apLogger } from '../../logger.js';
import { createDeleteAccountJob } from '@/queue/index.js';
import { IRemoteUser } from '@/models/entities/user.js';
import { Users } from '@/models/index.js';
const logger = apLogger;

View File

@ -1,8 +1,8 @@
import deleteNote from './note';
import { IRemoteUser } from '@/models/entities/user';
import { IDelete, getApId, isTombstone, IObject, validPost, validActor } from '../../type';
import { toSingle } from '@/prelude/array';
import { deleteActor } from './actor';
import deleteNote from './note.js';
import { IRemoteUser } from '@/models/entities/user.js';
import { IDelete, getApId, isTombstone, IObject, validPost, validActor } from '../../type.js';
import { toSingle } from '@/prelude/array.js';
import { deleteActor } from './actor.js';
/**
* 削除アクティビティを捌きます

View File

@ -1,9 +1,9 @@
import { IRemoteUser } from '@/models/entities/user';
import deleteNode from '@/services/note/delete';
import { apLogger } from '../../logger';
import DbResolver from '../../db-resolver';
import { getApLock } from '@/misc/app-lock';
import { deleteMessage } from '@/services/messages/delete';
import { IRemoteUser } from '@/models/entities/user.js';
import deleteNode from '@/services/note/delete.js';
import { apLogger } from '../../logger.js';
import DbResolver from '../../db-resolver.js';
import { getApLock } from '@/misc/app-lock.js';
import { deleteMessage } from '@/services/messages/delete.js';
const logger = apLogger;

View File

@ -1,9 +1,9 @@
import { IRemoteUser } from '@/models/entities/user';
import config from '@/config/index';
import { IFlag, getApIds } from '../../type';
import { AbuseUserReports, Users } from '@/models/index';
import { IRemoteUser } from '@/models/entities/user.js';
import config from '@/config/index.js';
import { IFlag, getApIds } from '../../type.js';
import { AbuseUserReports, Users } from '@/models/index.js';
import { In } from 'typeorm';
import { genId } from '@/misc/gen-id';
import { genId } from '@/misc/gen-id.js';
export default async (actor: IRemoteUser, activity: IFlag): Promise<string> => {
// objectは `(User|Note) | (User|Note)[]` だけど、全パターンDBスキーマと対応させられないので

View File

@ -1,7 +1,7 @@
import { IRemoteUser } from '@/models/entities/user';
import follow from '@/services/following/create';
import { IFollow } from '../type';
import DbResolver from '../db-resolver';
import { IRemoteUser } from '@/models/entities/user.js';
import follow from '@/services/following/create.js';
import { IFollow } from '../type.js';
import DbResolver from '../db-resolver.js';
export default async (actor: IRemoteUser, activity: IFollow): Promise<string> => {
const dbResolver = new DbResolver();

View File

@ -1,22 +1,22 @@
import { IObject, isCreate, isDelete, isUpdate, isRead, isFollow, isAccept, isReject, isAdd, isRemove, isAnnounce, isLike, isUndo, isBlock, isCollectionOrOrderedCollection, isCollection, isFlag } from '../type';
import { IRemoteUser } from '@/models/entities/user';
import create from './create/index';
import performDeleteActivity from './delete/index';
import performUpdateActivity from './update/index';
import { performReadActivity } from './read';
import follow from './follow';
import undo from './undo/index';
import like from './like';
import announce from './announce/index';
import accept from './accept/index';
import reject from './reject/index';
import add from './add/index';
import remove from './remove/index';
import block from './block/index';
import flag from './flag/index';
import { apLogger } from '../logger';
import Resolver from '../resolver';
import { toArray } from '@/prelude/array';
import { IObject, isCreate, isDelete, isUpdate, isRead, isFollow, isAccept, isReject, isAdd, isRemove, isAnnounce, isLike, isUndo, isBlock, isCollectionOrOrderedCollection, isCollection, isFlag } from '../type.js';
import { IRemoteUser } from '@/models/entities/user.js';
import create from './create/index.js';
import performDeleteActivity from './delete/index.js';
import performUpdateActivity from './update/index.js';
import { performReadActivity } from './read.js';
import follow from './follow.js';
import undo from './undo/index.js';
import like from './like.js';
import announce from './announce/index.js';
import accept from './accept/index.js';
import reject from './reject/index.js';
import add from './add/index.js';
import remove from './remove/index.js';
import block from './block/index.js';
import flag from './flag/index.js';
import { apLogger } from '../logger.js';
import Resolver from '../resolver.js';
import { toArray } from '@/prelude/array.js';
export async function performActivity(actor: IRemoteUser, activity: IObject) {
if (isCollectionOrOrderedCollection(activity)) {

View File

@ -1,7 +1,7 @@
import { IRemoteUser } from '@/models/entities/user';
import { ILike, getApId } from '../type';
import create from '@/services/note/reaction/create';
import { fetchNote, extractEmojis } from '../models/note';
import { IRemoteUser } from '@/models/entities/user.js';
import { ILike, getApId } from '../type.js';
import create from '@/services/note/reaction/create.js';
import { fetchNote, extractEmojis } from '../models/note.js';
export default async (actor: IRemoteUser, activity: ILike) => {
const targetUri = getApId(activity.object);

View File

@ -1,8 +1,8 @@
import { IRemoteUser } from '@/models/entities/user';
import { IRead, getApId } from '../type';
import { isSelfHost, extractDbHost } from '@/misc/convert-host';
import { MessagingMessages } from '@/models/index';
import { readUserMessagingMessage } from '../../../server/api/common/read-messaging-message';
import { IRemoteUser } from '@/models/entities/user.js';
import { IRead, getApId } from '../type.js';
import { isSelfHost, extractDbHost } from '@/misc/convert-host.js';
import { MessagingMessages } from '@/models/index.js';
import { readUserMessagingMessage } from '../../../server/api/common/read-messaging-message.js';
export const performReadActivity = async (actor: IRemoteUser, activity: IRead): Promise<string> => {
const id = await getApId(activity.object);

View File

@ -1,9 +1,9 @@
import { IRemoteUser } from '@/models/entities/user';
import { remoteReject } from '@/services/following/reject';
import { IFollow } from '../../type';
import DbResolver from '../../db-resolver';
import { relayRejected } from '@/services/relay';
import { Users } from '@/models';
import { IRemoteUser } from '@/models/entities/user.js';
import { remoteReject } from '@/services/following/reject.js';
import { IFollow } from '../../type.js';
import DbResolver from '../../db-resolver.js';
import { relayRejected } from '@/services/relay.js';
import { Users } from '@/models/index.js';
export default async (actor: IRemoteUser, activity: IFollow): Promise<string> => {
// ※ activityはこっちから投げたフォローリクエストなので、activity.actorは存在するローカルユーザーである必要がある

View File

@ -1,8 +1,8 @@
import Resolver from '../../resolver';
import { IRemoteUser } from '@/models/entities/user';
import rejectFollow from './follow';
import { IReject, isFollow, getApType } from '../../type';
import { apLogger } from '../../logger';
import Resolver from '../../resolver.js';
import { IRemoteUser } from '@/models/entities/user.js';
import rejectFollow from './follow.js';
import { IReject, isFollow, getApType } from '../../type.js';
import { apLogger } from '../../logger.js';
const logger = apLogger;

View File

@ -1,7 +1,7 @@
import { IRemoteUser } from '@/models/entities/user';
import { IRemove } from '../../type';
import { resolveNote } from '../../models/note';
import { removePinned } from '@/services/i/pin';
import { IRemoteUser } from '@/models/entities/user.js';
import { IRemove } from '../../type.js';
import { resolveNote } from '../../models/note.js';
import { removePinned } from '@/services/i/pin.js';
export default async (actor: IRemoteUser, activity: IRemove): Promise<void> => {
if ('actor' in activity && actor.uri !== activity.actor) {

View File

@ -1,9 +1,9 @@
import unfollow from '@/services/following/delete';
import cancelRequest from '@/services/following/requests/cancel';
import {IAccept} from '../../type';
import { IRemoteUser } from '@/models/entities/user';
import { Followings } from '@/models/index';
import DbResolver from '../../db-resolver';
import unfollow from '@/services/following/delete.js';
import cancelRequest from '@/services/following/requests/cancel.js';
import {IAccept} from '../../type.js';
import { IRemoteUser } from '@/models/entities/user.js';
import { Followings } from '@/models/index.js';
import DbResolver from '../../db-resolver.js';
export default async (actor: IRemoteUser, activity: IAccept): Promise<string> => {
const dbResolver = new DbResolver();

View File

@ -1,7 +1,7 @@
import { Notes } from '@/models/index';
import { IRemoteUser } from '@/models/entities/user';
import { IAnnounce, getApId } from '../../type';
import deleteNote from '@/services/note/delete';
import { Notes } from '@/models/index.js';
import { IRemoteUser } from '@/models/entities/user.js';
import { IAnnounce, getApId } from '../../type.js';
import deleteNote from '@/services/note/delete.js';
export const undoAnnounce = async (actor: IRemoteUser, activity: IAnnounce): Promise<string> => {
const uri = getApId(activity);

View File

@ -1,7 +1,7 @@
import { IBlock } from '../../type';
import unblock from '@/services/blocking/delete';
import { IRemoteUser } from '@/models/entities/user';
import DbResolver from '../../db-resolver';
import { IBlock } from '../../type.js';
import unblock from '@/services/blocking/delete.js';
import { IRemoteUser } from '@/models/entities/user.js';
import DbResolver from '../../db-resolver.js';
export default async (actor: IRemoteUser, activity: IBlock): Promise<string> => {
const dbResolver = new DbResolver();

View File

@ -1,9 +1,9 @@
import unfollow from '@/services/following/delete';
import cancelRequest from '@/services/following/requests/cancel';
import { IFollow } from '../../type';
import { IRemoteUser } from '@/models/entities/user';
import { FollowRequests, Followings } from '@/models/index';
import DbResolver from '../../db-resolver';
import unfollow from '@/services/following/delete.js';
import cancelRequest from '@/services/following/requests/cancel.js';
import { IFollow } from '../../type.js';
import { IRemoteUser } from '@/models/entities/user.js';
import { FollowRequests, Followings } from '@/models/index.js';
import DbResolver from '../../db-resolver.js';
export default async (actor: IRemoteUser, activity: IFollow): Promise<string> => {
const dbResolver = new DbResolver();

View File

@ -1,12 +1,12 @@
import { IRemoteUser } from '@/models/entities/user';
import {IUndo, isFollow, isBlock, isLike, isAnnounce, getApType, isAccept} from '../../type';
import unfollow from './follow';
import unblock from './block';
import undoLike from './like';
import undoAccept from './accept';
import { undoAnnounce } from './announce';
import Resolver from '../../resolver';
import { apLogger } from '../../logger';
import { IRemoteUser } from '@/models/entities/user.js';
import {IUndo, 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;

View File

@ -1,7 +1,7 @@
import { IRemoteUser } from '@/models/entities/user';
import { ILike, getApId } from '../../type';
import deleteReaction from '@/services/note/reaction/delete';
import { fetchNote } from '../../models/note';
import { IRemoteUser } from '@/models/entities/user.js';
import { ILike, getApId } from '../../type.js';
import deleteReaction from '@/services/note/reaction/delete.js';
import { fetchNote } from '../../models/note.js';
/**
* Process Undo.Like activity

View File

@ -1,9 +1,9 @@
import { IRemoteUser } from '@/models/entities/user';
import { getApType, IUpdate, isActor } from '../../type';
import { apLogger } from '../../logger';
import { updateQuestion } from '../../models/question';
import Resolver from '../../resolver';
import { updatePerson } from '../../models/person';
import { IRemoteUser } from '@/models/entities/user.js';
import { getApType, IUpdate, isActor } from '../../type.js';
import { apLogger } from '../../logger.js';
import { updateQuestion } from '../../models/question.js';
import Resolver from '../../resolver.js';
import { updatePerson } from '../../models/person.js';
/**
* Updateアクティビティを捌きます

View File

@ -1,3 +1,3 @@
import { remoteLogger } from '../logger';
import { remoteLogger } from '../logger.js';
export const apLogger = remoteLogger.createSubLogger('ap', 'magenta');

View File

@ -1,6 +1,6 @@
import * as mfm from 'mfm-js';
import { Note } from '@/models/entities/note';
import { toHtml } from '../../../mfm/to-html';
import { Note } from '@/models/entities/note.js';
import { toHtml } from '../../../mfm/to-html.js';
export default function(note: Note) {
let html = note.text ? toHtml(mfm.parse(note.text), JSON.parse(note.mentionedRemoteUsers)) : null;

View File

@ -1,6 +1,6 @@
import { IObject } from '../type';
import { extractApHashtagObjects } from '../models/tag';
import { fromHtml } from '../../../mfm/from-html';
import { IObject } from '../type.js';
import { extractApHashtagObjects } from '../models/tag.js';
import { fromHtml } from '../../../mfm/from-html.js';
export function htmlToMfm(html: string, tag?: IObject | IObject[]) {
const hashtagNames = extractApHashtagObjects(tag).map(x => x.name).filter((x): x is string => x != null);

View File

@ -1,8 +1,8 @@
import * as crypto from 'crypto';
import * as crypto from 'node:crypto';
import * as jsonld from 'jsonld';
import { CONTEXTS } from './contexts';
import { CONTEXTS } from './contexts.js';
import fetch from 'node-fetch';
import { httpAgent, httpsAgent } from '@/misc/fetch';
import { httpAgent, httpsAgent } from '@/misc/fetch.js';
// RsaSignature2017 based from https://github.com/transmute-industries/RsaSignature2017

View File

@ -1,12 +1,12 @@
import { uploadFromUrl } from '@/services/drive/upload-from-url';
import { IRemoteUser } from '@/models/entities/user';
import Resolver from '../resolver';
import { fetchMeta } from '@/misc/fetch-meta';
import { apLogger } from '../logger';
import { DriveFile } from '@/models/entities/drive-file';
import { DriveFiles } from '@/models/index';
import { truncate } from '@/misc/truncate';
import { DB_MAX_IMAGE_COMMENT_LENGTH } from '@/misc/hard-limits';
import { uploadFromUrl } from '@/services/drive/upload-from-url.js';
import { IRemoteUser } from '@/models/entities/user.js';
import Resolver from '../resolver.js';
import { fetchMeta } from '@/misc/fetch-meta.js';
import { apLogger } from '../logger.js';
import { DriveFile } from '@/models/entities/drive-file.js';
import { DriveFiles } from '@/models/index.js';
import { truncate } from '@/misc/truncate.js';
import { DB_MAX_IMAGE_COMMENT_LENGTH } from '@/misc/hard-limits.js';
const logger = apLogger;

View File

@ -1,9 +1,9 @@
import { toArray, unique } from '@/prelude/array';
import { IObject, isMention, IApMention } from '../type';
import { resolvePerson } from './person';
import { toArray, unique } from '@/prelude/array.js';
import { IObject, isMention, IApMention } from '../type.js';
import { resolvePerson } from './person.js';
import * as promiseLimit from 'promise-limit';
import Resolver from '../resolver';
import { User } from '@/models/entities/user';
import Resolver from '../resolver.js';
import { User } from '@/models/entities/user.js';
export async function extractApMentions(tags: IObject | IObject[] | null | undefined) {
const hrefs = unique(extractApMentionObjects(tags).map(x => x.href as string));

View File

@ -1,32 +1,32 @@
import * as promiseLimit from 'promise-limit';
import config from '@/config/index';
import Resolver from '../resolver';
import post from '@/services/note/create';
import { resolvePerson, updatePerson } from './person';
import { resolveImage } from './image';
import { IRemoteUser } from '@/models/entities/user';
import { htmlToMfm } from '../misc/html-to-mfm';
import { extractApHashtags } from './tag';
import { unique, toArray, toSingle } from '@/prelude/array';
import { extractPollFromQuestion } from './question';
import vote from '@/services/note/polls/vote';
import { apLogger } from '../logger';
import { DriveFile } from '@/models/entities/drive-file';
import { deliverQuestionUpdate } from '@/services/note/polls/update';
import { extractDbHost, toPuny } from '@/misc/convert-host';
import { Emojis, Polls, MessagingMessages } from '@/models/index';
import { Note } from '@/models/entities/note';
import { IObject, getOneApId, getApId, getOneApHrefNullable, validPost, IPost, isEmoji, getApType } from '../type';
import { Emoji } from '@/models/entities/emoji';
import { genId } from '@/misc/gen-id';
import { fetchMeta } from '@/misc/fetch-meta';
import { getApLock } from '@/misc/app-lock';
import { createMessage } from '@/services/messages/create';
import { parseAudience } from '../audience';
import { extractApMentions } from './mention';
import DbResolver from '../db-resolver';
import { StatusError } from '@/misc/fetch';
import config from '@/config/index.js';
import Resolver from '../resolver.js';
import post from '@/services/note/create.js';
import { resolvePerson, updatePerson } from './person.js';
import { resolveImage } from './image.js';
import { IRemoteUser } from '@/models/entities/user.js';
import { htmlToMfm } from '../misc/html-to-mfm.js';
import { extractApHashtags } from './tag.js';
import { unique, toArray, toSingle } from '@/prelude/array.js';
import { extractPollFromQuestion } from './question.js';
import vote from '@/services/note/polls/vote.js';
import { apLogger } from '../logger.js';
import { DriveFile } from '@/models/entities/drive-file.js';
import { deliverQuestionUpdate } from '@/services/note/polls/update.js';
import { extractDbHost, toPuny } from '@/misc/convert-host.js';
import { Emojis, Polls, MessagingMessages } from '@/models/index.js';
import { Note } from '@/models/entities/note.js';
import { IObject, getOneApId, getApId, getOneApHrefNullable, validPost, IPost, isEmoji, getApType } from '../type.js';
import { Emoji } from '@/models/entities/emoji.js';
import { genId } from '@/misc/gen-id.js';
import { fetchMeta } from '@/misc/fetch-meta.js';
import { getApLock } from '@/misc/app-lock.js';
import { createMessage } from '@/services/messages/create.js';
import { parseAudience } from '../audience.js';
import { extractApMentions } from './mention.js';
import DbResolver from '../db-resolver.js';
import { StatusError } from '@/misc/fetch.js';
const logger = apLogger;

View File

@ -1,35 +1,35 @@
import { URL } from 'url';
import { URL } from 'node:url';
import * as promiseLimit from 'promise-limit';
import $, { Context } from 'cafy';
import config from '@/config/index';
import Resolver from '../resolver';
import { resolveImage } from './image';
import { isCollectionOrOrderedCollection, isCollection, IActor, getApId, getOneApHrefNullable, IObject, isPropertyValue, IApPropertyValue, getApType, isActor } from '../type';
import { fromHtml } from '../../../mfm/from-html';
import { htmlToMfm } from '../misc/html-to-mfm';
import { resolveNote, extractEmojis } from './note';
import { registerOrFetchInstanceDoc } from '@/services/register-or-fetch-instance-doc';
import { extractApHashtags } from './tag';
import { apLogger } from '../logger';
import { Note } from '@/models/entities/note';
import { updateUsertags } from '@/services/update-hashtag';
import { Users, Instances, DriveFiles, Followings, UserProfiles, UserPublickeys } from '@/models/index';
import { User, IRemoteUser } from '@/models/entities/user';
import { Emoji } from '@/models/entities/emoji';
import { UserNotePining } from '@/models/entities/user-note-pining';
import { genId } from '@/misc/gen-id';
import { instanceChart, usersChart } from '@/services/chart/index';
import { UserPublickey } from '@/models/entities/user-publickey';
import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error';
import { toPuny } from '@/misc/convert-host';
import { UserProfile } from '@/models/entities/user-profile';
import config from '@/config/index.js';
import Resolver from '../resolver.js';
import { resolveImage } from './image.js';
import { isCollectionOrOrderedCollection, isCollection, IActor, getApId, getOneApHrefNullable, IObject, isPropertyValue, IApPropertyValue, getApType, isActor } from '../type.js';
import { fromHtml } from '../../../mfm/from-html.js';
import { htmlToMfm } from '../misc/html-to-mfm.js';
import { resolveNote, extractEmojis } from './note.js';
import { registerOrFetchInstanceDoc } from '@/services/register-or-fetch-instance-doc.js';
import { extractApHashtags } from './tag.js';
import { apLogger } from '../logger.js';
import { Note } from '@/models/entities/note.js';
import { updateUsertags } from '@/services/update-hashtag.js';
import { Users, Instances, DriveFiles, Followings, UserProfiles, UserPublickeys } from '@/models/index.js';
import { User, IRemoteUser } from '@/models/entities/user.js';
import { Emoji } from '@/models/entities/emoji.js';
import { UserNotePining } from '@/models/entities/user-note-pining.js';
import { genId } from '@/misc/gen-id.js';
import { instanceChart, usersChart } from '@/services/chart/index.js';
import { UserPublickey } from '@/models/entities/user-publickey.js';
import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error.js';
import { toPuny } from '@/misc/convert-host.js';
import { UserProfile } from '@/models/entities/user-profile.js';
import { getConnection } from 'typeorm';
import { toArray } from '@/prelude/array';
import { fetchInstanceMetadata } from '@/services/fetch-instance-metadata';
import { normalizeForSearch } from '@/misc/normalize-for-search';
import { truncate } from '@/misc/truncate';
import { StatusError } from '@/misc/fetch';
import { toArray } from '@/prelude/array.js';
import { fetchInstanceMetadata } from '@/services/fetch-instance-metadata.js';
import { normalizeForSearch } from '@/misc/normalize-for-search.js';
import { truncate } from '@/misc/truncate.js';
import { StatusError } from '@/misc/fetch.js';
const logger = apLogger;

View File

@ -1,9 +1,9 @@
import config from '@/config/index';
import Resolver from '../resolver';
import { IObject, IQuestion, isQuestion } from '../type';
import { apLogger } from '../logger';
import { Notes, Polls } from '@/models/index';
import { IPoll } from '@/models/entities/poll';
import config from '@/config/index.js';
import Resolver from '../resolver.js';
import { IObject, IQuestion, isQuestion } from '../type.js';
import { apLogger } from '../logger.js';
import { Notes, Polls } from '@/models/index.js';
import { IPoll } from '@/models/entities/poll.js';
export async function extractPollFromQuestion(source: string | IObject, resolver?: Resolver): Promise<IPoll> {
if (resolver == null) resolver = new Resolver();

View File

@ -1,5 +1,5 @@
import { toArray } from '@/prelude/array';
import { IObject, isHashtag, IApHashtag } from '../type';
import { toArray } from '@/prelude/array.js';
import { IObject, isHashtag, IApHashtag } from '../type.js';
export function extractApHashtags(tags: IObject | IObject[] | null | undefined) {
if (tags == null) return [];

View File

@ -1,6 +1,6 @@
import { IObject } from './type';
import { IRemoteUser } from '@/models/entities/user';
import { performActivity } from './kernel/index';
import { IObject } from './type.js';
import { IRemoteUser } from '@/models/entities/user.js';
import { performActivity } from './kernel/index.js';
export default async (actor: IRemoteUser, activity: IObject): Promise<void> => {
await performActivity(actor, activity);

View File

@ -1,5 +1,5 @@
import config from '@/config/index';
import { User } from '@/models/entities/user';
import config from '@/config/index.js';
import { User } from '@/models/entities/user.js';
export default (object: any, user: { id: User['id']; host: null }) => ({
type: 'Accept',

View File

@ -1,5 +1,5 @@
import config from '@/config/index';
import { ILocalUser } from '@/models/entities/user';
import config from '@/config/index.js';
import { ILocalUser } from '@/models/entities/user.js';
export default (user: ILocalUser, target: any, object: any) => ({
type: 'Add',

View File

@ -1,5 +1,5 @@
import config from '@/config/index';
import { Note } from '@/models/entities/note';
import config from '@/config/index.js';
import { Note } from '@/models/entities/note.js';
export default (object: any, note: Note) => {
const attributedTo = `${config.url}/users/${note.userId}`;

View File

@ -1,5 +1,5 @@
import config from '@/config/index';
import { ILocalUser, IRemoteUser } from '@/models/entities/user';
import config from '@/config/index.js';
import { ILocalUser, IRemoteUser } from '@/models/entities/user.js';
export default (blocker: ILocalUser, blockee: IRemoteUser) => ({
type: 'Block',

View File

@ -1,5 +1,5 @@
import config from '@/config/index';
import { Note } from '@/models/entities/note';
import config from '@/config/index.js';
import { Note } from '@/models/entities/note.js';
export default (object: any, note: Note) => {
const activity = {

View File

@ -1,5 +1,5 @@
import config from '@/config/index';
import { User } from '@/models/entities/user';
import config from '@/config/index.js';
import { User } from '@/models/entities/user.js';
export default (object: any, user: { id: User['id']; host: null }) => ({
type: 'Delete',

View File

@ -1,5 +1,5 @@
import { DriveFile } from '@/models/entities/drive-file';
import { DriveFiles } from '@/models/index';
import { DriveFile } from '@/models/entities/drive-file.js';
import { DriveFiles } from '@/models/index.js';
export default (file: DriveFile) => ({
type: 'Document',

View File

@ -1,5 +1,5 @@
import config from '@/config/index';
import { Emoji } from '@/models/entities/emoji';
import config from '@/config/index.js';
import { Emoji } from '@/models/entities/emoji.js';
export default (emoji: Emoji) => ({
id: `${config.url}/emojis/${emoji.name}`,

View File

@ -1,7 +1,7 @@
import config from '@/config/index';
import { IObject, IActivity } from '@/remote/activitypub/type';
import { ILocalUser, IRemoteUser } from '@/models/entities/user';
import { getInstanceActor } from '@/services/instance-actor';
import config from '@/config/index.js';
import { IObject, IActivity } from '@/remote/activitypub/type.js';
import { ILocalUser, IRemoteUser } from '@/models/entities/user.js';
import { getInstanceActor } from '@/services/instance-actor.js';
// to anonymise reporters, the reporting actor must be a system user
// object has to be a uri or array of uris

View File

@ -1,6 +1,6 @@
import config from '@/config/index';
import { Relay } from '@/models/entities/relay';
import { ILocalUser } from '@/models/entities/user';
import config from '@/config/index.js';
import { Relay } from '@/models/entities/relay.js';
import { ILocalUser } from '@/models/entities/user.js';
export function renderFollowRelay(relay: Relay, relayActor: ILocalUser) {
const follow = {

View File

@ -1,6 +1,6 @@
import config from '@/config/index';
import { Users } from '@/models/index';
import { User } from '@/models/entities/user';
import config from '@/config/index.js';
import { Users } from '@/models/index.js';
import { User } from '@/models/entities/user.js';
/**
* Convert (local|remote)(Follower|Followee)ID to URL

View File

@ -1,6 +1,6 @@
import config from '@/config/index';
import { User } from '@/models/entities/user';
import { Users } from '@/models/index';
import config from '@/config/index.js';
import { User } from '@/models/entities/user.js';
import { Users } from '@/models/index.js';
export default (follower: { id: User['id']; host: User['host']; uri: User['host'] }, followee: { id: User['id']; host: User['host']; uri: User['host'] }, requestId?: string) => {
const follow = {

View File

@ -1,4 +1,4 @@
import config from '@/config/index';
import config from '@/config/index.js';
export default (tag: string) => ({
type: 'Hashtag',

View File

@ -1,5 +1,5 @@
import { DriveFile } from '@/models/entities/drive-file';
import { DriveFiles } from '@/models/index';
import { DriveFile } from '@/models/entities/drive-file.js';
import { DriveFiles } from '@/models/index.js';
export default (file: DriveFile) => ({
type: 'Image',

View File

@ -1,9 +1,9 @@
import config from '@/config/index';
import config from '@/config/index.js';
import { v4 as uuid } from 'uuid';
import { IActivity } from '../type';
import { LdSignature } from '../misc/ld-signature';
import { getUserKeypair } from '@/misc/keypair-store';
import { User } from '@/models/entities/user';
import { IActivity } from '../type.js';
import { LdSignature } from '../misc/ld-signature.js';
import { getUserKeypair } from '@/misc/keypair-store.js';
import { User } from '@/models/entities/user.js';
export const renderActivity = (x: any): IActivity | null => {
if (x == null) return null;

View File

@ -1,7 +1,7 @@
import config from '@/config/index';
import { ILocalUser } from '@/models/entities/user';
import { UserKeypair } from '@/models/entities/user-keypair';
import { createPublicKey } from 'crypto';
import config from '@/config/index.js';
import { ILocalUser } from '@/models/entities/user.js';
import { UserKeypair } from '@/models/entities/user-keypair.js';
import { createPublicKey } from 'node:crypto';
export default (user: ILocalUser, key: UserKeypair, postfix?: string) => ({
id: `${config.url}/users/${user.id}${postfix || '/publickey'}`,

View File

@ -1,8 +1,8 @@
import config from '@/config/index';
import { NoteReaction } from '@/models/entities/note-reaction';
import { Note } from '@/models/entities/note';
import { Emojis } from '@/models/index';
import renderEmoji from './emoji';
import config from '@/config/index.js';
import { NoteReaction } from '@/models/entities/note-reaction.js';
import { Note } from '@/models/entities/note.js';
import { Emojis } from '@/models/index.js';
import renderEmoji from './emoji.js';
export const renderLike = async (noteReaction: NoteReaction, note: Note) => {
const reaction = noteReaction.reaction;

View File

@ -1,6 +1,6 @@
import config from '@/config/index';
import { User, ILocalUser } from '@/models/entities/user';
import { Users } from '@/models/index';
import config from '@/config/index.js';
import { User, ILocalUser } from '@/models/entities/user.js';
import { Users } from '@/models/index.js';
export default (mention: User) => ({
type: 'Mention',

View File

@ -1,15 +1,15 @@
import renderDocument from './document';
import renderHashtag from './hashtag';
import renderMention from './mention';
import renderEmoji from './emoji';
import config from '@/config/index';
import toHtml from '../misc/get-note-html';
import { Note, IMentionedRemoteUsers } from '@/models/entities/note';
import { DriveFile } from '@/models/entities/drive-file';
import { DriveFiles, Notes, Users, Emojis, Polls } from '@/models/index';
import renderDocument from './document.js';
import renderHashtag from './hashtag.js';
import renderMention from './mention.js';
import renderEmoji from './emoji.js';
import config from '@/config/index.js';
import toHtml from '../misc/get-note-html.js';
import { Note, IMentionedRemoteUsers } from '@/models/entities/note.js';
import { DriveFile } from '@/models/entities/drive-file.js';
import { DriveFiles, Notes, Users, Emojis, Polls } from '@/models/index.js';
import { In } from 'typeorm';
import { Emoji } from '@/models/entities/emoji';
import { Poll } from '@/models/entities/poll';
import { Emoji } from '@/models/entities/emoji.js';
import { Poll } from '@/models/entities/poll.js';
export default async function renderNote(note: Note, dive = true, isTalk = false): Promise<Record<string, unknown>> {
const getPromisedFiles = async (ids: string[]) => {

View File

@ -1,16 +1,16 @@
import { URL } from 'url';
import { URL } from 'node:url';
import * as mfm from 'mfm-js';
import renderImage from './image';
import renderKey from './key';
import config from '@/config/index';
import { ILocalUser } from '@/models/entities/user';
import { toHtml } from '../../../mfm/to-html';
import { getEmojis } from './note';
import renderEmoji from './emoji';
import { IIdentifier } from '../models/identifier';
import renderHashtag from './hashtag';
import { DriveFiles, UserProfiles } from '@/models/index';
import { getUserKeypair } from '@/misc/keypair-store';
import renderImage from './image.js';
import renderKey from './key.js';
import config from '@/config/index.js';
import { ILocalUser } from '@/models/entities/user.js';
import { toHtml } from '../../../mfm/to-html.js';
import { getEmojis } from './note.js';
import renderEmoji from './emoji.js';
import { IIdentifier } from '../models/identifier.js';
import renderHashtag from './hashtag.js';
import { DriveFiles, UserProfiles } from '@/models/index.js';
import { getUserKeypair } from '@/misc/keypair-store.js';
export async function renderPerson(user: ILocalUser) {
const id = `${config.url}/users/${user.id}`;

View File

@ -1,7 +1,7 @@
import config from '@/config/index';
import { User } from '@/models/entities/user';
import { Note } from '@/models/entities/note';
import { Poll } from '@/models/entities/poll';
import config from '@/config/index.js';
import { User } from '@/models/entities/user.js';
import { Note } from '@/models/entities/note.js';
import { Poll } from '@/models/entities/poll.js';
export default async function renderQuestion(user: { id: User['id'] }, note: Note, poll: Poll) {
const question = {

View File

@ -1,6 +1,6 @@
import config from '@/config/index';
import { User } from '@/models/entities/user';
import { MessagingMessage } from '@/models/entities/messaging-message';
import config from '@/config/index.js';
import { User } from '@/models/entities/user.js';
import { MessagingMessage } from '@/models/entities/messaging-message.js';
export const renderReadActivity = (user: { id: User['id'] }, message: MessagingMessage) => ({
type: 'Read',

View File

@ -1,5 +1,5 @@
import config from '@/config/index';
import { User } from '@/models/entities/user';
import config from '@/config/index.js';
import { User } from '@/models/entities/user.js';
export default (object: any, user: { id: User['id'] }) => ({
type: 'Reject',

View File

@ -1,5 +1,5 @@
import config from '@/config/index';
import { User } from '@/models/entities/user';
import config from '@/config/index.js';
import { User } from '@/models/entities/user.js';
export default (user: { id: User['id'] }, target: any, object: any) => ({
type: 'Remove',

View File

@ -1,5 +1,5 @@
import config from '@/config/index';
import { ILocalUser, User } from '@/models/entities/user';
import config from '@/config/index.js';
import { ILocalUser, User } from '@/models/entities/user.js';
export default (object: any, user: { id: User['id'] }) => {
if (object == null) return null;

View File

@ -1,5 +1,5 @@
import config from '@/config/index';
import { User } from '@/models/entities/user';
import config from '@/config/index.js';
import { User } from '@/models/entities/user.js';
export default (object: any, user: { id: User['id'] }) => {
const activity = {

View File

@ -1,8 +1,8 @@
import config from '@/config/index';
import { Note } from '@/models/entities/note';
import { IRemoteUser, User } from '@/models/entities/user';
import { PollVote } from '@/models/entities/poll-vote';
import { Poll } from '@/models/entities/poll';
import config from '@/config/index.js';
import { Note } from '@/models/entities/note.js';
import { IRemoteUser, User } from '@/models/entities/user.js';
import { PollVote } from '@/models/entities/poll-vote.js';
import { Poll } from '@/models/entities/poll.js';
export default async function renderVote(user: { id: User['id'] }, vote: PollVote, note: Note, poll: Poll, pollOwner: IRemoteUser): Promise<any> {
return {

View File

@ -1,8 +1,8 @@
import config from '@/config/index';
import { getUserKeypair } from '@/misc/keypair-store';
import { User } from '@/models/entities/user';
import { getResponse } from '../../misc/fetch';
import { createSignedPost, createSignedGet } from './ap-request';
import config from '@/config/index.js';
import { getUserKeypair } from '@/misc/keypair-store.js';
import { User } from '@/models/entities/user.js';
import { getResponse } from '../../misc/fetch.js';
import { createSignedPost, createSignedGet } from './ap-request.js';
export default async (user: { id: User['id'] }, url: string, object: any) => {
const body = JSON.stringify(object);

View File

@ -1,11 +1,11 @@
import config from '@/config/index';
import { getJson } from '@/misc/fetch';
import { ILocalUser } from '@/models/entities/user';
import { getInstanceActor } from '@/services/instance-actor';
import { signedGet } from './request';
import { IObject, isCollectionOrOrderedCollection, ICollection, IOrderedCollection } from './type';
import { fetchMeta } from '@/misc/fetch-meta';
import { extractDbHost } from '@/misc/convert-host';
import config from '@/config/index.js';
import { getJson } from '@/misc/fetch.js';
import { ILocalUser } from '@/models/entities/user.js';
import { getInstanceActor } from '@/services/instance-actor.js';
import { signedGet } from './request.js';
import { IObject, isCollectionOrOrderedCollection, ICollection, IOrderedCollection } from './type.js';
import { fetchMeta } from '@/misc/fetch-meta.js';
import { extractDbHost } from '@/misc/convert-host.js';
export default class Resolver {
private history: Set<string>;

View File

@ -1,3 +1,3 @@
import Logger from '@/services/logger';
import Logger from '@/services/logger.js';
export const remoteLogger = new Logger('remote', 'cyan');

View File

@ -1,12 +1,12 @@
import { URL } from 'url';
import webFinger from './webfinger';
import config from '@/config/index';
import { createPerson, updatePerson } from './activitypub/models/person';
import { remoteLogger } from './logger';
import * as chalk from 'chalk';
import { User, IRemoteUser } from '@/models/entities/user';
import { Users } from '@/models/index';
import { toPuny } from '@/misc/convert-host';
import { URL } from 'node:url';
import webFinger from './webfinger.js';
import config from '@/config/index.js';
import { createPerson, updatePerson } from './activitypub/models/person.js';
import { remoteLogger } from './logger.js';
import chalk from 'chalk';
import { User, IRemoteUser } from '@/models/entities/user.js';
import { Users } from '@/models/index.js';
import { toPuny } from '@/misc/convert-host.js';
const logger = remoteLogger.createSubLogger('resolve-user');

View File

@ -1,6 +1,6 @@
import { URL } from 'url';
import { getJson } from '@/misc/fetch';
import { query as urlQuery } from '@/prelude/url';
import { URL } from 'node:url';
import { getJson } from '@/misc/fetch.js';
import { query as urlQuery } from '@/prelude/url.js';
type ILink = {
href: string;