Fixes#17541
- prefix JSON parsing error message by “Error parsing message from …”
- output user id if a user is logged in, IP address otherwise
- reduce log level from error to warning when a user is logged in, and to silly
otherwise
* Fix timeline streaming stopping for multiple sessions instead of one
Fixes#17256.
In updating the code for a newer version of node-redis, #17183 also broke
redis subscription management when multiple streaming clients subscribe to the
same channel.
This commit restores the redis subscription management code.
* Let node-redis actually handle the subscriptions
When checking for required OAuth scopes, an unexpected error could
happen due to missing (null-y) req.scopes. This commit fixes that by
checking if req.scopes are present before checking if any required
scopes are present, otherwise it skips that straight to rejection.
Eliminate need to have custom notifications filtering logic in the
streaming API code by publishing notifications into a separate stream
and then simply using the multi-stream capability to subscribe to that
stream when necessary
Fixes#14131
Our `mastodon:setup` task defaults to a blank password rather than the
absence of password, but some versions of Redis reject blank password
authentication when authentication is possible without a password.
The Ruby code only uses the Redis password when it's not blank, so
do the same for the node.js part.
* Send output on the server-sent events stream immediately so the client sees that it was successfully opened even if it doesn't have any messages.
Fix transparent SSE streaming for the public:local and hashtag:local stream types.
* Tell caches to never store server-sent events.
Previously, the server would attempt taking port/socket in worker
process, and if it was taken, fail, which made the master process
create a new worker. This led to really high CPU usage if the
streaming API was started when the port or socket were not
available.
Now, before clustering (forking) into worker processes, a test
server is created and then removed to check if it can be done.
* Add check for missing tag param in streaming API
Fixes error:
```
TypeError: Cannot read property 'toLowerCase' of undefined
at app.get (.../streaming/index.js:493:50)
```
* Fix code style issues
* Add conversations API
* Add web UI for conversations
* Add test for conversations API
* Add tests for ConversationAccount
* Improve web UI
* Rename ConversationAccount to AccountConversation
* Remove conversations on block and mute
* Change last_status_id to be a denormalization of status_ids
* Add optimistic locking