93b482871f
Require authentication to participate in chat ( #4762 )
...
* 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 >
2026-01-28 11:49:07 -08:00
John Costa and GitHub
1cdbde58f5
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
2026-01-17 14:44:33 -08:00
80850b15d0
feat: Adds a webhook for when a user follows the stream ( #4362 )
...
* feat: Adds a webhook for when a user follow the stream
Frontend:
Adds a checkbox which renders only when social features are enabled.
Backend:
- Defines a new type for the event
- Implements the webhook including unit testing
- Fires the webhook inside the ApproveFollower handler
* Removes unnecessary Type fiels from Events struct
* refactor: renames SendUserFollowedEvent func to FediverseEngagementFollow and fixes linting errors
* fix: fixes unit test to reflect removed Type field from FediverseEngagementFollowEvent
* feat: fires webhook also when manual approvals are not required
* chore: slight cleanup
---------
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2025-11-21 13:47:50 -08:00
Amisha and GitHub
8c016b85dd
fix: X-axis labels and ticks ( #4664 )
...
* fix: X-axis labels and ticks
* use TimeWindow enum instead of int
* format with Prettier
2025-11-10 13:48:01 -08:00
383b80851b
Add localization support to admin status and error messages ( #4631 )
...
* Initial plan
* Add localization support to admin form status and error messages
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Format updated files with prettier
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Replace t() with Translation component in admin page JSX
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* update package-lock.json
* Update web/i18n/en/translation.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2025-10-13 16:29:40 -07:00
1cf923a5af
Update localization files + references ( #4556 )
...
* Initial plan
* Add localization support to NameChangeModal component
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Add NameChangeModal translations to English language file
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* fix(i18n): fix localization keys
* chore(test): add i18n test
* chore(i18n): update translation script
* chore(i18n): reorgnize translation keys and update components
* chore: fix linting warnings
* chore(i18n): update all the language files
* feat(i18n): add last live ago i18n key
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2025-09-15 19:27:56 -07:00
29b5100114
Create custom Translation component for better i18n handling ( #4431 )
...
* Initial plan
* Implement Translation component with Storybook stories
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Add Jest test for Translation component and demonstrate ?lang=de functionality
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Javascript formatting autofixes
* Create centralized type-safe localization system
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Add @testing-library/react to Translation component tests
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Fix code formatting errors with prettier and eslint
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Revert "Fix code formatting errors with prettier and eslint"
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* fix(js): eslinter errors
* fix(js): unused code warnings
* fix(js): fix additional warnings
* Update Emoji admin page to use new Translation component
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Organize localization keys by logical sections (Frontend, Admin, Common, Testing)
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Organize localization keys by TypeScript namespaces
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Javascript formatting autofixes
* feat(js): add support for default translated text
* chore: add default lang translations on commit
* fix(js): unused code warnings
* Update OfflineBanner component to use new Translation component
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* fix(js): fix localization extraction job
* chore(js): remove ts-node cli
* fix(css): fix css warning
* feat(js): add some additional translation strings via component
* chore: update extracted translations
* test: add tests for Translation component defaultText and fallback behavior
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* chore: update extracted translations
* Javascript formatting autofixes
* chore: call out new Translation component
* fix: linter warning
* chore: updated instructions
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
Co-authored-by: Owncast <owncast@owncast.online >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2025-07-13 02:21:46 -07:00
Michael and GitHub
c981acbc5d
Fix issue #4042 : Add paragraph in admin emoji page to link to documentation ( #4235 )
...
* Fix issue #4042 : Add paragraph in admin emoji page to link to documentation
* Address some code formatting issues
* Fixed html style issue
2025-03-09 17:22:29 -07:00
ed5186a280
Added changes for Issue 4044 ( #4199 )
...
* Added changes for fix 4044
* Fixed spacing issue
---------
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2025-02-11 15:40:11 -08:00
cb387d88be
Initial localization work ( #3980 )
...
* First pass at configuring localization
* Add CI job for translations
* Update CI job
* Update default value
* Update parser config
* Update defaults again
* try to fix the multiple parsing of a file
* Update crowdlin config
* Update configs
* New Crowdin translations by GitHub Action (#3448 )
Co-authored-by: Crowdin Bot <support+bot@crowdin.com >
* Point to updated translated files
* Tooltip i18n
* Run translation job when web components are updated
* Commit updated translations
* Translations update (#3453 )
* Update source file strings.json
Updated translations
* New translations strings.json (French)
Updated translations
* New translations strings.json (Spanish)
Updated translations
* New translations strings.json (German)
Updated translations
* New translations strings.json (English, United States)
Updated translations
* Commit updated translations
* New Crowdin translations by GitHub Action (#3452 )
Co-authored-by: Owncast <owncast@owncast.online >
* chore(deps): update to next config to address build errors
* New Crowdin translations by GitHub Action (#3455 )
Co-authored-by: Crowdin Bot <support+bot@crowdin.com >
* Translations update (#3456 )
* New translations strings.json (Arabic)
Updated translations
* New translations strings.json (German)
Updated translations
* New translations strings.json (Greek)
Updated translations
* New translations strings.json (Irish)
Updated translations
* New translations strings.json (Italian)
Updated translations
* New translations strings.json (Japanese)
Updated translations
* New translations strings.json (Korean)
Updated translations
* New translations strings.json (Dutch)
Updated translations
* New translations strings.json (Norwegian)
Updated translations
* New translations strings.json (Punjabi)
Updated translations
* New translations strings.json (Russian)
Updated translations
* New translations strings.json (Swedish)
Updated translations
* New translations strings.json (Chinese Traditional)
Updated translations
* New translations strings.json (Vietnamese)
Updated translations
* New translations strings.json (Bengali)
Updated translations
* New translations strings.json (Thai)
Updated translations
* New translations strings.json (Croatian)
Updated translations
* New translations strings.json (Hindi)
Updated translations
* New translations strings.json (Malay)
Updated translations
* New Crowdin translations by GitHub Action (#3457 )
* New translations strings.json (Arabic)
Updated translations
* New translations strings.json (German)
Updated translations
* New translations strings.json (Greek)
Updated translations
* New translations strings.json (Irish)
Updated translations
* New translations strings.json (Italian)
Updated translations
* New translations strings.json (Japanese)
Updated translations
* New translations strings.json (Korean)
Updated translations
* New translations strings.json (Dutch)
Updated translations
* New translations strings.json (Norwegian)
Updated translations
* New translations strings.json (Punjabi)
Updated translations
* New translations strings.json (Russian)
Updated translations
* New translations strings.json (Swedish)
Updated translations
* New translations strings.json (Chinese Traditional)
Updated translations
* New translations strings.json (Vietnamese)
Updated translations
* New translations strings.json (Bengali)
Updated translations
* New translations strings.json (Thai)
Updated translations
* New translations strings.json (Croatian)
Updated translations
* New translations strings.json (Hindi)
Updated translations
* New translations strings.json (Malay)
Updated translations
* New Crowdin translations by GitHub Action
---------
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
Co-authored-by: Crowdin Bot <support+bot@crowdin.com >
* Commit updated API documentation
* Update translations job
* New Crowdin translations by GitHub Action (#3698 )
Co-authored-by: Crowdin Bot <support+bot@crowdin.com >
* Update Crowdin configuration file
* Translations update (#3700 )
* New translations strings.json (French)
Updated translations
* New translations strings.json (Italian)
Updated translations
* Translations update (#3699 )
* New translations strings.json (French)
Updated translations
* New translations strings.json (Spanish)
Updated translations
* New translations strings.json (Italian)
Updated translations
* New translations strings.json (Japanese)
Updated translations
* New translations strings.json (Polish)
Updated translations
* New translations strings.json (Russian)
Updated translations
* New translations strings.json (Portuguese, Brazilian)
Updated translations
* Commit updated API documentation
---------
Co-authored-by: Owncast <owncast@owncast.online >
* New Crowdin translations by GitHub Action (#3701 )
* New translations strings.json (French)
Updated translations
* New translations strings.json (Spanish)
Updated translations
* New translations strings.json (Italian)
Updated translations
* New translations strings.json (Japanese)
Updated translations
* New translations strings.json (Polish)
Updated translations
* New translations strings.json (Russian)
Updated translations
* New translations strings.json (Portuguese, Brazilian)
Updated translations
* New Crowdin translations by GitHub Action
---------
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
Co-authored-by: Crowdin Bot <support+bot@crowdin.com >
* Draft: Mark strings for translation. (#3458 )
* Mark strings for translation.
* Mark up strings for translation
* fix(web): fix linter warnings
---------
Co-authored-by: Le fractal <17422-fractal@users.noreply.framagit.org >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
* do not pull from cowdin via workflow
* Commit updated translations
* feat: add translations support to admin pages and components (#3977 )
* feat: add translations support to admin pages and components
Added translations support admin main page and its components, help
page, handware-info page. Added translations support for LogTable,
NewsFeed and StreamHealthOverview components.
* update package.json
* fix rendering issue
* Commit updated API documentation
---------
Co-authored-by: Owncast <owncast@owncast.online >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
* Offline banner i18n formatting (#3997 )
* Fix "Last live ago" string formatting with i18n interpolation
* Change some base translation jsons to use i18n interpolation
* Linting fix
* chore(js): ignore i18n pkgs in knip
* fix(test): fix browser ui test
* fix(js): remove unused var
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Crowdin Bot <support+bot@crowdin.com >
Co-authored-by: Owncast <owncast@owncast.online >
Co-authored-by: taintedcypher <119351153+taintedcypher@users.noreply.github.com >
Co-authored-by: Le fractal <17422-fractal@users.noreply.framagit.org >
Co-authored-by: Sufyaan Khateeb <81009832+SufyaanKhateeb@users.noreply.github.com >
Co-authored-by: mahmed2000 <mahmad2000@protonmail.com >
2025-01-14 20:54:21 -08:00
Gabe Kangas
8ffbf23d4e
fix(js): fix social switch not actually turning on feature. Closes #4055
2024-12-12 22:33:37 -08:00
Gabe Kangas and GitHub
446d5db085
fix(js): fix followers table being empty when sorted. Closes #3799 ( #4054 )
2024-12-12 21:40:24 -08:00
f59ac63dfe
fix(social): set federation enabled state after confirmation ( #4038 )
...
* feat(integerations): add route to get user details
* Commit updated API documentation
* test(integrations): implement unit test for get user details
* fix(social): set federation enabled state after confirmation
set federation enabled state only after confirmation in modal
* Javascript formatting autofixes
* chore(social): use variable instead of explicitly setting path value
* Javascript formatting autofixes
---------
Co-authored-by: Owncast <owncast@owncast.online >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2024-11-30 12:32:13 -08:00
f6a1b1b638
chore(deps): update typescript-eslint monorepo to v8 (major) ( #3887 )
...
* chore(deps): update typescript-eslint monorepo to v8
* chore(js): fix linter errors
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2024-09-15 13:51:33 -07:00
Gabe Kangas and GitHub
a450e62397
Optionally disable chat rate limiter and add optional chat slur/language filter ( #3681 )
...
* feat(chat): basic profanity filter. For #3139
* feat(chat): add setting for disabling chat spam protection. Closes #3523
* feat(chat): wire up the new chat slur filter to admin and chat. Closes #3139
2024-04-09 22:25:41 -07:00
44eafe69ac
fix(deps): update dependency date-fns to v3 ( #3619 )
...
* fix(deps): update dependency date-fns to v3
* fix(deps): update usage of date-fns format
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2024-03-06 21:13:13 -08:00
Gabe Kangas
7b783ac00e
fix(admin): fix admin followers pagination. Closes #3510
2024-02-18 19:14:20 -08:00
Varun Gujarathi and GitHub
b694be1052
fix(admin): sanitize fediverse username ( #3437 )
...
* test: add config federation test
* fix: santize fediverse username
fixes #3424
* refactor: remove commented code
* refactor: change username const to usernameValue
* refactor: use shorthand property
* build: move stories page out of build directory
* fix: allow only alphanumeric chars in username
* fix: filter out special chars in username
Added a regex filter to strip non-alphanumeric chars in username field.
* chore: clean unused fields
2024-02-05 20:00:50 -08:00
Aziz Rmadi and GitHub
6c644330e7
Fixed page size stale state on LogTable component ( #3516 )
2024-01-22 20:31:23 -08:00
b28b027ead
chore(deps): update dependency typescript to v5 ( #3387 )
...
* chore(deps): update dependency typescript to v5
* fix: resolve type mismatch
* Commit updated API documentation
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
Co-authored-by: Owncast <owncast@owncast.online >
2023-10-25 21:52:36 -07:00
Gabe Kangas and GitHub
169c11596c
feat(chat): add support for chat part messages. Closes #3201 ( #3291 )
2023-09-10 10:58:11 -07:00
Ikko Eltociear Ashimine and GitHub
0fb821b33c
Fix typo in actions.tsx ( #3225 )
...
alway -> always
2023-07-31 10:44:48 -07:00
7c13a3fd01
chore(deps): update dependency eslint-plugin-react to v7.33.0 ( #3205 )
...
* chore(deps): update dependency eslint-plugin-react to v7.33.0
* chore: have linter try to autofix and commit linter warnings
* Linter fixes
* chore: tweak how js formatting is run within actions
* fix: type mismatch
* Prettified Code!
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
Co-authored-by: Owncast <owncast@owncast.online >
Co-authored-by: gabek <gabek@users.noreply.github.com >
2023-07-29 15:57:45 -07:00
8148f74736
Unhide dropdown in Viewer Info page ( #3173 )
...
Co-authored-by: janWilejan <>
2023-07-14 09:28:56 -07:00
janWilejan and GitHub
e15e2dc47c
Fix deprecated antd dropdown warnings ( #3171 )
...
* Fix deprecated antd dropdown warnings
2023-07-13 20:28:12 +00:00
46ca5223f9
Chat wire protocol ( #3125 )
...
* core: remove file extension from emoji name
* web: transform emotes to labels when sending
* chat: replace br with line break
* core: implement emoji cache
* chat: send shortcodes for custom emoji
* chat: correct esling errors
* core: move emoji injection into dedicated function
* emoji: integrate emoji into markdown renderer, fix formatting
* chat protocol: correct golangci-lint findings
* chat field: specify that the contentEditable is an HTMLElement
* admin: mention that emoji should have unique names
* Prettified Code!
* regenerate pack-lock
* chat: correct the emphasis tag, provide fallback for other elements
---------
Co-authored-by: jprjr <jprjr@users.noreply.github.com >
2023-07-05 17:25:47 -07:00
Gabe Kangas
cc953f154e
fix(admin): fix typo causing established chat mode display bug. Closes #3070
2023-06-05 16:47:08 -07:00
0ff30d44e4
fix: hide latency card for admin if latency is 0 ( #3047 )
...
* hide latency card for admin if latency is 0
* Prettified Code!
---------
Co-authored-by: abhipanorian <abhipanorian@users.noreply.github.com >
2023-05-30 11:33:30 -07:00
Gabe Kangas and GitHub
e50b23d081
Cleanup unused Javascript ( #3027 )
...
* chore(js): be stricter about dead code warnings
* chore(js): remove dead code and unused exports
* rebase
* chore: remove unused files
* chore(deps): remove unused prop-types dep
* chore(js): remove unused function
* chore(deps): remove + check unused deps
* chore(js): remove unused exports. Closes #3036
2023-05-20 21:15:25 -07:00
fb36d32fa0
Fixes : Admin: Custom emoji page layout ( #2993 )
...
* Update emojis.tsx
* Prettified Code!
* Second Iteration
* Update emojis.tsx
* Putting Delete Button at top-right
Will this work ?
* Prettified Code!
* Update emojis.tsx
Changing Icon of Delete Button
Decreasing Delete-Button Size
* Prettified Code!
* Tweak style of delete emoji button
---------
Co-authored-by: dev265545 <dev265545@users.noreply.github.com >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2023-05-07 12:57:15 -07:00
Gabe Kangas
b3ac4e1a15
fix(js): consolidate url and account validators
2023-04-16 14:32:18 -07:00
07c5cabfe8
Trigger the title updated webhook event whenever a title is changed ( #2823 )
...
* wip: trigger the title updated webhook event whenever a title is changed
* Commit updated API documentation
* fix: add STREAM_TITLE_CHANGED to list of valid events
* feat: Add support for STREAM_TITLE_CHANGED webhook event on admin dashboard
* fix: transmit webhook event after stream has changed to fix race conditions where older title was sent
---------
Co-authored-by: Owncast <owncast@owncast.online >
2023-03-28 11:34:00 -07:00
Gabe Kangas
bb14af399e
Fix the listing of follower tables in admin
2023-03-22 14:54:43 -07:00
Gabe Kangas
a5e5adfa02
Fix incorrect follower count displayed. Closes #2854
2023-03-21 17:33:59 -07:00
Dhanu Saputra and GitHub
2b41113211
Loose div in Utilities > Stream health screen ( #2844 )
2023-03-21 13:06:16 -07:00
Gabe Kangas
6973c3d8df
Update styling of video settings admin page. Closes #2803
2023-03-14 21:34:37 -07:00
Gabe Kangas
3ada7182f5
Update viewers chart y axis to make more sense. Closes #2806
2023-03-13 15:58:16 -07:00
Gabe Kangas
0b619b84a6
Add waiting message to hardware screen. Closes #2805
2023-03-13 13:19:17 -07:00
Gabe Kangas
23a721857f
Do not support stream key UI or any persisted stream keys when overridden via cli flag. Closes #2749
2023-02-27 17:08:52 -08:00
0a653aaba7
Remove usage of the PropTypes dependency ( #2723 )
...
* Remove usage of the PropTypes dependency
* Prettified Code!
---------
Co-authored-by: dhanusaputra <dhanusaputra@users.noreply.github.com >
2023-02-22 09:21:00 -08:00
Philipp and GitHub
a290770ac9
Allow embedding HTML for external actions ( #2693 )
...
* Admin UI: implement HTML embeds
* Admin UI External Actions: set correct useHTML on edits
* Admin UI: edit by index, not URL
* External Actions: render HTML on stream frontend
* Don't open embeds externally
* Remove TODO comment
* Add HTML as unique action key
* Admin UI: Actions: use CodeMirror editor, dropdown
2023-02-14 09:08:54 -08:00
Gabe Kangas
d9e4731764
Update charting library and how it is used. Closes #2658
2023-02-02 14:58:39 -08:00
Philipp and GitHub
4aaabaac07
Admin UI: Fix broken links ( #2660 )
2023-02-01 10:39:48 -08:00
Gabe Kangas
19c228eaf6
Allow adding custom javascript to the page. Closes #2604
2023-01-18 22:38:24 -08:00
Michael David Kuckuk and GitHub
59e5cfefd4
Remove twitter notification configuration ( #2598 )
2023-01-17 13:20:29 -08:00
Gabe Kangas
2853752937
Make each admin page specify is own layout. Closes #2584
2023-01-15 23:12:38 -08:00
Gabe Kangas
6fbd6cbbcf
Lazy load every instance of using ant icons. Closes #2583
2023-01-15 22:31:36 -08:00
Gabe Kangas
82848bf68a
Fix link
2023-01-13 14:21:27 -08:00
Gabe Kangas
c7e12643e9
Point link to genera admin settings page
2023-01-11 22:44:55 -08:00
Gabe Kangas
2ff4316ee6
Fix admin subpages not having a layout
2023-01-11 22:44:15 -08:00