From 2fb30c9792d0610ec7a387280e3d454a36af02d4 Mon Sep 17 00:00:00 2001 From: Gabe Kangas Date: Thu, 7 Mar 2024 20:26:04 -0800 Subject: [PATCH 1/6] Add release doc for v0.1.3 --- content/releases/owncast-0.1.3.md | 88 +++++++++++++++++++++++++++++++ static/install.sh | 10 ++-- 2 files changed, 93 insertions(+), 5 deletions(-) create mode 100644 content/releases/owncast-0.1.3.md diff --git a/content/releases/owncast-0.1.3.md b/content/releases/owncast-0.1.3.md new file mode 100644 index 0000000000..fdc3084918 --- /dev/null +++ b/content/releases/owncast-0.1.3.md @@ -0,0 +1,88 @@ +--- +title: Owncast v0.1.3 +date: 2024-03-02 +description: Another smaller update with requested changes and additions. +weight: 100 +--- + +# Changelog + +## [[0.1.3](https://github.com/owncast/owncast/milestone/25)] - 2024-03-xx + +## Upgrade instructions from 0.1.2 + +1. Stop the service from running. If you're using a pre-installed image through a hosting provider, or setup Owncast to run under systemd you can probably just simply run `systemctl stop owncast`. +1. Change to the directory where Owncast is installed on your server. +1. If you’ve customized your web interface in any way you will want to back up the files you’ve changed or customized. +1. Re-run the installer as the user you run Owncast under. For example if you are running owncast as the user "owncast": `su -c "curl https://owncast.online/install.sh |bash" owncast` +1. Restart the service. If you're running under systemd `systemctl start owncast`. + +# Major updates + +### Added + +- Sanitize Fediverse username [#3424](https://github.com/owncast/owncast/issues/3424) + +- Set content-type for customjavascript [#3612](https://github.com/owncast/owncast/pull/3612) + +### Changed + +- Do not send a join chat event if that user is already in the chat [#3487](https://github.com/owncast/owncast/issues/3487) + +- Chat messages and state changed events should be in aria live region [#3335](https://github.com/owncast/owncast/issues/3335) + +- Replace Twitter social link icon with the stupid 𝕏 one [#3427](https://github.com/owncast/owncast/issues/3427) + +- Chat moderators should be exempt from message rate limiting [#3533](https://github.com/owncast/owncast/issues/3533) + +- Improve design for offline video embed [#2917](https://github.com/owncast/owncast/issues/2917) + +### Fixed + +- Admin scrolls horizontally in a weird way on narrower screens [#3260](https://github.com/owncast/owncast/issues/3260) + +- panic: concurrent map write [#3440](https://github.com/owncast/owncast/issues/3440) + +- Bug: "Error: too many colons in address" [#3419](https://github.com/owncast/owncast/issues/3419) + +- Not selectable items in quality settings menu [#3368](https://github.com/owncast/owncast/issues/3368) + +- Sharing Owncast fediverse posts to a few thousand accounts causes video buffering [#3189](https://github.com/owncast/owncast/issues/3189) + +- Thumbnail not consistently generated when using S3 [#3522](https://github.com/owncast/owncast/issues/3522) + +- Changing Log-Entries-Per-Page in Admin Console Doesn't Work [#3511](https://github.com/owncast/owncast/issues/3511) + +- When embedding Owncast chat via iframe the page jumps to where the iframe is [#3500](https://github.com/owncast/owncast/issues/3500) + +- Pagination Doesn't Work in 'Followers' Console [#3510](https://github.com/owncast/owncast/issues/3510) + +- Unable to create Webhooks on 0.1.2 when "When a user leaves the chat" checked. [#3524](https://github.com/owncast/owncast/issues/3524) + +- mobile-chat-button is displayed for mobile users when chat is disabled. [#3535](https://github.com/owncast/owncast/issues/3535) + +- Video embed does not fill vertical height [#3587](https://github.com/owncast/owncast/issues/3587) + +- Thumbnails do not generate when using S3 path prefix [#3518](https://github.com/owncast/owncast/issues/3518) + +### Removed + +- Remove Matrix URL validation, allowing any URL [#3329](https://github.com/owncast/owncast/issues/3329) + +## Thank you to our contributors! + +The contributors for v0.1.3 were: +[anniepauline](https://github.com/anniepauline), [gabek](https://github.com/gabek), [varungujarathi9](https://github.com/varungujarathi9), [DarkFalc0n](https://github.com/DarkFalc0n), [jhimanish](https://github.com/jhimanish), [heavygale](https://github.com/heavygale), [yerimsong](https://github.com/yerimsong) and [armadi1809](https://github.com/armadi1809). +We also thank all of the fantastic people helping out in the [Owncast chat](https://owncast.rocket.chat) answering questions, testing and providing feedback. + +## Thank you to our [financial supporters](https://opencollective.com/owncast)! + +A **huge** thanks to those giving us to the resources to run servers, have testing environments, host collaboration tools, pay for 3rd party services to test with and the means to experiment with new ideas we wouldn't be able to do otherwise. + +Our fantastic corporate sponsors none and generous donors [Simon Michalke](https://opencollective.com/simon-michalke), [Luka Prinčič](https://opencollective.com/luka-princic), [Flaki](https://opencollective.com/flaki), [Jnktn.tv](https://opencollective.com/jnktn-tv), [Joel Bradshaw](https://opencollective.com/joel-bradshaw), [Paul Lindner](https://opencollective.com/lindner), [Incognito](https://opencollective.com/incognito-3b4cd5c7), [nebunez](https://opencollective.com/nebunez), [Merlin](https://opencollective.com/johnathan-shunn), [Teklynk](https://opencollective.com/teklynk), [Marius Hoel](https://opencollective.com/mhoel), [Incognito](https://opencollective.com/user-5bdb86e0), [Guest](https://opencollective.com/guest-bef18650), [SillySam](https://opencollective.com/sillysam), [emacsen](https://opencollective.com/guest-618ea119), [Incognito](https://opencollective.com/incognito-5c38b018), [GunghoGeoduck](https://opencollective.com/guest-78ad01d4), [Rick](https://opencollective.com/patrick-materla), [Didier Malenfant](https://opencollective.com/didier-malenfant), [Tom](https://opencollective.com/tom31), [Theodore Jones](https://opencollective.com/theodore-jones), [Alex O'Carroll](https://opencollective.com/alex-ocarroll), [Alex O'Carroll](https://opencollective.com/alex-ocarroll), [Vencabot](https://opencollective.com/vencabot), [Vince](https://opencollective.com/guest-08e5b6de), [Robert Wolniak](https://opencollective.com/robert-wolniak), [Nullcasting](https://opencollective.com/guest-7e5ea2e1), [Martijn](https://opencollective.com/martijn), [Incognito](https://opencollective.com/incognito-92e7aa0d), [Fred Luetkemeier](https://opencollective.com/guest-553ff5bb), [Kev Mul](https://opencollective.com/kev-mul), [Hamish The PolarBear](https://opencollective.com/guest-92a76f2a), [Jnktn.tv](https://opencollective.com/jnktn-tv), [Denman Rooke](https://opencollective.com/denman-rooke), [gravitons loves the Fediverse <3](https://opencollective.com/gravitons1), [John Brubaker](https://opencollective.com/guest-ff353a2f), [Catfish Da Man](https://opencollective.com/guest-da78333a), [box464](https://opencollective.com/box464), [Tom Ryder](https://opencollective.com/tejrnz) and [Guest](https://opencollective.com/guest-fc35aaea). + +## In-kind support + +A special **thank you** to the organizations that offer services to help Owncast build, test and support and distribute the software. + +[Fastly](https://www.fastly.com/fast-forward), [Cypress](https://cloud.cypress.io/projects/wwi3xe), [BrowserStack](https://www.browserstack.com/open-source), [Chromatic](https://www.chromatic.com/builds?appId=629132c6e23893003a9e89c5), [Docker](https://hub.docker.com/u/owncast) and [Rocket.Chat](https://owncast.rocket.chat/). diff --git a/static/install.sh b/static/install.sh index 2bb3310d9a..303e822ff3 100755 --- a/static/install.sh +++ b/static/install.sh @@ -7,7 +7,7 @@ set -o pipefail # Install configuration if ! [ "${OWNCAST_VERSION:-}" ]; then - OWNCAST_VERSION="0.1.2" + OWNCAST_VERSION="0.1.3" fi if ! [ "${OWNCAST_INSTALL_DIRECTORY:-}" ]; then @@ -125,20 +125,20 @@ main() { PLATFORM="macOS" FFMPEG_VERSION="4.3.1" FFMPEG_DOWNLOAD_URL="https://evermeet.cx/ffmpeg/ffmpeg-${FFMPEG_VERSION}.zip" - FFMPEG_TARGET_FILE="${INSTALL_TEMP_DIRECTORY}/ffmpeg.zip" + FFMPEG_TARGET_FILE="${INSTALL_TEMP_DIRECTORY}/ffmpeg.zip" ;; "arm64") OWNCAST_ARCH="arm64" PLATFORM="macOS" FFMPEG_VERSION="6" FFMPEG_DOWNLOAD_URL="https://www.osxexperts.net/ffmpeg${FFMPEG_VERSION}arm.zip" - FFMPEG_TARGET_FILE="${INSTALL_TEMP_DIRECTORY}/ffmpeg.zip" - ;; + FFMPEG_TARGET_FILE="${INSTALL_TEMP_DIRECTORY}/ffmpeg.zip" + ;; *) errorAndExit "Unsupported CPU architecture $(uname -m)" ;; esac - ;; + ;; # ;; "Linux") From ba4271d021064e8ebd8b721f108ce2c77a3ca468 Mon Sep 17 00:00:00 2001 From: Gabe Kangas Date: Sun, 31 Mar 2024 15:36:43 -0700 Subject: [PATCH 2/6] Add additional items to the changlog for release --- content/releases/owncast-0.1.3.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/releases/owncast-0.1.3.md b/content/releases/owncast-0.1.3.md index fdc3084918..600df12997 100644 --- a/content/releases/owncast-0.1.3.md +++ b/content/releases/owncast-0.1.3.md @@ -25,6 +25,8 @@ weight: 100 - Set content-type for customjavascript [#3612](https://github.com/owncast/owncast/pull/3612) +- Added "rel-me" attribute to server-rendered bot/metadata/search page template [#3290](https://github.com/owncast/owncast/issues/3290) + ### Changed - Do not send a join chat event if that user is already in the chat [#3487](https://github.com/owncast/owncast/issues/3487) @@ -51,6 +53,8 @@ weight: 100 - Thumbnail not consistently generated when using S3 [#3522](https://github.com/owncast/owncast/issues/3522) +- Player timestamp is sometimes shown as undefined [#3652](https://github.com/owncast/owncast/issues/3652) + - Changing Log-Entries-Per-Page in Admin Console Doesn't Work [#3511](https://github.com/owncast/owncast/issues/3511) - When embedding Owncast chat via iframe the page jumps to where the iframe is [#3500](https://github.com/owncast/owncast/issues/3500) From 02c4bd43469a419af630e785c59b990e9efcb6f4 Mon Sep 17 00:00:00 2001 From: Gabe Kangas Date: Sun, 31 Mar 2024 16:01:05 -0700 Subject: [PATCH 3/6] Add api docs for 0.1.3 --- static/api/{latest/index.html => 0.1.3} | 20 +- static/api/development/index.html | 2458 ++++++++++++++++++++++- 2 files changed, 2467 insertions(+), 11 deletions(-) rename static/api/{latest/index.html => 0.1.3} (94%) diff --git a/static/api/latest/index.html b/static/api/0.1.3 similarity index 94% rename from static/api/latest/index.html rename to static/api/0.1.3 index f5487522dc..32c7188beb 100644 --- a/static/api/latest/index.html +++ b/static/api/0.1.3 @@ -26,7 +26,7 @@ `;var ga=ua;function ya(e){return t=>{if(t.theme.extensionsHook)return t.theme.extensionsHook(e,t)}}const va=ga.div` padding: 20px; color: red; -`;class ba extends n.Component{constructor(e){super(e),this.state={error:void 0}}componentDidCatch(e){return this.setState({error:e}),!1}render(){return this.state.error?n.createElement(va,null,n.createElement("h1",null,"Something went wrong..."),n.createElement("small",null," ",this.state.error.message," "),n.createElement("p",null,n.createElement("details",null,n.createElement("summary",null,"Stack trace"),n.createElement("pre",null,this.state.error.stack))),n.createElement("small",null," ReDoc Version: ","2.0.0-rc.77")," ",n.createElement("br",null),n.createElement("small",null," Commit: ","580f883")):n.createElement(n.Fragment,null,n.Children.only(this.props.children))}}const wa=fa` +`;class ba extends n.Component{constructor(e){super(e),this.state={error:void 0}}componentDidCatch(e){return this.setState({error:e}),!1}render(){return this.state.error?n.createElement(va,null,n.createElement("h1",null,"Something went wrong..."),n.createElement("small",null," ",this.state.error.message," "),n.createElement("p",null,n.createElement("details",null,n.createElement("summary",null,"Stack trace"),n.createElement("pre",null,this.state.error.stack))),n.createElement("small",null," ReDoc Version: ","2.0.0")," ",n.createElement("br",null),n.createElement("small",null," Commit: ","5fb4daa")):n.createElement(n.Fragment,null,n.Children.only(this.props.children))}}const wa=fa` 0% { transform: rotate(0deg); } 100% { @@ -1816,7 +1816,7 @@ cursor: pointer; font-style: normal; color: '#666'; -`;var Hb=Object.defineProperty,Yb=Object.getOwnPropertyDescriptor;class Kb extends n.PureComponent{constructor(e){super(e),this.activeItemRef=null,this.clear=()=>{this.setState({results:[],noResults:!1,term:"",activeItemIdx:-1}),this.props.marker.unmark()},this.handleKeyDown=e=>{if(27===e.keyCode&&this.clear(),40===e.keyCode&&(this.setState({activeItemIdx:Math.min(this.state.activeItemIdx+1,this.state.results.length-1)}),e.preventDefault()),38===e.keyCode&&(this.setState({activeItemIdx:Math.max(0,this.state.activeItemIdx-1)}),e.preventDefault()),13===e.keyCode){const e=this.state.results[this.state.activeItemIdx];if(e){const t=this.props.getItemById(e.meta);t&&this.props.onActivate(t)}}},this.search=e=>{const{minCharacterLengthToInitSearch:t}=this.context,n=e.target.value;n.lengththis.searchCallback(this.state.term)))},this.state={results:[],noResults:!1,term:"",activeItemIdx:-1}}clearResults(e){this.setState({results:[],noResults:!1,term:e}),this.props.marker.unmark()}setResults(e,t){this.setState({results:e,noResults:0===e.length}),this.props.marker.mark(t)}searchCallback(e){this.props.search.search(e).then((t=>{this.setResults(t,e)}))}render(){const{activeItemIdx:e}=this.state,t=this.state.results.filter((e=>this.props.getItemById(e.meta))).map((e=>({item:this.props.getItemById(e.meta),score:e.score}))).sort(((e,t)=>t.score-e.score));return n.createElement(Ub,{role:"search"},this.state.term&&n.createElement(Wb,{onClick:this.clear},"×"),n.createElement(Bb,null),n.createElement(Vb,{value:this.state.term,onKeyDown:this.handleKeyDown,placeholder:"Search...","aria-label":"Search",type:"text",onChange:this.search}),t.length>0&&n.createElement(Pd,{options:{wheelPropagation:!1}},n.createElement(qb,{"data-role":"search:results"},t.map(((t,r)=>n.createElement(wb,{item:Object.create(t.item,{active:{value:r===e}}),onActivate:this.props.onActivate,withoutChildren:!0,key:t.item.id,"data-role":"search:result"}))))),this.state.term&&this.state.noResults?n.createElement(qb,{"data-role":"search:results"},lo("noResultsFound")):null)}}Kb.contextType=Sa,((e,t,n,r)=>{for(var o,i=Yb(t,n),a=e.length-1;a>=0;a--)(o=e[a])&&(i=o(t,n,i)||i);i&&Hb(t,n,i)})([Ra.bind,(0,Ra.debounce)(400)],Kb.prototype,"searchCallback");class Gb extends n.Component{componentDidMount(){this.props.store.onDidMount()}componentWillUnmount(){this.props.store.dispose()}render(){const{store:{spec:e,menu:t,options:r,search:o,marker:i}}=this.props,a=this.props.store;return n.createElement(ha,{theme:r.theme},n.createElement(Du,{value:a},n.createElement(Ea,{value:r},n.createElement(Mb,{className:"redoc-wrap"},n.createElement(Lb,{menu:t,className:"menu-content"},n.createElement(py,{info:e.info}),!r.disableSearch&&n.createElement(Kb,{search:o,marker:i,getItemById:t.getItemById,onActivate:t.activateAndScroll})||null,n.createElement($b,{menu:t})),n.createElement(Fb,{className:"api-content"},n.createElement(sy,{store:a}),n.createElement(lb,{items:t.items})),n.createElement(zb,null)))))}}Gb.propTypes={store:Oa.instanceOf(ey).isRequired};const Qb=function(e){const{spec:t,specUrl:o,options:i={},onLoaded:a}=e,s=bo(i.hideLoading,!1),l=new xo(i);if(void 0!==l.nonce)try{r.nc=l.nonce}catch(e){}return n.createElement(ba,null,n.createElement(Mu,{spec:t,specUrl:o,options:i,onLoaded:a},(({loading:e,store:t})=>e?s?null:n.createElement(_a,{color:l.theme.colors.primary.main}):n.createElement(Gb,{store:t}))))};var Xb=Object.defineProperty,Jb=Object.getOwnPropertySymbols,Zb=Object.prototype.hasOwnProperty,ew=Object.prototype.propertyIsEnumerable,tw=(e,t,n)=>t in e?Xb(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,nw=(e,t)=>{for(var n in t||(t={}))Zb.call(t,n)&&tw(e,n,t[n]);if(Jb)for(var n of Jb(t))ew.call(t,n)&&tw(e,n,t[n]);return e};Nt({useProxies:"ifavailable"});const rw="2.0.0-rc.77",ow="580f883";function iw(e){const t=function(e){const t={},n=e.attributes;for(let e=0;et.toUpperCase())),o=t[e];n[r]="theme"===e?JSON.parse(o):o}return n}function aw(e,t={},r=Wr("redoc"),o){if(null===r)throw new Error('"element" argument is not provided and tag is not found on the page');let a,s;"string"==typeof e?a=e:"object"==typeof e&&(s=e),(0,i.render)(n.createElement(Qb,{spec:s,onLoaded:o,specUrl:a,options:nw(nw({},t),iw(r))},["Loading..."]),r)}function sw(e=Wr("redoc")){e&&(0,i.unmountComponentAtNode)(e)}function lw(e,t=Wr("redoc"),r){const o=ey.fromJS(e);setTimeout((()=>{(0,i.hydrate)(n.createElement(Gb,{store:o}),t,r)}),0)}!function(){const e=Wr("redoc");if(!e)return;const t=e.getAttribute("spec-url");t&&aw(t,{},e)}()}(),o}()})); +`;var Hb=Object.defineProperty,Yb=Object.getOwnPropertyDescriptor;class Kb extends n.PureComponent{constructor(e){super(e),this.activeItemRef=null,this.clear=()=>{this.setState({results:[],noResults:!1,term:"",activeItemIdx:-1}),this.props.marker.unmark()},this.handleKeyDown=e=>{if(27===e.keyCode&&this.clear(),40===e.keyCode&&(this.setState({activeItemIdx:Math.min(this.state.activeItemIdx+1,this.state.results.length-1)}),e.preventDefault()),38===e.keyCode&&(this.setState({activeItemIdx:Math.max(0,this.state.activeItemIdx-1)}),e.preventDefault()),13===e.keyCode){const e=this.state.results[this.state.activeItemIdx];if(e){const t=this.props.getItemById(e.meta);t&&this.props.onActivate(t)}}},this.search=e=>{const{minCharacterLengthToInitSearch:t}=this.context,n=e.target.value;n.lengththis.searchCallback(this.state.term)))},this.state={results:[],noResults:!1,term:"",activeItemIdx:-1}}clearResults(e){this.setState({results:[],noResults:!1,term:e}),this.props.marker.unmark()}setResults(e,t){this.setState({results:e,noResults:0===e.length}),this.props.marker.mark(t)}searchCallback(e){this.props.search.search(e).then((t=>{this.setResults(t,e)}))}render(){const{activeItemIdx:e}=this.state,t=this.state.results.filter((e=>this.props.getItemById(e.meta))).map((e=>({item:this.props.getItemById(e.meta),score:e.score}))).sort(((e,t)=>t.score-e.score));return n.createElement(Ub,{role:"search"},this.state.term&&n.createElement(Wb,{onClick:this.clear},"×"),n.createElement(Bb,null),n.createElement(Vb,{value:this.state.term,onKeyDown:this.handleKeyDown,placeholder:"Search...","aria-label":"Search",type:"text",onChange:this.search}),t.length>0&&n.createElement(Pd,{options:{wheelPropagation:!1}},n.createElement(qb,{"data-role":"search:results"},t.map(((t,r)=>n.createElement(wb,{item:Object.create(t.item,{active:{value:r===e}}),onActivate:this.props.onActivate,withoutChildren:!0,key:t.item.id,"data-role":"search:result"}))))),this.state.term&&this.state.noResults?n.createElement(qb,{"data-role":"search:results"},lo("noResultsFound")):null)}}Kb.contextType=Sa,((e,t,n,r)=>{for(var o,i=Yb(t,n),a=e.length-1;a>=0;a--)(o=e[a])&&(i=o(t,n,i)||i);i&&Hb(t,n,i)})([Ra.bind,(0,Ra.debounce)(400)],Kb.prototype,"searchCallback");class Gb extends n.Component{componentDidMount(){this.props.store.onDidMount()}componentWillUnmount(){this.props.store.dispose()}render(){const{store:{spec:e,menu:t,options:r,search:o,marker:i}}=this.props,a=this.props.store;return n.createElement(ha,{theme:r.theme},n.createElement(Du,{value:a},n.createElement(Ea,{value:r},n.createElement(Mb,{className:"redoc-wrap"},n.createElement(Lb,{menu:t,className:"menu-content"},n.createElement(py,{info:e.info}),!r.disableSearch&&n.createElement(Kb,{search:o,marker:i,getItemById:t.getItemById,onActivate:t.activateAndScroll})||null,n.createElement($b,{menu:t})),n.createElement(Fb,{className:"api-content"},n.createElement(sy,{store:a}),n.createElement(lb,{items:t.items})),n.createElement(zb,null)))))}}Gb.propTypes={store:Oa.instanceOf(ey).isRequired};const Qb=function(e){const{spec:t,specUrl:o,options:i={},onLoaded:a}=e,s=bo(i.hideLoading,!1),l=new xo(i);if(void 0!==l.nonce)try{r.nc=l.nonce}catch(e){}return n.createElement(ba,null,n.createElement(Mu,{spec:t,specUrl:o,options:i,onLoaded:a},(({loading:e,store:t})=>e?s?null:n.createElement(_a,{color:l.theme.colors.primary.main}):n.createElement(Gb,{store:t}))))};var Xb=Object.defineProperty,Jb=Object.getOwnPropertySymbols,Zb=Object.prototype.hasOwnProperty,ew=Object.prototype.propertyIsEnumerable,tw=(e,t,n)=>t in e?Xb(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,nw=(e,t)=>{for(var n in t||(t={}))Zb.call(t,n)&&tw(e,n,t[n]);if(Jb)for(var n of Jb(t))ew.call(t,n)&&tw(e,n,t[n]);return e};Nt({useProxies:"ifavailable"});const rw="2.0.0",ow="5fb4daa";function iw(e){const t=function(e){const t={},n=e.attributes;for(let e=0;et.toUpperCase())),o=t[e];n[r]="theme"===e?JSON.parse(o):o}return n}function aw(e,t={},r=Wr("redoc"),o){if(null===r)throw new Error('"element" argument is not provided and tag is not found on the page');let a,s;"string"==typeof e?a=e:"object"==typeof e&&(s=e),(0,i.render)(n.createElement(Qb,{spec:s,onLoaded:o,specUrl:a,options:nw(nw({},t),iw(r))},["Loading..."]),r)}function sw(e=Wr("redoc")){e&&(0,i.unmountComponentAtNode)(e)}function lw(e,t=Wr("redoc"),r){const o=ey.fromJS(e);setTimeout((()=>{(0,i.hydrate)(n.createElement(Gb,{store:o}),t,r)}),0)}!function(){const e=Wr("redoc");if(!e)return;const t=e.getAttribute("spec-url");t&&aw(t,{},e)}()}(),o}()})); //# sourceMappingURL=redoc.standalone.js.map + + + + + + +

Owncast (0.1.3)

Download OpenAPI specification:Download

Owncast is a self-hosted live video and web chat server for use with existing popular broadcasting software.

Take note that only APIs listed specifically for external use, 3rd parties or for integration purposes are encouraged for external use. Internal APIs may change at any time and are used by the server and frontend itself.

+

Admin

Admin operations requiring authentication.

+

Server status and broadcaster

Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
{
  • "broadcaster": {
    },
  • "online": true,
  • "viewerCount": 3,
  • "overallPeakViewerCount": 4,
  • "sessionPeakViewerCount": 4,
  • "versionNumber": "0.0.3"
}

Disconnect Broadcaster

Disconnect the active inbound stream, if one exists, and terminate the broadcast.

+
Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Reset your YP registration key.

Used when there is a problem with your registration to the Owncast Directory via the YP APIs. This will reset your local registration key.

+
Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Return a list of currently connected clients

Return a list of currently connected clients with optional geo details.

+
Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Return a list of currently connected clients

Return a list of currently connected clients with optional geo details.

+
Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Return recent log entries

Returns server logs.

+
Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Return recent warning and error logs.

Return recent warning and error logs.

+
Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Server Configuration

Get the current configuration of the Owncast server.

+
Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
{
  • "instanceDetails": {
    },
  • "ffmpegPath": "string",
  • "webServerPort": 0,
  • "rtmpServerPort": 0,
  • "s3": {
    },
  • "videoSettings": {
    },
  • "yp": {
    }
}

Chat messages, unfiltered.

Get a list of all chat messages with no filters applied.

+
Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Update the visibility of chat messages.

Pass an array of IDs you want to change the chat visibility of.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
visible
boolean

Are these messages visible.

+
idArray
Array of strings

Responses

Request samples

Content type
application/json
{
  • "visible": true,
  • "idArray": [
    ]
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Enable or disable a single user.

Enable or disable a single user. Disabling will also hide all the user's chat messages.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
userId
string

User ID to act upon.

+
enabled
boolean

Set the enabled state of this user.

+

Responses

Request samples

Content type
application/json
{
  • "userId": "yklw5Imng",
  • "enabled": true
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the admin password.

Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": "string"
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the stream keys.

Authorizations:
AdminBasicAuth
Request Body schema: application/json
Array of objects (StreamKeyArray)

Responses

Request samples

Content type
application/json
{
  • "value": [
    ]
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the custom page content.

Set the custom page content using markdown.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": "# Welcome to my cool server!<br><br>I _hope_ you enjoy it."
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the stream title.

Set the title of the currently streaming content.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": "Streaming my favorite game, Desert Bus."
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the server name.

Set the name associated with your server. Often is your name, username or identity.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": "string"
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the server summary.

Set the summary of your server's streaming content.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": "The best in Desert Bus Streaming"
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the offline message.

Set the message that is displayed when a stream is not live.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": "Come back on Friday at 2pm, I'll be streaming then."
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the server logo.

Set the logo for your server. Path is relative to webroot.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": "/img/mylogo.png"
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the server tags.

Set the tags displayed for your server and the categories you can show up in on the directory.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": [
    ]
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the ffmpeg binary path

Set the path for a specific copy of ffmpeg on your system.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": "/home/owncast/ffmpeg"
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the owncast web port.

Set the port the owncast web server should listen on.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": 8080
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the inbound rtmp server port.

Set the port where owncast service will listen for inbound broadcasts.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": 1935
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Mark if your stream is not safe for work

Mark if your stream can be consitered not safe for work. Used in different contexts, including the directory for filtering purposes.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": false
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set if this server supports the Owncast directory.

If set to true the server will attempt to register itself with the Owncast Directory. Off by default.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": true
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the public url of this owncast server.

Set the public url of this owncast server. Used for the directory and optional integrations.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the latency level for the stream.

Sets the latency level that determines how much video is buffered between the server and viewer. Less latency can end up with more buffering.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
value
integer

The latency level

+

Responses

Request samples

Content type
application/json
{
  • "value": 4
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the configuration of your stream output.

Sets the detailed configuration for all of the stream variants you support.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": [
    ]
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the video codec.

Sets the specific video codec that will be used for video encoding. Some codecs will support hardware acceleration. Not all codecs will be supported for all systems.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
value
string

The video codec to change to.

+

Responses

Request samples

Content type
application/json
{
  • "value": "libx264"
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set your storage configuration.

Sets your S3 storage provider configuration details to enable external storage.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": {
    }
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set your social handles.

Sets the external links to social networks and profiles.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Custom CSS styles to be used in the web front endpoints.

Save a string containing CSS to be inserted in to the web frontend page.

+
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": "body { color: orange; background: black; }"
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Custom Javascript to be inserted into the frontend

Save a string containing Javascript to be inserted in to the web frontend page.

+
Request Body schema: application/javascript
string or integer or object or boolean

Responses

Request samples

Content type
application/javascript
{
+  "value": "console.log('Hello world.');"
+}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Save a map of variables and values to be used in the frontend.

These values will override the default values in the frontend.

+
Request Body schema: application/json
value
object

Responses

Request samples

Content type
application/json
{
  • "value": {
    }
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Viewers Over Time

Get the tracked viewer count over the collected period.

+
Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Hardware Stats

Get the CPU, Memory and Disk utilization levels over the collected period.

+
Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
{
  • "cpu": [
    ],
  • "memory": [
    ],
  • "disk": [
    ]
}

Enable or disable showing the viewer count.

Authorizations:
AdminBasicAuth
Request Body schema: application/json
value
boolean

Responses

Request samples

Content type
application/json
{
  • "value": true
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Enable or disable federated social features.

Authorizations:
AdminBasicAuth
Request Body schema: application/json
value
boolean

Responses

Request samples

Content type
application/json
{
  • "value": true
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Enable or disable private federation mode.

Authorizations:
AdminBasicAuth
Request Body schema: application/json
value
boolean

Responses

Request samples

Content type
application/json
{
  • "value": true
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Enable or disable Federation activity showing in chat.

Authorizations:
AdminBasicAuth
Request Body schema: application/json
value
boolean

Responses

Request samples

Content type
application/json
{
  • "value": true
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the username you are seen as on the fediverse.

Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": "string"
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set the message sent to the fediverse when this instance goes live.

Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": "string"
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Save a collection of domains that should be ignored on the fediverse.

Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": [
    ]
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Manually send a message to the fediverse from this instance.

Authorizations:
AdminBasicAuth
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": "I'm still streaming, you should come visit."
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Get a list of accepted actions that took place on the Fediverse.

Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
[]

Upload a single emoji image.

Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Delete a single emoji image.

Authorizations:
AdminBasicAuth
Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{
  • "name": "test.svg"
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Return all webhooks.

Return all of the configured webhooks for external events.

+
Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "url": "string",
  • "events": [
    ],
  • "timestamp": "2019-08-24T14:15:22Z",
  • "lastUsed": "2019-08-24T14:15:22Z"
}

Set external action URLs.

Set a collection of external action URLs that are displayed in the UI.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
Array
url
string

URL of the external action content.

+
title
string

The title to put on the external action button.

+
description
string

Optional additional description to display in the UI.

+
icon
string

The URL to an image to place on the external action button.

+
color
string

Optional color to use for drawing the action button.

+
openExternally
boolean

If set this action will open in a new browser tab instead of an internal modal.

+

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Delete a single webhook.

Delete a single webhook by its ID.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
id
string

The webhook id to delete

+

Responses

Request samples

Content type
application/json
{
  • "id": "string"
}

Create a webhook.

Create a single webhook that acts on the requested events.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
url
string

The url to post the events to.

+
events
Array of strings

The events to be notified about.

+

Responses

Request samples

Content type
application/json
{
  • "url": "string",
  • "events": [
    ]
}

Response samples

Content type
application/json
{
  • "name": "your new token",
  • "token": "zG2xO-mHTFnelCp5xaIkYEFWcPhoOswOSRmFC1BkI="
}

Set moderator privileges on a chat users.

Give a chat user ID and be able to grant or remove moderator privileges to this user.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
userId
string

User ID of the chat user you want to change moderation status of.

+
isModerator
boolean

The moderator status of this user.

+

Responses

Request samples

Content type
application/json
{
  • "userId": "xJ84_48Ghj",
  • "isModerator": true
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Get a list of chat moderator users.

Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get the followers of this instance

Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
[]

Get a list of follow requests that are pending.

Authorizations:
AdminBasicAuth

Responses

Get a list of follow requests that have been blocked/rejected.

Authorizations:
AdminBasicAuth

Responses

Approve a pending follow request.

Authorizations:
AdminBasicAuth
Request Body schema: application/json
actorIRI
string

The requestor's remote IRI used to identify the user.

+

Responses

Request samples

Content type
application/json
{
  • "actorIRI": "string"
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

A list of names to select from randomly for new chat users.

Authorizations:
AdminBasicAuth
Request Body schema: application/json
value
Array of strings

Responses

Request samples

Content type
application/json
{
  • "value": [
    ]
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Return Prometheus-compatible scraper metrics.

Authorizations:
AdminBasicAuth

Responses

Chat

Endpoints related to the chat interface.

+

Register a chat user

Register a user that returns an access token for accessing chat.

+
Authorizations:
UserToken
Request Body schema: application/json
displayName
string

Optionally provide a display name you want to assign to this user when registering.

+

Responses

Request samples

Content type
application/json
{
  • "displayName": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "accessToken": "string",
  • "displayName": "string"
}

Chat Messages Backlog

Used to get chat messages prior to connecting to the websocket.

+
Authorizations:
UserToken

Responses

Response samples

Content type
application/json
[
  • [
    ]
]

Get Emoji Image

Get an emoji image.

+
path Parameters
name
required
string
Example: test.svg

Emoji image name

+

Responses

Get Custom Emoji

Get a list of custom emoji that are supported in chat.

+

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Integrations

APIs built to allow 3rd parties to interact with an Owncast server.

+

Set the stream title.

Set the title of the currently streaming content.

+
Authorizations:
AccessToken
Request Body schema: application/json
string or integer or object or boolean

Responses

Request samples

Content type
application/json
{
  • "value": "Streaming my favorite game, Desert Bus."
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Send a chat message.

Send a chat message on behalf of a 3rd party integration, bot or service.

+
Authorizations:
AccessToken
Request Body schema: application/json
body
string

The message text that will be sent as the user.

+

Responses

Request samples

Content type
application/json
{
  • "body": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "sent"
}

Send a system chat message.

Send a chat message on behalf of the system/server.

+
Authorizations:
AccessToken
Request Body schema: application/json
body
string

The message text that will be sent as the system user.

+

Responses

Request samples

Content type
application/json
{
  • "body": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "sent"
}

Send a chat action.

Send an action that took place to the chat.

+
Authorizations:
AccessToken
Request Body schema: application/json
body
required
string

The message text that will be sent as the system user.

+
author
string

An optional user name that performed the action.

+

Responses

Request samples

Content type
application/json
{
  • "body": "rolled a 15 on the dice",
  • "author": "JohnSmith"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "sent"
}

Send system chat message to a client, identified by its ClientId

Send a chat message on behalf of the system/server to a single client.

+
Authorizations:
AccessToken
path Parameters
clientId
required
integer <int64>

Client ID (a unique numeric Id, identifying the client connection)

+
Request Body schema: application/json
body
required
string

The message text that will be sent to the client.

+

Responses

Request samples

Content type
application/json
{
  • "body": "What a beautiful day. I love it"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "messages": "sent"
}

Create an access token.

Create a single access token that has access to the access scopes provided.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
name
string

The human-readable name to give this access token.

+
scopes
Array of strings

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "scopes": [
    ]
}

Response samples

Content type
application/json
{
  • "name": "your new token",
  • "token": "zG2xO-mHTFnelCp5xaIkYEFWcPhoOswOSRmFC1BkI="
}

Delete an access token.

Delete a single access token.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
token
string

The token to delete

+

Responses

Request samples

Content type
application/json
{
  • "token": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "deleted token"
}

Return all access tokens.

Return all of the available access tokens.

+
Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
[
  • "string"
]

Set external action URLs.

Set a collection of external action URLs that are displayed in the UI.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
Array
url
string

URL of the external action content.

+
title
string

The title to put on the external action button.

+
description
string

Optional additional description to display in the UI.

+
icon
string

The URL to an image to place on the external action button.

+
color
string

Optional color to use for drawing the action button.

+
openExternally
boolean

If set this action will open in a new browser tab instead of an internal modal.

+

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Return a list of currently connected clients

Return a list of currently connected clients with optional geo details.

+
Authorizations:
AccessToken

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Historical Chat Messages

Used to get the backlog of chat messages.

+
Authorizations:
AccessToken

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Update the visibility of chat messages.

Pass an array of IDs you want to change the chat visibility of.

+
Authorizations:
AccessToken
Request Body schema: application/json
visible
boolean

Are these messages visible.

+
idArray
Array of strings

Responses

Request samples

Content type
application/json
{
  • "visible": true,
  • "idArray": [
    ]
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Moderation

Chat-related actions that can take place by a moderator.

+

Update the visibility of chat messages.

Pass an array of IDs you want to change the chat visibility of.

+
Authorizations:
ModeratorUserToken
Request Body schema: application/json
visible
boolean

Are these messages visible.

+
idArray
Array of strings

Responses

Request samples

Content type
application/json
{
  • "visible": true,
  • "idArray": [
    ]
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Disable (block) or re-enable a chat user.

Authorizations:
ModeratorUserToken
Request Body schema: application/json
userId
string

User ID of the chat user you're changing.

+
enabled
boolean

State of this user. False to block/disable.

+

Responses

Request samples

Content type
application/json
{
  • "userId": "string",
  • "enabled": true
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Set moderator privileges on a chat users.

Give a chat user ID and be able to grant or remove moderator privileges to this user.

+
Authorizations:
AdminBasicAuth
Request Body schema: application/json
userId
string

User ID of the chat user you want to change moderation status of.

+
isModerator
boolean

The moderator status of this user.

+

Responses

Request samples

Content type
application/json
{
  • "userId": "xJ84_48Ghj",
  • "isModerator": true
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "context specific success message"
}

Get a list of chat moderator users.

Authorizations:
AdminBasicAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

/api/moderation/chat/user/

path Parameters
name
required
string
Example: USER-ID

User ID

+

Responses

Response samples

Content type
application/json
{
  • "user": {
    },
  • "connectClients": [
    ],
  • "messages": [
    ]
}

Server

Information

The client configuration. Information useful for the user interface.

+

Responses

Response samples

Content type
application/json
{
  • "name": "string",
  • "summary": "string",
  • "logo": "string",
  • "tags": [
    ],
  • "socialHandles": [],
  • "extraPageContent": "<p>This page is <strong>super</strong> cool!",
  • "version": "Owncast v0.0.3-macOS (ef3796a033b32a312ebf5b334851cbf9959e7ecb)"
}

Mark the current viewer as active.

For tracking viewer count, periodically hit the ping endpoint.

+

Responses

Current Status

This endpoint is used to discover when a server is broadcasting, the number of active viewers as well as other useful information for updating the user interface.

+

Responses

Response samples

Content type
application/json
{
  • "lastConnectTime": "2020-10-03T21:36:22-05:00",
  • "lastDisconnectTime": null,
  • "online": true,
  • "overallMaxViewerCount": 420,
  • "sessionMaxViewerCount": 12,
  • "viewerCount": 7
}

Custom Javascript to execute.

Returns custom Javascript that was set in the Owncast admin to be run in the Owncast frontend.

+

Responses

Response samples

Content type
application/javascript
console.log("Hello World");

Yellow Pages Information

Information to be used in the Yellow Pages service, a global directory of Owncast servers.

+

Responses

Response samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "logo": "string",
  • "nsfw": true,
  • "tags": [
    ],
  • "online": true,
  • "viewerCount": 0,
  • "overallMaxViewerCount": 0,
  • "sessionMaxViewerCount": 0,
  • "lastConnectTime": "2019-08-24T14:15:22Z"
}

Get the public followers of this instance

Responses

Response samples

Content type
application/json
[]

Return the information needed to redirect a user to a fediverse server to perform a remote follow action.

Request Body schema: application/json
account
string

The fediverse username@server.tld account that wants to perform the remote follow action.

+

Responses

Request samples

Content type
application/json
{
  • "account": "johnsmith@fediverse.biz"
}

Response samples

+ + + + \ No newline at end of file From f7ad38d17f76f50abe0a63e96c81318b743478a4 Mon Sep 17 00:00:00 2001 From: Gabe Kangas Date: Sun, 7 Apr 2024 12:15:37 -0700 Subject: [PATCH 4/6] Hide designer post --- content/news/20230614-looking-for-designer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/news/20230614-looking-for-designer.md b/content/news/20230614-looking-for-designer.md index 13947ddffc..be74845da5 100644 --- a/content/news/20230614-looking-for-designer.md +++ b/content/news/20230614-looking-for-designer.md @@ -3,7 +3,7 @@ title: "Looking for a designer to help with future features!" description: "Owncast is planning for upcoming features and needs a talented designer to help!" date: 2023-06-14T11:50:56-07:00 lastmod: 2023-06-14T11:50:56-07:00 -draft: false +draft: true images: [] --- From 447b107e69309908d4273bba8608dd31cc70333d Mon Sep 17 00:00:00 2001 From: Gabe Kangas Date: Sun, 7 Apr 2024 12:55:25 -0700 Subject: [PATCH 5/6] Set release date --- content/releases/owncast-0.1.3.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/releases/owncast-0.1.3.md b/content/releases/owncast-0.1.3.md index 600df12997..18fae2d3a2 100644 --- a/content/releases/owncast-0.1.3.md +++ b/content/releases/owncast-0.1.3.md @@ -1,13 +1,13 @@ --- title: Owncast v0.1.3 -date: 2024-03-02 +date: 2024-04-07 description: Another smaller update with requested changes and additions. weight: 100 --- # Changelog -## [[0.1.3](https://github.com/owncast/owncast/milestone/25)] - 2024-03-xx +## [[0.1.3](https://github.com/owncast/owncast/milestone/25)] - 2024-04-07 ## Upgrade instructions from 0.1.2 From 8d4732953a0af99a9ea3b669f5e3b39e114af507 Mon Sep 17 00:00:00 2001 From: Gabe Kangas Date: Sun, 7 Apr 2024 13:09:53 -0700 Subject: [PATCH 6/6] Point to emoji api update --- content/releases/owncast-0.1.3.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/releases/owncast-0.1.3.md b/content/releases/owncast-0.1.3.md index 18fae2d3a2..103c3ec42e 100644 --- a/content/releases/owncast-0.1.3.md +++ b/content/releases/owncast-0.1.3.md @@ -61,6 +61,8 @@ weight: 100 - Pagination Doesn't Work in 'Followers' Console [#3510](https://github.com/owncast/owncast/issues/3510) +- Protect emoji delete API from possible path traversal exploit [1b14800c7d7f54be14ed4d130bfe7f480645076e](https://github.com/owncast/owncast/commit/1b14800c7d7f54be14ed4d130bfe7f480645076e) + - Unable to create Webhooks on 0.1.2 when "When a user leaves the chat" checked. [#3524](https://github.com/owncast/owncast/issues/3524) - mobile-chat-button is displayed for mobile users when chat is disabled. [#3535](https://github.com/owncast/owncast/issues/3535)