* fix(js): fix server hydration not working. will speed up initial load time
* fix: update lockfile
* fix(js): fix for malformed or invalid JSON in hydration
* chore: update extracted translations
---------
Co-authored-by: Owncast default web localizations <owncast@owncast.online>
* feat: add support for custom favicons
* Commit updated API documentation
* chore(i18n): add localization of text
* fix(js): regenerate package lock file
* chore(test): add favicon test
* fix: max size not respected
* Commit updated API documentation
* fix: move favicon.ico to the static dir
* fix: fix tests
* fix: remove hard-coded content-type of icon
* chore: update extracted translations
* feat(admin): add support for resetting to default icon
* chore: use a higher res default favicon
* Commit updated API documentation
---------
Co-authored-by: Owncast <owncast@owncast.online>
Some broadcasting software (e.g., Prism Live Studio) strips special
characters from stream keys, making Owncast-generated keys incompatible.
Changes:
- Create separate STREAM_KEY_COMPLEXITY_RULES without special char requirement
- Update generateRndKey() to only use alphanumeric characters
- Keep PASSWORD_COMPLEXITY_RULES unchanged for admin password security
- Update tooltip text to reflect new requirements
- Add comprehensive tests for stream key generation
Fixes#4690
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* feat(chat): require authentication to participate in chat
* fix: it's pretty much impossible to bypass the auth requirement, addressing review feedback anyway
* feat(chat): render chat text input as disabled if chat auth is required
* Commit updated API documentation
---------
Co-authored-by: Owncast <owncast@owncast.online>
Add Pixelfed as a supported social platform, including the platform
entry in socialHandle.go and the SVG icon.
Closes#4726
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* feat(ap): add support for shared inboxes to reduce outbound load
* feat(db): refactor ap followers db into followers repository
* fix(ap): use the updated activity library to pull out the shared inbox endpoint
* chore(deps): point at updated build of owncast/activity
* fix(ap): typeless endpoints
* feat(test): update ActivityPub test to support shared inboxes
* chore(test): remove unused variable
* fix: feedback from review. Guard against SSRF/non-HTTPS/local and handle transaction errors
* feat(test): add an end-to-end ActivityPub integration test
* chore(ci): run AP integration test under CI
* feat(test): use caddy instead of home built reverse proxy
* fix(test): fix linter warnings
* chore(test): don't commit test self-signed certs I suppose
* chore(test): more shellcheck linter warnings
* fix: fix test setup under CI
* fix: remove optimistic UI updates in external actions to prevent race condition (#4711)
When adding/deleting external actions, the UI would sometimes show
duplicated or cloned rows due to a race condition between:
1. The optimistic setActions() call updating local state
2. The save() callback updating externalActions in context
3. The useEffect syncing actions from externalActions
This fix removes the optimistic updates and lets the server response
be the single source of truth, updating the UI only after the context
is updated via the save() success callback.
Fixes#4347
* fix(ap): additional outbound ActivityPub delivery optimizations
- check circuit breaker before signing any messages or any other work
- create outbound messages in batches and not all at once
- add small delay between outbound messages to spread it out a bit
* fix(ap): increase ap queue buffer size, reduce outbound http client timeout
* fix(ap): handle malformed inbox URIs
* fix(ap): batch outbox based on work performed not index
* feat(ap): add retryable activitypub outbound delivery client
---------
Co-authored-by: John Costa <jcosta@execonline.com>
When adding/deleting external actions, the UI would sometimes show
duplicated or cloned rows due to a race condition between:
1. The optimistic setActions() call updating local state
2. The save() callback updating externalActions in context
3. The useEffect syncing actions from externalActions
This fix removes the optimistic updates and lets the server response
be the single source of truth, updating the UI only after the context
is updated via the save() success callback.
Fixes#4347
Adds a Recoil atom (chatInputDraftAtom) to store the chat input draft,
which persists the text when the chat component unmounts/remounts during
mobile/desktop mode transitions.
Changes:
- Add chatInputDraftAtom to ClientConfigStore
- Update ChatTextField to save draft on input change
- Restore draft when component mounts
- Clear draft when message is sent
Closes#3615
* fix(ap): add safe constructors, getters, and validators to ActivityPub actors to address #4701
* chore: replace nil check with the new Validate() method
* chore(test): added test to verify the values extracted from actors
* fix: return the specific error type + test for it
* fix(ap): add recovery for each AP inbox worker for a worst case scenario
* fix(ap): add additional safe accessor methods to other AP entities other than actors
* chore(tests): add tests for the new safe accessors
* fix(ap): handle empty public keys in AP actors