Compare commits

...

6 commits

Author SHA1 Message Date
0569bc3e15
update yarn.lock 2024-10-10 11:55:06 +02:00
880382a45f
server: remove unused dependencies 2024-10-10 11:42:30 +02:00
b63e03942e
server: remove slow option 2024-10-10 11:34:29 +02:00
67ebf83ed7
server: remove cli-highlight
This function is only used for highlighting logged PostgreSQL queries
which do not show up coloured in my log anyway so seems irrelevant.

Changelog: Changed
2024-10-10 11:23:30 +02:00
ebafed4a97
server: remove docker support
Changelog: Removed
2024-10-10 11:16:16 +02:00
d87de46217
server: remove elasticsearch
Changelog: Removed
2024-10-10 11:13:20 +02:00
20 changed files with 59 additions and 635 deletions

View file

@ -1,4 +0,0 @@
# db settings
POSTGRES_PASSWORD=example-foundkey-pass
POSTGRES_USER=example-foundkey-user
POSTGRES_DB=foundkey

View file

@ -68,17 +68,6 @@ redis:
#prefix: example-prefix
#db: 1
# ┌─────────────────────────────┐
#───┘ Elasticsearch configuration └─────────────────────────────
# Elasticsearch is optional.
#elasticsearch:
# host: localhost
# port: 9200
# ssl: false
# user:
# pass:
# ┌─────────────────────┐
#───┘ Other configuration └─────────────────────────────────────

View file

@ -1,12 +0,0 @@
.autogen
.config
.woodpecker
Dockerfile
build/
built/
db/
docker-compose.yml
elasticsearch/
node_modules/
redis/
files/

2
.gitignore vendored
View file

@ -21,7 +21,6 @@ report.*.json
# config
/.config/*
!/.config/example.yml
!/.config/docker_example.env
# misskey
/build
@ -29,7 +28,6 @@ built
/data
/.cache-loader
/db
/elasticsearch
npm-debug.log
*.pem
run.bat

View file

@ -1,36 +0,0 @@
FROM node:18.12.1-alpine3.16 AS base
ARG NODE_ENV=production
WORKDIR /foundkey
ENV BUILD_DEPS autoconf automake file g++ gcc libc-dev libtool make nasm pkgconfig python3 zlib-dev git
FROM base AS builder
COPY . ./
RUN apk add --no-cache $BUILD_DEPS && \
git submodule update --init && \
yarn install && \
yarn build && \
rm -rf .git
FROM base AS runner
RUN apk add --no-cache \
ffmpeg \
tini
ENTRYPOINT ["/sbin/tini", "--"]
COPY --from=builder /foundkey/node_modules ./node_modules
COPY --from=builder /foundkey/built ./built
COPY --from=builder /foundkey/packages/backend/node_modules ./packages/backend/node_modules
COPY --from=builder /foundkey/packages/backend/built ./packages/backend/built
COPY --from=builder /foundkey/packages/foundkey-js/built ./packages/foundkey-js/built
COPY . ./
ENV NODE_ENV=production
CMD ["npm", "run", "migrateandstart"]

View file

@ -1,52 +0,0 @@
version: "3"
services:
web:
build: .
restart: always
links:
- db
- redis
# - es
ports:
- "127.0.0.1:3000:3000"
networks:
- internal_network
- external_network
volumes:
- ./files:/foundkey/files
- ./.config:/foundkey/.config:ro
redis:
restart: always
image: redis:7.0-alpine
networks:
- internal_network
volumes:
- ./redis:/data
db:
restart: always
image: postgres:14.5-alpine
networks:
- internal_network
env_file:
- .config/docker.env
volumes:
- ./db:/var/lib/postgresql/data
# es:
# restart: always
# image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.4.2
# environment:
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
# - "TAKE_FILE_OWNERSHIP=111"
# networks:
# - internal_network
# volumes:
# - ./elasticsearch:/usr/share/elasticsearch/data
networks:
internal_network:
internal: true
external_network:

View file

@ -1,85 +0,0 @@
# Create FoundKey instance with Docker Compose
This guide describes how to install and setup FoundKey with Docker Compose.
**WARNING:**
Never change the domain name (hostname) of an instance once you start using it!
## Requirements
- Docker or Podman
- Docker Compose plugin (or podman-compose)
If using Podman, replace `docker` with `podman`. Commands using `docker compose` should be replaced with `podman-compose`.
You may need to prefix `docker` commands with `sudo` unless your user is in the `docker` group or you are running Docker in rootless mode.
## Get the repository
```sh
git clone https://akkoma.dev/FoundKeyGang/FoundKey.git
cd FoundKey
```
To make it easier to perform your own changes on top, we suggest making a branch based on the latest tag.
In this example, we'll use `v13.0.0-preview1` as the tag to check out and `my-branch` as the branch name.
```sh
git checkout tags/v13.0.0-preview1 -b my-branch
```
## Configure
Copy example configuration files with following:
```sh
cp .config/docker_example.yml .config/default.yml
cp .config/docker_example.env .config/docker.env
```
Edit `default.yml` and `docker.env` according to the instructions in the files.
You will need to set the database host to `db` and Redis host to `redis` in order to use the internal container network for these services.
Edit `docker-compose.yml` if necessary. (e.g. if you want to change the port).
If you are using SELinux (eg. you're on Fedora or a RHEL derivative), you'll want to add the `Z` mount flag to the volume mounts to allow the containers to access the contents of those volumes.
Also check out the [Configure Foundkey](./install.md#configure-foundkey) section in the ordinary installation instructions.
## Build and initialize
The following command will build FoundKey and initialize the database.
This will take some time.
``` shell
docker compose build
docker compose run --rm web yarn run init
```
## Launch
You can start FoundKey with the following command:
```sh
docker compose up -d
```
In case you are encountering issues, you can run `docker compose logs -f` to get the log output of the running containers.
## How to update your FoundKey server
When updating, be sure to check the [release notes](https://akkoma.dev/FoundKeyGang/FoundKey/src/branch/main/CHANGELOG.md) to know in advance the changes and whether or not additional work is required (in most cases, it is not).
To update your branch to the latest tag (in this example `v13.0.0-preview2`), you can do the following:
```sh
git fetch -t
# Use --squash if you want to merge all of the changes in the tag into a single commit.
# Useful if you have made additional changes.
git merge tags/v13.0.0-preview2
# Rebuild and restart the docker container.
docker compose build
docker compose down && docker compose up -d
```
It may take some time depending on the contents of the update and the size of the database.
## How to execute CLI commands
```sh
docker compose run --rm web node packages/backend/built/tools/foo bar
```

View file

@ -1,8 +0,0 @@
{
"node-option": [
"experimental-specifier-resolution=node"
],
"slow": 1000,
"timeout": 30000,
"exit": true
}

View file

@ -15,26 +15,19 @@
"@bull-board/api": "^4.3.1",
"@bull-board/koa": "^4.3.1",
"@discordapp/twemoji": "14.0.2",
"@elastic/elasticsearch": "7.11.0",
"@koa/cors": "3.1.0",
"@koa/multer": "3.0.0",
"@koa/router": "9.0.1",
"@peertube/http-signature": "1.7.0",
"@sinonjs/fake-timers": "9.1.2",
"@syuilo/aiscript": "0.11.1",
"abort-controller": "3.0.0",
"ajv": "8.11.0",
"archiver": "5.3.1",
"argon2": "^0.30.2",
"autobind-decorator": "2.4.0",
"aws-sdk": "2.1165.0",
"bcryptjs": "2.4.3",
"blurhash": "1.1.5",
"bull": "4.8.4",
"cacheable-lookup": "6.0.4",
"cbor": "8.1.0",
"cli-highlight": "2.1.11",
"color-convert": "2.0.1",
"content-disposition": "0.5.4",
"date-fns": "2.28.0",
"decompress": "4.2.1",
@ -52,8 +45,6 @@
"is-svg": "4.3.2",
"js-yaml": "4.1.0",
"jsdom": "20.0.0",
"json5": "2.2.1",
"json5-loader": "4.0.1",
"jsonld": "6.0.0",
"jsrsasign": "10.5.25",
"katex": "^0.16.0",
@ -64,7 +55,6 @@
"koa-logger": "3.2.1",
"koa-mount": "4.0.0",
"koa-send": "5.0.1",
"koa-slow": "2.1.0",
"koa-views": "7.0.2",
"mfm-js": "0.23.3",
"mime-types": "2.1.35",
@ -85,9 +75,7 @@
"ratelimiter": "3.4.1",
"re2": "1.17.8",
"redis-lock": "0.1.4",
"reflect-metadata": "0.1.13",
"rename": "1.0.4",
"require-all": "3.0.0",
"rss-parser": "3.12.0",
"sanitize-html": "2.7.0",
"semver": "7.3.7",
@ -95,14 +83,10 @@
"speakeasy": "2.0.0",
"strict-event-emitter-types": "2.0.0",
"stringz": "2.1.0",
"style-loader": "3.3.1",
"systeminformation": "5.11.22",
"tinycolor2": "1.4.2",
"tmp": "0.2.1",
"ts-loader": "9.3.1",
"ts-node": "10.9.1",
"tsc-alias": "1.7.0",
"tsconfig-paths": "4.1.0",
"twemoji-parser": "14.0.0",
"typeorm": "0.3.7",
"uuid": "8.3.2",

View file

@ -1,14 +0,0 @@
declare module 'koa-slow' {
import { Middleware } from 'koa';
interface ISlowOptions {
url?: RegExp;
delay?: number;
}
function slow(options?: ISlowOptions): Middleware;
namespace slow {} // Hack
export = slow;
}

View file

@ -24,14 +24,6 @@ export type Source = {
db?: number;
prefix?: string;
};
elasticsearch?: {
host: string;
port: number;
ssl?: boolean;
user?: string;
pass?: string;
index?: string;
};
proxy?: string;
proxySmtp?: string;

View file

@ -1,56 +0,0 @@
import * as elasticsearch from '@elastic/elasticsearch';
import config from '@/config/index.js';
const index = {
settings: {
analysis: {
analyzer: {
ngram: {
tokenizer: 'ngram',
},
},
},
},
mappings: {
properties: {
text: {
type: 'text',
index: true,
analyzer: 'ngram',
},
userId: {
type: 'keyword',
index: true,
},
userHost: {
type: 'keyword',
index: true,
},
},
},
};
// Init ElasticSearch connection
const client = config.elasticsearch ? new elasticsearch.Client({
node: `${config.elasticsearch.ssl ? 'https://' : 'http://'}${config.elasticsearch.host}:${config.elasticsearch.port}`,
auth: (config.elasticsearch.user && config.elasticsearch.pass) ? {
username: config.elasticsearch.user,
password: config.elasticsearch.pass,
} : undefined,
pingTimeout: 30000,
}) : null;
if (client) {
client.indices.exists({
index: config.elasticsearch.index || 'misskey_note',
}).then(exist => {
if (!exist.body) {
client.indices.create({
index: config.elasticsearch.index || 'misskey_note',
body: index,
});
}
});
}
export default client;

View file

@ -4,7 +4,6 @@ import pg from 'pg';
pg.types.setTypeParser(20, Number);
import { Logger, DataSource } from 'typeorm';
import * as highlight from 'cli-highlight';
import config from '@/config/index.js';
import { SECOND } from '@/const.js';
@ -74,22 +73,16 @@ import { dbLogger } from './logger.js';
const sqlLogger = dbLogger.createSubLogger('sql');
class MyCustomLogger implements Logger {
private highlight(sql: string): string {
return highlight.highlight(sql, {
language: 'sql', ignoreIllegals: true,
});
}
public logQuery(query: string): void {
sqlLogger.info(this.highlight(query).substring(0, 100));
sqlLogger.info(query);
}
public logQueryError(error: string, query: string): void {
sqlLogger.error(this.highlight(query));
sqlLogger.error(query);
}
public logQuerySlow(time: number, query: string): void {
sqlLogger.warn(this.highlight(query));
sqlLogger.warn(query);
}
public logSchemaBuild(message: string): void {

View file

@ -13,7 +13,6 @@ export const envOption = {
noDaemons: false,
disableClustering: false,
withLogTime: false,
slow: false,
logLevel: LOG_LEVELS.info,
};

View file

@ -203,10 +203,6 @@ export const meta = {
type: 'boolean',
optional: false, nullable: false,
},
elasticsearch: {
type: 'boolean',
optional: false, nullable: false,
},
hcaptcha: {
type: 'boolean',
optional: false, nullable: false,
@ -319,7 +315,6 @@ export default define(meta, paramDef, async () => {
localTimeLine: !instance.disableLocalTimeline,
globalTimeLine: !instance.disableGlobalTimeline,
emailRequiredForSignup: instance.emailRequiredForSignup,
elasticsearch: config.elasticsearch ? true : false,
hcaptcha: instance.enableHcaptcha,
recaptcha: instance.enableRecaptcha,
objectStorage: instance.useObjectStorage,

View file

@ -1,7 +1,4 @@
import { In } from 'typeorm';
import { Notes } from '@/models/index.js';
import config from '@/config/index.js';
import es from '@/db/elasticsearch.js';
import define from '@/server/api/define.js';
import { makePaginationQuery } from '@/server/api/common/make-pagination-query.js';
import { visibilityQuery } from '@/server/api/common/generate-visibility-query.js';
@ -45,96 +42,34 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
if (es == null) {
const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId);
const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId);
if (ps.userId) {
query.andWhere('note.userId = :userId', { userId: ps.userId });
} else if (ps.host) {
query.andWhere('note.userHost = :host', { host: ps.host });
} else if (ps.channelId) {
query.andWhere('note.channelId = :channelId', { channelId: ps.channelId });
}
query
.andWhere('note.text ILIKE :q', { q: `%${ps.query}%` })
.innerJoinAndSelect('note.user', 'user')
.leftJoinAndSelect('user.avatar', 'avatar')
.leftJoinAndSelect('user.banner', 'banner')
.leftJoinAndSelect('note.reply', 'reply')
.leftJoinAndSelect('note.renote', 'renote')
.leftJoinAndSelect('reply.user', 'replyUser')
.leftJoinAndSelect('replyUser.avatar', 'replyUserAvatar')
.leftJoinAndSelect('replyUser.banner', 'replyUserBanner')
.leftJoinAndSelect('renote.user', 'renoteUser')
.leftJoinAndSelect('renoteUser.avatar', 'renoteUserAvatar')
.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner');
if (me) generateMutedUserQuery(query, me);
if (me) generateBlockedUserQuery(query, me);
const notes = await visibilityQuery(query, me).take(ps.limit).getMany();
return await Notes.packMany(notes, me);
} else {
const userQuery = ps.userId != null ? [{
term: {
userId: ps.userId,
},
}] : [];
const hostQuery = ps.userId == null ?
ps.host === null ? [{
bool: {
must_not: {
exists: {
field: 'userHost',
},
},
},
}] : ps.host !== undefined ? [{
term: {
userHost: ps.host,
},
}] : []
: [];
const result = await es.search({
index: config.elasticsearch.index || 'misskey_note',
body: {
size: ps.limit,
from: ps.offset,
query: {
bool: {
must: [{
simple_query_string: {
fields: ['text'],
query: ps.query.toLowerCase(),
default_operator: 'and',
},
}, ...hostQuery, ...userQuery],
},
},
sort: [{
_doc: 'desc',
}],
},
});
const hits = result.body.hits.hits.map((hit: any) => hit._id);
if (hits.length === 0) return [];
// Fetch found notes
const notes = await Notes.find({
where: {
id: In(hits),
},
order: {
id: -1,
},
});
return await Notes.packMany(notes, me);
if (ps.userId) {
query.andWhere('note.userId = :userId', { userId: ps.userId });
} else if (ps.host) {
query.andWhere('note.userHost = :host', { host: ps.host });
} else if (ps.channelId) {
query.andWhere('note.channelId = :channelId', { channelId: ps.channelId });
}
query
.andWhere('note.text ILIKE :q', { q: `%${ps.query}%` })
.innerJoinAndSelect('note.user', 'user')
.leftJoinAndSelect('user.avatar', 'avatar')
.leftJoinAndSelect('user.banner', 'banner')
.leftJoinAndSelect('note.reply', 'reply')
.leftJoinAndSelect('note.renote', 'renote')
.leftJoinAndSelect('reply.user', 'replyUser')
.leftJoinAndSelect('replyUser.avatar', 'replyUserAvatar')
.leftJoinAndSelect('replyUser.banner', 'replyUserBanner')
.leftJoinAndSelect('renote.user', 'renoteUser')
.leftJoinAndSelect('renoteUser.avatar', 'renoteUserAvatar')
.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner');
if (me) generateMutedUserQuery(query, me);
if (me) generateBlockedUserQuery(query, me);
const notes = await visibilityQuery(query, me).take(ps.limit).getMany();
return await Notes.packMany(notes, me);
});

View file

@ -9,7 +9,6 @@ import Koa from 'koa';
import Router from '@koa/router';
import mount from 'koa-mount';
import koaLogger from 'koa-logger';
import * as slow from 'koa-slow';
import { IsNull } from 'typeorm';
import config from '@/config/index.js';
@ -40,13 +39,6 @@ if (!['production', 'test'].includes(process.env.NODE_ENV || '')) {
app.use(koaLogger(str => {
serverLogger.info(str);
}));
// Delay
if (envOption.slow) {
app.use(slow({
delay: 3000,
}));
}
}
// HSTS

View file

@ -1,8 +1,5 @@
import es from '@/db/elasticsearch.js';
import config from '@/config/index.js';
import { Note } from '@/models/entities/note.js';
import { UserProfiles } from '@/models/index.js';
import { normalizeForSearch } from '@/misc/normalize-for-search.js';
import { Cache } from '@/misc/cache.js';
import { UserProfile } from '@/models/entities/user-profile.js';
import { MINUTE } from '@/const.js';
@ -16,17 +13,3 @@ export const mutedWordsCache = new Cache<{ userId: UserProfile['userId']; mutedW
select: ['userId', 'mutedWords'],
}),
);
export function index(note: Note): void {
if (note.text == null || config.elasticsearch == null) return;
es.index({
index: config.elasticsearch.index || 'misskey_note',
id: note.id.toString(),
body: {
text: normalizeForSearch(note.text),
userId: note.userId,
userHost: note.userHost,
},
});
}

View file

@ -26,7 +26,7 @@ import { registerOrFetchInstanceDoc } from '../register-or-fetch-instance-doc.js
import { createNotification } from '../create-notification.js';
import { addNoteToAntenna } from '../add-note-to-antenna.js';
import { deliverToRelays } from '../relay.js';
import { mutedWordsCache, index } from './index.js';
import { mutedWordsCache } from './index.js';
import { Polls } from '@/models/index.js';
import { Poll } from '@/models/entities/poll.js';
@ -399,9 +399,6 @@ export async function sideEffects(user: User, note: Note, silent = false, create
// TODO AP deliver
}
// Register to search database
index(note);
}
async function notifyWatchers(noteId: Note['id'], user: { id: User['id']; }, nm: NotificationManager, type: NotificationType): Promise<void> {

220
yarn.lock
View file

@ -593,19 +593,6 @@ __metadata:
languageName: node
linkType: hard
"@elastic/elasticsearch@npm:7.11.0":
version: 7.11.0
resolution: "@elastic/elasticsearch@npm:7.11.0"
dependencies:
debug: ^4.1.1
hpagent: ^0.1.1
ms: ^2.1.1
pump: ^3.0.0
secure-json-parse: ^2.1.0
checksum: 58aee93f1b0d216ecf7fd936c6310123fa05b50a8419207820a483e31f2e5110ae54747111ecf57a2237a99765eb7bf1b78aa405f538132c551cf7959cc2cd99
languageName: node
linkType: hard
"@esbuild/linux-loong64@npm:0.14.54":
version: 0.14.54
resolution: "@esbuild/linux-loong64@npm:0.14.54"
@ -1378,15 +1365,6 @@ __metadata:
languageName: node
linkType: hard
"@sinonjs/fake-timers@npm:9.1.2, @sinonjs/fake-timers@npm:^9.1.2":
version: 9.1.2
resolution: "@sinonjs/fake-timers@npm:9.1.2"
dependencies:
"@sinonjs/commons": ^1.7.0
checksum: 7d3aef54e17c1073101cb64d953157c19d62a40e261a30923fa1ee337b049c5f29cc47b1f0c477880f42b5659848ba9ab897607ac8ea4acd5c30ddcfac57fca6
languageName: node
linkType: hard
"@sinonjs/fake-timers@npm:^7.0.4":
version: 7.1.2
resolution: "@sinonjs/fake-timers@npm:7.1.2"
@ -1405,6 +1383,15 @@ __metadata:
languageName: node
linkType: hard
"@sinonjs/fake-timers@npm:^9.1.2":
version: 9.1.2
resolution: "@sinonjs/fake-timers@npm:9.1.2"
dependencies:
"@sinonjs/commons": ^1.7.0
checksum: 7d3aef54e17c1073101cb64d953157c19d62a40e261a30923fa1ee337b049c5f29cc47b1f0c477880f42b5659848ba9ab897607ac8ea4acd5c30ddcfac57fca6
languageName: node
linkType: hard
"@sinonjs/samsam@npm:^7.0.1":
version: 7.0.1
resolution: "@sinonjs/samsam@npm:7.0.1"
@ -1889,7 +1876,7 @@ __metadata:
languageName: node
linkType: hard
"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9":
"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.9":
version: 7.0.11
resolution: "@types/json-schema@npm:7.0.11"
checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d
@ -2679,7 +2666,7 @@ __metadata:
languageName: node
linkType: hard
"abort-controller@npm:3.0.0, abort-controller@npm:^3.0.0":
"abort-controller@npm:^3.0.0":
version: 3.0.0
resolution: "abort-controller@npm:3.0.0"
dependencies:
@ -2779,15 +2766,6 @@ __metadata:
languageName: node
linkType: hard
"ajv-keywords@npm:^3.5.2":
version: 3.5.2
resolution: "ajv-keywords@npm:3.5.2"
peerDependencies:
ajv: ^6.9.1
checksum: 7dc5e5931677a680589050f79dcbe1fefbb8fea38a955af03724229139175b433c63c68f7ae5f86cf8f65d55eb7c25f75a046723e2e58296707617ca690feae9
languageName: node
linkType: hard
"ajv@npm:8.11.0":
version: 8.11.0
resolution: "ajv@npm:8.11.0"
@ -2800,7 +2778,7 @@ __metadata:
languageName: node
linkType: hard
"ajv@npm:^6.10.0, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:~6.12.6":
"ajv@npm:^6.10.0, ajv@npm:^6.12.4, ajv@npm:~6.12.6":
version: 6.12.6
resolution: "ajv@npm:6.12.6"
dependencies:
@ -3437,14 +3415,11 @@ __metadata:
"@bull-board/api": ^4.3.1
"@bull-board/koa": ^4.3.1
"@discordapp/twemoji": 14.0.2
"@elastic/elasticsearch": 7.11.0
"@koa/cors": 3.1.0
"@koa/multer": 3.0.0
"@koa/router": 9.0.1
"@peertube/http-signature": 1.7.0
"@redocly/openapi-core": 1.0.0-beta.97
"@sinonjs/fake-timers": 9.1.2
"@syuilo/aiscript": 0.11.1
"@types/bcryptjs": 2.4.2
"@types/bull": 3.15.8
"@types/cbor": 6.0.0
@ -3491,19 +3466,15 @@ __metadata:
"@types/ws": 8.5.3
"@typescript-eslint/eslint-plugin": ^5.46.1
"@typescript-eslint/parser": ^5.46.1
abort-controller: 3.0.0
ajv: 8.11.0
archiver: 5.3.1
argon2: ^0.30.2
autobind-decorator: 2.4.0
aws-sdk: 2.1165.0
bcryptjs: 2.4.3
blurhash: 1.1.5
bull: 4.8.4
cacheable-lookup: 6.0.4
cbor: 8.1.0
cli-highlight: 2.1.11
color-convert: 2.0.1
content-disposition: 0.5.4
date-fns: 2.28.0
decompress: 4.2.1
@ -3526,8 +3497,6 @@ __metadata:
is-svg: 4.3.2
js-yaml: 4.1.0
jsdom: 20.0.0
json5: 2.2.1
json5-loader: 4.0.1
jsonld: 6.0.0
jsrsasign: 10.5.25
katex: ^0.16.0
@ -3538,7 +3507,6 @@ __metadata:
koa-logger: 3.2.1
koa-mount: 4.0.0
koa-send: 5.0.1
koa-slow: 2.1.0
koa-views: 7.0.2
mfm-js: 0.23.3
mime-types: 2.1.35
@ -3559,9 +3527,7 @@ __metadata:
ratelimiter: 3.4.1
re2: 1.17.8
redis-lock: 0.1.4
reflect-metadata: 0.1.13
rename: 1.0.4
require-all: 3.0.0
rss-parser: 3.12.0
sanitize-html: 2.7.0
semver: 7.3.7
@ -3570,14 +3536,10 @@ __metadata:
speakeasy: 2.0.0
strict-event-emitter-types: 2.0.0
stringz: 2.1.0
style-loader: 3.3.1
systeminformation: 5.11.22
tinycolor2: 1.4.2
tmp: 0.2.1
ts-loader: 9.3.1
ts-node: 10.9.1
tsc-alias: 1.7.0
tsconfig-paths: 4.1.0
twemoji-parser: 14.0.0
typeorm: 0.3.7
typescript: ^4.9.4
@ -3647,13 +3609,6 @@ __metadata:
languageName: node
linkType: hard
"big.js@npm:^5.2.2":
version: 5.2.2
resolution: "big.js@npm:5.2.2"
checksum: b89b6e8419b097a8fb4ed2399a1931a68c612bce3cfd5ca8c214b2d017531191070f990598de2fc6f3f993d91c0f08aa82697717f6b3b8732c9731866d233c9e
languageName: node
linkType: hard
"binary-extensions@npm:^2.0.0":
version: 2.0.0
resolution: "binary-extensions@npm:2.0.0"
@ -4303,7 +4258,7 @@ __metadata:
languageName: node
linkType: hard
"cli-highlight@npm:2.1.11, cli-highlight@npm:^2.1.11":
"cli-highlight@npm:^2.1.11":
version: 2.1.11
resolution: "cli-highlight@npm:2.1.11"
dependencies:
@ -4547,15 +4502,6 @@ __metadata:
languageName: node
linkType: hard
"color-convert@npm:2.0.1, color-convert@npm:^2.0.1":
version: 2.0.1
resolution: "color-convert@npm:2.0.1"
dependencies:
color-name: ~1.1.4
checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336
languageName: node
linkType: hard
"color-convert@npm:^1.3.0, color-convert@npm:^1.9.0":
version: 1.9.3
resolution: "color-convert@npm:1.9.3"
@ -4565,6 +4511,15 @@ __metadata:
languageName: node
linkType: hard
"color-convert@npm:^2.0.1":
version: 2.0.1
resolution: "color-convert@npm:2.0.1"
dependencies:
color-name: ~1.1.4
checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336
languageName: node
linkType: hard
"color-name@npm:1.1.3":
version: 1.1.3
resolution: "color-name@npm:1.1.3"
@ -5660,13 +5615,6 @@ __metadata:
languageName: node
linkType: hard
"emojis-list@npm:^3.0.0":
version: 3.0.0
resolution: "emojis-list@npm:3.0.0"
checksum: ddaaa02542e1e9436c03970eeed445f4ed29a5337dfba0fe0c38dfdd2af5da2429c2a0821304e8a8d1cadf27fdd5b22ff793571fa803ae16852a6975c65e8e70
languageName: node
linkType: hard
"encode-utf8@npm:^1.0.3":
version: 1.0.3
resolution: "encode-utf8@npm:1.0.3"
@ -5699,16 +5647,6 @@ __metadata:
languageName: node
linkType: hard
"enhanced-resolve@npm:^5.0.0":
version: 5.10.0
resolution: "enhanced-resolve@npm:5.10.0"
dependencies:
graceful-fs: ^4.2.4
tapable: ^2.2.0
checksum: 0bb9830704db271610f900e8d79d70a740ea16f251263362b0c91af545576d09fe50103496606c1300a05e588372d6f9780a9bc2e30ce8ef9b827ec8f44687ff
languageName: node
linkType: hard
"entities@npm:^2.0.0, entities@npm:^2.0.3":
version: 2.2.0
resolution: "entities@npm:2.2.0"
@ -7629,7 +7567,7 @@ __metadata:
languageName: node
linkType: hard
"graceful-fs@npm:^4.0.0, graceful-fs@npm:^4.1.10, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9":
"graceful-fs@npm:^4.0.0, graceful-fs@npm:^4.1.10, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9":
version: 4.2.11
resolution: "graceful-fs@npm:4.2.11"
checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7
@ -7902,7 +7840,7 @@ __metadata:
languageName: node
linkType: hard
"hpagent@npm:0.1.2, hpagent@npm:^0.1.1":
"hpagent@npm:0.1.2":
version: 0.1.2
resolution: "hpagent@npm:0.1.2"
checksum: 1918518ab937d9fa615a47b94489e23662547bc1edf27069ee9bf40bfefb94da65eb142b6f42336b4b0752fce87f66c284d92b97340fd2a90b24aa3616b5450d
@ -9729,20 +9667,7 @@ __metadata:
languageName: node
linkType: hard
"json5-loader@npm:4.0.1":
version: 4.0.1
resolution: "json5-loader@npm:4.0.1"
dependencies:
json5: ^2.1.3
loader-utils: ^2.0.0
schema-utils: ^3.0.0
peerDependencies:
webpack: ^4.0.0 || ^5.0.0
checksum: 89e82429dc71d4c76b3e5d27e4f1437de38e1963bb81ba392b340e3993b6b5fb7a16de6aec233f173f5e8249b5ac2cc371bf0be6734f678acee6f3498294f0e3
languageName: node
linkType: hard
"json5@npm:2.2.1, json5@npm:2.x, json5@npm:^2.1.2, json5@npm:^2.1.3, json5@npm:^2.2.1":
"json5@npm:2.2.1, json5@npm:2.x, json5@npm:^2.2.1":
version: 2.2.1
resolution: "json5@npm:2.2.1"
bin:
@ -10023,16 +9948,6 @@ __metadata:
languageName: node
linkType: hard
"koa-slow@npm:2.1.0":
version: 2.1.0
resolution: "koa-slow@npm:2.1.0"
dependencies:
lodash.isregexp: 3.0.5
q: 1.4.1
checksum: 1b2fa6c709cd4016f5c5c4f45a8bd569910fdfef482c85120f2bbddd5cf274d714b0d231659ac3335d15b03f0debdb71b14f3cc54624921be7d808df7f8ac513
languageName: node
linkType: hard
"koa-static@npm:^5.0.0":
version: 5.0.0
resolution: "koa-static@npm:5.0.0"
@ -10237,17 +10152,6 @@ __metadata:
languageName: node
linkType: hard
"loader-utils@npm:^2.0.0":
version: 2.0.2
resolution: "loader-utils@npm:2.0.2"
dependencies:
big.js: ^5.2.2
emojis-list: ^3.0.0
json5: ^2.1.2
checksum: 9078d1ed47cadc57f4c6ddbdb2add324ee7da544cea41de3b7f1128e8108fcd41cd3443a85b7ee8d7d8ac439148aa221922774efe4cf87506d4fb054d5889303
languageName: node
linkType: hard
"locate-path@npm:^5.0.0":
version: 5.0.0
resolution: "locate-path@npm:5.0.0"
@ -10315,13 +10219,6 @@ __metadata:
languageName: node
linkType: hard
"lodash.isregexp@npm:3.0.5":
version: 3.0.5
resolution: "lodash.isregexp@npm:3.0.5"
checksum: 973f4887f003af746bf838267d9d1ea39d912f579cf402cca67049b1e4487daf2a25b10c70e4fc1c7ad97ee3be6d43d38c9839bc9c55c40e94b62dfc60f601c7
languageName: node
linkType: hard
"lodash.memoize@npm:4.x, lodash.memoize@npm:^4.1.2":
version: 4.1.2
resolution: "lodash.memoize@npm:4.1.2"
@ -10638,7 +10535,7 @@ __metadata:
languageName: node
linkType: hard
"micromatch@npm:^4.0.0, micromatch@npm:^4.0.4":
"micromatch@npm:^4.0.4":
version: 4.0.5
resolution: "micromatch@npm:4.0.5"
dependencies:
@ -12907,13 +12804,6 @@ __metadata:
languageName: node
linkType: hard
"q@npm:1.4.1":
version: 1.4.1
resolution: "q@npm:1.4.1"
checksum: 22c8e1f24f416d0977e6da63f24712189c5dd789489999fc040467480e4e0ef4bd0e3126cce1b8ef72c709bbe1fcce10eba0f4991a03fc64ecb5a17e05ed8d35
languageName: node
linkType: hard
"q@npm:^1.1.2":
version: 1.5.1
resolution: "q@npm:1.5.1"
@ -13268,7 +13158,7 @@ __metadata:
languageName: node
linkType: hard
"reflect-metadata@npm:0.1.13, reflect-metadata@npm:^0.1.13":
"reflect-metadata@npm:^0.1.13":
version: 0.1.13
resolution: "reflect-metadata@npm:0.1.13"
checksum: 798d379a7b6f6455501145419505c97dd11cbc23857a386add2b9ef15963ccf15a48d9d15507afe01d4cd74116df8a213247200bac00320bd7c11ddeaa5e8fb4
@ -13390,13 +13280,6 @@ __metadata:
languageName: node
linkType: hard
"require-all@npm:3.0.0":
version: 3.0.0
resolution: "require-all@npm:3.0.0"
checksum: f2d652d6bca4201bda1ff2f7d4f46a3edd136cc6fd81d38caff50eaa4669ae7ae459f32a06b0892e754bf0f7aae21fbe69172409dff1abd78be5c12cab750a01
languageName: node
linkType: hard
"require-directory@npm:^2.1.1":
version: 2.1.1
resolution: "require-directory@npm:2.1.1"
@ -13739,24 +13622,6 @@ __metadata:
languageName: node
linkType: hard
"schema-utils@npm:^3.0.0":
version: 3.1.1
resolution: "schema-utils@npm:3.1.1"
dependencies:
"@types/json-schema": ^7.0.8
ajv: ^6.12.5
ajv-keywords: ^3.5.2
checksum: fb73f3d759d43ba033c877628fe9751620a26879f6301d3dbeeb48cf2a65baec5cdf99da65d1bf3b4ff5444b2e59cbe4f81c2456b5e0d2ba7d7fd4aed5da29ce
languageName: node
linkType: hard
"secure-json-parse@npm:^2.1.0":
version: 2.5.0
resolution: "secure-json-parse@npm:2.5.0"
checksum: 84147a32615ce0d93d2fbba60cde85ae362f45cc948ea134e4d6d1e678bb4b7f3a5ce9b9692ed052baefeb2e1c8ba183b34920390e6a089925b97b0d8f7ab064
languageName: node
linkType: hard
"seedrandom@npm:3.0.5":
version: 3.0.5
resolution: "seedrandom@npm:3.0.5"
@ -14528,15 +14393,6 @@ __metadata:
languageName: node
linkType: hard
"style-loader@npm:3.3.1":
version: 3.3.1
resolution: "style-loader@npm:3.3.1"
peerDependencies:
webpack: ^5.0.0
checksum: 470feef680f59e2fce4d6601b5c55b88c01ad8d1dd693c528ffd591ff5fd7c01a4eff3bdbe62f26f847d6bd2430c9ab594be23307cfe7a3446ab236683f0d066
languageName: node
linkType: hard
"supports-color@npm:^2.0.0":
version: 2.0.0
resolution: "supports-color@npm:2.0.0"
@ -14676,13 +14532,6 @@ __metadata:
languageName: node
linkType: hard
"tapable@npm:^2.2.0":
version: 2.2.1
resolution: "tapable@npm:2.2.1"
checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51
languageName: node
linkType: hard
"tar-fs@npm:^2.0.0, tar-fs@npm:^2.1.1":
version: 2.1.1
resolution: "tar-fs@npm:2.1.1"
@ -15064,21 +14913,6 @@ __metadata:
languageName: node
linkType: hard
"ts-loader@npm:9.3.1":
version: 9.3.1
resolution: "ts-loader@npm:9.3.1"
dependencies:
chalk: ^4.1.0
enhanced-resolve: ^5.0.0
micromatch: ^4.0.0
semver: ^7.3.4
peerDependencies:
typescript: "*"
webpack: ^5.0.0
checksum: 462a8ac315017cf4961dafd2be29d5abe7c3af63c4515e325269f79b9d0212b35c59184d7fd01fc378749c88454752e1599301d2190eb6844ea5fe332de5f695
languageName: node
linkType: hard
"ts-node@npm:10.9.1":
version: 10.9.1
resolution: "ts-node@npm:10.9.1"