Commit graph

31938 commits

Author SHA1 Message Date
наб
d954b8d138
StreamingApiServerService: handle websocket errors from client gracefully
$ nc -C tarta.nabijaczleweli.xyz 12122
  GET /streaming?_t=1752534314122 HTTP/1.1
  Host: tarta.nabijaczleweli.xyz:12122
  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0
  Accept: */*
  Accept-Language: en-GB,en;q=0.5
  Accept-Encoding: gzip, deflate
  Sec-WebSocket-Version: 13
  Sec-WebSocket-Extensions: permessage-deflate
  Sec-WebSocket-Key: AAAAAAAAAAAAAAAAAAAAAA==
  Connection: keep-alive, Upgrade
  Pragma: no-cache
  Cache-Control: no-cache
  Upgrade: websocket
the parameters almost don't matter so long as the server
replies with an upgrade, then press enter once or twice,
at which point the server will have crashed after
  INFO 1  [core nest]             NestFactory: Starting Nest application...
  ERR  *  [core]          Uncaught exception (uncaughtException): RangeError: Invalid WebSocket frame: invalid opcode 13
      at Receiver.getInfo (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/receiver.js:311:26)
      at Receiver.startLoop (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/receiver.js:155:16)
      at Receiver._write (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/receiver.js:94:10)
      at writeOrBuffer (node:internal/streams/writable:572:12)
      at _write (node:internal/streams/writable:501:10)
      at Writable.write (node:internal/streams/writable:510:10)
      at Socket.socketOnData (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/websocket.js:1355:35)
      at Socket.emit (node:events:518:28)
      at addChunk (node:internal/streams/readable:561:12)
      at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
      at Readable.push (node:internal/streams/readable:392:5)
      at TCP.onStreamRead (node:internal/stream_base_commons:189:23) {
    code: 'WS_ERR_INVALID_OPCODE',
    [Symbol(status-code)]: 1002
  }
  INFO *  [core]          The process is going to exit with code 1
  node:events:496
        throw er; // Unhandled 'error' event
        ^

  RangeError: Invalid WebSocket frame: invalid opcode 13
      at Receiver.getInfo (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/receiver.js:311:26)
      at Receiver.startLoop (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/receiver.js:155:16)
      at Receiver._write (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/receiver.js:94:10)
      at writeOrBuffer (node:internal/streams/writable:572:12)
      at _write (node:internal/streams/writable:501:10)
      at Writable.write (node:internal/streams/writable:510:10)
      at Socket.socketOnData (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/websocket.js:1355:35)
      at Socket.emit (node:events:518:28)
      at addChunk (node:internal/streams/readable:561:12)
      at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
      at Readable.push (node:internal/streams/readable:392:5)
      at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
  Emitted 'error' event on WebSocket instance at:
      at Receiver.receiverOnError (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/websocket.js:1199:15)
      at Receiver.emit (node:events:518:28)
      at emitErrorNT (node:internal/streams/destroy:170:8)
      at emitErrorCloseNT (node:internal/streams/destroy:129:3)
      at process.processTicksAndRejections (node:internal/process/task_queues:90:21) {
    code: 'WS_ERR_INVALID_OPCODE',
    [Symbol(status-code)]: 1002
  }

  Node.js v22.14.0
   ELIFECYCLE  Command failed with exit code 1.

This works through some reverse proxies (HAProxy, Caddy),
but not through others (Cloudflare, nginx, Apache(?))

Instead, just hang up if the client violates protocol

Fixes https://101010.pl/@nabijaczleweli/114854334401159070
2025-07-21 17:39:41 +02:00
Marie
05a499ac55 merge: update translation index (!1158)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1158

Approved-by: Hazelnoot <acomputerdog@gmail.com>
Approved-by: Marie <github@yuugi.dev>
2025-07-11 16:55:46 +00:00
dakkar
6d8aa60cd8 update translation index 2025-07-10 16:12:21 +01:00
dakkar
69f3c8a58e merge: Disable outgoing mastodon quotes (resolves #1144) (!1153)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1153

Closes #1144

Approved-by: Marie <github@yuugi.dev>
Approved-by: dakkar <dakkar@thenautilus.net>
2025-07-05 14:18:07 +00:00
Hazelnoot
c0b93364c0 disable outgoing mastodon quotes 2025-07-04 12:54:52 -04:00
Charlotte
157d11298a merge: fix: Do Not NULL Descriptions during migration (!1149)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1149

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Charlotte <timo.herngreen@gmail.com>
Approved-by: Hazelnoot <acomputerdog@gmail.com>
2025-06-30 15:04:31 +00:00
Lilly Schramm
0f6c5d27ec fix: Do Not NULL Descriptions 2025-06-30 08:47:44 +02:00
Hazelnoot
be1063238f merge: Enable NestJS shutdown hooks for clean exit (!1145)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1145

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Marie <github@yuugi.dev>
2025-06-29 19:23:55 +00:00
dakkar
13d045d813 merge: misskey 2025.5.0 (!1028)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1028

Approved-by: Hazelnoot <acomputerdog@gmail.com>
Approved-by: Marie <github@yuugi.dev>
2025-06-29 09:54:12 +00:00
Marie
fad58ddc1c merge: unique constraint for registry_item - fixes #1121 (!1139)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1139

Closes #1121

Approved-by: Hazelnoot <acomputerdog@gmail.com>
Approved-by: Marie <github@yuugi.dev>
2025-06-28 22:49:51 +00:00
Marie
f4fe14f5b7 merge: feat: Add Bio Length Setting (!1136)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1136

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Marie <github@yuugi.dev>
2025-06-28 22:47:41 +00:00
Marie
559a7566ab merge: smarter "clean remote files" - fixes #801 (!1143)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1143

Closes #801

Approved-by: Hazelnoot <acomputerdog@gmail.com>
Approved-by: Marie <github@yuugi.dev>
2025-06-28 22:47:27 +00:00
dakkar
a450f801cf warn about extra db load 2025-06-27 11:16:56 +01:00
Hazelnoot
957116d04a merge: Hide muted threads and notes from timelines (!1142)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1142

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Marie <github@yuugi.dev>
2025-06-26 17:38:15 +00:00
Hazelnoot
d7b94e756d fix websockets not working 2025-06-26 09:32:14 -04:00
Hazelnoot
088fe15be5 improve shutdown logic somewhat 2025-06-25 22:51:32 -04:00
Hazelnoot
168a364162 fix redis listener leak in StreamingApiServerService.ts 2025-06-25 22:51:16 -04:00
Hazelnoot
4e609478f8 add additional shutdown logging 2025-06-25 22:16:26 -04:00
Hazelnoot
c79d66d48b fix disposal of ServerStatsService and QueueStatsService 2025-06-25 22:16:06 -04:00
dakkar
c4c6aea939 merge: use a *very* long statement_timeout for migrations (!1132)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1132

Approved-by: Hazelnoot <acomputerdog@gmail.com>
Approved-by: Marie <github@yuugi.dev>
2025-06-25 20:35:15 +00:00
Hazelnoot
d4105dee0c enable NestJS shutdown hooks 2025-06-25 16:28:07 -04:00
dakkar
bddb6afa5d handle jobs created without the extra arguments
just in case there's any in the queue when people upgrade
2025-06-24 17:16:30 +01:00
dakkar
d847dd00c5 frontend dialog for "clear cached files" 2025-06-24 17:15:21 +01:00
dakkar
50ca5e8688 pass arguments to CleanRemoteFiles job 2025-06-24 17:15:21 +01:00
dakkar
c68b8d6e7c smarter "clean remote files"
this should (optionally) skip in-use files, and files that have been
seen recently
2025-06-24 17:15:21 +01:00
Hazelnoot
d44935b1d9 collapse renotes that we've renoted or favorited 2025-06-24 09:46:56 -04:00
dakkar
4651edbc4e better upsert query
the default `.upsert` method would clobber the `id`
2025-06-24 13:47:07 +01:00
Hazelnoot
05f53cb69a fix locales d.ts 2025-06-23 20:13:34 -04:00
Hazelnoot
f67be0a733 fix DI for stream connection 2025-06-23 20:13:24 -04:00
Hazelnoot
d0bd12b410 fix note mutings not applying to websocket 2025-06-23 16:08:18 -04:00
Hazelnoot
bd22ae0d80 cache recent favorites, renotes, and reactions in the connection to speed up rePackNote 2025-06-23 16:05:57 -04:00
Hazelnoot
4c2a0fed63 fix streaming API notes missing reactions, not always being hidden, and having incorrect values for the isRenoted, isFavorited, isMutingThread, and isMutingNote properties 2025-06-23 15:45:47 -04:00
Hazelnoot
8cbe1344f6 fix Note.isRenoted 2025-06-23 13:47:04 -04:00
Hazelnoot
d2b4035f7a add missing GROUP BY to threadMutingsCache / noteMutingsCache 2025-06-23 13:47:04 -04:00
Hazelnoot
7200c3d6c8 implement note mutings and move favorited/renoted status into note entity directly 2025-06-23 13:47:04 -04:00
Hazelnoot
9bebf7718f hide muted threads behind a CW 2025-06-23 13:47:04 -04:00
Hazelnoot
87582034b5 expose thread mute status as Note.isMuting property 2025-06-23 13:47:04 -04:00
Hazelnoot
23cfb5647c fix spacing between SkUrlPreviewGroup 2025-06-23 13:47:04 -04:00
Hazelnoot
c9389b013a fix Vue error in SkNoteDetailed and MkNoteDetailed 2025-06-23 13:47:04 -04:00
Hazelnoot
7d0f995c9b hide muted threads from timelines 2025-06-23 13:47:04 -04:00
dakkar
3aa5ec713c unique constraint for registry_item - fixes #1121
we remove all duplicate items from the registry, keeping the
most-recently updated one (which presumably is the one that the users
expect to be used)

then we use `upsert` instead of the more complicated previous logic,
which was subject to races
2025-06-22 13:10:22 +01:00
Lilly Schramm
4d077732ac refactor: Remove Migration Name 2025-06-22 01:39:53 +02:00
Lilly Schramm
2329618418 refactor: Remove Migration Name 2025-06-22 01:39:47 +02:00
Lilly Schramm
2ac5f2f412 refactor: Remove Migration Name 2025-06-22 01:31:55 +02:00
Lilly Schramm
593443a01c docs: Fix Settings Docs 2025-06-22 01:17:41 +02:00
Lilly Schramm
1cd478ab36 feat(frontend): Respect New Bio Length Setting 2025-06-22 01:13:34 +02:00
Lilly Schramm
df77f339ec feat(backend): Add Config Option For Bio Length 2025-06-22 01:02:20 +02:00
Hazelnoot
a4c0ef824c merge: feat: Add Role Clone Button (#1000) (!1133)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1133

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Hazelnoot <acomputerdog@gmail.com>
2025-06-20 20:41:24 +00:00
Lillychan
87f6d84229 Apply 1 suggestion(s) to 1 file(s) 2025-06-20 20:10:04 +00:00
Lilly Schramm
3ce8914673 refactor: Simplify Statement (again) 2025-06-20 21:55:02 +02:00