mirror of
https://iceshrimp.dev/limepotato/jormungandr-bite.git
synced 2024-11-09 11:41:30 -07:00
This commit is contained in:
commit
03e54e88b8
408 changed files with 17480 additions and 20204 deletions
|
@ -1,5 +1,5 @@
|
||||||
on:
|
on:
|
||||||
- push
|
push:
|
||||||
jobs:
|
jobs:
|
||||||
test-build:
|
test-build:
|
||||||
runs-on: docker
|
runs-on: docker
|
||||||
|
@ -15,19 +15,15 @@ jobs:
|
||||||
image: redis
|
image: redis
|
||||||
steps:
|
steps:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
run: git clone https://iceshrimp.dev/iceshrimp/iceshrimp.git --branch=${{ github.ref_name }} --depth=1 /iceshrimp
|
run: git clone https://iceshrimp.dev/iceshrimp/iceshrimp.git --branch=${{ github.ref_name }} --depth=1 .
|
||||||
- name: Install build dependencies
|
- name: Install build dependencies
|
||||||
run: |
|
run: |
|
||||||
cd /iceshrimp
|
|
||||||
cp -Tr /iceshrimp-caches/yarn .yarn
|
cp -Tr /iceshrimp-caches/yarn .yarn
|
||||||
yarn --immutable
|
yarn --immutable
|
||||||
rm -rf /iceshrimp-caches/yarn/* && cp -Tr .yarn /iceshrimp-caches/yarn
|
rm -rf /iceshrimp-caches/yarn/* && cp -Tr .yarn /iceshrimp-caches/yarn
|
||||||
- name: Build the shrimp
|
- name: Build the shrimp
|
||||||
run: |
|
run: yarn build:debug
|
||||||
cd /iceshrimp
|
|
||||||
yarn build:debug
|
|
||||||
- name: Test the shrimp
|
- name: Test the shrimp
|
||||||
run: |
|
run: |
|
||||||
cd /iceshrimp
|
|
||||||
cp .config/ci.yml .config/default.yml
|
cp .config/ci.yml .config/default.yml
|
||||||
yarn run migrate
|
yarn run migrate
|
||||||
|
|
52
.pnp.loader.mjs
generated
52
.pnp.loader.mjs
generated
|
@ -1,9 +1,12 @@
|
||||||
|
/* eslint-disable */
|
||||||
|
// @ts-nocheck
|
||||||
|
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import { URL as URL$1, fileURLToPath, pathToFileURL } from 'url';
|
import { URL as URL$1, fileURLToPath, pathToFileURL } from 'url';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import { createHash } from 'crypto';
|
import { createHash } from 'crypto';
|
||||||
import { EOL } from 'os';
|
import { EOL } from 'os';
|
||||||
import moduleExports, { isBuiltin } from 'module';
|
import esmModule, { createRequire, isBuiltin } from 'module';
|
||||||
import assert from 'assert';
|
import assert from 'assert';
|
||||||
|
|
||||||
const SAFE_TIME = 456789e3;
|
const SAFE_TIME = 456789e3;
|
||||||
|
@ -830,6 +833,12 @@ class ProxiedFS extends FakeFS {
|
||||||
rmdirSync(p, opts) {
|
rmdirSync(p, opts) {
|
||||||
return this.baseFs.rmdirSync(this.mapToBase(p), opts);
|
return this.baseFs.rmdirSync(this.mapToBase(p), opts);
|
||||||
}
|
}
|
||||||
|
async rmPromise(p, opts) {
|
||||||
|
return this.baseFs.rmPromise(this.mapToBase(p), opts);
|
||||||
|
}
|
||||||
|
rmSync(p, opts) {
|
||||||
|
return this.baseFs.rmSync(this.mapToBase(p), opts);
|
||||||
|
}
|
||||||
async linkPromise(existingP, newP) {
|
async linkPromise(existingP, newP) {
|
||||||
return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP));
|
return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP));
|
||||||
}
|
}
|
||||||
|
@ -1211,6 +1220,18 @@ class NodeFS extends BasePortableFakeFS {
|
||||||
rmdirSync(p, opts) {
|
rmdirSync(p, opts) {
|
||||||
return this.realFs.rmdirSync(npath.fromPortablePath(p), opts);
|
return this.realFs.rmdirSync(npath.fromPortablePath(p), opts);
|
||||||
}
|
}
|
||||||
|
async rmPromise(p, opts) {
|
||||||
|
return await new Promise((resolve, reject) => {
|
||||||
|
if (opts) {
|
||||||
|
this.realFs.rm(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
|
||||||
|
} else {
|
||||||
|
this.realFs.rm(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
rmSync(p, opts) {
|
||||||
|
return this.realFs.rmSync(npath.fromPortablePath(p), opts);
|
||||||
|
}
|
||||||
async linkPromise(existingP, newP) {
|
async linkPromise(existingP, newP) {
|
||||||
return await new Promise((resolve, reject) => {
|
return await new Promise((resolve, reject) => {
|
||||||
this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject));
|
this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject));
|
||||||
|
@ -1403,6 +1424,8 @@ const URL = Number(process.versions.node.split('.', 1)[0]) < 20 ? URL$1 : global
|
||||||
const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10));
|
const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10));
|
||||||
const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13;
|
const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13;
|
||||||
const HAS_LAZY_LOADED_TRANSLATORS = major === 20 && minor < 6 || major === 19 && minor >= 3;
|
const HAS_LAZY_LOADED_TRANSLATORS = major === 20 && minor < 6 || major === 19 && minor >= 3;
|
||||||
|
const SUPPORTS_IMPORT_ATTRIBUTES = major >= 21 || major === 20 && minor >= 10 || major === 18 && minor >= 20;
|
||||||
|
const SUPPORTS_IMPORT_ATTRIBUTES_ONLY = major >= 22;
|
||||||
|
|
||||||
function readPackageScope(checkPath) {
|
function readPackageScope(checkPath) {
|
||||||
const rootSeparatorIndex = checkPath.indexOf(npath.sep);
|
const rootSeparatorIndex = checkPath.indexOf(npath.sep);
|
||||||
|
@ -1493,10 +1516,21 @@ async function load$1(urlString, context, nextLoad) {
|
||||||
const format = getFileFormat(filePath);
|
const format = getFileFormat(filePath);
|
||||||
if (!format)
|
if (!format)
|
||||||
return nextLoad(urlString, context, nextLoad);
|
return nextLoad(urlString, context, nextLoad);
|
||||||
if (format === `json` && context.importAssertions?.type !== `json`) {
|
if (format === `json`) {
|
||||||
const err = new TypeError(`[ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module "${urlString}" needs an import assertion of type "json"`);
|
if (SUPPORTS_IMPORT_ATTRIBUTES_ONLY) {
|
||||||
err.code = `ERR_IMPORT_ASSERTION_TYPE_MISSING`;
|
if (context.importAttributes?.type !== `json`) {
|
||||||
throw err;
|
const err = new TypeError(`[ERR_IMPORT_ATTRIBUTE_MISSING]: Module "${urlString}" needs an import attribute of "type: json"`);
|
||||||
|
err.code = `ERR_IMPORT_ATTRIBUTE_MISSING`;
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const type = `importAttributes` in context ? context.importAttributes?.type : context.importAssertions?.type;
|
||||||
|
if (type !== `json`) {
|
||||||
|
const err = new TypeError(`[ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module "${urlString}" needs an import ${SUPPORTS_IMPORT_ATTRIBUTES ? `attribute` : `assertion`} of type "json"`);
|
||||||
|
err.code = `ERR_IMPORT_ASSERTION_TYPE_MISSING`;
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) {
|
if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) {
|
||||||
const pathToSend = pathToFileURL(
|
const pathToSend = pathToFileURL(
|
||||||
|
@ -1941,6 +1975,13 @@ function packageImportsResolve({ name, base, conditions, readFileSyncFn }) {
|
||||||
throwImportNotDefined(name, packageJSONUrl, base);
|
throwImportNotDefined(name, packageJSONUrl, base);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let findPnpApi = esmModule.findPnpApi;
|
||||||
|
if (!findPnpApi) {
|
||||||
|
const require = createRequire(import.meta.url);
|
||||||
|
const pnpApi = require(`./.pnp.cjs`);
|
||||||
|
pnpApi.setup();
|
||||||
|
findPnpApi = esmModule.findPnpApi;
|
||||||
|
}
|
||||||
const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/;
|
const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/;
|
||||||
const isRelativeRegexp = /^\.{0,2}\//;
|
const isRelativeRegexp = /^\.{0,2}\//;
|
||||||
function tryReadFile(filePath) {
|
function tryReadFile(filePath) {
|
||||||
|
@ -1968,7 +2009,6 @@ async function resolvePrivateRequest(specifier, issuer, context, nextResolve) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async function resolve$1(originalSpecifier, context, nextResolve) {
|
async function resolve$1(originalSpecifier, context, nextResolve) {
|
||||||
const { findPnpApi } = moduleExports;
|
|
||||||
if (!findPnpApi || isBuiltin(originalSpecifier))
|
if (!findPnpApi || isBuiltin(originalSpecifier))
|
||||||
return nextResolve(originalSpecifier, context, nextResolve);
|
return nextResolve(originalSpecifier, context, nextResolve);
|
||||||
let specifier = originalSpecifier;
|
let specifier = originalSpecifier;
|
||||||
|
|
3
.yarn/cache/@emnapi-runtime-npm-1.2.0-36d2203035-c954b36493.zip
vendored
Normal file
3
.yarn/cache/@emnapi-runtime-npm-1.2.0-36d2203035-c954b36493.zip
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:f55f261eeccf10a7439daaece365db141f635a7e9a1f9016e00ab8f28943399f
|
||||||
|
size 91230
|
3
.yarn/cache/@iceshrimp-summaly-npm-2.7.2-3842079977-242d994023.zip
vendored
Normal file
3
.yarn/cache/@iceshrimp-summaly-npm-2.7.2-3842079977-242d994023.zip
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:2813f320e458788fe0798d2ccfcda5761be9356459aead4956f33c948d3c488b
|
||||||
|
size 22555
|
BIN
.yarn/cache/@img-sharp-darwin-arm64-npm-0.33.4-061afc6886-10.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/@img-sharp-darwin-arm64-npm-0.33.4-061afc6886-10.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
3
.yarn/cache/@img-sharp-darwin-x64-npm-0.33.4-6aac8de317-10.zip
vendored
Normal file
3
.yarn/cache/@img-sharp-darwin-x64-npm-0.33.4-6aac8de317-10.zip
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:723b51d409908aa6afafeca67892dc83b016696018d449e18a81d11bd1110b95
|
||||||
|
size 106850
|
3
.yarn/cache/@img-sharp-libvips-darwin-arm64-npm-1.0.2-6c9ede770e-10.zip
vendored
Normal file
3
.yarn/cache/@img-sharp-libvips-darwin-arm64-npm-1.0.2-6c9ede770e-10.zip
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:e00b4d72355e50af073adb1d02fcae5f858e91ab2323022f560b0fff36f3d5cb
|
||||||
|
size 7008013
|
3
.yarn/cache/@img-sharp-libvips-darwin-x64-npm-1.0.2-01b146c37d-10.zip
vendored
Normal file
3
.yarn/cache/@img-sharp-libvips-darwin-x64-npm-1.0.2-01b146c37d-10.zip
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:0ffccca8cd6273fcc7a24fc1ec2cc621247c31e6d69dfe6200190186653d8330
|
||||||
|
size 7894090
|
BIN
.yarn/cache/@img-sharp-libvips-linux-arm64-npm-1.0.2-a3a6e66f3b-10.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/@img-sharp-libvips-linux-arm64-npm-1.0.2-a3a6e66f3b-10.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/@img-sharp-libvips-linux-x64-npm-1.0.2-69e740ab3d-10.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/@img-sharp-libvips-linux-x64-npm-1.0.2-69e740ab3d-10.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
3
.yarn/cache/@img-sharp-libvips-linuxmusl-arm64-npm-1.0.2-f787a79edb-10.zip
vendored
Normal file
3
.yarn/cache/@img-sharp-libvips-linuxmusl-arm64-npm-1.0.2-f787a79edb-10.zip
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:2bfedd5b2cfa0952e02cdd4d72f83e32df9de82db18cf5195e16f72891d815ac
|
||||||
|
size 7099479
|
3
.yarn/cache/@img-sharp-libvips-linuxmusl-x64-npm-1.0.2-e4d5858946-10.zip
vendored
Normal file
3
.yarn/cache/@img-sharp-libvips-linuxmusl-x64-npm-1.0.2-e4d5858946-10.zip
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:737651fc2b1963b06609484ac20fedd163bdd57b51ab4eb693cd506d5841695a
|
||||||
|
size 7204642
|
3
.yarn/cache/@img-sharp-linux-arm64-npm-0.33.4-eee77af7d4-10.zip
vendored
Normal file
3
.yarn/cache/@img-sharp-linux-arm64-npm-0.33.4-eee77af7d4-10.zip
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:80752717166479cd78d3a4477293e80d7d96de70a09785489f51b86bc177296e
|
||||||
|
size 107298
|
3
.yarn/cache/@img-sharp-linux-x64-npm-0.33.4-e678be5de4-10.zip
vendored
Normal file
3
.yarn/cache/@img-sharp-linux-x64-npm-0.33.4-e678be5de4-10.zip
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:37df8739ba92bd891180a9fe4aa2a372cfd4ea92223bd14ccc5f0526661df978
|
||||||
|
size 114780
|
3
.yarn/cache/@img-sharp-linuxmusl-arm64-npm-0.33.4-c98abb8a19-10.zip
vendored
Normal file
3
.yarn/cache/@img-sharp-linuxmusl-arm64-npm-0.33.4-c98abb8a19-10.zip
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:507a08f66569fb890d3459241a989b257ae758b7cec2014ee18d4574f4233a61
|
||||||
|
size 111591
|
3
.yarn/cache/@img-sharp-linuxmusl-x64-npm-0.33.4-6e3f28f5de-10.zip
vendored
Normal file
3
.yarn/cache/@img-sharp-linuxmusl-x64-npm-0.33.4-6e3f28f5de-10.zip
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:bb0ca07851c9935e2889d79d613591929b83d9274b8636e247665ca1a1c6f57f
|
||||||
|
size 118348
|
BIN
.yarn/cache/@syuilo-aiscript-npm-0.11.1-451b9d1a3f-4df4bb5a25.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/@syuilo-aiscript-npm-0.11.1-451b9d1a3f-4df4bb5a25.zip
(Stored with Git LFS)
vendored
Binary file not shown.
3
.yarn/cache/@syuilo-aiscript-npm-0.17.0-005e068ae6-2a10b3d29a.zip
vendored
Normal file
3
.yarn/cache/@syuilo-aiscript-npm-0.17.0-005e068ae6-2a10b3d29a.zip
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:efc418b0cc9ffe3683b1cf5f5c2be1f614a8babd885446b88111c9f2f8308379
|
||||||
|
size 168922
|
BIN
.yarn/cache/chalk-npm-4.0.0-50e5418ea0-f8ae363f43.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/chalk-npm-4.0.0-50e5418ea0-f8ae363f43.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/chownr-npm-1.1.4-5bd400ab08-115648f8eb.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/chownr-npm-1.1.4-5bd400ab08-115648f8eb.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/deep-extend-npm-0.6.0-e182924219-7be7e5a8d4.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/deep-extend-npm-0.6.0-e182924219-7be7e5a8d4.zip
(Stored with Git LFS)
vendored
Binary file not shown.
3
.yarn/cache/detect-libc-npm-2.0.3-2ddae34945-b4ea018d62.zip
vendored
Normal file
3
.yarn/cache/detect-libc-npm-2.0.3-2ddae34945-b4ea018d62.zip
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:23b86d525b50e2419c6def32d652247d834dac64ca9e61f89b7d893febfbca34
|
||||||
|
size 9395
|
BIN
.yarn/cache/expand-template-npm-2.0.3-80de959306-588c198472.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/expand-template-npm-2.0.3-80de959306-588c198472.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/github-from-package-npm-0.0.0-519f80c9a1-2a091ba07f.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/github-from-package-npm-0.0.0-519f80c9a1-2a091ba07f.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/mkdirp-classic-npm-0.5.3-3b5c991910-3f4e088208.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/mkdirp-classic-npm-0.5.3-3b5c991910-3f4e088208.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/nan-npm-2.18.0-a51ed5bed5-5520e22c64.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/nan-npm-2.18.0-a51ed5bed5-5520e22c64.zip
(Stored with Git LFS)
vendored
Binary file not shown.
3
.yarn/cache/nan-npm-2.19.0-2f5da4a528-b97f680753.zip
vendored
Normal file
3
.yarn/cache/nan-npm-2.19.0-2f5da4a528-b97f680753.zip
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:bb4ff42d414f1c2a732d520e2b25bedf23587ff4d22cf672519bf53b83ddc0dd
|
||||||
|
size 99593
|
BIN
.yarn/cache/napi-build-utils-npm-1.0.2-892e4bba56-276feb8e30.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/napi-build-utils-npm-1.0.2-892e4bba56-276feb8e30.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/node-abi-npm-3.45.0-586bc5cf50-b59b49d515.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/node-abi-npm-3.45.0-586bc5cf50-b59b49d515.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/node-addon-api-npm-6.1.0-634c545b39-8eea1d4d96.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/node-addon-api-npm-6.1.0-634c545b39-8eea1d4d96.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/node-fetch-npm-3.3.1-576511fc5a-9fed9ed9ab.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/node-fetch-npm-3.3.1-576511fc5a-9fed9ed9ab.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/prebuild-install-npm-7.1.1-cb9fc9d341-6c70a2f82f.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/prebuild-install-npm-7.1.1-cb9fc9d341-6c70a2f82f.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/rc-npm-1.2.8-d6768ac936-5c4d72ae7e.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/rc-npm-1.2.8-d6768ac936-5c4d72ae7e.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/re2-npm-1.20.11-ab65de125e-a8665c861c.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/re2-npm-1.20.11-ab65de125e-a8665c861c.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/re2-npm-1.20.9-65a014d791-0ecd9f849b.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/re2-npm-1.20.9-65a014d791-0ecd9f849b.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/semver-npm-7.6.2-0fec6944bb-296b17d027.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/semver-npm-7.6.2-0fec6944bb-296b17d027.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/sharp-npm-0.32.1-5af640fc49-07df854f3d.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/sharp-npm-0.32.1-5af640fc49-07df854f3d.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/sharp-npm-0.33.4-afc15185a7-f396d1363d.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/sharp-npm-0.33.4-afc15185a7-f396d1363d.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/simple-concat-npm-1.0.1-48df70de29-4d211042cc.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/simple-concat-npm-1.0.1-48df70de29-4d211042cc.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/simple-get-npm-4.0.1-fa2a97645d-93f1b32319.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/simple-get-npm-4.0.1-fa2a97645d-93f1b32319.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/strip-json-comments-npm-2.0.1-e7883b2d04-1074ccb632.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/strip-json-comments-npm-2.0.1-e7883b2d04-1074ccb632.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/summaly-npm-2.7.0-e25bfbf6a2-ce49173396.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/summaly-npm-2.7.0-e25bfbf6a2-ce49173396.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/tar-fs-npm-2.1.1-e374d3b7a2-526deae025.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/tar-fs-npm-2.1.1-e374d3b7a2-526deae025.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/trace-redirect-npm-1.0.6-e4829a09f3-20429f8ed3.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/trace-redirect-npm-1.0.6-e4829a09f3-20429f8ed3.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/uuid-npm-7.0.3-2b088bd924-b2a4d30ecd.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/uuid-npm-7.0.3-2b088bd924-b2a4d30ecd.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/uuid-npm-9.0.1-39a8442bc6-9d0b6adb72.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/uuid-npm-9.0.1-39a8442bc6-9d0b6adb72.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/corepack.tgz
(Stored with Git LFS)
BIN
.yarn/corepack.tgz
(Stored with Git LFS)
Binary file not shown.
60
CHANGELOG.md
60
CHANGELOG.md
|
@ -1,3 +1,61 @@
|
||||||
|
## v2023.12.9
|
||||||
|
This release contains a security patch, as well as minor fixes and improvements. Upgrading is strongly recommended for all server operators.
|
||||||
|
|
||||||
|
### Highlights
|
||||||
|
- Several DoS vulnerabilities - allowing remote attackers to allocate arbitrary amounts of memory - were patched
|
||||||
|
- Corrupt jobs now get discarded instead of clogging up the failed queues
|
||||||
|
|
||||||
|
### Backend
|
||||||
|
- Fetched JSON-LD contexts are now limited to 1MiB, resolving a DoS attack vector
|
||||||
|
- Fetched node-fetch responses are now limited to 1MiB/10MiB, resolving a DoS attack vector
|
||||||
|
|
||||||
|
### Miscellaneous
|
||||||
|
- The docker images now use the bundled libvips version shipping with sharp instead of the system-wide one, reducing the image size by ~60MB
|
||||||
|
- The example docker-compose.yml file was updated
|
||||||
|
- The iceshrimp-js package was renamed to iceshrimp-sdk in order to prevent confusion should this repository be renamed to iceshrimp-js in the future (to distinguish it from Iceshrimp.NET)
|
||||||
|
- Various dependency updates
|
||||||
|
- Various translation updates
|
||||||
|
|
||||||
|
### Attribution
|
||||||
|
This release was made possible by project contributors: AntoineÐ & Laura Hausmann
|
||||||
|
|
||||||
|
## v2023.12.8
|
||||||
|
This release contains minor fixes and improvements. Upgrading is recommended for all server operators.
|
||||||
|
|
||||||
|
### Highlights
|
||||||
|
- AiScript has been updated to v0.17.0
|
||||||
|
- Several new MFM functions have been added
|
||||||
|
|
||||||
|
### Backend
|
||||||
|
- Pinned notes are rendered as links instead of objects, improving privacy
|
||||||
|
- Sporadic errors while scrolling through followers/following lists were fixed
|
||||||
|
- The link preview generator now sends a proper user agent instead of identifying itself as a generic bot
|
||||||
|
- The home timeline query heuristic now gets reset when follow lists are being imported, resolving a timeline performance edge case
|
||||||
|
|
||||||
|
### Mastodon client API
|
||||||
|
- The verify_credentials response now includes the follow_requests_count property, improving compatibiltiy with certain Mastodon clients
|
||||||
|
- Attachments will now fall back to their full res version if they don't have a thumbnail, fixing a crash with the official Mastodon for Android app
|
||||||
|
|
||||||
|
### Frontend
|
||||||
|
- The placeholder timetravel buttons have been removed
|
||||||
|
- The experiments page has been removed
|
||||||
|
|
||||||
|
### Miscellaneous
|
||||||
|
- The helm chart was updated and now has more configuration options
|
||||||
|
- The yarn version was updated to v4.3.1
|
||||||
|
- The README was updated to better reflect the current development situation in relation to the rewrite
|
||||||
|
- The project now builds against NodeJS 22
|
||||||
|
- The dockerfile was updated & now builds against alpine 3.20
|
||||||
|
- Backend dependencies have been updated
|
||||||
|
- The recommended key/value store was switched to valkey
|
||||||
|
- The CI configuration has been updated
|
||||||
|
- Various translation updates
|
||||||
|
|
||||||
|
### Attribution
|
||||||
|
This release was made possible by project contributors: AverageDood, Gersonzao, Kopper, Laura Hausmann, Mae Dartmann, Pyrox, Tournesol, ari melody, limepotato, mia & zotan
|
||||||
|
|
||||||
|
It also includes cherry-picked contributions from external contributors: naskya (firefish), ChaoticLeah (cutiekey)
|
||||||
|
|
||||||
## v2023.12.7
|
## v2023.12.7
|
||||||
This is a security release. Upgrading is therefore strongly recommended.
|
This is a security release. Upgrading is therefore strongly recommended.
|
||||||
|
|
||||||
|
@ -718,4 +776,4 @@ It also includes cherry-picked contributions from external contributors: Namekuj
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
This file lists all major changes made since the fork from Firefish on 2023-07-21. For changes prior to that date, please reference the [Firefish](https://git.joinfirefish.org/firefish/firefish/-/tree/76ad0a19b3a64eaecb4da31f20c229e423ee2095/) repository.
|
This file lists all major changes made since the fork from Firefish on 2023-07-21. For changes prior to that date, please reference the [Firefish](https://firefish.dev/firefish/firefish/-/tree/76ad0a19b3a64eaecb4da31f20c229e423ee2095/) repository.
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
# syntax = docker/dockerfile:1.2
|
# syntax = docker/dockerfile:1.2
|
||||||
## Install dev and compilation dependencies, build files
|
## Install dev and compilation dependencies, build files
|
||||||
FROM alpine:3.18 as build
|
FROM alpine:3.20 as build
|
||||||
WORKDIR /iceshrimp
|
WORKDIR /iceshrimp
|
||||||
|
|
||||||
# Install compilation dependencies
|
# Install compilation dependencies
|
||||||
RUN apk add --no-cache --no-progress git alpine-sdk vips-dev python3 nodejs-current npm vips
|
RUN apk add --no-cache --no-progress git alpine-sdk python3 py3-setuptools nodejs-current npm
|
||||||
|
|
||||||
# Copy in all files for the build
|
# Copy in all files for the build
|
||||||
COPY . ./
|
COPY . ./
|
||||||
|
@ -31,11 +31,11 @@ RUN yarn focus-production
|
||||||
RUN --mount=type=cache,target=/iceshrimp/.yarncache_focused rm -rf .yarncache/* && cp -r .yarn/. .yarncache_focused
|
RUN --mount=type=cache,target=/iceshrimp/.yarncache_focused rm -rf .yarncache/* && cp -r .yarn/. .yarncache_focused
|
||||||
|
|
||||||
## Runtime container
|
## Runtime container
|
||||||
FROM alpine:3.18
|
FROM alpine:3.20
|
||||||
WORKDIR /iceshrimp
|
WORKDIR /iceshrimp
|
||||||
|
|
||||||
# Install runtime dependencies
|
# Install runtime dependencies
|
||||||
RUN apk add --no-cache --no-progress tini ffmpeg vips-dev zip unzip nodejs-current libheif-dev
|
RUN apk add --no-cache --no-progress tini ffmpeg zip unzip nodejs-current libheif-dev
|
||||||
|
|
||||||
# Copy built files
|
# Copy built files
|
||||||
COPY --from=build /iceshrimp /iceshrimp
|
COPY --from=build /iceshrimp /iceshrimp
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
- Check out [FediDB](https://fedidb.org/software/iceshrimp) or [Fediverse Observer](https://iceshrimp.fediverse.observer/list) to get an overview of the instances that are out there.
|
- Check out [FediDB](https://fedidb.org/software/iceshrimp) or [Fediverse Observer](https://iceshrimp.fediverse.observer/list) to get an overview of the instances that are out there.
|
||||||
- Please note that we do not operate a "flagship instance", the only project-affiliated domain is `iceshrimp.dev`.
|
- Please note that we do not operate a "flagship instance", the only project-affiliated domain is `iceshrimp.dev`.
|
||||||
- Want to donate to the project?
|
- Want to donate to the project?
|
||||||
- Our backend lead dev (zotan) is in need of a better laptop, as their current one does not have enough memory. You can contribute [here](https://bunq.me/zotanlaptopcrowdfund). Any leftover money will be given to queers in need.
|
- Our frontend dev (Lilian) needs help paying for healthcare costs. You can contribute [here](https://bunq.me/lilianhealthcarefund). Money from the fund will be used for co-pays, and medical expenses not covered by insurance.
|
||||||
- Need help or want to contribute? Join the [chat room](https://chat.iceshrimp.dev)!
|
- Need help or want to contribute? Join the [chat room](https://chat.iceshrimp.dev)!
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
},
|
},
|
||||||
"formatter": {
|
"formatter": {
|
||||||
"ignore": [
|
"ignore": [
|
||||||
"packages/iceshrimp-js/api-extractor.json",
|
"packages/iceshrimp-sdk/api-extractor.json",
|
||||||
"packages/*/tsconfig.json",
|
"packages/*/tsconfig.json",
|
||||||
"packages/*/built",
|
"packages/*/built",
|
||||||
"packages/*/package-lock.json",
|
"packages/*/package-lock.json",
|
||||||
|
|
|
@ -15,7 +15,7 @@ type: application
|
||||||
# This is the chart version. This version number should be incremented each time you make changes
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
# to the chart and its templates, including the app version.
|
# to the chart and its templates, including the app version.
|
||||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
version: 0.1.2
|
version: 0.1.4
|
||||||
|
|
||||||
# This is the version number of the application being deployed. This version number should be
|
# This is the version number of the application being deployed. This version number should be
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
|
|
|
@ -31,6 +31,7 @@ A fun, new, open way to experience social media https://iceshrimp.dev
|
||||||
| iceshrimp.libreTranslate.apiKey | string | `""` | |
|
| iceshrimp.libreTranslate.apiKey | string | `""` | |
|
||||||
| iceshrimp.libreTranslate.apiUrl | string | `""` | |
|
| iceshrimp.libreTranslate.apiUrl | string | `""` | |
|
||||||
| iceshrimp.libreTranslate.managed | bool | `false` | |
|
| iceshrimp.libreTranslate.managed | bool | `false` | |
|
||||||
|
| iceshrimp.maxNoteLength | integer | `3000` | Max note length |
|
||||||
| iceshrimp.objectStorage.access_key | string | `""` | |
|
| iceshrimp.objectStorage.access_key | string | `""` | |
|
||||||
| iceshrimp.objectStorage.access_secret | string | `""` | |
|
| iceshrimp.objectStorage.access_secret | string | `""` | |
|
||||||
| iceshrimp.objectStorage.baseUrl | string | `""` | |
|
| iceshrimp.objectStorage.baseUrl | string | `""` | |
|
||||||
|
@ -51,6 +52,7 @@ A fun, new, open way to experience social media https://iceshrimp.dev
|
||||||
| iceshrimp.smtp.port | int | `587` | |
|
| iceshrimp.smtp.port | int | `587` | |
|
||||||
| iceshrimp.smtp.server | string | `"smtp.mailgun.org"` | |
|
| iceshrimp.smtp.server | string | `"smtp.mailgun.org"` | |
|
||||||
| iceshrimp.smtp.useImplicitSslTls | bool | `false` | |
|
| iceshrimp.smtp.useImplicitSslTls | bool | `false` | |
|
||||||
|
| iceshrimp.strategy | object | `{}` | Override DeploymentStrategy for Iceshrimp |
|
||||||
| elasticsearch | object | `{"auth":{},"enabled":false,"hostname":"","port":9200,"ssl":false}` | https://github.com/bitnami/charts/tree/master/bitnami/elasticsearch#parameters |
|
| elasticsearch | object | `{"auth":{},"enabled":false,"hostname":"","port":9200,"ssl":false}` | https://github.com/bitnami/charts/tree/master/bitnami/elasticsearch#parameters |
|
||||||
| fullnameOverride | string | `""` | |
|
| fullnameOverride | string | `""` | |
|
||||||
| image.pullPolicy | string | `"IfNotPresent"` | |
|
| image.pullPolicy | string | `"IfNotPresent"` | |
|
||||||
|
|
|
@ -211,7 +211,7 @@ id: 'aid'
|
||||||
#───┘ Other configuration └─────────────────────────────────────
|
#───┘ Other configuration └─────────────────────────────────────
|
||||||
|
|
||||||
# Max note length, should be < 8000.
|
# Max note length, should be < 8000.
|
||||||
#maxNoteLength: 3000
|
maxNoteLength: {{ .Values.iceshrimp.maxNoteLength | default 3000 }}
|
||||||
|
|
||||||
# Maximum lenght of an image caption or file comment (default 1500, max 8192)
|
# Maximum lenght of an image caption or file comment (default 1500, max 8192)
|
||||||
#maxCaptionLength: 1500
|
#maxCaptionLength: 1500
|
||||||
|
|
|
@ -5,9 +5,15 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
{{- include "iceshrimp.labels" . | nindent 4 }}
|
{{- include "iceshrimp.labels" . | nindent 4 }}
|
||||||
spec:
|
spec:
|
||||||
{{- if not .Values.autoscaling.enabled }}
|
{{- if not .Values.autoscaling.enabled }}
|
||||||
replicas: {{ .Values.replicaCount }}
|
replicas: {{ .Values.replicaCount }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Values.iceshrimp.deploymentStrategy }}
|
||||||
|
strategy:
|
||||||
|
{{- toYaml .Values.iceshrimp.deploymentStrategy | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
{{- include "iceshrimp.selectorLabels" . | nindent 6 }}
|
{{- include "iceshrimp.selectorLabels" . | nindent 6 }}
|
||||||
|
|
|
@ -54,6 +54,13 @@ iceshrimp:
|
||||||
helm.sh/resource-policy: keep
|
helm.sh/resource-policy: keep
|
||||||
size: 10Gi
|
size: 10Gi
|
||||||
|
|
||||||
|
# Deployment strategy (optional), see https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy
|
||||||
|
# deploymentStrategy:
|
||||||
|
# type: RollingUpdate
|
||||||
|
# rollingUpdate:
|
||||||
|
# maxUnavailable: 0
|
||||||
|
# maxSurge: 1
|
||||||
|
|
||||||
# -- If you want to allow iceshrimp to connect to private ips, enter the cidrs here.
|
# -- If you want to allow iceshrimp to connect to private ips, enter the cidrs here.
|
||||||
allowedPrivateNetworks: []
|
allowedPrivateNetworks: []
|
||||||
# - "10.0.0.0/8"
|
# - "10.0.0.0/8"
|
||||||
|
@ -68,6 +75,9 @@ iceshrimp:
|
||||||
# Number of worker processes per replica
|
# Number of worker processes per replica
|
||||||
clusterLimit: 1
|
clusterLimit: 1
|
||||||
|
|
||||||
|
# Max note length
|
||||||
|
maxNoteLength: 3000
|
||||||
|
|
||||||
# https://github.com/bitnami/charts/tree/master/bitnami/postgresql#parameters
|
# https://github.com/bitnami/charts/tree/master/bitnami/postgresql#parameters
|
||||||
postgresql:
|
postgresql:
|
||||||
# -- disable if you want to use an existing db; in which case the values below
|
# -- disable if you want to use an existing db; in which case the values below
|
||||||
|
|
|
@ -22,7 +22,7 @@ services:
|
||||||
redis:
|
redis:
|
||||||
restart: always
|
restart: always
|
||||||
container_name: iceshrimp_redis
|
container_name: iceshrimp_redis
|
||||||
image: docker.io/redis:7.0-alpine
|
image: docker.io/valkey/valkey:7-alpine
|
||||||
networks:
|
networks:
|
||||||
- network
|
- network
|
||||||
volumes:
|
volumes:
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
|
|
||||||
You can find interactive API documentation at any Iceshrimp instance. https://iceshrimp.social/api-doc
|
You can find interactive API documentation at any Iceshrimp instance. https://iceshrimp.social/api-doc
|
||||||
|
|
||||||
You can also find auto-generated documentation for iceshrimp-js [here](../packages/iceshrimp-js/markdown/iceshrimp-js.md).
|
You can also find auto-generated documentation for iceshrimp-sdk [here](../packages/iceshrimp-sdk/markdown/iceshrimp-sdk.md).
|
||||||
|
|
|
@ -28,7 +28,7 @@ services:
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
image: docker.io/redis:7.0-alpine
|
image: docker.io/valkey/valkey:7-alpine
|
||||||
container_name: iceshrimp_redis
|
container_name: iceshrimp_redis
|
||||||
networks:
|
networks:
|
||||||
- ishnet
|
- ishnet
|
||||||
|
@ -37,7 +37,7 @@ services:
|
||||||
|
|
||||||
db:
|
db:
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
image: docker.io/postgres:12.2-alpine
|
image: docker.io/postgres:16-alpine
|
||||||
container_name: iceshrimp_db
|
container_name: iceshrimp_db
|
||||||
networks:
|
networks:
|
||||||
- ishnet
|
- ishnet
|
||||||
|
|
|
@ -14,7 +14,7 @@ This document will guide you through manual installation of Iceshrimp. We also p
|
||||||
|
|
||||||
- [**Node.js**](https://nodejs.org) v18.16.0+ (v20 recommended)
|
- [**Node.js**](https://nodejs.org) v18.16.0+ (v20 recommended)
|
||||||
- [**PostgreSQL**](https://www.postgresql.org/) 12+ (including modules, usually packaged as postgresql-contrib)
|
- [**PostgreSQL**](https://www.postgresql.org/) 12+ (including modules, usually packaged as postgresql-contrib)
|
||||||
- [**Redis**](https://redis.io/) 6+
|
- [**Valkey**](https://valkey.io/) (or any other Redis 6 compatible fork)
|
||||||
- [**libvips**](https://www.libvips.org/)
|
- [**libvips**](https://www.libvips.org/)
|
||||||
- **Web proxy**
|
- **Web proxy**
|
||||||
- nginx
|
- nginx
|
||||||
|
|
|
@ -2092,15 +2092,6 @@ preventAiLearning: Evita l'indexació dels bots
|
||||||
preventAiLearningDescription: Sol·liciteu que els models de llenguatge d'IA de tercers
|
preventAiLearningDescription: Sol·liciteu que els models de llenguatge d'IA de tercers
|
||||||
no estudiïn el contingut que pengeu, com ara publicacions i imatges.
|
no estudiïn el contingut que pengeu, com ara publicacions i imatges.
|
||||||
pwa: Instal·lar PWA
|
pwa: Instal·lar PWA
|
||||||
_experiments:
|
|
||||||
alpha: Alfa
|
|
||||||
beta: Beta
|
|
||||||
release: Publicà
|
|
||||||
title: Experiments
|
|
||||||
enablePostImports: Activar l'importació de publicacions
|
|
||||||
postImportsCaption: Permet els usuaris importar publicacions desde comptes a Iceshrimp,
|
|
||||||
Iceshrimp, Mastodon, Akkoma i Pleroma. Pot fer que el servidor vagi més lent durant
|
|
||||||
la càrrega si tens un coll d'ampolla a la cua.
|
|
||||||
noGraze: Si us plau, desactiva l'extensió del navegador "Graze for Mastodon", ja que
|
noGraze: Si us plau, desactiva l'extensió del navegador "Graze for Mastodon", ja que
|
||||||
interfereix amb Iceshrimp.
|
interfereix amb Iceshrimp.
|
||||||
accessibility: Accessibilitat
|
accessibility: Accessibilitat
|
||||||
|
|
|
@ -2101,12 +2101,6 @@ accessibility: Erreichbarkeit
|
||||||
jumpToPrevious: Zum Vorherigen springen
|
jumpToPrevious: Zum Vorherigen springen
|
||||||
silencedWarning: Diese Meldung wird angezeigt, weil diese Nutzer von Servern stammen,
|
silencedWarning: Diese Meldung wird angezeigt, weil diese Nutzer von Servern stammen,
|
||||||
die Ihr Administrator abgeschaltet hat, so dass es sich möglicherweise um Spam handelt.
|
die Ihr Administrator abgeschaltet hat, so dass es sich möglicherweise um Spam handelt.
|
||||||
_experiments:
|
|
||||||
title: Funktionstests
|
|
||||||
enablePostImports: Beitragsimporte aktivieren
|
|
||||||
postImportsCaption: Erlaubt es Nutzer:innen ihre Posts von alten Iceshrimp, Iceshrimp,
|
|
||||||
Mastodon, Akkoma und Pleroma Accounts zu importieren. Bei Engpässen in der Warteschlange
|
|
||||||
kann es zu Verlangsamungen beim Laden während des Imports kommen.
|
|
||||||
noGraze: Bitte deaktivieren Sie die Browsererweiterung "Graze for Mastodon", da sie
|
noGraze: Bitte deaktivieren Sie die Browsererweiterung "Graze for Mastodon", da sie
|
||||||
die Funktion von Iceshrimp stört.
|
die Funktion von Iceshrimp stört.
|
||||||
indexFrom: Indexieren ab Beitragskennung aufwärts
|
indexFrom: Indexieren ab Beitragskennung aufwärts
|
||||||
|
|
|
@ -1344,6 +1344,15 @@ _mfm:
|
||||||
plain: "Plain"
|
plain: "Plain"
|
||||||
plainDescription: "Deactivates the effects of all MFM contained within this MFM
|
plainDescription: "Deactivates the effects of all MFM contained within this MFM
|
||||||
effect."
|
effect."
|
||||||
|
border: "Border"
|
||||||
|
borderDescription: "Adds a border around content."
|
||||||
|
ruby: "Ruby"
|
||||||
|
rubyDescription: "Render a small annotation above text, Usually used for showing pronounciations of East Asian characters."
|
||||||
|
unixtime: "Unix Time"
|
||||||
|
unixtimeDescription: "Convert a number of seconds since 1st of January, 1970 to a readable date."
|
||||||
|
followmouse: "Follow Mouse"
|
||||||
|
followmouseDescription: "Make content follow the mouse cursor."
|
||||||
|
followmouseToggle: "Toggle preview"
|
||||||
_instanceTicker:
|
_instanceTicker:
|
||||||
none: "Never show"
|
none: "Never show"
|
||||||
remote: "Show for remote creatures"
|
remote: "Show for remote creatures"
|
||||||
|
@ -2148,12 +2157,6 @@ _deck:
|
||||||
channel: "Channel"
|
channel: "Channel"
|
||||||
mentions: "Mentions"
|
mentions: "Mentions"
|
||||||
direct: "Direct messages"
|
direct: "Direct messages"
|
||||||
_experiments:
|
|
||||||
title: "Experiments"
|
|
||||||
enablePostImports: "Enable beep imports"
|
|
||||||
postImportsCaption: "Allows creatures to import their beeps from past Jörmungandr, Misskey,
|
|
||||||
Mastodon, Akkoma, and Pleroma accounts. It may cause slowdowns during load if
|
|
||||||
your queue is bottlenecked."
|
|
||||||
_dialog:
|
_dialog:
|
||||||
charactersExceeded: "Max characters exceeded! Current: {current}/Limit: {max}"
|
charactersExceeded: "Max characters exceeded! Current: {current}/Limit: {max}"
|
||||||
charactersBelow: "Not enough characters! Current: {current}/Limit: {min}"
|
charactersBelow: "Not enough characters! Current: {current}/Limit: {min}"
|
||||||
|
|
|
@ -447,7 +447,7 @@ title: "Título"
|
||||||
text: "Texto"
|
text: "Texto"
|
||||||
enable: "Activar"
|
enable: "Activar"
|
||||||
next: "Siguiente"
|
next: "Siguiente"
|
||||||
retype: "Intentar de nuevo"
|
retype: "otra vez"
|
||||||
noteOf: "Publicaciones de {user}"
|
noteOf: "Publicaciones de {user}"
|
||||||
inviteToGroup: "Invitar al grupo"
|
inviteToGroup: "Invitar al grupo"
|
||||||
quoteAttached: "Cita añadida"
|
quoteAttached: "Cita añadida"
|
||||||
|
@ -468,9 +468,9 @@ weakPassword: "Contraseña débil"
|
||||||
normalPassword: "Contraseña aceptable"
|
normalPassword: "Contraseña aceptable"
|
||||||
strongPassword: "Contraseña fuerte"
|
strongPassword: "Contraseña fuerte"
|
||||||
passwordMatched: "Coincide"
|
passwordMatched: "Coincide"
|
||||||
passwordNotMatched: "Las contraseñas no coinciden"
|
passwordNotMatched: "No coincide"
|
||||||
signinWith: "Inicia sesión con {x}"
|
signinWith: "Inicia sesión con {x}"
|
||||||
signinFailed: "Autenticación fallida. Asegúrate de haber usado el nombre de usuario
|
signinFailed: "Inicio de sesión fallido. Asegúrate de haber usado el nombre de usuario
|
||||||
y contraseña correctos."
|
y contraseña correctos."
|
||||||
tapSecurityKey: "Toque la clave de seguridad"
|
tapSecurityKey: "Toque la clave de seguridad"
|
||||||
or: "O"
|
or: "O"
|
||||||
|
@ -2188,12 +2188,6 @@ _feeds:
|
||||||
copyFeed: Copiar feed
|
copyFeed: Copiar feed
|
||||||
rss: RSS
|
rss: RSS
|
||||||
atom: Atom
|
atom: Atom
|
||||||
_experiments:
|
|
||||||
title: Experimentos
|
|
||||||
enablePostImports: Activar importaciones de publicaciones
|
|
||||||
postImportsCaption: Permite a los usuarios importar publicaciones de cuentas antiguas
|
|
||||||
de Iceshrimp, Misskey, Mastodon, Akkoma y Pleroma. Puede que cause ralentizaciones
|
|
||||||
durante la carga si sufres cuello de botella.
|
|
||||||
_skinTones:
|
_skinTones:
|
||||||
mediumDark: Medio oscuro
|
mediumDark: Medio oscuro
|
||||||
dark: Oscuro
|
dark: Oscuro
|
||||||
|
|
|
@ -993,9 +993,9 @@ _registry:
|
||||||
domain: "Domaine"
|
domain: "Domaine"
|
||||||
createKey: "Créer une clé"
|
createKey: "Créer une clé"
|
||||||
_aboutIceshrimp:
|
_aboutIceshrimp:
|
||||||
about: "Iceshrimp est un média social décentralisé et fédéré utilisant ActivityPub.\n\
|
about: "Iceshrimp est un média social décentralisé et fédéré utilisant ActivityPub.\n
|
||||||
C'est un fork de Calckey/Firefish (lui-même fork de Misskey) qui se concentre
|
C’est un fork de Calckey/Firefish (lui-même fork de Misskey) qui se concentre
|
||||||
sur la stabilité, les performances et la facilité d'utilisation plutôt que sur
|
sur la stabilité, les performances et la facilité d’utilisation plutôt que sur
|
||||||
de nouvelles fonctionnalités."
|
de nouvelles fonctionnalités."
|
||||||
contributors: "Principaux contributeurs"
|
contributors: "Principaux contributeurs"
|
||||||
allContributors: "Tous les contributeurs"
|
allContributors: "Tous les contributeurs"
|
||||||
|
@ -1114,6 +1114,17 @@ _mfm:
|
||||||
backgroundDescription: Changer la couleur d’arrière-plan d’un texte.
|
backgroundDescription: Changer la couleur d’arrière-plan d’un texte.
|
||||||
background: Couleur d’arrière-plan
|
background: Couleur d’arrière-plan
|
||||||
plain: Simple
|
plain: Simple
|
||||||
|
border: Bordure
|
||||||
|
rubyDescription: Affiche une petite annotation au-dessus du texte, généralement
|
||||||
|
utilisée pour afficher les prononciations des caractères d’Asie de l’Est.
|
||||||
|
borderDescription: Ajoute une bordure autour du contenu.
|
||||||
|
ruby: Rubis
|
||||||
|
unixtime: Heure Unix (Posix)
|
||||||
|
unixtimeDescription: Convertit un nombre de secondes depuis le 1er janvier 1970
|
||||||
|
en une date lisible.
|
||||||
|
followmouse: Suivre la souris
|
||||||
|
followmouseDescription: Faire en sorte que le contenu suive le curseur de la souris.
|
||||||
|
followmouseToggle: Afficher/Masquer l’aperçu
|
||||||
_instanceTicker:
|
_instanceTicker:
|
||||||
none: "Cacher"
|
none: "Cacher"
|
||||||
remote: "Montrer pour les utilisateur·ice·s distant·e·s"
|
remote: "Montrer pour les utilisateur·ice·s distant·e·s"
|
||||||
|
@ -2103,15 +2114,6 @@ editNote: Modifier publication
|
||||||
edited: "Modifié à {date} {time}"
|
edited: "Modifié à {date} {time}"
|
||||||
flagShowTimelineRepliesDescription: Si activé, affiche dans le fil les réponses des
|
flagShowTimelineRepliesDescription: Si activé, affiche dans le fil les réponses des
|
||||||
utilisatieur·rice·s aux publications des autres.
|
utilisatieur·rice·s aux publications des autres.
|
||||||
_experiments:
|
|
||||||
alpha: Alpha
|
|
||||||
beta: Beta
|
|
||||||
enablePostImports: Autoriser l’importation de publications
|
|
||||||
title: Expérimentations
|
|
||||||
postImportsCaption: Permet aux utilisateurs d’importer leurs publications à partir
|
|
||||||
de leurs anciens comptes Iceshrimp, Misskey, Mastodon, Akkoma et Pleroma. Cela
|
|
||||||
peut entraîner des ralentissements lors du chargement si votre file d’attente
|
|
||||||
est congestionnée.
|
|
||||||
findOtherInstance: Trouver une autre instance
|
findOtherInstance: Trouver une autre instance
|
||||||
userSaysSomethingReasonQuote: "{name} a cité une publication contenant {reason}"
|
userSaysSomethingReasonQuote: "{name} a cité une publication contenant {reason}"
|
||||||
signupsDisabled: Les inscriptions sur cette instance sont actuellement désactivés,
|
signupsDisabled: Les inscriptions sur cette instance sont actuellement désactivés,
|
||||||
|
@ -2215,7 +2217,7 @@ _filters:
|
||||||
matchOptions: Modifier la sensibilité à la casse et/ou activer la correspondance
|
matchOptions: Modifier la sensibilité à la casse et/ou activer la correspondance
|
||||||
exacte avec une suite de caractères
|
exacte avec une suite de caractères
|
||||||
info: Nomenclature
|
info: Nomenclature
|
||||||
info2: Un tiret entre crochets [-] indique la possibilité d'inverser/négativer
|
info2: Un tiret entre crochets [-] indique la possibilité d’inverser/négativer
|
||||||
un filtre avec le caractère tiret -
|
un filtre avec le caractère tiret -
|
||||||
infoEnd: Filtrer par aliases
|
infoEnd: Filtrer par aliases
|
||||||
replyTo: En réponse à
|
replyTo: En réponse à
|
||||||
|
@ -2263,10 +2265,10 @@ cwStyle: Apparence des «Avertissement de contenu»
|
||||||
collapseAllCws: Cacher le contenu de toutes les réponses
|
collapseAllCws: Cacher le contenu de toutes les réponses
|
||||||
searchNotLoggedIn_1: Vous devez être authentifié pour pouvoir utiliser la recherche
|
searchNotLoggedIn_1: Vous devez être authentifié pour pouvoir utiliser la recherche
|
||||||
en texte intégral.
|
en texte intégral.
|
||||||
searchNotLoggedIn_2: Toutefois, vous pouvez effectuer des recherches à l'aide de hashtags
|
searchNotLoggedIn_2: Toutefois, vous pouvez effectuer des recherches à l’aide de hashtags
|
||||||
et rechercher des utilisateurs.
|
et rechercher des utilisateurs.
|
||||||
antennaTimelineHint: Les antennes affichent les messages correspondants dans l'ordre
|
antennaTimelineHint: Les antennes affichent les messages correspondants dans l’ordre
|
||||||
dans lequel ils ont été reçus, ce qui n'est pas nécessairement chronologique.
|
dans lequel ils ont été reçus, ce qui n’est pas nécessairement chronologique.
|
||||||
alwaysExpandCws: Toujours dérouler les messages avec des avertissements sur le contenu
|
alwaysExpandCws: Toujours dérouler les messages avec des avertissements sur le contenu
|
||||||
hideFromHome: Cacher de la timeline «Principal»
|
hideFromHome: Cacher de la timeline «Principal»
|
||||||
_wellness:
|
_wellness:
|
||||||
|
|
|
@ -1898,11 +1898,6 @@ noteId: 投稿のID
|
||||||
hiddenTagsDescription: 'トレンドと「みつける」から除外したいハッシュタグを(先頭の # を除いて)改行区切りで入力してください。この設定はトレンドと「みつける」以外には影響しません。'
|
hiddenTagsDescription: 'トレンドと「みつける」から除外したいハッシュタグを(先頭の # を除いて)改行区切りで入力してください。この設定はトレンドと「みつける」以外には影響しません。'
|
||||||
hiddenTags: 非表示にするハッシュタグ
|
hiddenTags: 非表示にするハッシュタグ
|
||||||
apps: "アプリ"
|
apps: "アプリ"
|
||||||
_experiments:
|
|
||||||
title: 試験的な機能
|
|
||||||
postImportsCaption:
|
|
||||||
ユーザーが過去の投稿をIceshrimp・Iceshrimp・Mastodon・Akkoma・Pleromaからインポートすることを許可します。キューが溜まっているときにインポートするとサーバーに負荷がかかる可能性があります。
|
|
||||||
enablePostImports: 投稿のインポートを有効にする
|
|
||||||
sendModMail: モデレーション通知を送る
|
sendModMail: モデレーション通知を送る
|
||||||
deleted: 削除済み
|
deleted: 削除済み
|
||||||
editNote: 投稿を編集
|
editNote: 投稿を編集
|
||||||
|
|
|
@ -1257,11 +1257,6 @@ _aboutIceshrimp:
|
||||||
de bovenstaande link om je naam hier te krijgen!
|
de bovenstaande link om je naam hier te krijgen!
|
||||||
contributors: Belangrijkste bijdragers
|
contributors: Belangrijkste bijdragers
|
||||||
allContributors: Alle bijdragers
|
allContributors: Alle bijdragers
|
||||||
_experiments:
|
|
||||||
postImportsCaption: Hiermee kunnen gebruikers hun posts van eerdere Iceshrimp, Misskey,
|
|
||||||
Mastodon, Akkoma en Pleroma-accounts importen. Dit kan tijdensh het laden voor
|
|
||||||
traagheid zorgen als de wachtrij vol zit.
|
|
||||||
enablePostImports: Post-importeren aanzetten
|
|
||||||
hiddenTagsDescription: 'Geef de hashtags (zonder #) op die je uit Trending en Verkennen
|
hiddenTagsDescription: 'Geef de hashtags (zonder #) op die je uit Trending en Verkennen
|
||||||
wilt verbergen. Verborgen hashtags zijn nog steeds ontdekbaar via andere manieren.'
|
wilt verbergen. Verborgen hashtags zijn nog steeds ontdekbaar via andere manieren.'
|
||||||
pinnedClipId: ID van de clip on vast te zetten
|
pinnedClipId: ID van de clip on vast te zetten
|
||||||
|
|
|
@ -2098,12 +2098,6 @@ preventAiLearningDescription: Zażądaj, by modele językowe AI osób trzecich n
|
||||||
silencedWarning: Ta strona się pokazuje, ponieważ wymienieni użytkownicy są z serwerów
|
silencedWarning: Ta strona się pokazuje, ponieważ wymienieni użytkownicy są z serwerów
|
||||||
które Twój admin wyciszył, więc mogą być oni potencjalnymi spamerami.
|
które Twój admin wyciszył, więc mogą być oni potencjalnymi spamerami.
|
||||||
verifiedLink: Zweryfikowany link
|
verifiedLink: Zweryfikowany link
|
||||||
_experiments:
|
|
||||||
enablePostImports: Włącz import postów
|
|
||||||
postImportsCaption: Pozwala użytkownikom na zaimportowanie ich postów z poprzednich
|
|
||||||
kont Iceshrimp, Misskey, Mastodon, Akkomy czy Pleromy. Może to spowodować spowolnienia
|
|
||||||
podczas ładowania, jeśli twoja kolejka ma wąskie gardło.
|
|
||||||
title: Eksperymenty
|
|
||||||
alwaysExpandCws: Zawsze rozwijaj posty z CW
|
alwaysExpandCws: Zawsze rozwijaj posty z CW
|
||||||
video: Film
|
video: Film
|
||||||
swipeOnMobile: Zezwól na przesuwanie palcem między stronami
|
swipeOnMobile: Zezwól na przesuwanie palcem między stronami
|
||||||
|
|
|
@ -57,7 +57,7 @@ login: Entrar
|
||||||
loggingIn: Entrando
|
loggingIn: Entrando
|
||||||
logout: Sair
|
logout: Sair
|
||||||
signup: Criar conta
|
signup: Criar conta
|
||||||
uploading: Enviando...
|
uploading: Enviando…
|
||||||
users: Usuários
|
users: Usuários
|
||||||
addUser: Adicione um usuário
|
addUser: Adicione um usuário
|
||||||
addInstance: Adicionar um servidor
|
addInstance: Adicionar um servidor
|
||||||
|
@ -95,7 +95,7 @@ alreadyFavorited: Já foi adicionado aos marcadores.
|
||||||
download: Download
|
download: Download
|
||||||
pageLoadError: Ocorreu um erro ao carregar a página.
|
pageLoadError: Ocorreu um erro ao carregar a página.
|
||||||
pageLoadErrorDescription: Isso normalmente é causado por erros de rede ou pelo cache
|
pageLoadErrorDescription: Isso normalmente é causado por erros de rede ou pelo cache
|
||||||
do navegador. Tente limpar o cache e, depois de esperar um pouquinho, tente novamente.
|
do navegador. Tente limpar o cache ou esperar um pouquinho e recarregar a página.
|
||||||
serverIsDead: Esse servidos não está respondendo. Por favor espere um pouco e tente
|
serverIsDead: Esse servidos não está respondendo. Por favor espere um pouco e tente
|
||||||
novamente.
|
novamente.
|
||||||
youShouldUpgradeClient: Para visualizar essa página, favor reiniciar para atualizar
|
youShouldUpgradeClient: Para visualizar essa página, favor reiniciar para atualizar
|
||||||
|
@ -110,3 +110,60 @@ followRequests: Pedidos de seguimento
|
||||||
unfollow: Parar de seguir
|
unfollow: Parar de seguir
|
||||||
followRequestPending: Pedido de seguimento pendente
|
followRequestPending: Pedido de seguimento pendente
|
||||||
enterEmoji: Insira um emoji
|
enterEmoji: Insira um emoji
|
||||||
|
markAsSensitive: Marcar como sensível
|
||||||
|
unmarkAsSensitive: Desmarcar como sensível
|
||||||
|
processing: Processando…
|
||||||
|
renoted: Impulsionado.
|
||||||
|
blockConfirm: Tem certeza de que deseja bloquear esta conta?
|
||||||
|
unsuspendConfirm: Tem certeza de que deseja remover a suspensão desta conta?
|
||||||
|
flagAsBotDescription: Habilite esta opção se esta conta for controlada por um programa.
|
||||||
|
Se ativado, ela funcionará como um sinalizador para outros desenvolvedores, evitando
|
||||||
|
intermináveis cadeias de interação com outros bots e ajustando os sistemas internos
|
||||||
|
do Iceshrimp para tratar esta conta como um bot.
|
||||||
|
sendErrorReportsDescription: "Quando ativado, informações de erro detalhadas serão
|
||||||
|
compartilhadas com o Iceshrimp quando ocorrer um problema, ajudando a melhorar a
|
||||||
|
qualidade do Iceshrimp.\n Isso incluirá informações como a versão do seu sistema
|
||||||
|
operacional, qual navegador você está usando, sua atividade no Iceshrimp, etc."
|
||||||
|
general: Geral
|
||||||
|
federation: Federação
|
||||||
|
receiveFollowRequest: Pedido de seguidor recebido
|
||||||
|
followRequestAccepted: Pedido de seguidor aceito
|
||||||
|
pinned: Fixar no perfil
|
||||||
|
reaction: Reações
|
||||||
|
removeReaction: Remover sua reação
|
||||||
|
enableEmojiReactions: Ativar reações de emoji
|
||||||
|
showEmojisInReactionNotifications: Mostrar emojis em notificações de reação
|
||||||
|
reactionSetting: Reações a serem mostradas no seletor de reações
|
||||||
|
reactionSettingDescription2: Arraste para organizar, clique para excluir, aperte "+"
|
||||||
|
para adicionar.
|
||||||
|
attachCancel: Remover anexo
|
||||||
|
enterFileName: Insira nome de arquivo
|
||||||
|
suspend: Suspender
|
||||||
|
unsuspend: Remover suspensão
|
||||||
|
unblockConfirm: Tem certeza de que deseja desbloquear esta conta?
|
||||||
|
suspendConfirm: Tem certeza de que deseja suspender esta conta?
|
||||||
|
editWidgetsExit: Feito
|
||||||
|
sensitive: Sensível
|
||||||
|
block: Bloquear
|
||||||
|
unblock: Desbloquear
|
||||||
|
emoji: Emoji
|
||||||
|
emojis: Emoji
|
||||||
|
wallpaper: Plano de fundo
|
||||||
|
recipient: Destinatário(s)
|
||||||
|
annotation: Comentários
|
||||||
|
instances: Servidores
|
||||||
|
charts: Gráficos
|
||||||
|
operations: Operações
|
||||||
|
software: Programa
|
||||||
|
version: Versão
|
||||||
|
metadata: Metadados
|
||||||
|
network: Rede
|
||||||
|
disk: Disco
|
||||||
|
statistics: Estatísticas
|
||||||
|
done: Feito
|
||||||
|
default: Padrão
|
||||||
|
blocked: ''
|
||||||
|
migrationConfirm: "Você tem certeza absoluta de que deseja migrar sua conta para {account}?
|
||||||
|
Depois de fazer isso, você não poderá reverter e não poderá usar sua conta normalmente
|
||||||
|
novamente.\nAlém disso, certifique-se de definir esta conta atual como a conta da
|
||||||
|
qual você está migrando."
|
||||||
|
|
|
@ -1859,12 +1859,6 @@ _notification:
|
||||||
youReceivedFollowRequest: Bir takip isteği geldi
|
youReceivedFollowRequest: Bir takip isteği geldi
|
||||||
youGotPoll: '{name} anketinde oylama yaptı'
|
youGotPoll: '{name} anketinde oylama yaptı'
|
||||||
youGotMessagingMessageFromUser: '{name} sana bir sohbet mesajı gönderdi'
|
youGotMessagingMessageFromUser: '{name} sana bir sohbet mesajı gönderdi'
|
||||||
_experiments:
|
|
||||||
title: Deneyler
|
|
||||||
postImportsCaption: Kullanıcıların geçmiş Iceshrimp, Iceshrimp, Mastodon, Akkoma ve
|
|
||||||
Pleroma hesaplarından gönderilerini içe aktarmalarına izin verir. Kuyruğunuz tıkanırsa
|
|
||||||
yükleme sırasında yavaşlamalara neden olabilir.
|
|
||||||
enablePostImports: Gönderi içeri aktarmasını aktif et
|
|
||||||
_dialog:
|
_dialog:
|
||||||
charactersExceeded: 'Maksimum karakter aşıldı! Geçerli: {current}/Sınır: {max}'
|
charactersExceeded: 'Maksimum karakter aşıldı! Geçerli: {current}/Sınır: {max}'
|
||||||
charactersBelow: 'Yeterli karakter yok! Geçerli: {current}/Sınır: {min}'
|
charactersBelow: 'Yeterli karakter yok! Geçerli: {current}/Sınır: {min}'
|
||||||
|
|
|
@ -1904,12 +1904,6 @@ _instanceMute:
|
||||||
title: Приховує записи з перелічених серверів.
|
title: Приховує записи з перелічених серверів.
|
||||||
instanceMuteDescription2: Розділити новими рядками
|
instanceMuteDescription2: Розділити новими рядками
|
||||||
heading: Список серверів для заглушення
|
heading: Список серверів для заглушення
|
||||||
_experiments:
|
|
||||||
enablePostImports: Ввімкнути імпорт записів
|
|
||||||
title: Експерименти
|
|
||||||
postImportsCaption: Дозволяє користувачам імпортувати свої публікації з минулих
|
|
||||||
облікових записів Iceshrimp, Misskey, Mastodon, Akkoma і Pleroma. Це може знизити
|
|
||||||
швидкість під час завантаження, якщо ваша черга перевантажена.
|
|
||||||
_dialog:
|
_dialog:
|
||||||
charactersExceeded: 'Перевищено максимальну кількість символів! Обмеження: {current}/{max}'
|
charactersExceeded: 'Перевищено максимальну кількість символів! Обмеження: {current}/{max}'
|
||||||
charactersBelow: 'Недостатньо символів! Обмеження: {current}/{min}'
|
charactersBelow: 'Недостатньо символів! Обмеження: {current}/{min}'
|
||||||
|
|
|
@ -1815,10 +1815,6 @@ _messaging:
|
||||||
dms: 私信
|
dms: 私信
|
||||||
groups: 群组
|
groups: 群组
|
||||||
migration: 迁移
|
migration: 迁移
|
||||||
_experiments:
|
|
||||||
title: 实验性功能
|
|
||||||
postImportsCaption: 允许用户从过去的 Iceshrimp、Iceshrimp、Mastodon、Akkoma 和 Pleroma 账号导入帖子。如果您的队列出现拥堵,则可能会导致加载速度减慢。
|
|
||||||
enablePostImports: 启用帖子导入
|
|
||||||
license: 许可证
|
license: 许可证
|
||||||
flagSpeakAsCatDescription: 在猫模式下您的帖子会喵化
|
flagSpeakAsCatDescription: 在猫模式下您的帖子会喵化
|
||||||
allowedInstances: 白名单服务器
|
allowedInstances: 白名单服务器
|
||||||
|
|
|
@ -1823,8 +1823,6 @@ flagSpeakAsCat: 像貓一樣地說話
|
||||||
silenceThisInstance: 靜音此伺服器
|
silenceThisInstance: 靜音此伺服器
|
||||||
silencedInstances: 已靜音的伺服器
|
silencedInstances: 已靜音的伺服器
|
||||||
silenced: 已靜音
|
silenced: 已靜音
|
||||||
_experiments:
|
|
||||||
title: 試驗功能
|
|
||||||
findOtherInstance: 找找另一個伺服器
|
findOtherInstance: 找找另一個伺服器
|
||||||
noGraze: 瀏覽器擴展 "Graze for Mastodon" 會與Iceshrimp發生衝突,請停用該擴展。
|
noGraze: 瀏覽器擴展 "Graze for Mastodon" 會與Iceshrimp發生衝突,請停用該擴展。
|
||||||
userSaysSomethingReasonRenote: '{name} 轉傳了包含 {reason} 的貼文'
|
userSaysSomethingReasonRenote: '{name} 轉傳了包含 {reason} 的貼文'
|
||||||
|
|
158
package.json
158
package.json
|
@ -1,80 +1,82 @@
|
||||||
{
|
{
|
||||||
"name": "iceshrimp",
|
"name": "iceshrimp",
|
||||||
"version": "2023.12.7-jormungandr.18",
|
"version": "2023.12.9-jormungandr.18",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://iceshrimp.dev/limepotato/jormungandr-bite.git"
|
"url": "https://iceshrimp.dev/limepotato/jormungandr-bite.git"
|
||||||
},
|
},
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"rebuild": "clean && node ./scripts/build-greet.js && yarn workspace iceshrimp-js build && yarn workspaces foreach -Apitv run build && gulp",
|
"rebuild": "clean && node ./scripts/build-greet.js && yarn workspace iceshrimp-sdk build && yarn workspaces foreach -Apitv run build && gulp",
|
||||||
"build": "node ./scripts/build-greet.js && yarn workspace iceshrimp-js run build && yarn workspaces foreach -Apitv run build && gulp",
|
"build": "node ./scripts/build-greet.js && yarn workspace iceshrimp-sdk run build && yarn workspaces foreach -Apitv run build && gulp",
|
||||||
"build:debug": "node ./scripts/build-greet.js && yarn workspace iceshrimp-js run build:debug && yarn workspaces foreach -Apitv run build:debug && gulp",
|
"build:debug": "node ./scripts/build-greet.js && yarn workspace iceshrimp-sdk run build:debug && yarn workspaces foreach -Apitv run build:debug && gulp",
|
||||||
"start": "yarn workspace backend run start",
|
"start": "yarn workspace backend run start",
|
||||||
"start:debug": "yarn workspace backend run start:debug",
|
"start:debug": "yarn workspace backend run start:debug",
|
||||||
"start:test": "yarn workspace backend run start:test",
|
"start:test": "yarn workspace backend run start:test",
|
||||||
"init": "yarn migrate",
|
"init": "yarn migrate",
|
||||||
"migrate": "yarn workspace backend run migrate",
|
"migrate": "yarn workspace backend run migrate",
|
||||||
"revertmigration": "yarn workspace backend run revertmigration",
|
"revertmigration": "yarn workspace backend run revertmigration",
|
||||||
"migrateandstart": "yarn migrate && yarn start",
|
"migrateandstart": "yarn migrate && yarn start",
|
||||||
"gulp": "gulp build",
|
"gulp": "gulp build",
|
||||||
"watch": "yarn dev",
|
"watch": "yarn dev",
|
||||||
"dev": "node ./scripts/dev.js",
|
"dev": "node ./scripts/dev.js",
|
||||||
"dev:staging": "NODE_OPTIONS=--max_old_space_size=3072 NODE_ENV=development yarn build && yarn start",
|
"dev:staging": "NODE_OPTIONS=--max_old_space_size=3072 NODE_ENV=development yarn build && yarn start",
|
||||||
"lint": "yarn workspaces foreach -Ap run lint",
|
"lint": "yarn workspaces foreach -Ap run lint",
|
||||||
"cy:open": "cypress open --browser --e2e --config-file=cypress.config.ts",
|
"cy:open": "cypress open --browser --e2e --config-file=cypress.config.ts",
|
||||||
"cy:run": "cypress run",
|
"cy:run": "cypress run",
|
||||||
"e2e": "start-server-and-test start:test http://localhost:61812 cy:run",
|
"e2e": "start-server-and-test start:test http://localhost:61812 cy:run",
|
||||||
"mocha": "yarn workspace backend run mocha",
|
"mocha": "yarn workspace backend run mocha",
|
||||||
"test": "yarn mocha",
|
"test": "yarn mocha",
|
||||||
"format": "yarn workspaces foreach -Ap run format",
|
"format": "yarn workspaces foreach -Ap run format",
|
||||||
"clean": "node ./scripts/clean.js",
|
"clean": "node ./scripts/clean.js",
|
||||||
"clean-all": "node ./scripts/clean-all.js",
|
"clean-all": "node ./scripts/clean-all.js",
|
||||||
"cleanall": "yarn clean-all",
|
"cleanall": "yarn clean-all",
|
||||||
"focus-production": "node ./scripts/focus-production.js",
|
"focus-production": "node ./scripts/focus-production.js",
|
||||||
"regen-version": "node ./scripts/regen-version.js",
|
"regen-version": "node ./scripts/regen-version.js",
|
||||||
"pack-yarn": "corepack pack -o .yarn/corepack.tgz"
|
"pack-yarn": "corepack pack -o .yarn/corepack.tgz"
|
||||||
},
|
},
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"packages/backend",
|
"packages/backend",
|
||||||
"packages/client",
|
"packages/client",
|
||||||
"packages/sw",
|
"packages/sw",
|
||||||
"packages/iceshrimp-js"
|
"packages/iceshrimp-sdk"
|
||||||
],
|
],
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"chokidar": "^3.3.1"
|
"chokidar": "^3.3.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@bull-board/api": "5.6.0",
|
"@bull-board/api": "5.6.0",
|
||||||
"@bull-board/ui": "5.6.0",
|
"@bull-board/ui": "5.6.0",
|
||||||
"js-yaml": "4.1.0",
|
"js-yaml": "4.1.0",
|
||||||
"seedrandom": "^3.0.5"
|
"seedrandom": "^3.0.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "1.4.1",
|
"@biomejs/biome": "1.4.1",
|
||||||
"@types/gulp": "4.0.13",
|
"@types/gulp": "4.0.13",
|
||||||
"@types/gulp-rename": "2.0.2",
|
"@types/gulp-rename": "2.0.2",
|
||||||
"@types/node": "20.4.1",
|
"@types/node": "20.4.1",
|
||||||
"chalk": "4.1.2",
|
"chalk": "4.1.2",
|
||||||
"chokidar": "^3.5.3",
|
"chokidar": "^3.5.3",
|
||||||
"cross-env": "7.0.3",
|
"cross-env": "7.0.3",
|
||||||
"cypress": "10.11.0",
|
"cypress": "10.11.0",
|
||||||
"execa": "5.1.1",
|
"execa": "5.1.1",
|
||||||
"glob": "^10.3.10",
|
"glob": "^10.3.10",
|
||||||
"gulp": "4.0.2",
|
"gulp": "4.0.2",
|
||||||
"gulp-cssnano": "2.1.3",
|
"gulp-cssnano": "2.1.3",
|
||||||
"gulp-rename": "2.0.0",
|
"gulp-rename": "2.0.0",
|
||||||
"gulp-replace": "1.1.4",
|
"gulp-replace": "1.1.4",
|
||||||
"gulp-terser": "2.1.0",
|
"gulp-terser": "2.1.0",
|
||||||
"install-peers": "^1.0.4",
|
"install-peers": "^1.0.4",
|
||||||
"start-server-and-test": "1.15.2",
|
"start-server-and-test": "1.15.2",
|
||||||
"typescript": "5.1.6",
|
"typescript": "5.1.6",
|
||||||
"yaml": "^2.3.4"
|
"yaml": "^2.3.4"
|
||||||
},
|
},
|
||||||
"packageManager": "yarn@4.1.1",
|
"packageManager": "yarn@4.3.1",
|
||||||
"dependenciesMeta": {
|
"dependenciesMeta": {
|
||||||
"@discordapp/twemoji@14.1.2": {
|
"@discordapp/twemoji@14.1.2": { "unplugged": true },
|
||||||
"unplugged": true
|
"@microsoft/api-documenter@7.22.30": { "unplugged": true },
|
||||||
}
|
"@microsoft/api-extractor@7.36.3": { "unplugged": true },
|
||||||
}
|
"@microsoft/api-extractor-model@7.27.5": { "unplugged": true },
|
||||||
|
"eventemitter3@4.0.7": { "unplugged": true }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,4 +5,4 @@ This directory contains all of the packages Iceshrimp uses.
|
||||||
- `backend`: Main backend code written in TypeScript for NodeJS
|
- `backend`: Main backend code written in TypeScript for NodeJS
|
||||||
- `client`: Web interface written in Vue3 and TypeScript
|
- `client`: Web interface written in Vue3 and TypeScript
|
||||||
- `sw`: Web [Service Worker](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API) written in TypeScript
|
- `sw`: Web [Service Worker](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API) written in TypeScript
|
||||||
- `iceshrimp-js`: TypeScript SDK for both backend and client, also published on [NPM](https://www.npmjs.com/package/iceshrimp-js) for public use
|
- `iceshrimp-sdk`: TypeScript SDK for both backend and client
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
"@bull-board/koa": "5.6.0",
|
"@bull-board/koa": "5.6.0",
|
||||||
"@bull-board/ui": "5.6.0",
|
"@bull-board/ui": "5.6.0",
|
||||||
"@discordapp/twemoji": "14.1.2",
|
"@discordapp/twemoji": "14.1.2",
|
||||||
|
"@iceshrimp/summaly": "2.7.2",
|
||||||
"@koa/cors": "3.4.3",
|
"@koa/cors": "3.4.3",
|
||||||
"@koa/multer": "3.0.2",
|
"@koa/multer": "3.0.2",
|
||||||
"@koa/router": "9.0.1",
|
"@koa/router": "9.0.1",
|
||||||
|
@ -34,7 +35,6 @@
|
||||||
"@peertube/http-signature": "1.7.0",
|
"@peertube/http-signature": "1.7.0",
|
||||||
"@redocly/openapi-core": "1.0.0-beta.131",
|
"@redocly/openapi-core": "1.0.0-beta.131",
|
||||||
"@sinonjs/fake-timers": "9.1.2",
|
"@sinonjs/fake-timers": "9.1.2",
|
||||||
"@syuilo/aiscript": "0.11.1",
|
|
||||||
"@transfem-org/sfm-js": "^0.24.5",
|
"@transfem-org/sfm-js": "^0.24.5",
|
||||||
"adm-zip": "^0.5.10",
|
"adm-zip": "^0.5.10",
|
||||||
"ajv": "8.12.0",
|
"ajv": "8.12.0",
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
"gunzip-maybe": "^1.4.2",
|
"gunzip-maybe": "^1.4.2",
|
||||||
"happy-dom": "^12.10.3",
|
"happy-dom": "^12.10.3",
|
||||||
"hpagent": "0.1.2",
|
"hpagent": "0.1.2",
|
||||||
"iceshrimp-js": "workspace:*",
|
"iceshrimp-sdk": "workspace:*",
|
||||||
"ioredis": "5.3.2",
|
"ioredis": "5.3.2",
|
||||||
"ip-cidr": "3.1.0",
|
"ip-cidr": "3.1.0",
|
||||||
"is-svg": "4.3.2",
|
"is-svg": "4.3.2",
|
||||||
|
@ -93,7 +93,7 @@
|
||||||
"msgpackr": "1.9.5",
|
"msgpackr": "1.9.5",
|
||||||
"multer": "1.4.4-lts.1",
|
"multer": "1.4.4-lts.1",
|
||||||
"nested-property": "4.0.0",
|
"nested-property": "4.0.0",
|
||||||
"node-fetch": "3.3.1",
|
"node-fetch": "3.3.2",
|
||||||
"nodemailer": "6.9.3",
|
"nodemailer": "6.9.3",
|
||||||
"oauth": "^0.10.0",
|
"oauth": "^0.10.0",
|
||||||
"os-utils": "0.0.14",
|
"os-utils": "0.0.14",
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
"qs": "6.11.2",
|
"qs": "6.11.2",
|
||||||
"random-seed": "0.3.0",
|
"random-seed": "0.3.0",
|
||||||
"ratelimiter": "3.4.1",
|
"ratelimiter": "3.4.1",
|
||||||
"re2": "^1.20.9",
|
"re2": "^1.20.11",
|
||||||
"redis-lock": "0.1.4",
|
"redis-lock": "0.1.4",
|
||||||
"redis-semaphore": "5.3.1",
|
"redis-semaphore": "5.3.1",
|
||||||
"reflect-metadata": "0.1.13",
|
"reflect-metadata": "0.1.13",
|
||||||
|
@ -121,9 +121,8 @@
|
||||||
"sanitize-html": "2.10.0",
|
"sanitize-html": "2.10.0",
|
||||||
"seedrandom": "^3.0.5",
|
"seedrandom": "^3.0.5",
|
||||||
"semver": "7.5.4",
|
"semver": "7.5.4",
|
||||||
"sharp": "0.32.1",
|
"sharp": "0.33.4",
|
||||||
"stringz": "2.1.0",
|
"stringz": "2.1.0",
|
||||||
"summaly": "2.7.0",
|
|
||||||
"syslog-pro": "1.0.0",
|
"syslog-pro": "1.0.0",
|
||||||
"systeminformation": "^5.21.12",
|
"systeminformation": "^5.21.12",
|
||||||
"tar-stream": "^3.1.6",
|
"tar-stream": "^3.1.6",
|
||||||
|
|
|
@ -24,6 +24,7 @@ export class FederatedBite1705528046452 implements MigrationInterface {
|
||||||
}
|
}
|
||||||
|
|
||||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(`DELETE FROM "notification" WHERE "biteId" IS NOT NULL`);
|
||||||
await queryRunner.query(`ALTER TABLE "notification" DROP CONSTRAINT "FK_c54844158c1eead7042e7ca4c83"`);
|
await queryRunner.query(`ALTER TABLE "notification" DROP CONSTRAINT "FK_c54844158c1eead7042e7ca4c83"`);
|
||||||
await queryRunner.query(`ALTER TABLE "bite" DROP CONSTRAINT "FK_5d5f68610583f2e0b6785d3c0e9"`);
|
await queryRunner.query(`ALTER TABLE "bite" DROP CONSTRAINT "FK_5d5f68610583f2e0b6785d3c0e9"`);
|
||||||
await queryRunner.query(`ALTER TABLE "bite" DROP CONSTRAINT "FK_a646fbbeb6efa2531c75fec46b9"`);
|
await queryRunner.query(`ALTER TABLE "bite" DROP CONSTRAINT "FK_a646fbbeb6efa2531c75fec46b9"`);
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||||
|
|
||||||
|
export class BiteNotificationIndex1722204953558 implements MigrationInterface {
|
||||||
|
name = 'BiteNotificationIndex1722204953558'
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_c54844158c1eead7042e7ca4c8" ON "notification" ("biteId") `);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(`DROP INDEX "public"."IDX_c54844158c1eead7042e7ca4c8"`);
|
||||||
|
}
|
||||||
|
}
|
|
@ -88,7 +88,6 @@ export async function getResponse(args: {
|
||||||
body?: string;
|
body?: string;
|
||||||
headers: Record<string, string>;
|
headers: Record<string, string>;
|
||||||
timeout?: number;
|
timeout?: number;
|
||||||
size?: number;
|
|
||||||
redirect?: RequestRedirect;
|
redirect?: RequestRedirect;
|
||||||
}) {
|
}) {
|
||||||
const timeout = args.timeout || 10 * 1000;
|
const timeout = args.timeout || 10 * 1000;
|
||||||
|
@ -103,7 +102,7 @@ export async function getResponse(args: {
|
||||||
headers: args.headers,
|
headers: args.headers,
|
||||||
body: args.body,
|
body: args.body,
|
||||||
timeout,
|
timeout,
|
||||||
size: args.size || 10 * 1024 * 1024,
|
size: 10 * 1024 * 1024,
|
||||||
agent: getAgentByUrl,
|
agent: getAgentByUrl,
|
||||||
signal: controller.signal,
|
signal: controller.signal,
|
||||||
redirect: args.redirect
|
redirect: args.redirect
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { Check, Column, Entity, ManyToOne, PrimaryColumn } from "typeorm";
|
import { Check, Column, Entity, ManyToOne, PrimaryColumn, Index } from "typeorm";
|
||||||
import { id } from "../id.js";
|
import { id } from "../id.js";
|
||||||
import { User } from "./user.js";
|
import { User } from "./user.js";
|
||||||
|
|
||||||
|
|
|
@ -183,6 +183,7 @@ export class Notification {
|
||||||
@JoinColumn()
|
@JoinColumn()
|
||||||
public appAccessToken: AccessToken | null;
|
public appAccessToken: AccessToken | null;
|
||||||
|
|
||||||
|
@Index()
|
||||||
@Column({ ...id(), nullable: true })
|
@Column({ ...id(), nullable: true })
|
||||||
public biteId: Bite["id"] | null;
|
public biteId: Bite["id"] | null;
|
||||||
|
|
||||||
|
|
|
@ -241,24 +241,29 @@ export const UserRepository = db.getRepository(User).extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
async userFromURI(uri: string): Promise<User | null> {
|
async userFromURI(uri: string): Promise<User | null> {
|
||||||
const dbResolver = new DbResolver();
|
try {
|
||||||
let local = await dbResolver.getUserFromApId(uri);
|
const dbResolver = new DbResolver();
|
||||||
if (local) {
|
let local = await dbResolver.getUserFromApId(uri);
|
||||||
return local;
|
if (local) {
|
||||||
|
return local;
|
||||||
|
}
|
||||||
|
|
||||||
|
// fetching Object once from remote
|
||||||
|
const resolver = new Resolver();
|
||||||
|
const object = (await resolver.resolve(uri)) as any;
|
||||||
|
|
||||||
|
// /@user If a URI other than the id is specified,
|
||||||
|
// the URI is determined here
|
||||||
|
if (uri !== object.id) {
|
||||||
|
local = await dbResolver.getUserFromApId(object.id);
|
||||||
|
if (local != null) return local;
|
||||||
|
}
|
||||||
|
|
||||||
|
return isActor(object) ? await createPerson(getApId(object)) : null;
|
||||||
}
|
}
|
||||||
|
catch {
|
||||||
// fetching Object once from remote
|
return null;
|
||||||
const resolver = new Resolver();
|
|
||||||
const object = (await resolver.resolve(uri)) as any;
|
|
||||||
|
|
||||||
// /@user If a URI other than the id is specified,
|
|
||||||
// the URI is determined here
|
|
||||||
if (uri !== object.id) {
|
|
||||||
local = await dbResolver.getUserFromApId(object.id);
|
|
||||||
if (local != null) return local;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return isActor(object) ? await createPerson(getApId(object)) : null;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
async getHasUnreadAntenna(userId: User["id"]): Promise<boolean> {
|
async getHasUnreadAntenna(userId: User["id"]): Promise<boolean> {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import type Bull from "bull";
|
import type Bull from "bull";
|
||||||
|
import { noop } from "@/queue/processors/noop.js";
|
||||||
|
|
||||||
const jobs = {} as Record<string, Bull.ProcessCallbackFunction<Record<string, unknown>>>;
|
const jobs = {} as Record<string, Bull.ProcessCallbackFunction<Record<string, unknown>>>;
|
||||||
|
|
||||||
|
@ -6,4 +7,6 @@ export default function (q: Bull.Queue) {
|
||||||
for (const [k, v] of Object.entries(jobs)) {
|
for (const [k, v] of Object.entries(jobs)) {
|
||||||
q.process(k, 16, v);
|
q.process(k, 16, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
q.process(noop);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ import { Users, DriveFiles } from "@/models/index.js";
|
||||||
import type { DbUserImportJobData } from "@/queue/types.js";
|
import type { DbUserImportJobData } from "@/queue/types.js";
|
||||||
import { queueLogger } from "../../logger.js";
|
import { queueLogger } from "../../logger.js";
|
||||||
import type Bull from "bull";
|
import type Bull from "bull";
|
||||||
|
import { cache as heuristic } from "@/server/api/common/generate-following-query.js";
|
||||||
|
|
||||||
const logger = queueLogger.createSubLogger("import-following");
|
const logger = queueLogger.createSubLogger("import-following");
|
||||||
|
|
||||||
|
@ -111,6 +112,7 @@ export async function importFollowing(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await heuristic.delete(user.id);
|
||||||
logger.succ("Imported");
|
logger.succ("Imported");
|
||||||
done();
|
done();
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ import { importMastoPost } from "./import-masto-post.js";
|
||||||
import { importCkPost } from "./import-firefish-post.js";
|
import { importCkPost } from "./import-firefish-post.js";
|
||||||
import { importBlocking } from "./import-blocking.js";
|
import { importBlocking } from "./import-blocking.js";
|
||||||
import { importCustomEmojis } from "./import-custom-emojis.js";
|
import { importCustomEmojis } from "./import-custom-emojis.js";
|
||||||
|
import { noop } from "@/queue/processors/noop.js";
|
||||||
|
|
||||||
const jobs = {
|
const jobs = {
|
||||||
deleteDriveFiles,
|
deleteDriveFiles,
|
||||||
|
@ -44,4 +45,6 @@ export default function (dbQueue: Bull.Queue<DbJobData>) {
|
||||||
for (const [k, v] of Object.entries(jobs)) {
|
for (const [k, v] of Object.entries(jobs)) {
|
||||||
dbQueue.process(k, v);
|
dbQueue.process(k, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dbQueue.process(noop);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,10 @@ const logger = new Logger("deliver");
|
||||||
let latest: string | null = null;
|
let latest: string | null = null;
|
||||||
|
|
||||||
export default async (job: Bull.Job<DeliverJobData>) => {
|
export default async (job: Bull.Job<DeliverJobData>) => {
|
||||||
|
if (job.data == null || Object.keys(job.data).length === 0) {
|
||||||
|
job.opts.removeOnComplete = true;
|
||||||
|
return "Skip (data was null or empty)";
|
||||||
|
}
|
||||||
const { host } = new URL(job.data.to);
|
const { host } = new URL(job.data.to);
|
||||||
const puny = toPuny(host);
|
const puny = toPuny(host);
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,11 @@ export async function endedPollNotification(
|
||||||
job: Bull.Job<EndedPollNotificationJobData>,
|
job: Bull.Job<EndedPollNotificationJobData>,
|
||||||
done: any,
|
done: any,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
|
if (job.data == null || Object.keys(job.data).length === 0) {
|
||||||
|
job.opts.removeOnComplete = true;
|
||||||
|
done();
|
||||||
|
return;
|
||||||
|
}
|
||||||
const note = await Notes.findOneBy({ id: job.data.noteId });
|
const note = await Notes.findOneBy({ id: job.data.noteId });
|
||||||
if (note == null || !note.hasPoll) {
|
if (note == null || !note.hasPoll) {
|
||||||
done();
|
done();
|
||||||
|
|
|
@ -29,6 +29,10 @@ const logger = new Logger("inbox");
|
||||||
|
|
||||||
// Processing when an activity arrives in the user's inbox
|
// Processing when an activity arrives in the user's inbox
|
||||||
export default async (job: Bull.Job<InboxJobData>): Promise<string> => {
|
export default async (job: Bull.Job<InboxJobData>): Promise<string> => {
|
||||||
|
if (job.data == null || Object.keys(job.data).length === 0) {
|
||||||
|
job.opts.removeOnComplete = true;
|
||||||
|
return "Skip (data was null or empty)";
|
||||||
|
}
|
||||||
const signature = job.data.signature; // HTTP-signature
|
const signature = job.data.signature; // HTTP-signature
|
||||||
let activity = job.data.activity;
|
let activity = job.data.activity;
|
||||||
|
|
||||||
|
|
7
packages/backend/src/queue/processors/noop.ts
Normal file
7
packages/backend/src/queue/processors/noop.ts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
import Bull from "bull";
|
||||||
|
|
||||||
|
// Processor to be registered for jobs with __default__ (unnamed) handlers in queues that only have named handlers
|
||||||
|
// Prevents sporadic bogus jobs from clogging up the queues
|
||||||
|
export async function noop(job: Bull.Job): Promise<void> {
|
||||||
|
job.opts.removeOnComplete = true;
|
||||||
|
}
|
|
@ -2,6 +2,7 @@ import type Bull from "bull";
|
||||||
import type { ObjectStorageJobData } from "@/queue/types.js";
|
import type { ObjectStorageJobData } from "@/queue/types.js";
|
||||||
import deleteFile from "./delete-file.js";
|
import deleteFile from "./delete-file.js";
|
||||||
import cleanRemoteFiles from "./clean-remote-files.js";
|
import cleanRemoteFiles from "./clean-remote-files.js";
|
||||||
|
import { noop } from "@/queue/processors/noop.js";
|
||||||
|
|
||||||
const jobs = {
|
const jobs = {
|
||||||
deleteFile,
|
deleteFile,
|
||||||
|
@ -16,4 +17,6 @@ export default function (q: Bull.Queue) {
|
||||||
for (const [k, v] of Object.entries(jobs)) {
|
for (const [k, v] of Object.entries(jobs)) {
|
||||||
q.process(k, 16, v);
|
q.process(k, 16, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
q.process(noop);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import { checkExpiredMutings } from "./check-expired-mutings.js";
|
||||||
import { clean } from "./clean.js";
|
import { clean } from "./clean.js";
|
||||||
import { setLocalEmojiSizes } from "./local-emoji-size.js";
|
import { setLocalEmojiSizes } from "./local-emoji-size.js";
|
||||||
import { verifyLinks } from "./verify-links.js";
|
import { verifyLinks } from "./verify-links.js";
|
||||||
|
import { noop } from "@/queue/processors/noop.js";
|
||||||
|
|
||||||
const jobs = {
|
const jobs = {
|
||||||
tickCharts,
|
tickCharts,
|
||||||
|
@ -25,4 +26,6 @@ export default function (dbQueue: Bull.Queue<Record<string, unknown>>) {
|
||||||
for (const [k, v] of Object.entries(jobs)) {
|
for (const [k, v] of Object.entries(jobs)) {
|
||||||
dbQueue.process(k, v);
|
dbQueue.process(k, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dbQueue.process(noop);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,10 @@ import config from "@/config/index.js";
|
||||||
const logger = new Logger("webhook");
|
const logger = new Logger("webhook");
|
||||||
|
|
||||||
export default async (job: Bull.Job<WebhookDeliverJobData>) => {
|
export default async (job: Bull.Job<WebhookDeliverJobData>) => {
|
||||||
|
if (job.data == null || Object.keys(job.data).length === 0) {
|
||||||
|
job.opts.removeOnComplete = true;
|
||||||
|
return "Skip (data was null or empty)";
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
logger.debug(`delivering ${job.data.webhookId}`);
|
logger.debug(`delivering ${job.data.webhookId}`);
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ import config from "@/config/index.js";
|
||||||
import { genId } from "@/misc/gen-id.js";
|
import { genId } from "@/misc/gen-id.js";
|
||||||
import { createBite } from "@/services/create-bite.js";
|
import { createBite } from "@/services/create-bite.js";
|
||||||
import { Bite } from "@/models/entities/bite.js";
|
import { Bite } from "@/models/entities/bite.js";
|
||||||
import { tickBiteIncoming } from "@/metrics.js";
|
|
||||||
|
|
||||||
export default async (
|
export default async (
|
||||||
actor: CacheableRemoteUser,
|
actor: CacheableRemoteUser,
|
||||||
|
@ -76,7 +75,5 @@ export default async (
|
||||||
bite.published ? new Date(bite.published) : null,
|
bite.published ? new Date(bite.published) : null,
|
||||||
);
|
);
|
||||||
|
|
||||||
tickBiteIncoming();
|
|
||||||
|
|
||||||
return "ok";
|
return "ok";
|
||||||
};
|
};
|
||||||
|
|
|
@ -126,6 +126,7 @@ export class LdSignature {
|
||||||
headers: {
|
headers: {
|
||||||
Accept: "application/ld+json, application/json",
|
Accept: "application/ld+json, application/json",
|
||||||
},
|
},
|
||||||
|
size: 1024 * 1024, // 1MiB
|
||||||
// TODO
|
// TODO
|
||||||
//timeout: this.loderTimeout,
|
//timeout: this.loderTimeout,
|
||||||
agent: (u) => (u.protocol === "http:" ? httpAgent : httpsAgent),
|
agent: (u) => (u.protocol === "http:" ? httpAgent : httpsAgent),
|
||||||
|
|
|
@ -584,7 +584,7 @@ export async function updateNote(value: string | IObject, resolver?: Resolver) {
|
||||||
text = await htmlToMfm(post.content, post.tag);
|
text = await htmlToMfm(post.content, post.tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
const cw = post.sensitive && post.summary;
|
const cw = post.summary === "" ? null : post.summary;
|
||||||
|
|
||||||
// File parsing
|
// File parsing
|
||||||
const fileList = post.attachment
|
const fileList = post.attachment
|
||||||
|
|
|
@ -56,6 +56,8 @@ import {
|
||||||
import { RecursionLimiter } from "@/models/repositories/user-profile.js";
|
import { RecursionLimiter } from "@/models/repositories/user-profile.js";
|
||||||
import { UserConverter } from "@/server/api/mastodon/converters/user.js";
|
import { UserConverter } from "@/server/api/mastodon/converters/user.js";
|
||||||
|
|
||||||
|
import fetch from "node-fetch";
|
||||||
|
|
||||||
const logger = apLogger;
|
const logger = apLogger;
|
||||||
|
|
||||||
const nameLength = 128;
|
const nameLength = 128;
|
||||||
|
@ -271,6 +273,7 @@ export async function createPerson(
|
||||||
try {
|
try {
|
||||||
let data = await fetch(person.followers, {
|
let data = await fetch(person.followers, {
|
||||||
headers: { Accept: "application/json" },
|
headers: { Accept: "application/json" },
|
||||||
|
size: 1024 * 1024
|
||||||
});
|
});
|
||||||
let json_data = JSON.parse(await data.text());
|
let json_data = JSON.parse(await data.text());
|
||||||
|
|
||||||
|
@ -286,6 +289,7 @@ export async function createPerson(
|
||||||
try {
|
try {
|
||||||
let data = await fetch(person.following, {
|
let data = await fetch(person.following, {
|
||||||
headers: { Accept: "application/json" },
|
headers: { Accept: "application/json" },
|
||||||
|
size: 1024 * 1024
|
||||||
});
|
});
|
||||||
let json_data = JSON.parse(await data.text());
|
let json_data = JSON.parse(await data.text());
|
||||||
|
|
||||||
|
@ -529,6 +533,7 @@ export async function updatePerson(
|
||||||
try {
|
try {
|
||||||
let data = await fetch(person.followers, {
|
let data = await fetch(person.followers, {
|
||||||
headers: { Accept: "application/json" },
|
headers: { Accept: "application/json" },
|
||||||
|
size: 1024 * 1024
|
||||||
});
|
});
|
||||||
let json_data = JSON.parse(await data.text());
|
let json_data = JSON.parse(await data.text());
|
||||||
|
|
||||||
|
@ -544,6 +549,7 @@ export async function updatePerson(
|
||||||
try {
|
try {
|
||||||
let data = await fetch(person.following, {
|
let data = await fetch(person.following, {
|
||||||
headers: { Accept: "application/json" },
|
headers: { Accept: "application/json" },
|
||||||
|
size: 1024 * 1024
|
||||||
});
|
});
|
||||||
let json_data = JSON.parse(await data.text());
|
let json_data = JSON.parse(await data.text());
|
||||||
|
|
||||||
|
|
|
@ -11,14 +11,14 @@ export default function (
|
||||||
totalItems: any,
|
totalItems: any,
|
||||||
first?: string,
|
first?: string,
|
||||||
last?: string,
|
last?: string,
|
||||||
orderedItems?: Record<string, unknown>[],
|
orderedItems?: (Record<string, unknown> | string)[],
|
||||||
): {
|
): {
|
||||||
id: string | null;
|
id: string | null;
|
||||||
type: "OrderedCollection";
|
type: "OrderedCollection";
|
||||||
totalItems: any;
|
totalItems: any;
|
||||||
first?: string;
|
first?: string;
|
||||||
last?: string;
|
last?: string;
|
||||||
orderedItems?: Record<string, unknown>[];
|
orderedItems?: (Record<string, unknown> | string)[];
|
||||||
} {
|
} {
|
||||||
const page: any = {
|
const page: any = {
|
||||||
id,
|
id,
|
||||||
|
|
|
@ -27,7 +27,6 @@ import { shouldBlockInstance } from "@/misc/should-block-instance.js";
|
||||||
import { apLogger } from "@/remote/activitypub/logger.js";
|
import { apLogger } from "@/remote/activitypub/logger.js";
|
||||||
import { In, IsNull, Not } from "typeorm";
|
import { In, IsNull, Not } from "typeorm";
|
||||||
import renderBite from "@/remote/activitypub/renderer/bite.js";
|
import renderBite from "@/remote/activitypub/renderer/bite.js";
|
||||||
import { tickResolve } from "@/metrics.js";
|
|
||||||
|
|
||||||
export default class Resolver {
|
export default class Resolver {
|
||||||
private history: Set<string>;
|
private history: Set<string>;
|
||||||
|
|
|
@ -37,7 +37,6 @@ import { serverLogger } from "./index.js";
|
||||||
import config from "@/config/index.js";
|
import config from "@/config/index.js";
|
||||||
import Koa from "koa";
|
import Koa from "koa";
|
||||||
import renderBite from "@/remote/activitypub/renderer/bite.js";
|
import renderBite from "@/remote/activitypub/renderer/bite.js";
|
||||||
import { tickFetch } from "@/metrics.js";
|
|
||||||
|
|
||||||
// Init router
|
// Init router
|
||||||
const router = new Router();
|
const router = new Router();
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue