Merge branch 'develop' into sw-notification-action

This commit is contained in:
tamaina
2021-03-23 21:25:39 +09:00
783 changed files with 5464 additions and 3649 deletions

View File

@@ -12,11 +12,12 @@ import Followers from './activitypub/followers';
import Following from './activitypub/following';
import Featured from './activitypub/featured';
import { inbox as processInbox } from '../queue';
import { isSelfHost } from '../misc/convert-host';
import { Notes, Users, Emojis, UserKeypairs, NoteReactions } from '../models';
import { isSelfHost } from '@/misc/convert-host';
import { Notes, Users, Emojis, NoteReactions } from '../models';
import { ILocalUser, User } from '../models/entities/user';
import { In } from 'typeorm';
import { renderLike } from '../remote/activitypub/renderer/like';
import { getUserKeypair } from '@/misc/keypair-store';
// Init router
const router = new Router();
@@ -135,7 +136,7 @@ router.get('/users/:user/publickey', async ctx => {
return;
}
const keypair = await UserKeypairs.findOneOrFail(user.id);
const keypair = await getUserKeypair(user.id);
if (Users.isLocalUser(user)) {
ctx.body = renderActivity(renderKey(user, keypair));

View File

@@ -1,5 +1,5 @@
import * as Router from '@koa/router';
import config from '../../config';
import config from '@/config';
import { renderActivity } from '../../remote/activitypub/renderer';
import renderOrderedCollection from '../../remote/activitypub/renderer/ordered-collection';
import { setResponseType } from '../activitypub';

View File

@@ -1,7 +1,7 @@
import * as Router from '@koa/router';
import config from '../../config';
import config from '@/config';
import $ from 'cafy';
import { ID } from '../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import * as url from '../../prelude/url';
import { renderActivity } from '../../remote/activitypub/renderer';
import renderOrderedCollection from '../../remote/activitypub/renderer/ordered-collection';

View File

@@ -1,7 +1,7 @@
import * as Router from '@koa/router';
import config from '../../config';
import config from '@/config';
import $ from 'cafy';
import { ID } from '../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import * as url from '../../prelude/url';
import { renderActivity } from '../../remote/activitypub/renderer';
import renderOrderedCollection from '../../remote/activitypub/renderer/ordered-collection';

View File

@@ -1,7 +1,7 @@
import * as Router from '@koa/router';
import config from '../../config';
import config from '@/config';
import $ from 'cafy';
import { ID } from '../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import { renderActivity } from '../../remote/activitypub/renderer';
import renderOrderedCollection from '../../remote/activitypub/renderer/ordered-collection';
import renderOrderedCollectionPage from '../../remote/activitypub/renderer/ordered-collection-page';

View File

@@ -1,5 +1,5 @@
import * as crypto from 'crypto';
import config from '../../config';
import config from '@/config';
import * as jsrsasign from 'jsrsasign';
const ECC_PRELUDE = Buffer.from([0x04]);

View File

@@ -2,6 +2,11 @@ import isNativeToken from './common/is-native-token';
import { User } from '../../models/entities/user';
import { Users, AccessTokens, Apps } from '../../models';
import { AccessToken } from '../../models/entities/access-token';
import { Cache } from '@/misc/cache';
// TODO: TypeORMのカスタムキャッシュプロバイダを使っても良いかも
// ref. https://github.com/typeorm/typeorm/blob/master/docs/caching.md
const cache = new Cache<User>(1000 * 60 * 60);
export default async (token: string): Promise<[User | null | undefined, AccessToken | null | undefined]> => {
if (token == null) {
@@ -9,6 +14,11 @@ export default async (token: string): Promise<[User | null | undefined, AccessTo
}
if (isNativeToken(token)) {
const cached = cache.get(token);
if (cached) {
return [cached, null];
}
// Fetch user
const user = await Users
.findOne({ token });
@@ -17,8 +27,11 @@ export default async (token: string): Promise<[User | null | undefined, AccessTo
throw new Error('user not found');
}
cache.set(token, user);
return [user, null];
} else {
// TODO: cache
const accessToken = await AccessTokens.findOne({
where: [{
hash: token.toLowerCase() // app

View File

@@ -1,3 +1,3 @@
import { secureRndstr } from '../../../misc/secure-rndstr';
import { secureRndstr } from '@/misc/secure-rndstr';
export default () => secureRndstr(16, true);

View File

@@ -1,4 +1,4 @@
import { IdentifiableError } from '../../../misc/identifiable-error';
import { IdentifiableError } from '@/misc/identifiable-error';
import { User } from '../../../models/entities/user';
import { Note } from '../../../models/entities/note';
import { Notes, Users } from '../../../models';

View File

@@ -23,7 +23,7 @@ export async function injectFeatured(timeline: Note[], user?: User | null) {
.andWhere(`note.score > 0`)
.andWhere(`note.createdAt > :date`, { date: new Date(Date.now() - day) })
.andWhere(`note.visibility = 'public'`)
.leftJoinAndSelect('note.user', 'user');
.innerJoinAndSelect('note.user', 'user');
if (user) {
query.andWhere('note.userId != :userId', { userId: user.id });

View File

@@ -6,7 +6,7 @@ import { User, ILocalUser, IRemoteUser } from '../../../models/entities/user';
import { MessagingMessage } from '../../../models/entities/messaging-message';
import { MessagingMessages, UserGroupJoinings, Users } from '../../../models';
import { In } from 'typeorm';
import { IdentifiableError } from '../../../misc/identifiable-error';
import { IdentifiableError } from '@/misc/identifiable-error';
import { UserGroup } from '../../../models/entities/user-group';
import { toArray } from '../../../prelude/array';
import { renderReadActivity } from '../../../remote/activitypub/renderer/read';

View File

@@ -1,9 +1,9 @@
import * as Koa from 'koa';
import config from '../../../config';
import config from '@/config';
import { ILocalUser } from '../../../models/entities/user';
import { Signins } from '../../../models';
import { genId } from '../../../misc/gen-id';
import { genId } from '@/misc/gen-id';
import { publishMainStream } from '../../../services/stream';
export default function(ctx: Koa.Context, user: ILocalUser, redirect = false) {

View File

@@ -5,8 +5,8 @@ import { User } from '../../../models/entities/user';
import { Users, UsedUsernames } from '../../../models';
import { UserProfile } from '../../../models/entities/user-profile';
import { getConnection } from 'typeorm';
import { genId } from '../../../misc/gen-id';
import { toPunyNullable } from '../../../misc/convert-host';
import { genId } from '@/misc/gen-id';
import { toPunyNullable } from '@/misc/convert-host';
import { UserKeypair } from '../../../models/entities/user-keypair';
import { usersChart } from '../../../services/chart';
import { UsedUsername } from '../../../models/entities/used-username';

View File

@@ -2,7 +2,7 @@ import * as fs from 'fs';
import { ILocalUser } from '../../models/entities/user';
import { IEndpointMeta } from './endpoints';
import { ApiError } from './error';
import { SchemaType } from '../../misc/schema';
import { SchemaType } from '@/misc/schema';
import { AccessToken } from '../../models/entities/access-token';
// TODO: defaultが設定されている場合はその型も考慮する
@@ -18,6 +18,7 @@ type executor<T extends IEndpointMeta> =
(params: Params<T>, user: T['requireCredential'] extends true ? ILocalUser : ILocalUser | null, token: AccessToken | null, file?: any, cleanup?: Function) =>
Promise<T['res'] extends undefined ? Response : SchemaType<NonNullable<T['res']>>>;
// TODO: API関数に user まるごと渡すのではなくユーザーIDなどの最小限のプロパティだけ渡すようにしたい(キャッシュとか考えないでよくなるため)
export default function <T extends IEndpointMeta>(meta: T, cb: executor<T>)
: (params: any, user: T['requireCredential'] extends true ? ILocalUser : ILocalUser | null, token: AccessToken | null, file?: any) => Promise<any> {
return (params: any, user: T['requireCredential'] extends true ? ILocalUser : ILocalUser | null, token: AccessToken | null, file?: any) => {

View File

@@ -1,7 +1,7 @@
import { Context } from 'cafy';
import * as path from 'path';
import * as glob from 'glob';
import { Schema } from '../../misc/schema';
import { Schema } from '@/misc/schema';
export type Param = {
validator: Context<any>;

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { AbuseUserReports } from '../../../../models';
import { makePaginationQuery } from '../../common/make-pagination-query';

View File

@@ -1,7 +1,7 @@
import $ from 'cafy';
import define from '../../../define';
import { Announcements } from '../../../../../models';
import { genId } from '../../../../../misc/gen-id';
import { genId } from '@/misc/gen-id';
export const meta = {
desc: {

View File

@@ -1,6 +1,6 @@
import $ from 'cafy';
import define from '../../../define';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import { Announcements } from '../../../../../models';
import { ApiError } from '../../../error';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../../define';
import { Announcements, AnnouncementReads } from '../../../../../models';
import { makePaginationQuery } from '../../../common/make-pagination-query';

View File

@@ -1,6 +1,6 @@
import $ from 'cafy';
import define from '../../../define';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import { Announcements } from '../../../../../models';
import { ApiError } from '../../../error';

View File

@@ -2,7 +2,7 @@ import $ from 'cafy';
import define from '../../define';
import { deleteFile } from '../../../../services/drive/delete-file';
import { DriveFiles } from '../../../../models';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
export const meta = {
desc: {

View File

@@ -14,5 +14,5 @@ export const meta = {
};
export default define(meta, async (ps) => {
await Logs.delete({});
await Logs.clear(); // TRUNCATE
});

View File

@@ -2,7 +2,7 @@ import $ from 'cafy';
import define from '../../../define';
import { DriveFiles } from '../../../../../models';
import { makePaginationQuery } from '../../../common/make-pagination-query';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
export const meta = {
desc: {

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../../define';
import { ApiError } from '../../../error';
import { DriveFiles } from '../../../../../models';

View File

@@ -1,11 +1,11 @@
import $ from 'cafy';
import define from '../../../define';
import { Emojis, DriveFiles } from '../../../../../models';
import { genId } from '../../../../../misc/gen-id';
import { genId } from '@/misc/gen-id';
import { getConnection } from 'typeorm';
import { insertModerationLog } from '../../../../../services/insert-moderation-log';
import { ApiError } from '../../../error';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import rndstr from 'rndstr';
import { publishBroadcastStream } from '../../../../../services/stream';

View File

@@ -1,11 +1,11 @@
import $ from 'cafy';
import define from '../../../define';
import { Emojis } from '../../../../../models';
import { genId } from '../../../../../misc/gen-id';
import { genId } from '@/misc/gen-id';
import { getConnection } from 'typeorm';
import { ApiError } from '../../../error';
import { DriveFile } from '../../../../../models/entities/drive-file';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import uploadFromUrl from '../../../../../services/drive/upload-from-url';
export const meta = {

View File

@@ -1,9 +1,9 @@
import $ from 'cafy';
import define from '../../../define';
import { Emojis } from '../../../../../models';
import { toPuny } from '../../../../../misc/convert-host';
import { toPuny } from '@/misc/convert-host';
import { makePaginationQuery } from '../../../common/make-pagination-query';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
export const meta = {
desc: {

View File

@@ -2,7 +2,7 @@ import $ from 'cafy';
import define from '../../../define';
import { Emojis } from '../../../../../models';
import { makePaginationQuery } from '../../../common/make-pagination-query';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import { Emoji } from '../../../../../models/entities/emoji';
export const meta = {

View File

@@ -1,6 +1,6 @@
import $ from 'cafy';
import define from '../../../define';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import { Emojis } from '../../../../../models';
import { getConnection } from 'typeorm';
import { insertModerationLog } from '../../../../../services/insert-moderation-log';

View File

@@ -1,6 +1,6 @@
import $ from 'cafy';
import define from '../../../define';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import { Emojis } from '../../../../../models';
import { getConnection } from 'typeorm';
import { ApiError } from '../../../error';

View File

@@ -1,7 +1,7 @@
import $ from 'cafy';
import define from '../../../define';
import { Instances } from '../../../../../models';
import { toPuny } from '../../../../../misc/convert-host';
import { toPuny } from '@/misc/convert-host';
import { fetchInstanceMetadata } from '../../../../../services/fetch-instance-metadata';
export const meta = {

View File

@@ -1,7 +1,7 @@
import $ from 'cafy';
import define from '../../../define';
import { Instances } from '../../../../../models';
import { toPuny } from '../../../../../misc/convert-host';
import { toPuny } from '@/misc/convert-host';
export const meta = {
desc: {

View File

@@ -1,7 +1,7 @@
import rndstr from 'rndstr';
import define from '../../define';
import { RegistrationTickets } from '../../../../models';
import { genId } from '../../../../misc/gen-id';
import { genId } from '@/misc/gen-id';
export const meta = {
desc: {
@@ -38,7 +38,7 @@ export default define(meta, async () => {
chars: '2-9A-HJ-NP-Z', // [0-9A-Z] w/o [01IO] (32 patterns)
});
await RegistrationTickets.save({
await RegistrationTickets.insert({
id: genId(),
createdAt: new Date(),
code,

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../../define';
import { Users } from '../../../../../models';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../../define';
import { Users } from '../../../../../models';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../../define';
import { ApiError } from '../../../error';
import { getNote } from '../../../common/getters';
@@ -53,7 +53,7 @@ export default define(meta, async (ps, user) => {
throw new ApiError(meta.errors.alreadyPromoted);
}
await PromoNotes.save({
await PromoNotes.insert({
noteId: note.id,
createdAt: new Date(),
expiresAt: new Date(ps.expiresAt),

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import * as bcrypt from 'bcryptjs';
import rndstr from 'rndstr';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { AbuseUserReports } from '../../../../models';

View File

@@ -2,7 +2,7 @@ import * as os from 'os';
import * as si from 'systeminformation';
import { getConnection } from 'typeorm';
import define from '../../define';
import redis from '../../../../db/redis';
import { redisClient } from '../../../../db/redis';
export const meta = {
requireCredential: true as const,
@@ -115,7 +115,7 @@ export default define(meta, async () => {
os: os.platform(),
node: process.version,
psql: await getConnection().query('SHOW server_version').then(x => x[0].server_version),
redis: redis.server_info.redis_version,
redis: redisClient.server_info.redis_version,
cpu: {
model: os.cpus()[0].model,
cores: os.cpus().length

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ModerationLogs } from '../../../../models';
import { makePaginationQuery } from '../../common/make-pagination-query';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { Users } from '../../../../models';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { Users } from '../../../../models';
import { insertModerationLog } from '../../../../services/insert-moderation-log';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import deleteFollowing from '../../../../services/following/delete';
import { Users, Followings, Notifications } from '../../../../models';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { Users } from '../../../../models';
import { insertModerationLog } from '../../../../services/insert-moderation-log';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { Users } from '../../../../models';
import { insertModerationLog } from '../../../../services/insert-moderation-log';

View File

@@ -3,8 +3,8 @@ import define from '../../define';
import { getConnection } from 'typeorm';
import { Meta } from '../../../../models/entities/meta';
import { insertModerationLog } from '../../../../services/insert-moderation-log';
import { DB_MAX_NOTE_TEXT_LENGTH } from '../../../../misc/hard-limits';
import { ID } from '../../../../misc/cafy-id';
import { DB_MAX_NOTE_TEXT_LENGTH } from '@/misc/hard-limits';
import { ID } from '@/misc/cafy-id';
export const meta = {
desc: {

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { getRemoteUser } from '../../common/getters';
import { updatePerson } from '../../../../remote/activitypub/models/person';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../define';
import { Announcements, AnnouncementReads } from '../../../models';
import { makePaginationQuery } from '../common/make-pagination-query';

View File

@@ -1,9 +1,10 @@
import $ from 'cafy';
import define from '../../define';
import { genId } from '../../../../misc/gen-id';
import { genId } from '@/misc/gen-id';
import { Antennas, UserLists, UserGroupJoinings } from '../../../../models';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import { ApiError } from '../../error';
import { publishInternalEvent } from '../../../../services/stream';
export const meta = {
desc: {
@@ -108,7 +109,7 @@ export default define(meta, async (ps, user) => {
}
}
const antenna = await Antennas.save({
const antenna = await Antennas.insert({
id: genId(),
createdAt: new Date(),
userId: user.id,
@@ -123,7 +124,9 @@ export default define(meta, async (ps, user) => {
withReplies: ps.withReplies,
withFile: ps.withFile,
notify: ps.notify,
});
}).then(x => Antennas.findOneOrFail(x.identifiers[0]));
publishInternalEvent('antennaCreated', antenna);
return await Antennas.pack(antenna);
});

View File

@@ -1,8 +1,9 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ApiError } from '../../error';
import { Antennas } from '../../../../models';
import { publishInternalEvent } from '../../../../services/stream';
export const meta = {
desc: {
@@ -42,4 +43,6 @@ export default define(meta, async (ps, user) => {
}
await Antennas.delete(antenna.id);
publishInternalEvent('antennaDeleted', antenna);
});

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { Antennas, Notes, AntennaNotes } from '../../../../models';
import { makePaginationQuery } from '../../common/make-pagination-query';
@@ -73,7 +73,11 @@ export default define(meta, async (ps, user) => {
const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId)
.andWhere(`note.id IN (${ antennaQuery.getQuery() })`)
.leftJoinAndSelect('note.user', 'user')
.innerJoinAndSelect('note.user', 'user')
.leftJoinAndSelect('note.reply', 'reply')
.leftJoinAndSelect('note.renote', 'renote')
.leftJoinAndSelect('reply.user', 'replyUser')
.leftJoinAndSelect('renote.user', 'renoteUser')
.setParameters(antennaQuery.getParameters());
generateVisibilityQuery(query, user);

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ApiError } from '../../error';
import { Antennas } from '../../../../models';

View File

@@ -1,8 +1,9 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ApiError } from '../../error';
import { Antennas, UserLists, UserGroupJoinings } from '../../../../models';
import { publishInternalEvent } from '../../../../services/stream';
export const meta = {
desc: {
@@ -141,5 +142,7 @@ export default define(meta, async (ps, user) => {
notify: ps.notify,
});
publishInternalEvent('antennaUpdated', Antennas.findOneOrFail(antenna.id));
return await Antennas.pack(antenna.id);
});

View File

@@ -1,15 +1,15 @@
import $ from 'cafy';
import define from '../../define';
import config from '../../../../config';
import config from '@/config';
import { createPerson } from '../../../../remote/activitypub/models/person';
import { createNote } from '../../../../remote/activitypub/models/note';
import Resolver from '../../../../remote/activitypub/resolver';
import { ApiError } from '../../error';
import { extractDbHost } from '../../../../misc/convert-host';
import { extractDbHost } from '@/misc/convert-host';
import { Users, Notes } from '../../../../models';
import { Note } from '../../../../models/entities/note';
import { User } from '../../../../models/entities/user';
import { fetchMeta } from '../../../../misc/fetch-meta';
import { fetchMeta } from '@/misc/fetch-meta';
import { validActor, validPost } from '../../../../remote/activitypub/type';
export const meta = {

View File

@@ -1,9 +1,9 @@
import $ from 'cafy';
import define from '../../define';
import { Apps } from '../../../../models';
import { genId } from '../../../../misc/gen-id';
import { genId } from '@/misc/gen-id';
import { unique } from '../../../../prelude/array';
import { secureRndstr } from '../../../../misc/secure-rndstr';
import { secureRndstr } from '@/misc/secure-rndstr';
export const meta = {
tags: ['app'],

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ApiError } from '../../error';
import { Apps } from '../../../../models';

View File

@@ -3,8 +3,8 @@ import $ from 'cafy';
import define from '../../define';
import { ApiError } from '../../error';
import { AuthSessions, AccessTokens, Apps } from '../../../../models';
import { genId } from '../../../../misc/gen-id';
import { secureRndstr } from '../../../../misc/secure-rndstr';
import { genId } from '@/misc/gen-id';
import { secureRndstr } from '@/misc/secure-rndstr';
export const meta = {
tags: ['auth'],
@@ -58,7 +58,7 @@ export default define(meta, async (ps, user) => {
const now = new Date();
// Insert access token doc
await AccessTokens.save({
await AccessTokens.insert({
id: genId(),
createdAt: now,
lastUsedAt: now,

View File

@@ -1,10 +1,10 @@
import { v4 as uuid } from 'uuid';
import $ from 'cafy';
import config from '../../../../../config';
import config from '@/config';
import define from '../../../define';
import { ApiError } from '../../../error';
import { Apps, AuthSessions } from '../../../../../models';
import { genId } from '../../../../../misc/gen-id';
import { genId } from '@/misc/gen-id';
export const meta = {
tags: ['auth'],

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import * as ms from 'ms';
import create from '../../../../services/blocking/create';
import define from '../../define';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import * as ms from 'ms';
import deleteBlocking from '../../../../services/blocking/delete';
import define from '../../define';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { Blockings } from '../../../../models';
import { makePaginationQuery } from '../../common/make-pagination-query';

View File

@@ -3,8 +3,8 @@ import define from '../../define';
import { ApiError } from '../../error';
import { Channels, DriveFiles } from '../../../../models';
import { Channel } from '../../../../models/entities/channel';
import { genId } from '../../../../misc/gen-id';
import { ID } from '../../../../misc/cafy-id';
import { genId } from '@/misc/gen-id';
import { ID } from '@/misc/cafy-id';
export const meta = {
tags: ['channels'],

View File

@@ -1,9 +1,10 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ApiError } from '../../error';
import { Channels, ChannelFollowings } from '../../../../models';
import { genId } from '../../../../misc/gen-id';
import { genId } from '@/misc/gen-id';
import { publishUserEvent } from '../../../../services/stream';
export const meta = {
tags: ['channels'],
@@ -36,10 +37,12 @@ export default define(meta, async (ps, user) => {
throw new ApiError(meta.errors.noSuchChannel);
}
await ChannelFollowings.save({
await ChannelFollowings.insert({
id: genId(),
createdAt: new Date(),
followerId: user.id,
followeeId: channel.id,
});
publishUserEvent(user.id, 'followChannel', channel);
});

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { Channels, ChannelFollowings } from '../../../../models';
import { makePaginationQuery } from '../../common/make-pagination-query';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { Channels } from '../../../../models';
import { makePaginationQuery } from '../../common/make-pagination-query';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ApiError } from '../../error';
import { Channels } from '../../../../models';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ApiError } from '../../error';
import { Notes, Channels } from '../../../../models';
@@ -87,7 +87,11 @@ export default define(meta, async (ps, user) => {
//#region Construct query
const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate)
.andWhere('note.channelId = :channelId', { channelId: channel.id })
.leftJoinAndSelect('note.user', 'user')
.innerJoinAndSelect('note.user', 'user')
.leftJoinAndSelect('note.reply', 'reply')
.leftJoinAndSelect('note.renote', 'renote')
.leftJoinAndSelect('reply.user', 'replyUser')
.leftJoinAndSelect('renote.user', 'renoteUser')
.leftJoinAndSelect('note.channel', 'channel');
//#endregion

View File

@@ -1,8 +1,9 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ApiError } from '../../error';
import { Channels, ChannelFollowings } from '../../../../models';
import { publishUserEvent } from '../../../../services/stream';
export const meta = {
tags: ['channels'],
@@ -39,4 +40,6 @@ export default define(meta, async (ps, user) => {
followerId: user.id,
followeeId: channel.id,
});
publishUserEvent(user.id, 'unfollowChannel', channel);
});

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ApiError } from '../../error';
import { Channels, DriveFiles } from '../../../../models';

View File

@@ -1,6 +1,6 @@
import $ from 'cafy';
import define from '../../../define';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import { convertLog } from '../../../../../services/chart/core';
import { perUserDriveChart } from '../../../../../services/chart';

View File

@@ -1,6 +1,6 @@
import $ from 'cafy';
import define from '../../../define';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import { convertLog } from '../../../../../services/chart/core';
import { perUserFollowingChart } from '../../../../../services/chart';

View File

@@ -1,6 +1,6 @@
import $ from 'cafy';
import define from '../../../define';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import { convertLog } from '../../../../../services/chart/core';
import { perUserNotesChart } from '../../../../../services/chart';

View File

@@ -1,6 +1,6 @@
import $ from 'cafy';
import define from '../../../define';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import { convertLog } from '../../../../../services/chart/core';
import { perUserReactionsChart } from '../../../../../services/chart';

View File

@@ -1,9 +1,9 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ClipNotes, Clips } from '../../../../models';
import { ApiError } from '../../error';
import { genId } from '../../../../misc/gen-id';
import { genId } from '@/misc/gen-id';
import { getNote } from '../../common/getters';
export const meta = {
@@ -68,7 +68,7 @@ export default define(meta, async (ps, user) => {
throw new ApiError(meta.errors.alreadyClipped);
}
await ClipNotes.save({
await ClipNotes.insert({
id: genId(),
noteId: note.id,
clipId: clip.id

View File

@@ -1,6 +1,6 @@
import $ from 'cafy';
import define from '../../define';
import { genId } from '../../../../misc/gen-id';
import { genId } from '@/misc/gen-id';
import { Clips } from '../../../../models';
export const meta = {

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ApiError } from '../../error';
import { Clips } from '../../../../models';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ClipNotes, Clips, Notes } from '../../../../models';
import { makePaginationQuery } from '../../common/make-pagination-query';
@@ -71,7 +71,11 @@ export default define(meta, async (ps, user) => {
const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId)
.andWhere(`note.id IN (${ clipQuery.getQuery() })`)
.leftJoinAndSelect('note.user', 'user')
.innerJoinAndSelect('note.user', 'user')
.leftJoinAndSelect('note.reply', 'reply')
.leftJoinAndSelect('note.renote', 'renote')
.leftJoinAndSelect('reply.user', 'replyUser')
.leftJoinAndSelect('renote.user', 'renoteUser')
.setParameters(clipQuery.getParameters());
if (user) {

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ApiError } from '../../error';
import { Clips } from '../../../../models';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ApiError } from '../../error';
import { Clips } from '../../../../models';

View File

@@ -1,5 +1,5 @@
import define from '../define';
import { fetchMeta } from '../../../misc/fetch-meta';
import { fetchMeta } from '@/misc/fetch-meta';
import { DriveFiles } from '../../../models';
export const meta = {

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { DriveFiles } from '../../../../models';
import { makePaginationQuery } from '../../common/make-pagination-query';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../../define';
import { ApiError } from '../../../error';
import { DriveFiles, Notes } from '../../../../../models';

View File

@@ -1,6 +1,6 @@
import * as ms from 'ms';
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import create from '../../../../../services/drive/add-file';
import define from '../../../define';
import { apiLogger } from '../../../logger';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import { deleteFile } from '../../../../../services/drive/delete-file';
import { publishDriveStream } from '../../../../../services/stream';
import define from '../../../define';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../../define';
import { DriveFiles } from '../../../../../models';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../../define';
import { ApiError } from '../../../error';
import { DriveFile } from '../../../../../models/entities/drive-file';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import { publishDriveStream } from '../../../../../services/stream';
import define from '../../../define';
import { ApiError } from '../../../error';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import * as ms from 'ms';
import uploadFromUrl from '../../../../../services/drive/upload-from-url';
import define from '../../../define';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { DriveFolders } from '../../../../models';
import { makePaginationQuery } from '../../common/make-pagination-query';

View File

@@ -1,10 +1,10 @@
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import { publishDriveStream } from '../../../../../services/stream';
import define from '../../../define';
import { ApiError } from '../../../error';
import { DriveFolders } from '../../../../../models';
import { genId } from '../../../../../misc/gen-id';
import { genId } from '@/misc/gen-id';
export const meta = {
desc: {

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../../define';
import { publishDriveStream } from '../../../../../services/stream';
import { ApiError } from '../../../error';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../../define';
import { DriveFolders } from '../../../../../models';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../../define';
import { ApiError } from '../../../error';
import { DriveFolders } from '../../../../../models';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import { publishDriveStream } from '../../../../../services/stream';
import define from '../../../define';
import { ApiError } from '../../../error';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { DriveFiles } from '../../../../models';
import { makePaginationQuery } from '../../common/make-pagination-query';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { Followings } from '../../../../models';
import { makePaginationQuery } from '../../common/make-pagination-query';

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { Followings } from '../../../../models';
import { makePaginationQuery } from '../../common/make-pagination-query';

View File

@@ -1,8 +1,8 @@
import $ from 'cafy';
import config from '../../../../config';
import config from '@/config';
import define from '../../define';
import { Instances } from '../../../../models';
import { fetchMeta } from '../../../../misc/fetch-meta';
import { fetchMeta } from '@/misc/fetch-meta';
export const meta = {
tags: ['federation'],

View File

@@ -1,8 +1,8 @@
import $ from 'cafy';
import define from '../../define';
import { Instances } from '../../../../models';
import { toPuny } from '../../../../misc/convert-host';
import config from '../../../../config';
import { toPuny } from '@/misc/convert-host';
import config from '@/config';
export const meta = {
tags: ['federation'],

View File

@@ -1,5 +1,5 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { Users } from '../../../../models';
import { makePaginationQuery } from '../../common/make-pagination-query';

Some files were not shown because too many files have changed in this diff Show More