Compare commits

...

80 commits

Author SHA1 Message Date
Laura Hausmann fb0ebd6079
[yarn] Update version to 4.2.2
All checks were successful
/ test-build (push) Successful in 1m37s
2024-05-13 14:01:29 +02:00
Laura Hausmann dfe01652f0
[backend] Fix build on node v22 2024-05-13 14:00:12 +02:00
Laura Hausmann 3562a3e19d
Update README
All checks were successful
/ test-build (push) Successful in 1m31s
2024-05-06 19:26:37 +02:00
Laura Hausmann df5734523f
[backend] Correctly set CW on note update
All checks were successful
/ test-build (push) Successful in 2m8s
Resolves: #547
2024-05-01 23:48:07 +02:00
Pyrox 84af6f49c8
[yarn] Bump packaged version to 4.1.1
All checks were successful
/ test-build (push) Successful in 1m24s
2024-04-30 15:01:55 -04:00
mae! 33c4efbcd4 [chart] bump version
All checks were successful
/ test-build (push) Successful in 1m19s
Signed-off-by: Mae Dartmann <mae+git_work@dartmann.net>
2024-04-29 19:28:52 +02:00
mae! e9fdad57d5 [chart] make maxNoteLength configurable
Signed-off-by: Mae Dartmann <mae+git_work@dartmann.net>
2024-04-29 19:28:52 +02:00
Laura Hausmann f70f61523d
Release: v2023.12.7
All checks were successful
/ test-build (push) Successful in 1m20s
2024-04-29 16:36:58 +02:00
Laura Hausmann febb499fcb
[backend] Compact LD-signed activities against well-known context to defend against spoofing attacks 2024-04-29 16:36:58 +02:00
Laura Hausmann dcfa69ff9d
[backend/masto-client] Fix user profile html cache not updating
All checks were successful
/ test-build (push) Successful in 1m32s
2024-04-27 18:48:03 +02:00
mae! 562b378b1b
[chart] make number of worker threads configurable
All checks were successful
/ test-build (push) Successful in 1m35s
Signed-off-by: Mae Dartmann <mae+git_work@dartmann.net>
2024-04-24 16:36:53 +02:00
Laura Hausmann 6f3818a8bb
[backend/masto-client] Correctly set meId in FTS query helper
All checks were successful
/ test-build (push) Successful in 1m38s
2024-04-24 03:02:24 +02:00
mae! e4850b4636
Dockerfile: stop using cp -T
All checks were successful
/ test-build (push) Successful in 1m37s
Signed-off-by: Mae Dartmann <mae+git_work@dartmann.net>
2024-04-23 12:14:23 +02:00
Laura Hausmann 948dc85a56
[yarn] Update version to 4.1.1
All checks were successful
/ test-build (push) Successful in 1m19s
2024-04-19 20:23:41 +02:00
mei23 301c754e95
[backend] Add Cache-Control to Bull Dashboard
All checks were successful
/ test-build (push) Successful in 1m25s
2024-04-19 17:11:14 +02:00
Laura Hausmann ff660659b8
[docs] Fix typo in CHANGELOG.md
All checks were successful
/ test-build (push) Successful in 1m24s
2024-04-11 20:05:18 +02:00
Ezeani Emmanuel 3fa791d71f
[backend] Improve custom TypeORM logger with configurable logging options
All checks were successful
/ test-build (push) Successful in 1m28s
Co-authored-by: Laura Hausmann <laura@hausmann.dev>
2024-04-11 17:22:45 +02:00
Laura Hausmann 74a3375886
[backend] Add quote_id to mastodon api note responses
All checks were successful
/ test-build (push) Successful in 1m29s
2024-04-10 18:21:59 +02:00
Laura Hausmann 5a30581c73
[backend] Fix autofollowedAccount being set to random (possibly non-local) users on update-meta
All checks were successful
/ test-build (push) Successful in 1m20s
2024-04-08 20:39:41 +02:00
Laura Hausmann 85cdfb8f33
Release: v2023.12.6
All checks were successful
/ test-build (push) Successful in 1m8s
2024-03-30 13:11:19 +01:00
Laura Hausmann 41cb218aa8
[backend] Set X-Content-Type-Options to nosniff on the drive files endpoint 2024-03-30 13:11:15 +01:00
Laura Hausmann cf506d3bd9
[backend] Reject anonymous objects in the AP resolver 2024-03-30 13:11:09 +01:00
Laura Hausmann ac57c58ecf
[backend] Stricter validation of activity identifiers
This resolves a security issue that was disclosed on 2024-03-24 & patched in coordination with other affected software on 2024-03-30.
Huge thanks to Oneric for the detailed security disclosure.
2024-03-30 13:11:03 +01:00
Crimekillz 74df0b3602 Fix bug: Pass reference to Note OBJ when creating notifications for Poll Vote and Poll End so muted threads can be resolved correctly
All checks were successful
/ test-build (push) Successful in 1m13s
2024-03-26 16:24:19 +01:00
Lilian e099582809
[frontend] Align welcome screen reactions to the right
All checks were successful
/ test-build (push) Successful in 1m3s
Thanks Yonei!
2024-03-22 22:20:17 +01:00
Laura Hausmann dbd65a335a
[docs] Add postgresql-contrib to installation requirements
All checks were successful
/ test-build (push) Successful in 1m19s
2024-03-21 14:41:07 +01:00
Laura Hausmann 01fbd1a5c7
[backend] Fix video playback for files hosted from different origins
All checks were successful
/ test-build (push) Successful in 1m31s
2024-03-18 15:34:14 +01:00
Jegler b1b9616572
Add support for decoding AVIF images
All checks were successful
/ test-build (push) Successful in 1m11s
2024-03-14 16:59:04 +01:00
Norm c8704f4517 [docs] Enable gzip compression in example nginx config
All checks were successful
/ test-build (push) Successful in 1m11s
This should help reduce the bandwith usage of Iceshrimp when using
Nginx.

The `gzip_types` setting is copied from Akkoma's nginx config:
889b57df82/installation/nginx/akkoma.nginx (L66)
2024-03-14 00:18:21 -04:00
Laura Hausmann 0022e9d0e0
Update README.md
All checks were successful
/ test-build (push) Successful in 1m20s
2024-03-07 17:44:17 +01:00
CookiLover311 ccec3e7e63 [mastodon-client] Add default reaction to /v1/instance
All checks were successful
/ test-build (push) Successful in 1m28s
2024-03-01 14:25:41 +01:00
老周部落 3824767cc9 [backend] Fix resolver cannot parse some follows and notes request
All checks were successful
/ test-build (push) Successful in 1m28s
2024-02-26 08:49:45 +01:00
naskya e9ef70e272
fix (backend): check url properly
All checks were successful
/ test-build (push) Successful in 1m1s
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2024-02-26 00:11:21 +01:00
Norm 9ac99d9f86 [docs] Improve podman guide
Some checks failed
/ test-build (push) Has been cancelled
- Create the `$HOME/.config/containers/systemd` dir if it doesn't
  already exists
- Fix the copy command for podman services
- Call `systemctl --user daemon-reload` to reload services before
  starting them.
2024-02-25 14:24:28 -05:00
konkonkon ef66626c43 [client] Update translations (Filipino)
All checks were successful
/ test-build (push) Successful in 1m12s
Currently translated at 1.1% (21 of 1883 strings)

Translation: Iceshrimp/locales
Translate-URL: https://translate.iceshrimp.dev/projects/iceshrimp/locales/fil/
2024-02-24 22:04:41 +01:00
konkonkon 594c7d7551 [client] Added translations (Filipino)
All checks were successful
/ test-build (push) Successful in 1m13s
2024-02-23 20:34:53 +01:00
Salif Mehmed 799f83a1c8 [client] Update translations (Bulgarian)
All checks were successful
/ test-build (push) Successful in 1m16s
Currently translated at 39.4% (742 of 1883 strings)

Translation: Iceshrimp/locales
Translate-URL: https://translate.iceshrimp.dev/projects/iceshrimp/locales/bg/
2024-02-21 16:04:43 +01:00
jeder 9472dc7a8d [client] Update translations (Polish)
All checks were successful
/ test-build (push) Successful in 1m17s
Currently translated at 96.4% (1817 of 1883 strings)

Translation: Iceshrimp/locales
Translate-URL: https://translate.iceshrimp.dev/projects/iceshrimp/locales/pl/
2024-02-18 21:04:43 +01:00
Laura Hausmann 5de32c6097
Fix typo in changelog
All checks were successful
/ test-build (push) Successful in 1m2s
2024-02-18 02:52:14 +01:00
Laura Hausmann f1a3965881
Release: v2023.12.5
All checks were successful
/ test-build (push) Successful in 1m15s
2024-02-18 02:13:18 +01:00
Laura Hausmann 27017272b8
Update README
All checks were successful
/ test-build (push) Successful in 1m9s
2024-02-17 19:15:09 +01:00
Laura Hausmann e2cff0340f
[backend] When fetching activities, specify the acceptable JSON-LD profile explicitly
All checks were successful
/ test-build (push) Successful in 1m22s
2024-02-17 16:11:23 +01:00
Laura Hausmann 099ba9ce65
[backend] Enforce JSON-LD profile when fetching activities
All checks were successful
/ test-build (push) Successful in 1m13s
2024-02-17 15:59:24 +01:00
Laura Hausmann 31122636d3
[backend] Fix federation for incoming note edits with an attachment that has no alt text
All checks were successful
/ test-build (push) Successful in 1m15s
2024-02-17 04:04:25 +01:00
Laura Hausmann 20ae0829a5
Release: v2023.12.4
All checks were successful
/ test-build (push) Successful in 1m21s
2024-02-16 19:42:36 +01:00
Laura Hausmann 5f6096c1b7
[backend] Verify object id host matches final URL when fetching remote activities
All checks were successful
/ test-build (push) Successful in 1m3s
2024-02-16 18:42:23 +01:00
Laura Hausmann 9fc45f166c
[backend] Verify response content type when fetching remote activities 2024-02-16 18:42:22 +01:00
tournesol 4cd9c002e6 [client] Update translations (French)
All checks were successful
/ test-build (push) Successful in 1m19s
Currently translated at 100.0% (1883 of 1883 strings)

Translation: Iceshrimp/locales
Translate-URL: https://translate.iceshrimp.dev/projects/iceshrimp/locales/fr/
2024-02-15 09:04:43 +01:00
Laura Hausmann 129cc4408a
[mastodon-client] Register full OAuth scopes as well
All checks were successful
/ test-build (push) Successful in 1m15s
2024-02-14 23:56:11 +01:00
Laura Hausmann 3399187302
[mastodon-client] Fix /v2/suggestions endpoint (undocumented API behavior strikes again) 2024-02-14 23:55:50 +01:00
Laura Hausmann e49d168ecd
[mastodon-client] Add support for quote_id parameter when creating posts (#515)
All checks were successful
/ test-build (push) Successful in 1m17s
2024-02-13 16:51:08 +01:00
Laura Hausmann 63fa244ea8
[client] Fix migration page when migrating from/to the same account twice, resolves #514
All checks were successful
/ test-build (push) Successful in 1m18s
2024-02-10 15:52:48 +01:00
Laura Hausmann 4b20ab6ad4
[backend] Fix typo in audience.ts isPublic check
All checks were successful
/ test-build (push) Successful in 1m15s
2024-02-07 19:56:02 +01:00
Pyrox 826e2c2867
[nix] Update packaged yarn
All checks were successful
/ test-build (push) Successful in 1m9s
2024-02-04 19:21:36 -05:00
Laura Hausmann dd6bd0267c
Release: v2023.12.3
All checks were successful
/ test-build (push) Successful in 1m2s
2024-02-04 20:41:06 +01:00
Laura Hausmann 1378037384
[backend] Only allow author to see hidden posts
All checks were successful
/ test-build (push) Successful in 1m7s
2024-02-04 20:23:42 +01:00
Laura Hausmann f14c5ed4ef
[backend/frontend] Disable post imports for security reasons
All checks were successful
/ test-build (push) Successful in 1m5s
2024-02-04 20:12:51 +01:00
corite 3dff9eac78 fix: k8s persistence access mode
All checks were successful
/ test-build (push) Successful in 1m12s
2024-02-02 21:35:24 +01:00
Laura Hausmann 827370c9df
[yarn] Update version to 4.1.0
All checks were successful
/ test-build (push) Successful in 1m31s
2024-01-31 22:06:22 +01:00
Laura Hausmann a0acc7ef83
Release: v2023.12.2
All checks were successful
/ test-build (push) Successful in 1m8s
2024-01-30 18:30:09 +01:00
Laura Hausmann a1460503cf
Make sure unresponsive split domain instances that come back to life don't get stuck isNotResponding
All checks were successful
/ test-build (push) Successful in 1m20s
2024-01-30 18:27:06 +01:00
Laura Hausmann 7ed43b76b5
Improve dead instances pruning
All checks were successful
/ test-build (push) Successful in 1m24s
This fixes a couple edge cases in which inactive but working instances could be caught by the dead instances filter
2024-01-30 18:00:54 +01:00
Laura Hausmann 0d28b07203
Don't send activities to dead instances
All checks were successful
/ test-build (push) Successful in 1m21s
Co-authored-by: Johann150 <johann.galle@protonmail.com>
2024-01-29 21:50:05 +01:00
Salif Mehmed 565c2efbe5 [client] Update translations (Bulgarian)
All checks were successful
/ test-build (push) Successful in 1m25s
Currently translated at 34.9% (658 of 1883 strings)

Translation: Iceshrimp/locales
Translate-URL: https://translate.iceshrimp.dev/projects/iceshrimp/locales/bg/
2024-01-29 16:04:41 +01:00
Laura Hausmann dbaec21750
[docs] Add disclaimer for migrations from Misskey v13 and forks
All checks were successful
/ test-build (push) Successful in 1m3s
2024-01-26 17:44:03 +01:00
Salif Mehmed c578172b42 [client] Update translations (Bulgarian)
All checks were successful
/ test-build (push) Successful in 1m23s
Currently translated at 19.5% (369 of 1883 strings)

Translation: Iceshrimp/locales
Translate-URL: https://translate.iceshrimp.dev/projects/iceshrimp/locales/bg/
2024-01-26 17:17:05 +01:00
Laura Hausmann d86205d8b5
[locales] Rename files to correct language/region code format
Some checks failed
/ test-build (push) Has been cancelled
2024-01-26 17:16:57 +01:00
Laura Hausmann 1d2da1a7fb
Update README.md
All checks were successful
/ test-build (push) Successful in 1m26s
2024-01-25 04:10:49 +01:00
Laura Hausmann 42fe936e96
Update README.md
All checks were successful
/ test-build (push) Successful in 1m10s
Added information on the ongoing rewrite efforts
2024-01-20 20:53:34 +01:00
corite 4d9b8df5c6 feat: enable persistence in chart
All checks were successful
/ test-build (push) Successful in 1m26s
2024-01-14 21:25:57 +01:00
corite 5c405defa0 chore: update chart dependencies 2024-01-14 20:35:52 +01:00
corite 6b91be1b0e fix: update image link
All checks were successful
/ test-build (push) Successful in 1m36s
2024-01-13 08:25:44 +01:00
corite a5ef9b9d94 fix: helm chart issues 2024-01-13 08:25:44 +01:00
Daks d07f5c4bd7 [client] Update translations (Ukrainian)
All checks were successful
/ test-build (push) Successful in 1m27s
Currently translated at 100.0% (1883 of 1883 strings)

Translation: Iceshrimp/locales
Translate-URL: https://translate.iceshrimp.dev/projects/iceshrimp/locales/uk/
2024-01-05 00:04:40 +01:00
jolupa b05ad9eada [client] Update translations (Catalan)
Currently translated at 98.0% (1847 of 1883 strings)

Translation: Iceshrimp/locales
Translate-URL: https://translate.iceshrimp.dev/projects/iceshrimp/locales/ca/
2024-01-05 00:04:39 +01:00
Laura Hausmann 197002df8a
[backend] Fix emojis with special characters
All checks were successful
/ test-build (push) Successful in 1m20s
This is an adaptation of 3968a6ca07 and ada577bde6

Co-authored-by: Johann150 <johann.galle@protonmail.com>
2024-01-04 23:55:00 +01:00
Jeder 299a20fb71
[docs] Add podman (quadlet/systemd) installation guide
All checks were successful
/ test-build (push) Successful in 1m29s
Co-authored-by: Jeder <jeder+git@jeder.pl>
Co-committed-by: Jeder <jeder+git@jeder.pl>
2024-01-03 22:57:10 +01:00
Laura Hausmann 0a3fedfd4f
Release: v2023.12.1 (now with the correct package version)
All checks were successful
/ test-build (push) Successful in 1m9s
2023-12-21 21:34:25 +01:00
Laura Hausmann 2d76fe4c8b
Release: v2023.12.1
All checks were successful
/ test-build (push) Successful in 1m6s
2023-12-21 20:05:10 +01:00
mia 87360eab9c prevent extra colon from showing up
All checks were successful
/ test-build (push) Successful in 1m25s
2023-12-21 08:40:45 -08:00
77 changed files with 4074 additions and 3065 deletions

View file

@ -57,6 +57,18 @@ db:
# host: localhost
# rejectUnauthorized: false
# You can enable different different logging levels by setting the value of logging to any of the values listed below
# * 'error' - logs all failed queries and errors
# * 'slow' - logs slow queries
# * 'query' - logs all queries
# * 'schema' - logs the schema build process
# * 'info' - logs internal orm informative messages
# * 'log' - logs internal orm log messages
# You can set multiple log level by specifying them as an array i.e ['log', 'info']
# You can set disable all log levels by specifying an empty array: []
# You can set enable all log levels by specifying the special value: 'all'
logging: ['error', 'slow']
# ┌─────────────────────┐
#───┘ Redis configuration └─────────────────────────────────────

4
.gitignore vendored
View file

@ -81,3 +81,7 @@ pnpm*
# Nix Development shell items
.devenv
.direnv
# helm chart dependencies
chart/charts
chart/Chart.lock

124
.pnp.cjs generated
View file

@ -1,5 +1,6 @@
#!/usr/bin/env node
/* eslint-disable */
// @ts-nocheck
"use strict";
const RAW_RUNTIME_STATE =
@ -7070,7 +7071,7 @@ const RAW_RUNTIME_STATE =
["qs", "npm:6.11.2"],\
["random-seed", "npm:0.3.0"],\
["ratelimiter", "npm:3.4.1"],\
["re2", "npm:1.20.9"],\
["re2", "npm:1.20.11"],\
["redis-lock", "npm:0.1.4"],\
["redis-semaphore", "virtual:aa59773ac87791c4813d53447077fcf8a847d6de5a301d34dc31286584b1dbb26d30d3adb5b4c41c1e8aea04371e926fda05c09c6253647c432e11d872a304ba#npm:5.3.1"],\
["reflect-metadata", "npm:0.1.13"],\
@ -18018,10 +18019,10 @@ const RAW_RUNTIME_STATE =
}]\
]],\
["nan", [\
["npm:2.18.0", {\
"packageLocation": "./.yarn/unplugged/nan-npm-2.18.0-a51ed5bed5/node_modules/nan/",\
["npm:2.19.0", {\
"packageLocation": "./.yarn/unplugged/nan-npm-2.19.0-2f5da4a528/node_modules/nan/",\
"packageDependencies": [\
["nan", "npm:2.18.0"],\
["nan", "npm:2.19.0"],\
["node-gyp", "npm:9.4.0"]\
],\
"linkType": "HARD"\
@ -20819,12 +20820,12 @@ const RAW_RUNTIME_STATE =
}]\
]],\
["re2", [\
["npm:1.20.9", {\
"packageLocation": "./.yarn/unplugged/re2-npm-1.20.9-65a014d791/node_modules/re2/",\
["npm:1.20.11", {\
"packageLocation": "./.yarn/unplugged/re2-npm-1.20.11-ab65de125e/node_modules/re2/",\
"packageDependencies": [\
["re2", "npm:1.20.9"],\
["re2", "npm:1.20.11"],\
["install-artifact-from-github", "npm:1.3.5"],\
["nan", "npm:2.18.0"],\
["nan", "npm:2.19.0"],\
["node-gyp", "npm:10.0.1"]\
],\
"linkType": "HARD"\
@ -26350,10 +26351,9 @@ async function copyImpl(prelayout, postlayout, destinationFs, destination, sourc
updated = await copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
}
break;
default:
{
throw new Error(`Unsupported file type (${sourceStat.mode})`);
}
default: {
throw new Error(`Unsupported file type (${sourceStat.mode})`);
}
}
if (opts.linkStrategy?.type !== `HardlinkFromIndex` || !sourceStat.isFile()) {
if (updated || destinationStat?.mtime?.getTime() !== mtime.getTime() || destinationStat?.atime?.getTime() !== atime.getTime()) {
@ -26416,7 +26416,10 @@ async function copyFolder(prelayout, postlayout, destinationFs, destination, des
}
async function copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, linkStrategy) {
const sourceHash = await sourceFs.checksumFilePromise(source, { algorithm: `sha1` });
const indexPath = destinationFs.pathUtils.join(linkStrategy.indexPath, sourceHash.slice(0, 2), `${sourceHash}.dat`);
const defaultMode = 420;
const sourceMode = sourceStat.mode & 511;
const indexFileName = `${sourceHash}${sourceMode !== defaultMode ? sourceMode.toString(8) : ``}`;
const indexPath = destinationFs.pathUtils.join(linkStrategy.indexPath, sourceHash.slice(0, 2), `${indexFileName}.dat`);
let AtomicBehavior;
((AtomicBehavior2) => {
AtomicBehavior2[AtomicBehavior2["Lock"] = 0] = "Lock";
@ -26472,8 +26475,12 @@ async function copyFileViaIndex(prelayout, postlayout, destinationFs, destinatio
}
});
postlayout.push(async () => {
if (!indexStat)
if (!indexStat) {
await destinationFs.lutimesPromise(indexPath, defaultTime, defaultTime);
if (sourceMode !== defaultMode) {
await destinationFs.chmodPromise(indexPath, sourceMode);
}
}
if (tempPath && !tempPathCleaned) {
await destinationFs.unlinkPromise(tempPath);
}
@ -27275,6 +27282,12 @@ class ProxiedFS extends FakeFS {
rmdirSync(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) {
return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP));
}
@ -27656,6 +27669,18 @@ class NodeFS extends BasePortableFakeFS {
rmdirSync(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) {
return await new Promise((resolve, reject) => {
this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject));
@ -28311,6 +28336,20 @@ class MountFS extends BasePortableFakeFS {
return mountFs.rmdirSync(subPath, opts);
});
}
async rmPromise(p, opts) {
return await this.makeCallPromise(p, async () => {
return await this.baseFs.rmPromise(p, opts);
}, async (mountFs, { subPath }) => {
return await mountFs.rmPromise(subPath, opts);
});
}
rmSync(p, opts) {
return this.makeCallSync(p, () => {
return this.baseFs.rmSync(p, opts);
}, (mountFs, { subPath }) => {
return mountFs.rmSync(subPath, opts);
});
}
async linkPromise(existingP, newP) {
return await this.makeCallPromise(newP, async () => {
return await this.baseFs.linkPromise(existingP, newP);
@ -28677,6 +28716,8 @@ class VirtualFS extends ProxiedFS {
}
}
const URL = Number(process.versions.node.split('.', 1)[0]) < 20 ? url.URL : globalThis.URL;
class NodePathFS extends ProxiedFS {
constructor(baseFs) {
super(npath);
@ -28688,7 +28729,7 @@ class NodePathFS extends ProxiedFS {
mapToBase(path) {
if (typeof path === `string`)
return path;
if (path instanceof url.URL)
if (path instanceof URL)
return url.fileURLToPath(path);
if (Buffer.isBuffer(path)) {
const str = path.toString();
@ -28947,6 +28988,7 @@ const SYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([
`realpathSync`,
`renameSync`,
`rmdirSync`,
`rmSync`,
`statSync`,
`symlinkSync`,
`truncateSync`,
@ -28982,6 +29024,7 @@ const ASYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([
`readlinkPromise`,
`renamePromise`,
`rmdirPromise`,
`rmPromise`,
`statPromise`,
`symlinkPromise`,
`truncatePromise`,
@ -30254,8 +30297,10 @@ class ZipFS extends BasePortableFakeFS {
throw new Error(`Incomplete read`);
else if (rc > size)
throw new Error(`Overread`);
const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size);
return Buffer.from(memory);
let result = Buffer.from(this.libzip.HEAPU8.subarray(buffer, buffer + size));
if (process.env.YARN_IS_TEST_ENV && process.env.YARN_ZIP_DATA_EPILOGUE)
result = Buffer.concat([result, Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)]);
return result;
} finally {
this.libzip.free(buffer);
}
@ -31005,6 +31050,27 @@ class ZipFS extends BasePortableFakeFS {
throw EINVAL(`rmdir '${p}'`);
this.deleteEntry(p, index);
}
async rmPromise(p, opts) {
return this.rmSync(p, opts);
}
rmSync(p, { recursive = false } = {}) {
if (this.readOnly)
throw EROFS(`rm '${p}'`);
if (recursive) {
this.removeSync(p);
return;
}
const resolvedP = this.resolveFilename(`rm '${p}'`, p);
const directoryListing = this.listings.get(resolvedP);
if (!directoryListing)
throw ENOTDIR(`rm '${p}'`);
if (directoryListing.size > 0)
throw ENOTEMPTY(`rm '${p}'`);
const index = this.entries.get(resolvedP);
if (typeof index === `undefined`)
throw EINVAL(`rm '${p}'`);
this.deleteEntry(p, index);
}
hydrateDirectory(resolvedP) {
const index = this.libzip.dir.add(this.zip, ppath.relative(PortablePath.root, resolvedP));
if (index === -1)
@ -31313,7 +31379,7 @@ function applyPatch(pnpapi, opts) {
process.versions.pnp = String(pnpapi.VERSIONS.std);
const moduleExports = require$$0__default.default;
moduleExports.findPnpApi = (lookupSource) => {
const lookupPath = lookupSource instanceof url.URL ? url.fileURLToPath(lookupSource) : lookupSource;
const lookupPath = lookupSource instanceof URL ? url.fileURLToPath(lookupSource) : lookupSource;
const apiPath = opts.manager.findApiPathFor(lookupPath);
if (apiPath === null)
return null;
@ -31735,28 +31801,6 @@ function getPackageScopeConfig(resolved, readFileSyncFn) {
return packageConfig;
}
/**
@license
Copyright Node.js contributors. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
*/
function throwImportNotDefined(specifier, packageJSONUrl, base) {
throw new ERR_PACKAGE_IMPORT_NOT_DEFINED(
specifier,

86
.pnp.loader.mjs generated
View file

@ -1,3 +1,6 @@
/* eslint-disable */
// @ts-nocheck
import fs from 'fs';
import { URL as URL$1, fileURLToPath, pathToFileURL } from 'url';
import path from 'path';
@ -109,10 +112,9 @@ async function copyImpl(prelayout, postlayout, destinationFs, destination, sourc
updated = await copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
}
break;
default:
{
throw new Error(`Unsupported file type (${sourceStat.mode})`);
}
default: {
throw new Error(`Unsupported file type (${sourceStat.mode})`);
}
}
if (opts.linkStrategy?.type !== `HardlinkFromIndex` || !sourceStat.isFile()) {
if (updated || destinationStat?.mtime?.getTime() !== mtime.getTime() || destinationStat?.atime?.getTime() !== atime.getTime()) {
@ -175,7 +177,10 @@ async function copyFolder(prelayout, postlayout, destinationFs, destination, des
}
async function copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, linkStrategy) {
const sourceHash = await sourceFs.checksumFilePromise(source, { algorithm: `sha1` });
const indexPath = destinationFs.pathUtils.join(linkStrategy.indexPath, sourceHash.slice(0, 2), `${sourceHash}.dat`);
const defaultMode = 420;
const sourceMode = sourceStat.mode & 511;
const indexFileName = `${sourceHash}${sourceMode !== defaultMode ? sourceMode.toString(8) : ``}`;
const indexPath = destinationFs.pathUtils.join(linkStrategy.indexPath, sourceHash.slice(0, 2), `${indexFileName}.dat`);
let AtomicBehavior;
((AtomicBehavior2) => {
AtomicBehavior2[AtomicBehavior2["Lock"] = 0] = "Lock";
@ -231,8 +236,12 @@ async function copyFileViaIndex(prelayout, postlayout, destinationFs, destinatio
}
});
postlayout.push(async () => {
if (!indexStat)
if (!indexStat) {
await destinationFs.lutimesPromise(indexPath, defaultTime, defaultTime);
if (sourceMode !== defaultMode) {
await destinationFs.chmodPromise(indexPath, sourceMode);
}
}
if (tempPath && !tempPathCleaned) {
await destinationFs.unlinkPromise(tempPath);
}
@ -824,6 +833,12 @@ class ProxiedFS extends FakeFS {
rmdirSync(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) {
return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP));
}
@ -1205,6 +1220,18 @@ class NodeFS extends BasePortableFakeFS {
rmdirSync(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) {
return await new Promise((resolve, reject) => {
this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject));
@ -1392,9 +1419,13 @@ class VirtualFS extends ProxiedFS {
}
}
const URL = Number(process.versions.node.split('.', 1)[0]) < 20 ? URL$1 : globalThis.URL;
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 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) {
const rootSeparatorIndex = checkPath.indexOf(npath.sep);
@ -1432,7 +1463,7 @@ async function tryReadFile$1(path2) {
}
function tryParseURL(str, base) {
try {
return new URL$1(str, base);
return new URL(str, base);
} catch {
return null;
}
@ -1485,10 +1516,21 @@ async function load$1(urlString, context, nextLoad) {
const format = getFileFormat(filePath);
if (!format)
return nextLoad(urlString, context, nextLoad);
if (format === `json` && context.importAssertions?.type !== `json`) {
const err = new TypeError(`[ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module "${urlString}" needs an import assertion of type "json"`);
err.code = `ERR_IMPORT_ASSERTION_TYPE_MISSING`;
throw err;
if (format === `json`) {
if (SUPPORTS_IMPORT_ATTRIBUTES_ONLY) {
if (context.importAttributes?.type !== `json`) {
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) {
const pathToSend = pathToFileURL(
@ -1676,28 +1718,6 @@ function getPackageScopeConfig(resolved, readFileSyncFn) {
return packageConfig;
}
/**
@license
Copyright Node.js contributors. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
*/
function throwImportNotDefined(specifier, packageJSONUrl, base) {
throw new ERR_PACKAGE_IMPORT_NOT_DEFINED(
specifier,

BIN
.yarn/cache/@swc-core-android-arm64-npm-1.3.11-907d2c4730-8fd67b4985.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
.yarn/cache/nan-npm-2.18.0-a51ed5bed5-5520e22c64.zip (Stored with Git LFS) vendored

Binary file not shown.

BIN
.yarn/cache/nan-npm-2.19.0-2f5da4a528-b97f680753.zip (Stored with Git LFS) vendored Normal file

Binary file not shown.

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

Binary file not shown.

BIN
.yarn/corepack.tgz (Stored with Git LFS)

Binary file not shown.

View file

@ -1,7 +1,8 @@
compressionLevel: mixed
enableGlobalCache: false
nodeLinker: pnp
pnpMode: strict
npmScopes:
iceshrimp:
@ -10,8 +11,8 @@ npmScopes:
packageExtensions:
consolidate@^0.16.0:
dependencies:
pug: 3.0.2
ejs: ^3.1.7
pug: 3.0.2
debug@*:
dependencies:
supports-color: ^8.0.0
@ -25,6 +26,8 @@ packageExtensions:
dependencies:
bufferutil: ^4.0.1
pnpMode: strict
supportedArchitectures:
cpu:
- current

View file

@ -1,3 +1,144 @@
## v2023.12.7
This is a security release. Upgrading is therefore strongly recommended.
### Backend
- Incoming LD-signed activities are now compacted against a well-known context to defend against spoofing attacks
- The automatically followed account property no longer gets set to a random (possibly non-local) user on instance settings updates
- The TypeORM logger is now much more configurable
- The bull dashboard now has the correct cache-control headers set
### Mastodon client API
- The quote_id property is now returned for note responses
- The note search query now sets the userId property correctly, solving the problem of mismatching search results between the web client and the Mastodon client API
- The user profile html cache now gets updated and queried using the correct timestamp for local users, resolving an issue of stale data being displayed in some circumstances
### Miscellaneous
- The yarn version was updated to 4.1.1
- The Dockerfile was updated to work better with some build systems that don't support cp -Tr
- The helm chart now has an option to set the number of worker threads
### Attribution
This release was made possible by project contributors: Ezeani Emmanuel, Laura Hausmann, Mae Dartmann & mei23
Furthermore, I want to give special thanks to tesaguri for the security disclosure.
## v2023.12.6
This is a security release. Upgrading is therefore strongly recommended.
### Backend
- When fetching activities, their identifiers are now validated much more strictly
- Drive files now have the `X-Content-Type-Options` header set to `nosniff`
- The queue dashboard path is now validated more strictly
- The AP object resolver logic was improved to better handle edge cases
- Poll notifications are no longer generated for muted notes
### Frontend
- Remote (cross-origin) videos now plays properly
- Emoji reactions on the landing page timeline preview are now aligned properly
### Mastodon client API
- The default reaction is now returned with /v1/instance
### Miscellaneous
- The podman documentation was improved
- The example nginx config now has gzip enabled
- The Dockerfile now references the required dependencies for decoding AVIF images
- The installation requirements now mention postgresql-contrib
- Various translation updates
### Attribution
This release was made possible by project contributors: CookiLover311, Crimekillz, Jegler, Laura Hausmann, Lilian, Norm, Salif Mehmed, jeder, konkonkon, naskya & 老周部落
Furthermore, I want to give special thanks to Oneric for the extraordinarily detailed security disclosure.
## v2023.12.5
This is a followup security release. Upgrading is recommended.
### Backend
- When fetching activities, the JSON-LD profile is now enforced for responses with application/ld+json content type
- Incoming note edits with attachment and no alt text no longer get silently dropped
### Attribution
This release was made possible by project contributors: Laura Hausmann
## v2023.12.4
This is a security release. Upgrading is therefore strongly recommended.
### Backend
- The content type of fetched activities is now enforced
- Fetched activities' IDs must now match the hostname of the final request URL (after redirects)
- A typo in the activity audience parser was fixed, fixing federation of public posts with JSON-LD compliant remote instances
### Mastodon client API
- The quote_id parameter is now supported when creating new posts
- The /v2/suggestions endpoint now requires the same scope as Mastodon (which differs from their API documentation)
- Full OAuth scopes (read/write/follow) are now also registered when expanding the authorized scopes list
### Frontend
- Migrating from/to the same account twice no longer breaks the migration page
### Miscellaneous
- The packaged yarn version (for NixOS) was updated to 4.1.0
- Various translation updates
### Attribution
This release was made possible by project contributors: Laura Hausmann, Pyrox & tournesol
## v2023.12.3
### Release notes
This is a security release. Upgrading is strongly recommended, as is adding an instance-wide announcement informing your users that if they previously imported posts from Mastodon, they should check their imported post history for DMs and follower-only posts that should not be public.
### Vulnerability explanation
The Mastodon post import feature (that has been untouched since Iceshrimp was forked from Firefish last year) did not correctly validate/set post visibility on imported posts. Due to the nature of the vulnerability, it's impossible to reconstruct which posts have been imported, and therefore we cannot restrict access to them in an update.
### Backend
- Post imports have been disabled
- Existing posts that have the "hidden" visibility are now only accessible to the author
### Frontend
- The UI for post imports has been removed
### Miscellaneous
- The yarn version was updated to 4.1.0
- The helm chart was updated
### Attribution
This release was made possible by project contributors: Laura Hausmann & corite
## v2023.12.2
### Release notes
This release contains minor fixes and improvements. Upgrading is recommended, especially if you have a lot of delayed jobs in your deliver queue.
### Highlights
- Deliver jobs to dead/unresponsive instances will no longer get stuck in the deliver queue after 7 days of them being unresponsive
### Backend
- Emojis that contain special characters now work properly
### Miscellaneous
- Podman installation docs have been added
- The helm chart has been updated
- Locale files that were named incorrectly have been fixed
- Various translation updates
### Attribution
This release was made possible by project contributors: Daks, Jeder, Laura Hausmann, Salif Mehmed, corite & jolupa
It also includes cherry-picked contributions from external contributors: Johann150
## v2023.12.1
### Release notes
This release contains performance improvements and minor bugfixes. Upgrading is recommended, especially if you are still experiencing performance issues with notifications and/or the home timeline.
### Highlights
- Performance issues with the home timeline heuristics query as well as the notifications query have been resolved
### UI/UX
- A bug in which an extra colon was shown at the end of some notifications has been resolved
### Attribution
This release was made possible by project contributors: Laura Hausmann & mia
## v2023.12
### Release notes
This release contains only very minor changes if you're upgrading from `v2023.12-pre4`, but for users who skipped the prereleases, lots has changed. We primarily spent this release cycle on improving performance, we hope you enjoy a snappier experience!

View file

@ -10,32 +10,32 @@ RUN apk add --no-cache --no-progress git alpine-sdk vips-dev python3 nodejs-curr
COPY . ./
# Prepare yarn cache
RUN --mount=type=cache,target=/iceshrimp/.yarncache cp -Tr .yarncache .yarn
RUN --mount=type=cache,target=/iceshrimp/.yarncache cp -r .yarncache/. .yarn
# Configure corepack and install dev mode dependencies for compilation
RUN corepack enable && corepack prepare --activate && yarn --immutable
# Save yarn cache
RUN --mount=type=cache,target=/iceshrimp/.yarncache rm -rf .yarncache/* && cp -Tr .yarn .yarncache
RUN --mount=type=cache,target=/iceshrimp/.yarncache rm -rf .yarncache/* && cp -r .yarn/. .yarncache
# Build the thing
RUN env NODE_ENV=production yarn build
# Prepare focused yarn cache
RUN --mount=type=cache,target=/iceshrimp/.yarncache_focused cp -Tr .yarncache_focused .yarn
RUN --mount=type=cache,target=/iceshrimp/.yarncache_focused cp -r .yarncache_focused/. .yarn
# Remove dev deps
RUN yarn focus-production
# Save focused yarn cache
RUN --mount=type=cache,target=/iceshrimp/.yarncache_focused rm -rf .yarncache/* && cp -Tr .yarn .yarncache_focused
RUN --mount=type=cache,target=/iceshrimp/.yarncache_focused rm -rf .yarncache/* && cp -r .yarn/. .yarncache_focused
## Runtime container
FROM alpine:3.18
WORKDIR /iceshrimp
# Install runtime dependencies
RUN apk add --no-cache --no-progress tini ffmpeg vips-dev zip unzip nodejs-current
RUN apk add --no-cache --no-progress tini ffmpeg vips-dev zip unzip nodejs-current libheif-dev
# Copy built files
COPY --from=build /iceshrimp /iceshrimp

View file

@ -2,6 +2,17 @@
<p><strong>Iceshrimp</strong> is a decentralized and federated social networking service, implementing the <strong>ActivityPub</strong> standard.<br>
It was forked from <del>Calckey</del> Firefish (itself a fork of Misskey) in mid-2023, to focus on stability, performance and usability instead of new features.</p>
---
> **Note**
> This project is **not** inactive.
>
> Most of our current development resources are going into the [rewrite](/iceshrimp/Iceshrimp.NET), to further our goal of increasing stability and performance.
>
> This means that major changes to the JS codebase (this project), and especially to the database schema, are on hold for the time being. Bugs will of course still be fixed, and support is still available on the usual channels.
>
> Once the rewrite is finished, there will be an easy upgrade path for existing Iceshrimp instances.
---
- Highlighted changes:
- First-class Mastodon client API support
@ -30,7 +41,9 @@ It was forked from <del>Calckey</del> Firefish (itself a fork of Misskey) in mid
- Want to sign up at an existing instance?
- 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`.
- Need help or want to contribute? Join the [matrix room](https://matrix.to/#/%23iceshrimp-dev:161.rocks)!
- Want to donate to the project?
- 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)!
---

View file

@ -15,7 +15,7 @@ type: application
# 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.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.2
version: 0.1.3
# 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
@ -25,14 +25,14 @@ appVersion: "rc"
dependencies:
- name: elasticsearch
version: 19.0.1
version: 19.14.1
repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami
condition: elasticsearch.enabled
- name: postgresql
version: 11.1.3
version: 13.2.29
repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami
condition: postgresql.enabled
- name: redis
version: 16.13.2
version: 18.6.3
repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami
condition: redis.enabled

View file

@ -22,6 +22,7 @@ A fun, new, open way to experience social media https://iceshrimp.dev
| autoscaling.minReplicas | int | `1` | |