From bd987bf72aedb8271846629e05f072247179a22d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0spik?= Date: Fri, 29 May 2026 00:55:49 +0300 Subject: [PATCH 1/6] chore: update unicode emoji list (#781) Signed-off-by: ispik --- .../src/models/emojis/unicode_emoji.txt | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/crates/core/database/src/models/emojis/unicode_emoji.txt b/crates/core/database/src/models/emojis/unicode_emoji.txt index 06e8bf74..1b08dbe0 100644 --- a/crates/core/database/src/models/emojis/unicode_emoji.txt +++ b/crates/core/database/src/models/emojis/unicode_emoji.txt @@ -1,4 +1,3 @@ - *️⃣ 0️⃣ 1️⃣ @@ -242,6 +241,7 @@ 🆘 🆙 🆚 +🇦 🇦🇨 🇦🇩 🇦🇪 @@ -259,6 +259,7 @@ 🇦🇼 🇦🇽 🇦🇿 +🇧 🇧🇦 🇧🇧 🇧🇩 @@ -280,6 +281,7 @@ 🇧🇼 🇧🇾 🇧🇿 +🇨 🇨🇦 🇨🇨 🇨🇩 @@ -301,6 +303,7 @@ 🇨🇽 🇨🇾 🇨🇿 +🇩 🇩🇪 🇩🇬 🇩🇯 @@ -308,6 +311,7 @@ 🇩🇲 🇩🇴 🇩🇿 +🇪 🇪🇦 🇪🇨 🇪🇪 @@ -317,12 +321,14 @@ 🇪🇸 🇪🇹 🇪🇺 +🇫 🇫🇮 🇫🇯 🇫🇰 🇫🇲 🇫🇴 🇫🇷 +🇬 🇬🇦 🇬🇧 🇬🇩 @@ -342,12 +348,14 @@ 🇬🇺 🇬🇼 🇬🇾 +🇭 🇭🇰 🇭🇲 🇭🇳 🇭🇷 🇭🇹 🇭🇺 +🇮 🇮🇨 🇮🇩 🇮🇪 @@ -359,10 +367,12 @@ 🇮🇷 🇮🇸 🇮🇹 +🇯 🇯🇪 🇯🇲 🇯🇴 🇯🇵 +🇰 🇰🇪 🇰🇬 🇰🇭 @@ -374,6 +384,7 @@ 🇰🇼 🇰🇾 🇰🇿 +🇱 🇱🇦 🇱🇧 🇱🇨 @@ -385,6 +396,7 @@ 🇱🇺 🇱🇻 🇱🇾 +🇲 🇲🇦 🇲🇨 🇲🇩 @@ -408,6 +420,7 @@ 🇲🇽 🇲🇾 🇲🇿 +🇳 🇳🇦 🇳🇨 🇳🇪 @@ -420,7 +433,9 @@ 🇳🇷 🇳🇺 🇳🇿 +🇴 🇴🇲 +🇵 🇵🇦 🇵🇪 🇵🇫 @@ -435,12 +450,15 @@ 🇵🇹 🇵🇼 🇵🇾 +🇶 🇶🇦 +🇷 🇷🇪 🇷🇴 🇷🇸 🇷🇺 🇷🇼 +🇸 🇸🇦 🇸🇧 🇸🇨 @@ -462,6 +480,7 @@ 🇸🇽 🇸🇾 🇸🇿 +🇹 🇹🇦 🇹🇨 🇹🇩 @@ -479,6 +498,7 @@ 🇹🇻 🇹🇼 🇹🇿 +🇺 🇺🇦 🇺🇬 🇺🇲 @@ -486,6 +506,7 @@ 🇺🇸 🇺🇾 🇺🇿 +🇻 🇻🇦 🇻🇨 🇻🇪 @@ -493,11 +514,15 @@ 🇻🇮 🇻🇳 🇻🇺 +🇼 🇼🇫 🇼🇸 +🇽 🇽🇰 +🇾 🇾🇪 🇾🇹 +🇿 🇿🇦 🇿🇲 🇿🇼 From 65acc640340bc35bd2fd4239c5d3ad60cb92e5b0 Mon Sep 17 00:00:00 2001 From: "stoat-tofu[bot]" <242700035+stoat-tofu[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2026 13:28:27 +0000 Subject: [PATCH 2/6] chore: modify .github/workflows/renovate.yml --- .github/workflows/renovate.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 .github/workflows/renovate.yml diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml new file mode 100644 index 00000000..7ce0d5ba --- /dev/null +++ b/.github/workflows/renovate.yml @@ -0,0 +1,30 @@ +# DO NOT EDIT DIRECTLY IN REPOSITORY +# Managed in Terraform templates + +name: Renovate +on: + workflow_dispatch: + schedule: + - cron: '0/15 * * * *' +jobs: + renovate: + runs-on: ubuntu-latest + steps: + - id: app-token + uses: actions/create-github-app-token@v2 + with: + app-id: ${{ secrets.GH_STOAT_RELEASE_APP_ID }} + private-key: ${{ secrets.GH_STOAT_RELEASE_APP_PRIVATE_KEY }} + + - name: Setup Mise + uses: immich-app/devtools/actions/use-mise@7b8610a904d57da241e4ddba17fa62b62b15aed4 # use-mise-action-v2.0.2 + with: + github_token: ${{ steps.app-token.outputs.token }} + + - name: Self-hosted Renovate + uses: renovatebot/github-action@v46.1.14 + with: + token: '${{ steps.app-token.outputs.token }}' + env: + RENOVATE_PLATFORM_COMMIT: 'enabled' + RENOVATE_REPOSITORIES: '${{ github.repository }}' \ No newline at end of file From 0896e6888274451b7bfb8abb012ae1bf32ad224a Mon Sep 17 00:00:00 2001 From: "stoat-tofu[bot]" <242700035+stoat-tofu[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2026 13:28:29 +0000 Subject: [PATCH 3/6] chore: modify renovate.json --- renovate.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 renovate.json diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000..9ccd60d5 --- /dev/null +++ b/renovate.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended" + ], + "cloneSubmodules": true, + "cloneSubmodulesFilter": [ + "*", + "!packages/client/assets" + ] +} \ No newline at end of file From 5b769b60de5f14ed5612cd337f19c6fb9afdb99d Mon Sep 17 00:00:00 2001 From: Tom Date: Tue, 2 Jun 2026 17:42:04 -0700 Subject: [PATCH 4/6] chore(docs): update header logo (#796) * chore(docs): update header logo Signed-off-by: IAmTomahawkx * fix: don't step on toes Signed-off-by: IAmTomahawkx --------- Signed-off-by: IAmTomahawkx --- docs/docusaurus.config.ts | 6 +++--- docs/static/img/navbar.dark.svg | 9 +++++++++ docs/static/img/navbar.light.svg | 22 ++++++++++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 docs/static/img/navbar.dark.svg create mode 100644 docs/static/img/navbar.light.svg diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index 9edf29e9..f2b6857b 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -80,10 +80,10 @@ const config: Config = { respectPrefersColorScheme: true, }, navbar: { - title: 'Stoat Developers', logo: { - alt: 'Stoat', - src: 'https://stoat.chat/favicon.svg', + alt: 'Stoat for Developers', + src: '/img/navbar.light.svg', + srcDark: '/img/navbar.dark.svg' }, items: [ { diff --git a/docs/static/img/navbar.dark.svg b/docs/static/img/navbar.dark.svg new file mode 100644 index 00000000..6a5d88c0 --- /dev/null +++ b/docs/static/img/navbar.dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/static/img/navbar.light.svg b/docs/static/img/navbar.light.svg new file mode 100644 index 00000000..83bc88b0 --- /dev/null +++ b/docs/static/img/navbar.light.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + From bebfe349227d8cc555e1b488eb343f2c28b28b88 Mon Sep 17 00:00:00 2001 From: Asraye Date: Thu, 4 Jun 2026 04:06:38 +1000 Subject: [PATCH 5/6] fix: point docs favicon to correct location (#789) chore(docs): update favicon Signed-off-by: Asraye --- docs/docusaurus.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index f2b6857b..928a02d1 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -6,7 +6,7 @@ import type { ScalarOptions } from '@scalar/docusaurus'; const config: Config = { title: 'Stoat Developers', tagline: 'Developer documentation for Stoat', - favicon: 'https://stoat.chat/favicon.svg', + favicon: 'https://stoat.chat/favicon-stoat.svg', future: { v4: true, From c70459b10ce107611b9d478add26db372361baf2 Mon Sep 17 00:00:00 2001 From: Tom Date: Sun, 7 Jun 2026 16:56:00 -0700 Subject: [PATCH 6/6] fix: openapi using old naming (#777) * fix: openapi using old naming Signed-off-by: IAmTomahawkx * fix: remove january openapi security header Signed-off-by: IAmTomahawkx * fix(docs): more Revolt usage Signed-off-by: IAmTomahawkx --------- Signed-off-by: IAmTomahawkx --- crates/delta/src/routes/mod.rs | 98 ++++++++--------------------- crates/services/january/src/main.rs | 40 +++++------- 2 files changed, 42 insertions(+), 96 deletions(-) diff --git a/crates/delta/src/routes/mod.rs b/crates/delta/src/routes/mod.rs index cf1c4ace..768531fc 100644 --- a/crates/delta/src/routes/mod.rs +++ b/crates/delta/src/routes/mod.rs @@ -64,47 +64,6 @@ pub fn mount(config: Settings, mut rocket: Rocket) -> Rocket { }; } - if config.features.webhooks_enabled { - mount_endpoints_and_merged_docs! { - rocket, "/0.8".to_owned(), settings, - "/" => (vec![], custom_openapi_spec()), - "" => openapi_get_routes_spec![root::root], - "/users" => users::routes(), - "/bots" => bots::routes(), - "/channels" => channels::routes(), - "/servers" => servers::routes(), - "/invites" => invites::routes(), - "/custom" => customisation::routes(), - "/safety" => safety::routes(), - "/auth/account" => rocket_authifier::routes::account::routes(), - "/auth/session" => rocket_authifier::routes::session::routes(), - "/auth/mfa" => rocket_authifier::routes::mfa::routes(), - "/onboard" => onboard::routes(), - "/push" => push::routes(), - "/sync" => sync::routes(), - "/webhooks" => webhooks::routes() - }; - } else { - mount_endpoints_and_merged_docs! { - rocket, "/0.8".to_owned(), settings, - "/" => (vec![], custom_openapi_spec()), - "" => openapi_get_routes_spec![root::root], - "/users" => users::routes(), - "/bots" => bots::routes(), - "/channels" => channels::routes(), - "/servers" => servers::routes(), - "/invites" => invites::routes(), - "/custom" => customisation::routes(), - "/safety" => safety::routes(), - "/auth/account" => rocket_authifier::routes::account::routes(), - "/auth/session" => rocket_authifier::routes::session::routes(), - "/auth/mfa" => rocket_authifier::routes::mfa::routes(), - "/onboard" => onboard::routes(), - "/push" => push::routes(), - "/sync" => sync::routes() - }; - } - rocket } @@ -115,8 +74,8 @@ fn custom_openapi_spec() -> OpenApi { extensions.insert( "x-logo".to_owned(), json!({ - "url": "https://revolt.chat/header.png", - "altText": "Revolt Header" + "url": "https://stoat.chat/header.png", + "altText": "Stoat Header" }), ); @@ -124,7 +83,7 @@ fn custom_openapi_spec() -> OpenApi { "x-tagGroups".to_owned(), json!([ { - "name": "Revolt", + "name": "Stoat", "tags": [ "Core" ] @@ -205,18 +164,21 @@ fn custom_openapi_spec() -> OpenApi { OpenApi { openapi: OpenApi::default_version(), info: Info { - title: "Revolt API".to_owned(), + title: "Stoat API".to_owned(), description: Some("Open source user-first chat platform.".to_owned()), - terms_of_service: Some("https://revolt.chat/terms".to_owned()), + terms_of_service: Some("https://stoat.chat/terms".to_owned()), contact: Some(Contact { - name: Some("Revolt Support".to_owned()), - url: Some("https://revolt.chat".to_owned()), - email: Some("contact@revolt.chat".to_owned()), + name: Some("Stoat".to_owned()), + url: Some("https://stoat.chat".to_owned()), + email: Some("contact@stoat.chat".to_owned()), ..Default::default() }), license: Some(License { name: "AGPLv3".to_owned(), - url: Some("https://github.com/stoatchat/stoatchat/blob/main/crates/delta/LICENSE".to_owned()), + url: Some( + "https://github.com/stoatchat/stoatchat/blob/main/crates/delta/LICENSE" + .to_owned(), + ), ..Default::default() }), version: env!("CARGO_PKG_VERSION").to_string(), @@ -224,29 +186,19 @@ fn custom_openapi_spec() -> OpenApi { }, servers: vec![ Server { - url: "https://api.revolt.chat".to_owned(), - description: Some("Revolt Production".to_owned()), + url: "https://api.stoat.chat".to_owned(), + description: Some("Stoat Production".to_owned()), ..Default::default() }, Server { - url: "https://revolt.chat/api".to_owned(), - description: Some("Revolt Staging".to_owned()), - ..Default::default() - }, - Server { - url: "http://local.revolt.chat:14702".to_owned(), - description: Some("Local Revolt Environment".to_owned()), - ..Default::default() - }, - Server { - url: "http://local.revolt.chat:14702/0.8".to_owned(), - description: Some("Local Revolt Environment (v0.8)".to_owned()), + url: "https://beta.stoat.chat/api".to_owned(), + description: Some("Stoat Beta".to_owned()), ..Default::default() }, ], external_docs: Some(ExternalDocs { - url: "https://developers.revolt.chat".to_owned(), - description: Some("Revolt Developer Documentation".to_owned()), + url: "https://developers.stoat.chat".to_owned(), + description: Some("Stoat Developer Documentation".to_owned()), ..Default::default() }), extensions, @@ -254,19 +206,19 @@ fn custom_openapi_spec() -> OpenApi { Tag { name: "Core".to_owned(), description: Some( - "Use in your applications to determine information about the Revolt node" + "Use in your applications to determine information about the Stoat node" .to_owned(), ), ..Default::default() }, Tag { name: "User Information".to_owned(), - description: Some("Query and fetch users on Revolt".to_owned()), + description: Some("Query and fetch users on Stoat".to_owned()), ..Default::default() }, Tag { name: "Direct Messaging".to_owned(), - description: Some("Direct message other users on Revolt".to_owned()), + description: Some("Direct message other users on Stoat".to_owned()), ..Default::default() }, Tag { @@ -283,7 +235,7 @@ fn custom_openapi_spec() -> OpenApi { }, Tag { name: "Channel Information".to_owned(), - description: Some("Query and fetch channels on Revolt".to_owned()), + description: Some("Query and fetch channels on Stoat".to_owned()), ..Default::default() }, Tag { @@ -313,7 +265,7 @@ fn custom_openapi_spec() -> OpenApi { }, Tag { name: "Server Information".to_owned(), - description: Some("Query and fetch servers on Revolt".to_owned()), + description: Some("Query and fetch servers on Stoat".to_owned()), ..Default::default() }, Tag { @@ -349,7 +301,7 @@ fn custom_openapi_spec() -> OpenApi { Tag { name: "Onboarding".to_owned(), description: Some( - "After signing up to Revolt, users must pick a unique username".to_owned(), + "After signing up to Stoat, users must pick a unique username".to_owned(), ), ..Default::default() }, @@ -361,7 +313,7 @@ fn custom_openapi_spec() -> OpenApi { Tag { name: "Web Push".to_owned(), description: Some( - "Subscribe to and receive Revolt push notifications while offline".to_owned(), + "Subscribe to and receive Stoat push notifications while offline".to_owned(), ), ..Default::default() }, diff --git a/crates/services/january/src/main.rs b/crates/services/january/src/main.rs index b905b87d..e203ce28 100644 --- a/crates/services/january/src/main.rs +++ b/crates/services/january/src/main.rs @@ -21,32 +21,26 @@ async fn main() -> Result<(), std::io::Error> { // Configure API schema #[derive(OpenApi)] #[openapi( - modifiers(&SecurityAddon), - paths( - api::root, - api::proxy, - api::embed - ), - components( - schemas( - api::RootResponse, - revolt_result::Error, - revolt_result::ErrorType, - revolt_models::v0::ImageSize, - revolt_models::v0::Image, - revolt_models::v0::Video, - revolt_models::v0::TwitchType, - revolt_models::v0::LightspeedType, - revolt_models::v0::BandcampType, - revolt_models::v0::Special, - revolt_models::v0::WebsiteMetadata, - revolt_models::v0::Text, - revolt_models::v0::Embed - ) - ) + paths(api::root, api::proxy, api::embed), + components(schemas( + api::RootResponse, + revolt_result::Error, + revolt_result::ErrorType, + revolt_models::v0::ImageSize, + revolt_models::v0::Image, + revolt_models::v0::Video, + revolt_models::v0::TwitchType, + revolt_models::v0::LightspeedType, + revolt_models::v0::BandcampType, + revolt_models::v0::Special, + revolt_models::v0::WebsiteMetadata, + revolt_models::v0::Text, + revolt_models::v0::Embed + )) )] struct ApiDoc; + #[allow(dead_code)] struct SecurityAddon; impl Modify for SecurityAddon {