From 182e67fef2d537ddc37958af21956f447d43a427 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Jan 2026 13:54:35 +0000 Subject: [PATCH 001/104] build(deps): bump actions/setup-node from 6.1.0 to 6.2.0 Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6.1.0 to 6.2.0. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/v6.1.0...v6.2.0) --- updated-dependencies: - dependency-name: actions/setup-node dependency-version: 6.2.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yaml | 6 +++--- .github/workflows/docs.yaml | 2 +- .github/workflows/release-branch.yaml | 2 +- .github/workflows/translations-download.yaml | 2 +- .github/workflows/translations-upload.yaml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ff68ade15..5c0611acf 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -64,7 +64,7 @@ jobs: uses: actions/checkout@v6 - name: Install Node - uses: actions/setup-node@v6.1.0 + uses: actions/setup-node@v6.2.0 with: node-version: 24 @@ -88,7 +88,7 @@ jobs: uses: actions/checkout@v6 - name: Install Node - uses: actions/setup-node@v6.1.0 + uses: actions/setup-node@v6.2.0 with: node-version: 24 @@ -112,7 +112,7 @@ jobs: uses: actions/checkout@v6 - name: Install Node - uses: actions/setup-node@v6.1.0 + uses: actions/setup-node@v6.2.0 with: node-version: 24 diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 3053b56fb..6b0ec68b9 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -39,7 +39,7 @@ jobs: tool: mdbook - name: Install Node - uses: actions/setup-node@v6.1.0 + uses: actions/setup-node@v6.2.0 with: node-version: 24 diff --git a/.github/workflows/release-branch.yaml b/.github/workflows/release-branch.yaml index e058a62be..0b46539be 100644 --- a/.github/workflows/release-branch.yaml +++ b/.github/workflows/release-branch.yaml @@ -64,7 +64,7 @@ jobs: uses: actions/checkout@v6 - name: Install Node - uses: actions/setup-node@v6.1.0 + uses: actions/setup-node@v6.2.0 with: node-version: 24 diff --git a/.github/workflows/translations-download.yaml b/.github/workflows/translations-download.yaml index 70419fce0..c29333e0a 100644 --- a/.github/workflows/translations-download.yaml +++ b/.github/workflows/translations-download.yaml @@ -22,7 +22,7 @@ jobs: uses: actions/checkout@v6 - name: Install Node - uses: actions/setup-node@v6.1.0 + uses: actions/setup-node@v6.2.0 with: node-version: 24 diff --git a/.github/workflows/translations-upload.yaml b/.github/workflows/translations-upload.yaml index ba723278e..453a0d46d 100644 --- a/.github/workflows/translations-upload.yaml +++ b/.github/workflows/translations-upload.yaml @@ -21,7 +21,7 @@ jobs: uses: actions/checkout@v6 - name: Install Node - uses: actions/setup-node@v6.1.0 + uses: actions/setup-node@v6.2.0 with: node-version: 24 From 4cdf275c73a5c1d8f3ae57440652965b2dbe1754 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Jan 2026 13:54:16 +0000 Subject: [PATCH 002/104] build(deps): bump peter-evans/create-pull-request from 8.0.0 to 8.1.0 Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 8.0.0 to 8.1.0. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/v8.0.0...v8.1.0) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-version: 8.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/translations-download.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/translations-download.yaml b/.github/workflows/translations-download.yaml index 70419fce0..640f602a7 100644 --- a/.github/workflows/translations-download.yaml +++ b/.github/workflows/translations-download.yaml @@ -42,7 +42,7 @@ jobs: - name: Create Pull Request id: cpr - uses: peter-evans/create-pull-request@v8.0.0 + uses: peter-evans/create-pull-request@v8.1.0 with: sign-commits: true token: ${{ secrets.BOT_GITHUB_TOKEN }} From 868d6cdc21c40c7b2e4ce1dbed27996bff25ffc7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Jan 2026 09:56:39 +0000 Subject: [PATCH 003/104] build(deps): bump lodash from 4.17.21 to 4.17.23 in /frontend Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23) --- updated-dependencies: - dependency-name: lodash dependency-version: 4.17.23 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 837f12940..1fcfd0e1f 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9968,9 +9968,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "dev": true, "license": "MIT" }, From 0dff4d628f6293f44480138c8409d6d36290e09d Mon Sep 17 00:00:00 2001 From: CEbbinghaus Date: Fri, 23 Jan 2026 21:41:45 +1100 Subject: [PATCH 004/104] Added Kanidm Sample configuration --- docs/setup/sso.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/docs/setup/sso.md b/docs/setup/sso.md index 15d0212d7..e99fe901f 100644 --- a/docs/setup/sso.md +++ b/docs/setup/sso.md @@ -408,6 +408,37 @@ upstream_oauth2: ``` +### Kanidm + + +Install and configure a Kanidm instance using the [Official Docs](https://kanidm.github.io/kanidm/stable/introduction_to_kanidm.html) + +Create a OAuth2 Client following the [OAuth2 Setup](https://kanidm.github.io/kanidm/stable/integrations/oauth2.html) guide + +> ⚠️ **Important** +> Ensure you configure the client to prefer short usernames. This means instead of `user@domain.tld` it will return just `user` as the preferred username +> You can configure this by running `kanidm system oauth2 prefer-short-username `. + +```yaml +upstream_oauth2: + providers: + - id: "[ulid]" # randomly generated ulid (https://www.ulidtools.com/) + issuer: "https:///oauth2/openid/" # TO BE FILLED + token_endpoint_auth_method: client_secret_basic + client_id: "" # TO BE FILLED + client_secret: "" # TO BE FILLED + scope: "openid profile email" # Add any additional scopes + claims_imports: + localpart: + action: require + template: "{{ user.preferred_username }}" + displayname: + action: suggest + template: "{{ user.name }}" + email: + action: suggest + template: "{{ user.email }}" +``` ### Keycloak From fbc6cd0783539089ebd9bab30b6601632d661493 Mon Sep 17 00:00:00 2001 From: CEbbinghaus Date: Wed, 28 Jan 2026 11:08:35 +1100 Subject: [PATCH 005/104] Added signing alg setting to provider yaml --- docs/setup/sso.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/setup/sso.md b/docs/setup/sso.md index e99fe901f..b461315fc 100644 --- a/docs/setup/sso.md +++ b/docs/setup/sso.md @@ -423,6 +423,7 @@ Create a OAuth2 Client following the [OAuth2 Setup](https://kanidm.github.io/kan upstream_oauth2: providers: - id: "[ulid]" # randomly generated ulid (https://www.ulidtools.com/) + id_token_signed_response_alg: ES256 # This is important since Kanidm doesn't support RS256 by default issuer: "https:///oauth2/openid/" # TO BE FILLED token_endpoint_auth_method: client_secret_basic client_id: "" # TO BE FILLED From 028db8808d73c80ee444bbf5ab13b0dce128beaa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Jan 2026 13:54:26 +0000 Subject: [PATCH 006/104] build(deps): bump docker/login-action from 3.6.0 to 3.7.0 Bumps [docker/login-action](https://github.com/docker/login-action) from 3.6.0 to 3.7.0. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v3.6.0...v3.7.0) --- updated-dependencies: - dependency-name: docker/login-action dependency-version: 3.7.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index fbbf4fb2d..0eb691e95 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -268,7 +268,7 @@ jobs: mirrors = ["mirror.gcr.io"] - name: Login to GitHub Container Registry - uses: docker/login-action@v3.6.0 + uses: docker/login-action@v3.7.0 with: registry: ghcr.io username: ${{ github.repository_owner }} From a8b6cc747963720a3e0daee2e9c2fb6ece7543c3 Mon Sep 17 00:00:00 2001 From: Devon Hudson Date: Tue, 3 Feb 2026 10:23:51 -0700 Subject: [PATCH 007/104] Update bytes version --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ba314ee8c..bc2a6d1d5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -805,9 +805,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" dependencies = [ "serde", ] From 07068143ef1266b75d28961a6e557c71c8e0f611 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 3 Feb 2026 18:03:02 +0000 Subject: [PATCH 008/104] Translations updates --- frontend/.storybook/locales.ts | 66 +++++++++++++++++----------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/frontend/.storybook/locales.ts b/frontend/.storybook/locales.ts index 9b0e3684d..9a545003e 100644 --- a/frontend/.storybook/locales.ts +++ b/frontend/.storybook/locales.ts @@ -27,7 +27,7 @@ export type LocalazyMetadata = { }; const localazyMetadata: LocalazyMetadata = { - projectUrl: "https://localazy.com/p/matrix-authentication-service!v1.10", + projectUrl: "https://localazy.com/p/matrix-authentication-service", baseLocale: "en", languages: [ { @@ -181,22 +181,22 @@ const localazyMetadata: LocalazyMetadata = { file: "frontend.json", path: "", cdnFiles: { - "cs": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/cs/frontend.json", - "da": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/da/frontend.json", - "de": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/de/frontend.json", - "en": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/en/frontend.json", - "et": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/et/frontend.json", - "fi": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fi/frontend.json", - "fr": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fr/frontend.json", - "hu": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/hu/frontend.json", - "nb_NO": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nb-NO/frontend.json", - "nl": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nl/frontend.json", - "pl": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pl/frontend.json", - "pt": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt/frontend.json", - "ru": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/ru/frontend.json", - "sv": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sv/frontend.json", - "uk": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uk/frontend.json", - "zh#Hans": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/zh-Hans/frontend.json" + "cs": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/cs/frontend.json", + "da": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/da/frontend.json", + "de": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/de/frontend.json", + "en": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/en/frontend.json", + "et": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/et/frontend.json", + "fi": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fi/frontend.json", + "fr": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fr/frontend.json", + "hu": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/hu/frontend.json", + "nb_NO": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nb-NO/frontend.json", + "nl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nl/frontend.json", + "pl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pl/frontend.json", + "pt": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt/frontend.json", + "ru": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/ru/frontend.json", + "sv": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sv/frontend.json", + "uk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uk/frontend.json", + "zh#Hans": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/zh-Hans/frontend.json" } }, { @@ -204,22 +204,22 @@ const localazyMetadata: LocalazyMetadata = { file: "file.json", path: "", cdnFiles: { - "cs": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/cs/file.json", - "da": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/da/file.json", - "de": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/de/file.json", - "en": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/en/file.json", - "et": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/et/file.json", - "fi": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fi/file.json", - "fr": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fr/file.json", - "hu": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/hu/file.json", - "nb_NO": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nb-NO/file.json", - "nl": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nl/file.json", - "pl": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pl/file.json", - "pt": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt/file.json", - "ru": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/ru/file.json", - "sv": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sv/file.json", - "uk": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uk/file.json", - "zh#Hans": "https://delivery.localazy.com/_a6657523900524156441ad8bd4f1/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/zh-Hans/file.json" + "cs": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/cs/file.json", + "da": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/da/file.json", + "de": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/de/file.json", + "en": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/en/file.json", + "et": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/et/file.json", + "fi": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fi/file.json", + "fr": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fr/file.json", + "hu": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/hu/file.json", + "nb_NO": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nb-NO/file.json", + "nl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nl/file.json", + "pl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pl/file.json", + "pt": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt/file.json", + "ru": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/ru/file.json", + "sv": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sv/file.json", + "uk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uk/file.json", + "zh#Hans": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/zh-Hans/file.json" } } ] From f92d3eb7fff72dc6d6d0a9fece93a3904ce4459f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 3 Feb 2026 22:15:50 +0000 Subject: [PATCH 009/104] 1.11.0-rc.0 --- Cargo.lock | 56 +++++++++++++++++++++++++------------------------- Cargo.toml | 60 +++++++++++++++++++++++++++--------------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bc2a6d1d5..9d54d9e89 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3097,7 +3097,7 @@ dependencies = [ [[package]] name = "mas-axum-utils" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "anyhow", "axum", @@ -3131,7 +3131,7 @@ dependencies = [ [[package]] name = "mas-cli" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "anyhow", "axum", @@ -3206,7 +3206,7 @@ dependencies = [ [[package]] name = "mas-config" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "anyhow", "camino", @@ -3237,7 +3237,7 @@ dependencies = [ [[package]] name = "mas-context" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "console", "opentelemetry", @@ -3253,7 +3253,7 @@ dependencies = [ [[package]] name = "mas-data-model" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "base64ct", "chrono", @@ -3276,7 +3276,7 @@ dependencies = [ [[package]] name = "mas-email" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "async-trait", "lettre", @@ -3287,7 +3287,7 @@ dependencies = [ [[package]] name = "mas-handlers" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "aide", "anyhow", @@ -3367,7 +3367,7 @@ dependencies = [ [[package]] name = "mas-http" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "futures-util", "headers", @@ -3388,7 +3388,7 @@ dependencies = [ [[package]] name = "mas-i18n" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "camino", "icu_calendar", @@ -3410,7 +3410,7 @@ dependencies = [ [[package]] name = "mas-i18n-scan" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "camino", "clap", @@ -3424,7 +3424,7 @@ dependencies = [ [[package]] name = "mas-iana" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "schemars 0.9.0", "serde", @@ -3432,7 +3432,7 @@ dependencies = [ [[package]] name = "mas-iana-codegen" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "anyhow", "async-trait", @@ -3449,7 +3449,7 @@ dependencies = [ [[package]] name = "mas-jose" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "base64ct", "chrono", @@ -3479,7 +3479,7 @@ dependencies = [ [[package]] name = "mas-keystore" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "aead", "base64ct", @@ -3507,7 +3507,7 @@ dependencies = [ [[package]] name = "mas-listener" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "anyhow", "bytes", @@ -3531,7 +3531,7 @@ dependencies = [ [[package]] name = "mas-matrix" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "anyhow", "async-trait", @@ -3541,7 +3541,7 @@ dependencies = [ [[package]] name = "mas-matrix-synapse" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "anyhow", "async-trait", @@ -3558,7 +3558,7 @@ dependencies = [ [[package]] name = "mas-oidc-client" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "assert_matches", "async-trait", @@ -3594,7 +3594,7 @@ dependencies = [ [[package]] name = "mas-policy" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "anyhow", "arc-swap", @@ -3611,7 +3611,7 @@ dependencies = [ [[package]] name = "mas-router" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "axum", "serde", @@ -3622,7 +3622,7 @@ dependencies = [ [[package]] name = "mas-spa" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "camino", "serde", @@ -3631,7 +3631,7 @@ dependencies = [ [[package]] name = "mas-storage" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "async-trait", "chrono", @@ -3653,7 +3653,7 @@ dependencies = [ [[package]] name = "mas-storage-pg" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "async-trait", "chrono", @@ -3683,7 +3683,7 @@ dependencies = [ [[package]] name = "mas-tasks" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "anyhow", "async-trait", @@ -3715,7 +3715,7 @@ dependencies = [ [[package]] name = "mas-templates" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "anyhow", "arc-swap", @@ -3747,7 +3747,7 @@ dependencies = [ [[package]] name = "mas-tower" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "http", "opentelemetry", @@ -4016,7 +4016,7 @@ dependencies = [ [[package]] name = "oauth2-types" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "assert_matches", "base64ct", @@ -6120,7 +6120,7 @@ dependencies = [ [[package]] name = "syn2mas" -version = "1.10.0" +version = "1.11.0-rc.0" dependencies = [ "anyhow", "arc-swap", diff --git a/Cargo.toml b/Cargo.toml index 274b9510b..0f98906bc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ members = ["crates/*"] resolver = "2" # Updated in the CI with a `sed` command -package.version = "1.10.0" +package.version = "1.11.0-rc.0" package.license = "AGPL-3.0-only OR LicenseRef-Element-Commercial" package.authors = ["Element Backend Team"] package.edition = "2024" @@ -34,35 +34,35 @@ broken_intra_doc_links = "deny" [workspace.dependencies] # Workspace crates -mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.10.0" } -mas-cli = { path = "./crates/cli/", version = "=1.10.0" } -mas-config = { path = "./crates/config/", version = "=1.10.0" } -mas-context = { path = "./crates/context/", version = "=1.10.0" } -mas-data-model = { path = "./crates/data-model/", version = "=1.10.0" } -mas-email = { path = "./crates/email/", version = "=1.10.0" } -mas-graphql = { path = "./crates/graphql/", version = "=1.10.0" } -mas-handlers = { path = "./crates/handlers/", version = "=1.10.0" } -mas-http = { path = "./crates/http/", version = "=1.10.0" } -mas-i18n = { path = "./crates/i18n/", version = "=1.10.0" } -mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.10.0" } -mas-iana = { path = "./crates/iana/", version = "=1.10.0" } -mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.10.0" } -mas-jose = { path = "./crates/jose/", version = "=1.10.0" } -mas-keystore = { path = "./crates/keystore/", version = "=1.10.0" } -mas-listener = { path = "./crates/listener/", version = "=1.10.0" } -mas-matrix = { path = "./crates/matrix/", version = "=1.10.0" } -mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.10.0" } -mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.10.0" } -mas-policy = { path = "./crates/policy/", version = "=1.10.0" } -mas-router = { path = "./crates/router/", version = "=1.10.0" } -mas-spa = { path = "./crates/spa/", version = "=1.10.0" } -mas-storage = { path = "./crates/storage/", version = "=1.10.0" } -mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.10.0" } -mas-tasks = { path = "./crates/tasks/", version = "=1.10.0" } -mas-templates = { path = "./crates/templates/", version = "=1.10.0" } -mas-tower = { path = "./crates/tower/", version = "=1.10.0" } -oauth2-types = { path = "./crates/oauth2-types/", version = "=1.10.0" } -syn2mas = { path = "./crates/syn2mas", version = "=1.10.0" } +mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.11.0-rc.0" } +mas-cli = { path = "./crates/cli/", version = "=1.11.0-rc.0" } +mas-config = { path = "./crates/config/", version = "=1.11.0-rc.0" } +mas-context = { path = "./crates/context/", version = "=1.11.0-rc.0" } +mas-data-model = { path = "./crates/data-model/", version = "=1.11.0-rc.0" } +mas-email = { path = "./crates/email/", version = "=1.11.0-rc.0" } +mas-graphql = { path = "./crates/graphql/", version = "=1.11.0-rc.0" } +mas-handlers = { path = "./crates/handlers/", version = "=1.11.0-rc.0" } +mas-http = { path = "./crates/http/", version = "=1.11.0-rc.0" } +mas-i18n = { path = "./crates/i18n/", version = "=1.11.0-rc.0" } +mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.11.0-rc.0" } +mas-iana = { path = "./crates/iana/", version = "=1.11.0-rc.0" } +mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.11.0-rc.0" } +mas-jose = { path = "./crates/jose/", version = "=1.11.0-rc.0" } +mas-keystore = { path = "./crates/keystore/", version = "=1.11.0-rc.0" } +mas-listener = { path = "./crates/listener/", version = "=1.11.0-rc.0" } +mas-matrix = { path = "./crates/matrix/", version = "=1.11.0-rc.0" } +mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.11.0-rc.0" } +mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.11.0-rc.0" } +mas-policy = { path = "./crates/policy/", version = "=1.11.0-rc.0" } +mas-router = { path = "./crates/router/", version = "=1.11.0-rc.0" } +mas-spa = { path = "./crates/spa/", version = "=1.11.0-rc.0" } +mas-storage = { path = "./crates/storage/", version = "=1.11.0-rc.0" } +mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.11.0-rc.0" } +mas-tasks = { path = "./crates/tasks/", version = "=1.11.0-rc.0" } +mas-templates = { path = "./crates/templates/", version = "=1.11.0-rc.0" } +mas-tower = { path = "./crates/tower/", version = "=1.11.0-rc.0" } +oauth2-types = { path = "./crates/oauth2-types/", version = "=1.11.0-rc.0" } +syn2mas = { path = "./crates/syn2mas", version = "=1.11.0-rc.0" } # OpenAPI schema generation and validation [workspace.dependencies.aide] From d3d6c3dcd90eb88d39ee0c0d72d661fba0304252 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Fri, 30 Jan 2026 06:28:05 +0100 Subject: [PATCH 010/104] Split the cleanup jobs into multiple files --- crates/tasks/src/cleanup/misc.rs | 88 +++ crates/tasks/src/cleanup/mod.rs | 24 + crates/tasks/src/cleanup/oauth.rs | 216 +++++++ crates/tasks/src/cleanup/sessions.rs | 290 +++++++++ crates/tasks/src/cleanup/tokens.rs | 214 +++++++ crates/tasks/src/cleanup/user.rs | 181 ++++++ crates/tasks/src/database.rs | 916 --------------------------- crates/tasks/src/lib.rs | 125 ++-- docs/development/cleanup-jobs.md | 18 +- 9 files changed, 1093 insertions(+), 979 deletions(-) create mode 100644 crates/tasks/src/cleanup/misc.rs create mode 100644 crates/tasks/src/cleanup/mod.rs create mode 100644 crates/tasks/src/cleanup/oauth.rs create mode 100644 crates/tasks/src/cleanup/sessions.rs create mode 100644 crates/tasks/src/cleanup/tokens.rs create mode 100644 crates/tasks/src/cleanup/user.rs delete mode 100644 crates/tasks/src/database.rs diff --git a/crates/tasks/src/cleanup/misc.rs b/crates/tasks/src/cleanup/misc.rs new file mode 100644 index 000000000..52fd62e5c --- /dev/null +++ b/crates/tasks/src/cleanup/misc.rs @@ -0,0 +1,88 @@ +// Copyright 2026 Element Creations Ltd. +// +// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +// Please see LICENSE files in the repository root for full details. + +//! Miscellaneous cleanup tasks + +use std::time::Duration; + +use async_trait::async_trait; +use mas_storage::queue::{CleanupQueueJobsJob, PruneStalePolicyDataJob}; +use tracing::{debug, info}; +use ulid::Ulid; + +use super::BATCH_SIZE; +use crate::{ + State, + new_queue::{JobContext, JobError, RunnableJob}, +}; + +#[async_trait] +impl RunnableJob for CleanupQueueJobsJob { + #[tracing::instrument(name = "job.cleanup_queue_jobs", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Remove completed and failed queue jobs after 30 days. + // Keep them for debugging purposes. + let until = state.clock.now() - chrono::Duration::days(30); + let until = Ulid::from_parts( + u64::try_from(until.timestamp_millis()).unwrap_or(u64::MIN), + u128::MAX, + ); + let mut total = 0; + + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + let (count, cursor) = repo + .queue_job() + .cleanup(since, until, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + since = cursor; + total += count; + + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no queue jobs to clean up"); + } else { + info!(count = total, "cleaned up queue jobs"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + Some(Duration::from_secs(10 * 60)) + } +} + +#[async_trait] +impl RunnableJob for PruneStalePolicyDataJob { + #[tracing::instrument(name = "job.prune_stale_policy_data", skip_all)] + async fn run(&self, state: &State, _context: JobContext) -> Result<(), JobError> { + let mut repo = state.repository().await.map_err(JobError::retry)?; + + // Keep the last 10 policy data + let count = repo + .policy_data() + .prune(10) + .await + .map_err(JobError::retry)?; + + repo.save().await.map_err(JobError::retry)?; + + if count == 0 { + debug!("no stale policy data to prune"); + } else { + info!(count, "pruned stale policy data"); + } + + Ok(()) + } +} diff --git a/crates/tasks/src/cleanup/mod.rs b/crates/tasks/src/cleanup/mod.rs new file mode 100644 index 000000000..02ace1ded --- /dev/null +++ b/crates/tasks/src/cleanup/mod.rs @@ -0,0 +1,24 @@ +// Copyright 2026 Element Creations Ltd. +// +// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +// Please see LICENSE files in the repository root for full details. + +//! Database cleanup tasks +//! +//! This module contains tasks for cleaning up old data from the database. +//! Tasks are grouped by domain: +//! +//! - [`tokens`]: OAuth token cleanup (access and refresh tokens) +//! - [`sessions`]: Session cleanup (compat, `OAuth2`, user sessions and their +//! IPs) +//! - [`oauth`]: OAuth grants and upstream OAuth cleanup +//! - [`user`]: User-related cleanup (registrations, recovery, email auth) +//! - [`misc`]: Miscellaneous cleanup (queue jobs, policy data) + +mod misc; +mod oauth; +mod sessions; +mod tokens; +mod user; + +pub(crate) const BATCH_SIZE: usize = 1000; diff --git a/crates/tasks/src/cleanup/oauth.rs b/crates/tasks/src/cleanup/oauth.rs new file mode 100644 index 000000000..2a201d4df --- /dev/null +++ b/crates/tasks/src/cleanup/oauth.rs @@ -0,0 +1,216 @@ +// Copyright 2026 Element Creations Ltd. +// +// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +// Please see LICENSE files in the repository root for full details. + +//! OAuth grants and upstream OAuth cleanup tasks + +use std::time::Duration; + +use async_trait::async_trait; +use mas_storage::queue::{ + CleanupOAuthAuthorizationGrantsJob, CleanupOAuthDeviceCodeGrantsJob, + CleanupUpstreamOAuthLinksJob, CleanupUpstreamOAuthSessionsJob, +}; +use tracing::{debug, info}; +use ulid::Ulid; + +use super::BATCH_SIZE; +use crate::{ + State, + new_queue::{JobContext, JobError, RunnableJob}, +}; + +#[async_trait] +impl RunnableJob for CleanupOAuthAuthorizationGrantsJob { + #[tracing::instrument(name = "job.cleanup_oauth_authorization_grants", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Remove authorization grants after 7 days. They are in practice only + // valid for a short time, but keeping them around helps investigate abuse + // patterns. + let until = state.clock.now() - chrono::Duration::days(7); + // We use the fact that ULIDs include the creation time in their first 48 bits + // as a cursor + let until = Ulid::from_parts( + u64::try_from(until.timestamp_millis()).unwrap_or(u64::MIN), + u128::MAX, + ); + let mut total = 0; + + // Run until we get cancelled. We don't schedule a retry if we get cancelled, as + // this is a scheduled job and it will end up being rescheduled later anyway. + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + // This returns the number of deleted grants, and the greatest ULID processed + let (count, cursor) = repo + .oauth2_authorization_grant() + .cleanup(since, until, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + since = cursor; + total += count; + + // Check how many we deleted. If we deleted exactly BATCH_SIZE, + // there might be more to delete + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no authorization grants to clean up"); + } else { + info!(count = total, "cleaned up authorization grants"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + // This job runs every hour, so having it running it for 10 minutes is fine + Some(Duration::from_secs(10 * 60)) + } +} + +#[async_trait] +impl RunnableJob for CleanupOAuthDeviceCodeGrantsJob { + #[tracing::instrument(name = "job.cleanup_oauth_device_code_grants", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Remove device code grants after 7 days. They are in practice only + // valid for a short time, but keeping them around helps investigate abuse + // patterns. + let until = state.clock.now() - chrono::Duration::days(7); + // We use the fact that ULIDs include the creation time in their first 48 bits + // as a cursor + let until = Ulid::from_parts( + u64::try_from(until.timestamp_millis()).unwrap_or(u64::MIN), + u128::MAX, + ); + let mut total = 0; + + // Run until we get cancelled. We don't schedule a retry if we get cancelled, as + // this is a scheduled job and it will end up being rescheduled later anyway. + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + // This returns the number of deleted grants, and the greatest ULID processed + let (count, cursor) = repo + .oauth2_device_code_grant() + .cleanup(since, until, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + since = cursor; + total += count; + + // Check how many we deleted. If we deleted exactly BATCH_SIZE, + // there might be more to delete + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no device code grants to clean up"); + } else { + info!(count = total, "cleaned up device code grants"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + // This job runs every hour, so having it running it for 10 minutes is fine + Some(Duration::from_secs(10 * 60)) + } +} + +#[async_trait] +impl RunnableJob for CleanupUpstreamOAuthSessionsJob { + #[tracing::instrument(name = "job.cleanup_upstream_oauth_sessions", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Remove pending upstream OAuth authorization sessions after 7 days. + let until = state.clock.now() - chrono::Duration::days(7); + let until = Ulid::from_parts( + u64::try_from(until.timestamp_millis()).unwrap_or(u64::MIN), + u128::MAX, + ); + let mut total = 0; + + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + let (count, cursor) = repo + .upstream_oauth_session() + .cleanup_orphaned(since, until, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + since = cursor; + total += count; + + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no pending upstream OAuth sessions to clean up"); + } else { + info!(count = total, "cleaned up pending upstream OAuth sessions"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + // This job runs every hour, so having it running it for 10 minutes is fine + Some(Duration::from_secs(10 * 60)) + } +} + +#[async_trait] +impl RunnableJob for CleanupUpstreamOAuthLinksJob { + #[tracing::instrument(name = "job.cleanup_upstream_oauth_links", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Remove orphaned upstream OAuth links after 7 days. + let until = state.clock.now() - chrono::Duration::days(7); + let until = Ulid::from_parts( + u64::try_from(until.timestamp_millis()).unwrap_or(u64::MIN), + u128::MAX, + ); + let mut total = 0; + + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + let (count, cursor) = repo + .upstream_oauth_link() + .cleanup_orphaned(since, until, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + since = cursor; + total += count; + + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no orphaned upstream OAuth links to clean up"); + } else { + info!(count = total, "cleaned up orphaned upstream OAuth links"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + // This job runs every hour, so having it running it for 10 minutes is fine + Some(Duration::from_secs(10 * 60)) + } +} diff --git a/crates/tasks/src/cleanup/sessions.rs b/crates/tasks/src/cleanup/sessions.rs new file mode 100644 index 000000000..0a11a6b99 --- /dev/null +++ b/crates/tasks/src/cleanup/sessions.rs @@ -0,0 +1,290 @@ +// Copyright 2026 Element Creations Ltd. +// +// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +// Please see LICENSE files in the repository root for full details. + +//! Session cleanup tasks + +use std::time::Duration; + +use async_trait::async_trait; +use mas_storage::queue::{ + CleanupFinishedCompatSessionsJob, CleanupFinishedOAuth2SessionsJob, + CleanupFinishedUserSessionsJob, CleanupInactiveCompatSessionIpsJob, + CleanupInactiveOAuth2SessionIpsJob, CleanupInactiveUserSessionIpsJob, +}; +use tracing::{debug, info}; + +use super::BATCH_SIZE; +use crate::{ + State, + new_queue::{JobContext, JobError, RunnableJob}, +}; + +#[async_trait] +impl RunnableJob for CleanupFinishedCompatSessionsJob { + #[tracing::instrument(name = "job.cleanup_finished_compat_sessions", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Cleanup compat sessions that were finished more than 30 days ago + let until = state.clock.now() - chrono::Duration::days(30); + let mut total = 0; + + // Run until we get cancelled. We don't schedule a retry if we get cancelled, as + // this is a scheduled job and it will end up being rescheduled later anyway. + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + + // This returns the number of deleted sessions, and the last finished_at + // timestamp + let (count, last_finished_at) = repo + .compat_session() + .cleanup_finished(since, until, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + + since = last_finished_at; + total += count; + + // Check how many we deleted. If we deleted exactly BATCH_SIZE, + // there might be more to delete + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no finished compat sessions to clean up"); + } else { + info!(count = total, "cleaned up finished compat sessions"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + // This job runs every hour, so having it running it for 10 minutes is fine + Some(Duration::from_secs(10 * 60)) + } +} + +#[async_trait] +impl RunnableJob for CleanupFinishedOAuth2SessionsJob { + #[tracing::instrument(name = "job.cleanup_finished_oauth2_sessions", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Cleanup OAuth2 sessions that were finished more than 30 days ago + let until = state.clock.now() - chrono::Duration::days(30); + let mut total = 0; + + // Run until we get cancelled. We don't schedule a retry if we get cancelled, as + // this is a scheduled job and it will end up being rescheduled later anyway. + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + + // This returns the number of deleted sessions, and the last finished_at + // timestamp + let (count, last_finished_at) = repo + .oauth2_session() + .cleanup_finished(since, until, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + + since = last_finished_at; + total += count; + + // Check how many we deleted. If we deleted exactly BATCH_SIZE, + // there might be more to delete + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no finished OAuth2 sessions to clean up"); + } else { + info!(count = total, "cleaned up finished OAuth2 sessions"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + // This job runs every hour, so having it running it for 10 minutes is fine + Some(Duration::from_secs(10 * 60)) + } +} + +#[async_trait] +impl RunnableJob for CleanupFinishedUserSessionsJob { + #[tracing::instrument(name = "job.cleanup_finished_user_sessions", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Cleanup user/browser sessions that were finished more than 30 days ago + let until = state.clock.now() - chrono::Duration::days(30); + let mut total = 0; + + // Run until we get cancelled. We don't schedule a retry if we get cancelled, as + // this is a scheduled job and it will end up being rescheduled later anyway. + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + + // This returns the number of deleted sessions, and the last finished_at + // timestamp. Only deletes sessions that have no child sessions + // (compat_sessions or oauth2_sessions). + let (count, last_finished_at) = repo + .browser_session() + .cleanup_finished(since, until, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + + since = last_finished_at; + total += count; + + // Check how many we deleted. If we deleted exactly BATCH_SIZE, + // there might be more to delete + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no finished user sessions to clean up"); + } else { + info!(count = total, "cleaned up finished user sessions"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + // This job runs every hour, so having it running it for 10 minutes is fine + Some(Duration::from_secs(10 * 60)) + } +} + +#[async_trait] +impl RunnableJob for CleanupInactiveOAuth2SessionIpsJob { + #[tracing::instrument(name = "job.cleanup_inactive_oauth2_session_ips", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Clear IPs from sessions inactive for 30+ days + let threshold = state.clock.now() - chrono::Duration::days(30); + let mut total = 0; + + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + + let (count, last_active_at) = repo + .oauth2_session() + .cleanup_inactive_ips(since, threshold, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + + since = last_active_at; + total += count; + + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no OAuth2 session IPs to clean up"); + } else { + info!(count = total, "cleaned up inactive OAuth2 session IPs"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + Some(Duration::from_secs(10 * 60)) + } +} + +#[async_trait] +impl RunnableJob for CleanupInactiveCompatSessionIpsJob { + #[tracing::instrument(name = "job.cleanup_inactive_compat_session_ips", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Clear IPs from sessions inactive for 30+ days + let threshold = state.clock.now() - chrono::Duration::days(30); + let mut total = 0; + + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + + let (count, last_active_at) = repo + .compat_session() + .cleanup_inactive_ips(since, threshold, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + + since = last_active_at; + total += count; + + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no compat session IPs to clean up"); + } else { + info!(count = total, "cleaned up inactive compat session IPs"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + Some(Duration::from_secs(10 * 60)) + } +} + +#[async_trait] +impl RunnableJob for CleanupInactiveUserSessionIpsJob { + #[tracing::instrument(name = "job.cleanup_inactive_user_session_ips", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Clear IPs from sessions inactive for 30+ days + let threshold = state.clock.now() - chrono::Duration::days(30); + let mut total = 0; + + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + + let (count, last_active_at) = repo + .browser_session() + .cleanup_inactive_ips(since, threshold, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + + since = last_active_at; + total += count; + + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no user session IPs to clean up"); + } else { + info!(count = total, "cleaned up inactive user session IPs"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + Some(Duration::from_secs(10 * 60)) + } +} diff --git a/crates/tasks/src/cleanup/tokens.rs b/crates/tasks/src/cleanup/tokens.rs new file mode 100644 index 000000000..dd91de2b9 --- /dev/null +++ b/crates/tasks/src/cleanup/tokens.rs @@ -0,0 +1,214 @@ +// Copyright 2026 Element Creations Ltd. +// +// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +// Please see LICENSE files in the repository root for full details. + +//! OAuth token cleanup tasks + +use std::time::Duration; + +use async_trait::async_trait; +use mas_storage::queue::{ + CleanupConsumedOAuthRefreshTokensJob, CleanupExpiredOAuthAccessTokensJob, + CleanupRevokedOAuthAccessTokensJob, CleanupRevokedOAuthRefreshTokensJob, +}; +use tracing::{debug, info}; + +use super::BATCH_SIZE; +use crate::{ + State, + new_queue::{JobContext, JobError, RunnableJob}, +}; + +#[async_trait] +impl RunnableJob for CleanupRevokedOAuthAccessTokensJob { + #[tracing::instrument(name = "job.cleanup_revoked_oauth_access_tokens", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Cleanup tokens that were revoked more than an hour ago + let until = state.clock.now() - chrono::Duration::hours(1); + let mut total = 0; + + // Run until we get cancelled. We don't schedule a retry if we get cancelled, as + // this is a scheduled job and it will end up being rescheduled later anyway. + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + + // This returns the number of deleted tokens, and the last revoked_at timestamp + let (count, last_revoked_at) = repo + .oauth2_access_token() + .cleanup_revoked(since, until, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + + since = last_revoked_at; + total += count; + + // Check how many we deleted. If we deleted exactly BATCH_SIZE, + // there might be more to delete + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no token to clean up"); + } else { + info!(count = total, "cleaned up revoked tokens"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + // This job runs every hour, so having it running it for 10 minutes is fine + Some(Duration::from_secs(10 * 60)) + } +} + +#[async_trait] +impl RunnableJob for CleanupExpiredOAuthAccessTokensJob { + #[tracing::instrument(name = "job.cleanup_expired_oauth_access_tokens", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Cleanup tokens that expired more than a month ago + // It is important to keep them around for a bit because of refresh + // token idempotency. When we see a refresh token twice, we allow + // reusing it *only* if both the next refresh token and the next access + // tokens were not used. By keeping expired access tokens around for a + // month, we cannot make the *correct* decision, we will assume that the + // token wasn't used. Refer to the token refresh logic for details. + let until = state.clock.now() - chrono::Duration::days(30); + let mut total = 0; + + // Run until we get cancelled. We don't schedule a retry if we get cancelled, as + // this is a scheduled job and it will end up being rescheduled later anyway. + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + + // This returns the number of deleted tokens, and the last expires_at timestamp + let (count, last_expires_at) = repo + .oauth2_access_token() + .cleanup_expired(since, until, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + + since = last_expires_at; + total += count; + + // Check how many we deleted. If we deleted exactly BATCH_SIZE, + // there might be more to delete + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no token to clean up"); + } else { + info!(count = total, "cleaned up expired tokens"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + Some(Duration::from_secs(60)) + } +} + +#[async_trait] +impl RunnableJob for CleanupRevokedOAuthRefreshTokensJob { + #[tracing::instrument(name = "job.cleanup_revoked_oauth_refresh_tokens", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Cleanup tokens that were revoked more than an hour ago + let until = state.clock.now() - chrono::Duration::hours(1); + let mut total = 0; + + // Run until we get cancelled. We don't schedule a retry if we get cancelled, as + // this is a scheduled job and it will end up being rescheduled later anyway. + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + + // This returns the number of deleted tokens, and the last revoked_at timestamp + let (count, last_revoked_at) = repo + .oauth2_refresh_token() + .cleanup_revoked(since, until, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + + since = last_revoked_at; + total += count; + + // Check how many we deleted. If we deleted exactly BATCH_SIZE, + // there might be more to delete + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no token to clean up"); + } else { + info!(count = total, "cleaned up revoked tokens"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + // This job runs every hour, so having it running it for 10 minutes is fine + Some(Duration::from_secs(10 * 60)) + } +} + +#[async_trait] +impl RunnableJob for CleanupConsumedOAuthRefreshTokensJob { + #[tracing::instrument(name = "job.cleanup_consumed_oauth_refresh_tokens", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Cleanup tokens that were consumed more than an hour ago + let until = state.clock.now() - chrono::Duration::hours(1); + let mut total = 0; + + // Run until we get cancelled. We don't schedule a retry if we get cancelled, as + // this is a scheduled job and it will end up being rescheduled later anyway. + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + + // This returns the number of deleted tokens, and the last consumed_at timestamp + let (count, last_consumed_at) = repo + .oauth2_refresh_token() + .cleanup_consumed(since, until, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + + since = last_consumed_at; + total += count; + + // Check how many we deleted. If we deleted exactly BATCH_SIZE, + // there might be more to delete + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no token to clean up"); + } else { + info!(count = total, "cleaned up consumed tokens"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + // This job runs every hour, so having it running it for 10 minutes is fine + Some(Duration::from_secs(10 * 60)) + } +} diff --git a/crates/tasks/src/cleanup/user.rs b/crates/tasks/src/cleanup/user.rs new file mode 100644 index 000000000..d682c1b51 --- /dev/null +++ b/crates/tasks/src/cleanup/user.rs @@ -0,0 +1,181 @@ +// Copyright 2026 Element Creations Ltd. +// +// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +// Please see LICENSE files in the repository root for full details. + +//! User-related cleanup tasks + +use std::time::Duration; + +use async_trait::async_trait; +use mas_storage::queue::{ + CleanupUserEmailAuthenticationsJob, CleanupUserRecoverySessionsJob, CleanupUserRegistrationsJob, +}; +use tracing::{debug, info}; +use ulid::Ulid; + +use super::BATCH_SIZE; +use crate::{ + State, + new_queue::{JobContext, JobError, RunnableJob}, +}; + +#[async_trait] +impl RunnableJob for CleanupUserRegistrationsJob { + #[tracing::instrument(name = "job.cleanup_user_registrations", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Remove user registrations after 30 days. They are in practice only + // valid for 1h, but keeping them around helps investigate abuse patterns. + let until = state.clock.now() - chrono::Duration::days(30); + // We use the fact that ULIDs include the creation time in their first 48 bits + // as a cursor + let until = Ulid::from_parts( + u64::try_from(until.timestamp_millis()).unwrap_or(u64::MIN), + u128::MAX, + ); + let mut total = 0; + + // Run until we get cancelled. We don't schedule a retry if we get cancelled, as + // this is a scheduled job and it will end up being rescheduled later anyway. + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + // This returns the number of deleted registrations, and the greatest ULID + // processed + let (count, cursor) = repo + .user_registration() + .cleanup(since, until, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + since = cursor; + total += count; + + // Check how many we deleted. If we deleted exactly BATCH_SIZE, + // there might be more to delete + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no user registrations to clean up"); + } else { + info!(count = total, "cleaned up user registrations"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + // This job runs every hour, so having it running it for 10 minutes is fine + Some(Duration::from_secs(10 * 60)) + } +} + +#[async_trait] +impl RunnableJob for CleanupUserRecoverySessionsJob { + #[tracing::instrument(name = "job.cleanup_user_recovery_sessions", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Remove recovery sessions after 7 days. They are in practice only + // valid for a short time (tickets expire after 10 minutes), but keeping + // them around helps investigate abuse patterns. + let until = state.clock.now() - chrono::Duration::days(7); + // We use the fact that ULIDs include the creation time in their first 48 bits + // as a cursor + let until = Ulid::from_parts( + u64::try_from(until.timestamp_millis()).unwrap_or(u64::MIN), + u128::MAX, + ); + let mut total = 0; + + // Run until we get cancelled. We don't schedule a retry if we get cancelled, as + // this is a scheduled job and it will end up being rescheduled later anyway. + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + // This returns the number of deleted sessions, and the greatest ULID processed + let (count, cursor) = repo + .user_recovery() + .cleanup(since, until, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + since = cursor; + total += count; + + // Check how many we deleted. If we deleted exactly BATCH_SIZE, + // there might be more to delete + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no user recovery sessions to clean up"); + } else { + info!(count = total, "cleaned up user recovery sessions"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + // This job runs every hour, so having it running it for 10 minutes is fine + Some(Duration::from_secs(10 * 60)) + } +} + +#[async_trait] +impl RunnableJob for CleanupUserEmailAuthenticationsJob { + #[tracing::instrument(name = "job.cleanup_user_email_authentications", skip_all)] + async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { + // Remove email authentications after 7 days. They are in practice only + // valid for a short time (codes expire after 10 minutes), but keeping + // them around helps investigate abuse patterns. + let until = state.clock.now() - chrono::Duration::days(7); + // We use the fact that ULIDs include the creation time in their first 48 bits + // as a cursor + let until = Ulid::from_parts( + u64::try_from(until.timestamp_millis()).unwrap_or(u64::MIN), + u128::MAX, + ); + let mut total = 0; + + // Run until we get cancelled. We don't schedule a retry if we get cancelled, as + // this is a scheduled job and it will end up being rescheduled later anyway. + let mut since = None; + while !context.cancellation_token.is_cancelled() { + let mut repo = state.repository().await.map_err(JobError::retry)?; + // This returns the number of deleted authentications, and the greatest ULID + // processed + let (count, cursor) = repo + .user_email() + .cleanup_authentications(since, until, BATCH_SIZE) + .await + .map_err(JobError::retry)?; + repo.save().await.map_err(JobError::retry)?; + since = cursor; + total += count; + + // Check how many we deleted. If we deleted exactly BATCH_SIZE, + // there might be more to delete + if count != BATCH_SIZE { + break; + } + } + + if total == 0 { + debug!("no user email authentications to clean up"); + } else { + info!(count = total, "cleaned up user email authentications"); + } + + Ok(()) + } + + fn timeout(&self) -> Option { + // This job runs every hour, so having it running it for 10 minutes is fine + Some(Duration::from_secs(10 * 60)) + } +} diff --git a/crates/tasks/src/database.rs b/crates/tasks/src/database.rs deleted file mode 100644 index c3fb46f78..000000000 --- a/crates/tasks/src/database.rs +++ /dev/null @@ -1,916 +0,0 @@ -// Copyright 2025, 2026 Element Creations Ltd. -// Copyright 2024, 2025 New Vector Ltd. -// Copyright 2023, 2024 The Matrix.org Foundation C.I.C. -// -// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial -// Please see LICENSE files in the repository root for full details. - -//! Database-related tasks - -use std::time::Duration; - -use async_trait::async_trait; -use mas_storage::queue::{ - CleanupConsumedOAuthRefreshTokensJob, CleanupExpiredOAuthAccessTokensJob, - CleanupFinishedCompatSessionsJob, CleanupFinishedOAuth2SessionsJob, - CleanupFinishedUserSessionsJob, CleanupInactiveCompatSessionIpsJob, - CleanupInactiveOAuth2SessionIpsJob, CleanupInactiveUserSessionIpsJob, - CleanupOAuthAuthorizationGrantsJob, CleanupOAuthDeviceCodeGrantsJob, CleanupQueueJobsJob, - CleanupRevokedOAuthAccessTokensJob, CleanupRevokedOAuthRefreshTokensJob, - CleanupUpstreamOAuthLinksJob, CleanupUpstreamOAuthSessionsJob, - CleanupUserEmailAuthenticationsJob, CleanupUserRecoverySessionsJob, - CleanupUserRegistrationsJob, PruneStalePolicyDataJob, -}; -use tracing::{debug, info}; -use ulid::Ulid; - -use crate::{ - State, - new_queue::{JobContext, JobError, RunnableJob}, -}; - -const BATCH_SIZE: usize = 1000; - -#[async_trait] -impl RunnableJob for CleanupRevokedOAuthAccessTokensJob { - #[tracing::instrument(name = "job.cleanup_revoked_oauth_access_tokens", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Cleanup tokens that were revoked more than an hour ago - let until = state.clock.now() - chrono::Duration::hours(1); - let mut total = 0; - - // Run until we get cancelled. We don't schedule a retry if we get cancelled, as - // this is a scheduled job and it will end up being rescheduled later anyway. - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - - // This returns the number of deleted tokens, and the last revoked_at timestamp - let (count, last_revoked_at) = repo - .oauth2_access_token() - .cleanup_revoked(since, until, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - - since = last_revoked_at; - total += count; - - // Check how many we deleted. If we deleted exactly BATCH_SIZE, - // there might be more to delete - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no token to clean up"); - } else { - info!(count = total, "cleaned up revoked tokens"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - // This job runs every hour, so having it running it for 10 minutes is fine - Some(Duration::from_secs(10 * 60)) - } -} - -#[async_trait] -impl RunnableJob for CleanupExpiredOAuthAccessTokensJob { - #[tracing::instrument(name = "job.cleanup_expired_oauth_access_tokens", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Cleanup tokens that expired more than a month ago - // It is important to keep them around for a bit because of refresh - // token idempotency. When we see a refresh token twice, we allow - // reusing it *only* if both the next refresh token and the next access - // tokens were not used. By keeping expired access tokens around for a - // month, we cannot make the *correct* decision, we will assume that the - // token wasn't used. Refer to the token refresh logic for details. - let until = state.clock.now() - chrono::Duration::days(30); - let mut total = 0; - - // Run until we get cancelled. We don't schedule a retry if we get cancelled, as - // this is a scheduled job and it will end up being rescheduled later anyway. - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - - // This returns the number of deleted tokens, and the last expires_at timestamp - let (count, last_expires_at) = repo - .oauth2_access_token() - .cleanup_expired(since, until, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - - since = last_expires_at; - total += count; - - // Check how many we deleted. If we deleted exactly BATCH_SIZE, - // there might be more to delete - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no token to clean up"); - } else { - info!(count = total, "cleaned up expired tokens"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - Some(Duration::from_secs(60)) - } -} - -#[async_trait] -impl RunnableJob for CleanupRevokedOAuthRefreshTokensJob { - #[tracing::instrument(name = "job.cleanup_revoked_oauth_refresh_tokens", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Cleanup tokens that were revoked more than an hour ago - let until = state.clock.now() - chrono::Duration::hours(1); - let mut total = 0; - - // Run until we get cancelled. We don't schedule a retry if we get cancelled, as - // this is a scheduled job and it will end up being rescheduled later anyway. - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - - // This returns the number of deleted tokens, and the last revoked_at timestamp - let (count, last_revoked_at) = repo - .oauth2_refresh_token() - .cleanup_revoked(since, until, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - - since = last_revoked_at; - total += count; - - // Check how many we deleted. If we deleted exactly BATCH_SIZE, - // there might be more to delete - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no token to clean up"); - } else { - info!(count = total, "cleaned up revoked tokens"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - // This job runs every hour, so having it running it for 10 minutes is fine - Some(Duration::from_secs(10 * 60)) - } -} - -#[async_trait] -impl RunnableJob for CleanupConsumedOAuthRefreshTokensJob { - #[tracing::instrument(name = "job.cleanup_consumed_oauth_refresh_tokens", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Cleanup tokens that were consumed more than an hour ago - let until = state.clock.now() - chrono::Duration::hours(1); - let mut total = 0; - - // Run until we get cancelled. We don't schedule a retry if we get cancelled, as - // this is a scheduled job and it will end up being rescheduled later anyway. - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - - // This returns the number of deleted tokens, and the last consumed_at timestamp - let (count, last_consumed_at) = repo - .oauth2_refresh_token() - .cleanup_consumed(since, until, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - - since = last_consumed_at; - total += count; - - // Check how many we deleted. If we deleted exactly BATCH_SIZE, - // there might be more to delete - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no token to clean up"); - } else { - info!(count = total, "cleaned up consumed tokens"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - // This job runs every hour, so having it running it for 10 minutes is fine - Some(Duration::from_secs(10 * 60)) - } -} - -#[async_trait] -impl RunnableJob for CleanupUserRecoverySessionsJob { - #[tracing::instrument(name = "job.cleanup_user_recovery_sessions", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Remove recovery sessions after 7 days. They are in practice only - // valid for a short time (tickets expire after 10 minutes), but keeping - // them around helps investigate abuse patterns. - let until = state.clock.now() - chrono::Duration::days(7); - // We use the fact that ULIDs include the creation time in their first 48 bits - // as a cursor - let until = Ulid::from_parts( - u64::try_from(until.timestamp_millis()).unwrap_or(u64::MIN), - u128::MAX, - ); - let mut total = 0; - - // Run until we get cancelled. We don't schedule a retry if we get cancelled, as - // this is a scheduled job and it will end up being rescheduled later anyway. - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - // This returns the number of deleted sessions, and the greatest ULID processed - let (count, cursor) = repo - .user_recovery() - .cleanup(since, until, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - since = cursor; - total += count; - - // Check how many we deleted. If we deleted exactly BATCH_SIZE, - // there might be more to delete - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no user recovery sessions to clean up"); - } else { - info!(count = total, "cleaned up user recovery sessions"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - // This job runs every hour, so having it running it for 10 minutes is fine - Some(Duration::from_secs(10 * 60)) - } -} - -#[async_trait] -impl RunnableJob for CleanupUserEmailAuthenticationsJob { - #[tracing::instrument(name = "job.cleanup_user_email_authentications", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Remove email authentications after 7 days. They are in practice only - // valid for a short time (codes expire after 10 minutes), but keeping - // them around helps investigate abuse patterns. - let until = state.clock.now() - chrono::Duration::days(7); - // We use the fact that ULIDs include the creation time in their first 48 bits - // as a cursor - let until = Ulid::from_parts( - u64::try_from(until.timestamp_millis()).unwrap_or(u64::MIN), - u128::MAX, - ); - let mut total = 0; - - // Run until we get cancelled. We don't schedule a retry if we get cancelled, as - // this is a scheduled job and it will end up being rescheduled later anyway. - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - // This returns the number of deleted authentications, and the greatest ULID - // processed - let (count, cursor) = repo - .user_email() - .cleanup_authentications(since, until, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - since = cursor; - total += count; - - // Check how many we deleted. If we deleted exactly BATCH_SIZE, - // there might be more to delete - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no user email authentications to clean up"); - } else { - info!(count = total, "cleaned up user email authentications"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - // This job runs every hour, so having it running it for 10 minutes is fine - Some(Duration::from_secs(10 * 60)) - } -} - -#[async_trait] -impl RunnableJob for CleanupUpstreamOAuthSessionsJob { - #[tracing::instrument(name = "job.cleanup_upstream_oauth_sessions", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Remove pending upstream OAuth authorization sessions after 7 days. - let until = state.clock.now() - chrono::Duration::days(7); - let until = Ulid::from_parts( - u64::try_from(until.timestamp_millis()).unwrap_or(u64::MIN), - u128::MAX, - ); - let mut total = 0; - - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - let (count, cursor) = repo - .upstream_oauth_session() - .cleanup_orphaned(since, until, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - since = cursor; - total += count; - - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no pending upstream OAuth sessions to clean up"); - } else { - info!(count = total, "cleaned up pending upstream OAuth sessions"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - // This job runs every hour, so having it running it for 10 minutes is fine - Some(Duration::from_secs(10 * 60)) - } -} - -#[async_trait] -impl RunnableJob for CleanupUpstreamOAuthLinksJob { - #[tracing::instrument(name = "job.cleanup_upstream_oauth_links", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Remove orphaned upstream OAuth links after 7 days. - let until = state.clock.now() - chrono::Duration::days(7); - let until = Ulid::from_parts( - u64::try_from(until.timestamp_millis()).unwrap_or(u64::MIN), - u128::MAX, - ); - let mut total = 0; - - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - let (count, cursor) = repo - .upstream_oauth_link() - .cleanup_orphaned(since, until, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - since = cursor; - total += count; - - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no orphaned upstream OAuth links to clean up"); - } else { - info!(count = total, "cleaned up orphaned upstream OAuth links"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - // This job runs every hour, so having it running it for 10 minutes is fine - Some(Duration::from_secs(10 * 60)) - } -} - -#[async_trait] -impl RunnableJob for CleanupQueueJobsJob { - #[tracing::instrument(name = "job.cleanup_queue_jobs", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Remove completed and failed queue jobs after 30 days. - // Keep them for debugging purposes. - let until = state.clock.now() - chrono::Duration::days(30); - let until = Ulid::from_parts( - u64::try_from(until.timestamp_millis()).unwrap_or(u64::MIN), - u128::MAX, - ); - let mut total = 0; - - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - let (count, cursor) = repo - .queue_job() - .cleanup(since, until, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - since = cursor; - total += count; - - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no queue jobs to clean up"); - } else { - info!(count = total, "cleaned up queue jobs"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - Some(Duration::from_secs(10 * 60)) - } -} - -#[async_trait] -impl RunnableJob for CleanupUserRegistrationsJob { - #[tracing::instrument(name = "job.cleanup_user_registrations", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Remove user registrations after 30 days. They are in practice only - // valid for 1h, but keeping them around helps investigate abuse patterns. - let until = state.clock.now() - chrono::Duration::days(30); - // We use the fact that ULIDs include the creation time in their first 48 bits - // as a cursor - let until = Ulid::from_parts( - u64::try_from(until.timestamp_millis()).unwrap_or(u64::MIN), - u128::MAX, - ); - let mut total = 0; - - // Run until we get cancelled. We don't schedule a retry if we get cancelled, as - // this is a scheduled job and it will end up being rescheduled later anyway. - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - // This returns the number of deleted registrations, and the greatest ULID - // processed - let (count, cursor) = repo - .user_registration() - .cleanup(since, until, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - since = cursor; - total += count; - - // Check how many we deleted. If we deleted exactly BATCH_SIZE, - // there might be more to delete - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no user registrations to clean up"); - } else { - info!(count = total, "cleaned up user registrations"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - // This job runs every hour, so having it running it for 10 minutes is fine - Some(Duration::from_secs(10 * 60)) - } -} - -#[async_trait] -impl RunnableJob for CleanupFinishedCompatSessionsJob { - #[tracing::instrument(name = "job.cleanup_finished_compat_sessions", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Cleanup compat sessions that were finished more than 30 days ago - let until = state.clock.now() - chrono::Duration::days(30); - let mut total = 0; - - // Run until we get cancelled. We don't schedule a retry if we get cancelled, as - // this is a scheduled job and it will end up being rescheduled later anyway. - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - - // This returns the number of deleted sessions, and the last finished_at - // timestamp - let (count, last_finished_at) = repo - .compat_session() - .cleanup_finished(since, until, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - - since = last_finished_at; - total += count; - - // Check how many we deleted. If we deleted exactly BATCH_SIZE, - // there might be more to delete - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no finished compat sessions to clean up"); - } else { - info!(count = total, "cleaned up finished compat sessions"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - // This job runs every hour, so having it running it for 10 minutes is fine - Some(Duration::from_secs(10 * 60)) - } -} - -#[async_trait] -impl RunnableJob for CleanupFinishedOAuth2SessionsJob { - #[tracing::instrument(name = "job.cleanup_finished_oauth2_sessions", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Cleanup OAuth2 sessions that were finished more than 30 days ago - let until = state.clock.now() - chrono::Duration::days(30); - let mut total = 0; - - // Run until we get cancelled. We don't schedule a retry if we get cancelled, as - // this is a scheduled job and it will end up being rescheduled later anyway. - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - - // This returns the number of deleted sessions, and the last finished_at - // timestamp - let (count, last_finished_at) = repo - .oauth2_session() - .cleanup_finished(since, until, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - - since = last_finished_at; - total += count; - - // Check how many we deleted. If we deleted exactly BATCH_SIZE, - // there might be more to delete - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no finished OAuth2 sessions to clean up"); - } else { - info!(count = total, "cleaned up finished OAuth2 sessions"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - // This job runs every hour, so having it running it for 10 minutes is fine - Some(Duration::from_secs(10 * 60)) - } -} - -#[async_trait] -impl RunnableJob for CleanupFinishedUserSessionsJob { - #[tracing::instrument(name = "job.cleanup_finished_user_sessions", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Cleanup user/browser sessions that were finished more than 30 days ago - let until = state.clock.now() - chrono::Duration::days(30); - let mut total = 0; - - // Run until we get cancelled. We don't schedule a retry if we get cancelled, as - // this is a scheduled job and it will end up being rescheduled later anyway. - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - - // This returns the number of deleted sessions, and the last finished_at - // timestamp. Only deletes sessions that have no child sessions - // (compat_sessions or oauth2_sessions). - let (count, last_finished_at) = repo - .browser_session() - .cleanup_finished(since, until, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - - since = last_finished_at; - total += count; - - // Check how many we deleted. If we deleted exactly BATCH_SIZE, - // there might be more to delete - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no finished user sessions to clean up"); - } else { - info!(count = total, "cleaned up finished user sessions"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - // This job runs every hour, so having it running it for 10 minutes is fine - Some(Duration::from_secs(10 * 60)) - } -} - -#[async_trait] -impl RunnableJob for CleanupOAuthAuthorizationGrantsJob { - #[tracing::instrument(name = "job.cleanup_oauth_authorization_grants", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Remove authorization grants after 7 days. They are in practice only - // valid for a short time, but keeping them around helps investigate abuse - // patterns. - let until = state.clock.now() - chrono::Duration::days(7); - // We use the fact that ULIDs include the creation time in their first 48 bits - // as a cursor - let until = Ulid::from_parts( - u64::try_from(until.timestamp_millis()).unwrap_or(u64::MIN), - u128::MAX, - ); - let mut total = 0; - - // Run until we get cancelled. We don't schedule a retry if we get cancelled, as - // this is a scheduled job and it will end up being rescheduled later anyway. - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - // This returns the number of deleted grants, and the greatest ULID processed - let (count, cursor) = repo - .oauth2_authorization_grant() - .cleanup(since, until, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - since = cursor; - total += count; - - // Check how many we deleted. If we deleted exactly BATCH_SIZE, - // there might be more to delete - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no authorization grants to clean up"); - } else { - info!(count = total, "cleaned up authorization grants"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - // This job runs every hour, so having it running it for 10 minutes is fine - Some(Duration::from_secs(10 * 60)) - } -} - -#[async_trait] -impl RunnableJob for CleanupOAuthDeviceCodeGrantsJob { - #[tracing::instrument(name = "job.cleanup_oauth_device_code_grants", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Remove device code grants after 7 days. They are in practice only - // valid for a short time, but keeping them around helps investigate abuse - // patterns. - let until = state.clock.now() - chrono::Duration::days(7); - // We use the fact that ULIDs include the creation time in their first 48 bits - // as a cursor - let until = Ulid::from_parts( - u64::try_from(until.timestamp_millis()).unwrap_or(u64::MIN), - u128::MAX, - ); - let mut total = 0; - - // Run until we get cancelled. We don't schedule a retry if we get cancelled, as - // this is a scheduled job and it will end up being rescheduled later anyway. - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - // This returns the number of deleted grants, and the greatest ULID processed - let (count, cursor) = repo - .oauth2_device_code_grant() - .cleanup(since, until, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - since = cursor; - total += count; - - // Check how many we deleted. If we deleted exactly BATCH_SIZE, - // there might be more to delete - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no device code grants to clean up"); - } else { - info!(count = total, "cleaned up device code grants"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - // This job runs every hour, so having it running it for 10 minutes is fine - Some(Duration::from_secs(10 * 60)) - } -} - -#[async_trait] -impl RunnableJob for PruneStalePolicyDataJob { - #[tracing::instrument(name = "job.prune_stale_policy_data", skip_all)] - async fn run(&self, state: &State, _context: JobContext) -> Result<(), JobError> { - let mut repo = state.repository().await.map_err(JobError::retry)?; - - // Keep the last 10 policy data - let count = repo - .policy_data() - .prune(10) - .await - .map_err(JobError::retry)?; - - repo.save().await.map_err(JobError::retry)?; - - if count == 0 { - debug!("no stale policy data to prune"); - } else { - info!(count, "pruned stale policy data"); - } - - Ok(()) - } -} - -#[async_trait] -impl RunnableJob for CleanupInactiveOAuth2SessionIpsJob { - #[tracing::instrument(name = "job.cleanup_inactive_oauth2_session_ips", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Clear IPs from sessions inactive for 30+ days - let threshold = state.clock.now() - chrono::Duration::days(30); - let mut total = 0; - - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - - let (count, last_active_at) = repo - .oauth2_session() - .cleanup_inactive_ips(since, threshold, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - - since = last_active_at; - total += count; - - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no OAuth2 session IPs to clean up"); - } else { - info!(count = total, "cleaned up inactive OAuth2 session IPs"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - Some(Duration::from_secs(10 * 60)) - } -} - -#[async_trait] -impl RunnableJob for CleanupInactiveCompatSessionIpsJob { - #[tracing::instrument(name = "job.cleanup_inactive_compat_session_ips", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Clear IPs from sessions inactive for 30+ days - let threshold = state.clock.now() - chrono::Duration::days(30); - let mut total = 0; - - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - - let (count, last_active_at) = repo - .compat_session() - .cleanup_inactive_ips(since, threshold, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - - since = last_active_at; - total += count; - - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no compat session IPs to clean up"); - } else { - info!(count = total, "cleaned up inactive compat session IPs"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - Some(Duration::from_secs(10 * 60)) - } -} - -#[async_trait] -impl RunnableJob for CleanupInactiveUserSessionIpsJob { - #[tracing::instrument(name = "job.cleanup_inactive_user_session_ips", skip_all)] - async fn run(&self, state: &State, context: JobContext) -> Result<(), JobError> { - // Clear IPs from sessions inactive for 30+ days - let threshold = state.clock.now() - chrono::Duration::days(30); - let mut total = 0; - - let mut since = None; - while !context.cancellation_token.is_cancelled() { - let mut repo = state.repository().await.map_err(JobError::retry)?; - - let (count, last_active_at) = repo - .browser_session() - .cleanup_inactive_ips(since, threshold, BATCH_SIZE) - .await - .map_err(JobError::retry)?; - repo.save().await.map_err(JobError::retry)?; - - since = last_active_at; - total += count; - - if count != BATCH_SIZE { - break; - } - } - - if total == 0 { - debug!("no user session IPs to clean up"); - } else { - info!(count = total, "cleaned up inactive user session IPs"); - } - - Ok(()) - } - - fn timeout(&self) -> Option { - Some(Duration::from_secs(10 * 60)) - } -} diff --git a/crates/tasks/src/lib.rs b/crates/tasks/src/lib.rs index ca339f96f..33748ae8e 100644 --- a/crates/tasks/src/lib.rs +++ b/crates/tasks/src/lib.rs @@ -21,7 +21,7 @@ use tokio_util::{sync::CancellationToken, task::TaskTracker}; pub use crate::new_queue::QueueWorker; -mod database; +mod cleanup; mod email; mod matrix; mod new_queue; @@ -162,125 +162,128 @@ pub async fn init( .register_handler::() .register_handler::() .register_deprecated_queue("cleanup-expired-tokens") + // Recurring jobs are spread across the hour at ~5 minute intervals + // to avoid clustering and distribute database load evenly. .add_schedule( "cleanup-revoked-oauth-access-tokens", - // Run this job every hour + // Run this job every hour at minute 0 "0 0 * * * *".parse()?, mas_storage::queue::CleanupRevokedOAuthAccessTokensJob, ) .add_schedule( "cleanup-revoked-oauth-refresh-tokens", - // Run this job every hour - "0 10 * * * *".parse()?, + // Run this job every hour at minute 5 + "0 5 * * * *".parse()?, mas_storage::queue::CleanupRevokedOAuthRefreshTokensJob, ) .add_schedule( "cleanup-consumed-oauth-refresh-tokens", - // Run this job every hour - "0 20 * * * *".parse()?, + // Run this job every hour at minute 5 (safe to parallelize with revoked) + "0 5 * * * *".parse()?, mas_storage::queue::CleanupConsumedOAuthRefreshTokensJob, ) - .add_schedule( - "cleanup-user-registrations", - // Run this job every hour - "0 30 * * * *".parse()?, - mas_storage::queue::CleanupUserRegistrationsJob, - ) .add_schedule( "cleanup-finished-compat-sessions", - // Run this job every hour - "0 40 * * * *".parse()?, + // Run this job every hour at minute 10 + "0 10 * * * *".parse()?, mas_storage::queue::CleanupFinishedCompatSessionsJob, ) .add_schedule( "cleanup-finished-oauth2-sessions", - // Run this job every hour - "0 42 * * * *".parse()?, + // Run this job every hour at minute 15 + "0 15 * * * *".parse()?, mas_storage::queue::CleanupFinishedOAuth2SessionsJob, ) .add_schedule( "cleanup-finished-user-sessions", - // Run this job every hour - "0 44 * * * *".parse()?, + // Run this job every hour at minute 20 + "0 20 * * * *".parse()?, mas_storage::queue::CleanupFinishedUserSessionsJob, ) + .add_schedule( + "cleanup-inactive-oauth2-session-ips", + // Run this job every hour at minute 25 + "0 25 * * * *".parse()?, + mas_storage::queue::CleanupInactiveOAuth2SessionIpsJob, + ) + .add_schedule( + "cleanup-inactive-compat-session-ips", + // Run this job every hour at minute 25 + "0 25 * * * *".parse()?, + mas_storage::queue::CleanupInactiveCompatSessionIpsJob, + ) + .add_schedule( + "cleanup-inactive-user-session-ips", + // Run this job every hour at minute 25 + "0 25 * * * *".parse()?, + mas_storage::queue::CleanupInactiveUserSessionIpsJob, + ) .add_schedule( "cleanup-oauth-authorization-grants", - // Run this job every hour - "0 50 * * * *".parse()?, + // Run this job every hour at minute 30 + "0 30 * * * *".parse()?, mas_storage::queue::CleanupOAuthAuthorizationGrantsJob, ) .add_schedule( "cleanup-oauth-device-code-grants", - // Run this job every hour - "0 55 * * * *".parse()?, + // Run this job every hour at minute 35 + "0 35 * * * *".parse()?, mas_storage::queue::CleanupOAuthDeviceCodeGrantsJob, ) - .add_schedule( - "cleanup-user-recovery-sessions", - // Run this job every hour - "0 56 * * * *".parse()?, - mas_storage::queue::CleanupUserRecoverySessionsJob, - ) - .add_schedule( - "cleanup-user-email-authentications", - // Run this job every hour - "0 57 * * * *".parse()?, - mas_storage::queue::CleanupUserEmailAuthenticationsJob, - ) .add_schedule( "cleanup-upstream-oauth-sessions", - // Run this job every hour - "0 58 * * * *".parse()?, + // Run this job every hour at minute 40 (independent, safe to parallelize) + "0 40 * * * *".parse()?, mas_storage::queue::CleanupUpstreamOAuthSessionsJob, ) .add_schedule( "cleanup-upstream-oauth-links", - // Run this job every hour - "0 59 * * * *".parse()?, + // Run this job every hour at minute 40 + "0 40 * * * *".parse()?, mas_storage::queue::CleanupUpstreamOAuthLinksJob, ) + // User cleanup jobs (minutes 45, 50) + .add_schedule( + "cleanup-user-registrations", + // Run this job every hour at minute 45 + "0 45 * * * *".parse()?, + mas_storage::queue::CleanupUserRegistrationsJob, + ) + .add_schedule( + "cleanup-user-recovery-sessions", + // Run this job every hour at minute 50 + "0 50 * * * *".parse()?, + mas_storage::queue::CleanupUserRecoverySessionsJob, + ) + .add_schedule( + "cleanup-user-email-authentications", + // Run this job every hour at minute 50 + "0 50 * * * *".parse()?, + mas_storage::queue::CleanupUserEmailAuthenticationsJob, + ) .add_schedule( "cleanup-queue-jobs", - // Run this job every hour - "0 45 * * * *".parse()?, + // Run this job every hour at minute 55 + "0 55 * * * *".parse()?, mas_storage::queue::CleanupQueueJobsJob, ) .add_schedule( "cleanup-expired-oauth-access-tokens", - // Run this job every 4 hours + // Run this job every 4 hours at minute 5 "0 5 */4 * * *".parse()?, mas_storage::queue::CleanupExpiredOAuthAccessTokensJob, ) .add_schedule( "expire-inactive-sessions", - // Run this job every 15 minutes + // Run this job every 15 minutes at second 30 "30 */15 * * * *".parse()?, mas_storage::queue::ExpireInactiveSessionsJob, ) .add_schedule( "prune-stale-policy-data", - // Run once a day + // Run once a day at 2:00 AM "0 0 2 * * *".parse()?, mas_storage::queue::PruneStalePolicyDataJob, - ) - .add_schedule( - "cleanup-inactive-oauth2-session-ips", - // Run this job every hour - "0 46 * * * *".parse()?, - mas_storage::queue::CleanupInactiveOAuth2SessionIpsJob, - ) - .add_schedule( - "cleanup-inactive-compat-session-ips", - // Run this job every hour - "0 47 * * * *".parse()?, - mas_storage::queue::CleanupInactiveCompatSessionIpsJob, - ) - .add_schedule( - "cleanup-inactive-user-session-ips", - // Run this job every hour - "0 48 * * * *".parse()?, - mas_storage::queue::CleanupInactiveUserSessionIpsJob, ); Ok(worker) diff --git a/docs/development/cleanup-jobs.md b/docs/development/cleanup-jobs.md index 639d0e7a3..f64cb7f21 100644 --- a/docs/development/cleanup-jobs.md +++ b/docs/development/cleanup-jobs.md @@ -11,9 +11,23 @@ Cleanup jobs are scheduled tasks that hard-delete old data from the database. Th 1. **Job struct** in `crates/storage/src/queue/tasks.rs` - Defines the job and queue name 2. **Storage trait** in `crates/storage/src/{domain}/` - Declares the cleanup method interface 3. **PostgreSQL implementation** in `crates/storage-pg/src/{domain}/` - Implements the actual cleanup logic -4. **Job runner** in `crates/tasks/src/database.rs` - Implements the `RunnableJob` trait with batching logic +4. **Job runner** in `crates/tasks/src/cleanup/` - Implements the `RunnableJob` trait with batching logic 5. **Registration** in `crates/tasks/src/lib.rs` - Registers the handler and schedules execution +### Module Structure + +The cleanup job implementations are organized into submodules by domain: + +``` +crates/tasks/src/cleanup/ +├── mod.rs # Re-exports, shared BATCH_SIZE constant +├── tokens.rs # OAuth token cleanup (access and refresh tokens) +├── sessions.rs # Session cleanup (compat, OAuth2, user sessions and their IPs) +├── oauth.rs # OAuth grants and upstream OAuth cleanup +├── user.rs # User-related cleanup (registrations, recovery, email auth) +└── misc.rs # Queue jobs, policy data cleanup +``` + ## All Cleanup Jobs | Job | Entity | Retention | Notes | @@ -183,7 +197,7 @@ The partial index (`WHERE timestamp_col IS NOT NULL`) makes queries more efficie ### 5. Implement RunnableJob -In `crates/tasks/src/database.rs`: +In the appropriate submodule under `crates/tasks/src/cleanup/` (e.g., `tokens.rs`, `sessions.rs`, `oauth.rs`, `user.rs`, or `misc.rs`): ```rust #[async_trait] From b8eeee0eca23e149bf050c2127090684c854c717 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Fri, 30 Jan 2026 13:58:42 +0100 Subject: [PATCH 011/104] Add a few tests for the cleanup jobs --- crates/handlers/src/cleanup_tests.rs | 774 +++++++++++++++++++++++++++ crates/handlers/src/lib.rs | 2 + 2 files changed, 776 insertions(+) create mode 100644 crates/handlers/src/cleanup_tests.rs diff --git a/crates/handlers/src/cleanup_tests.rs b/crates/handlers/src/cleanup_tests.rs new file mode 100644 index 000000000..7b1a74f53 --- /dev/null +++ b/crates/handlers/src/cleanup_tests.rs @@ -0,0 +1,774 @@ +// Copyright 2026 Element Creations Ltd. +// +// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +// Please see LICENSE files in the repository root for full details. + +//! Integration tests for session cleanup jobs. +//! +//! These tests verify that cleanup jobs correctly respect the session hierarchy +//! required for OIDC Backchannel Logout to function properly. +//! +//! Session hierarchy: +//! ```text +//! upstream_oauth_authorization_sessions (matched by sub/sid claims) +//! │ user_session_id +//! ▼ +//! user_sessions (browser sessions) +//! │ user_session_id FK +//! ┌────┴──────────────┐ +//! │ │ +//! ▼ ▼ +//! compat_sessions oauth2_sessions +//! ``` + +use chrono::Duration; +use hyper::{Request, StatusCode}; +use mas_data_model::{ + BrowserSession, Clock as _, CompatSession, Device, UpstreamOAuthAuthorizationSession, + UpstreamOAuthLink, UpstreamOAuthProvider, UpstreamOAuthProviderClaimsImports, + UpstreamOAuthProviderDiscoveryMode, UpstreamOAuthProviderOnBackchannelLogout, + UpstreamOAuthProviderPkceMode, UpstreamOAuthProviderTokenAuthMethod, User, +}; +use mas_iana::jose::JsonWebSignatureAlg; +use mas_jose::jwt::{JsonWebSignatureHeader, Jwt}; +use mas_storage::{ + RepositoryAccess, + queue::{DeactivateUserJob, QueueJobRepositoryExt}, + upstream_oauth2::UpstreamOAuthProviderParams, +}; +use oauth2_types::scope::{OPENID, Scope}; +use sqlx::PgPool; +use wiremock::{ + Mock, MockServer, ResponseTemplate, + matchers::{method, path}, +}; + +use crate::test_utils::{RequestBuilderExt, ResponseExt, TestState, setup}; + +/// Helper struct to hold all the entities created for testing the session +/// hierarchy. +struct TestSessionHierarchy { + user: User, + browser_session: BrowserSession, + compat_session: Option, + oauth2_session: Option, + upstream_session: Option, + #[expect(dead_code)] + upstream_link: Option, + provider: Option, + #[expect(dead_code)] + mock_server: MockServer, +} + +const UPSTREAM_OAUTH_ISSUER: &str = "https://idp.example.com"; +const UPSTREAM_OAUTH_CLIENT_ID: &str = "test-client"; +const UPSTREAM_OAUTH_SESSION_ID: &str = "upstream-oauth-session-id"; +const UPSTREAM_OAUTH_SUBJECT: &str = "upstream-oauth-sub"; + +/// Create the complete session hierarchy for testing. +/// +/// This creates: +/// - A user +/// - A browser session +/// - Optionally a compat session linked to the browser session +/// - Optionally an OAuth 2.0 session linked to the browser session +/// - Optionally an upstream OAuth session linked to the browser session +async fn create_session_hierarchy( + state: &TestState, + with_compat: bool, + with_oauth2: bool, + with_upstream: bool, +) -> TestSessionHierarchy { + let mut rng = state.rng(); + let mut repo = state.repository().await.unwrap(); + + // Start a mock server to answer to JWKS requests for the backchannel logout + // tests + let mock_server = MockServer::start().await; + + let jwks = state.key_store.public_jwks(); + + let mock_jwks = Mock::given(method("GET")) + .and(path("jwks.json")) + .respond_with(ResponseTemplate::new(200).set_body_json(jwks)); + mock_server.register(mock_jwks).await; + + // Create user + let user = repo + .user() + .add(&mut rng, &state.clock, "testuser".to_owned()) + .await + .unwrap(); + + // Create browser session + let browser_session = repo + .browser_session() + .add(&mut rng, &state.clock, &user, None) + .await + .unwrap(); + + // Create compat session if requested + let compat_session = if with_compat { + let device = Device::generate(&mut rng); + let session = repo + .compat_session() + .add( + &mut rng, + &state.clock, + &user, + device, + Some(&browser_session), + false, + None, + ) + .await + .unwrap(); + Some(session) + } else { + None + }; + + // Create OAuth2 session if requested + let oauth2_session = if with_oauth2 { + // First create an OAuth2 client + let client = repo + .oauth2_client() + .add( + &mut rng, + &state.clock, + vec!["https://example.com/callback".parse().unwrap()], + None, + None, + None, + vec![], + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + ) + .await + .unwrap(); + + let session = repo + .oauth2_session() + .add_from_browser_session( + &mut rng, + &state.clock, + &client, + &browser_session, + Scope::from_iter([OPENID]), + ) + .await + .unwrap(); + Some(session) + } else { + None + }; + + // Create upstream OAuth session if requested + let (provider, upstream_link, upstream_session) = if with_upstream { + let params = UpstreamOAuthProviderParams { + issuer: Some(UPSTREAM_OAUTH_ISSUER.to_owned()), + human_name: Some("Test IdP".to_owned()), + brand_name: None, + scope: Scope::from_iter([OPENID]), + token_endpoint_auth_method: UpstreamOAuthProviderTokenAuthMethod::ClientSecretBasic, + token_endpoint_signing_alg: None, + id_token_signed_response_alg: JsonWebSignatureAlg::Rs256, + fetch_userinfo: false, + userinfo_signed_response_alg: None, + client_id: UPSTREAM_OAUTH_CLIENT_ID.to_owned(), + encrypted_client_secret: None, + claims_imports: UpstreamOAuthProviderClaimsImports::default(), + authorization_endpoint_override: None, + token_endpoint_override: None, + userinfo_endpoint_override: None, + // Point to the mock server to have it use a JWKS we can use for signing + jwks_uri_override: Some(format!("{}/jwks.json", mock_server.uri()).parse().unwrap()), + discovery_mode: UpstreamOAuthProviderDiscoveryMode::Disabled, + pkce_mode: UpstreamOAuthProviderPkceMode::Auto, + response_mode: None, + additional_authorization_parameters: vec![], + forward_login_hint: false, + ui_order: 0, + on_backchannel_logout: UpstreamOAuthProviderOnBackchannelLogout::LogoutAll, + }; + + let provider = repo + .upstream_oauth_provider() + .add(&mut rng, &state.clock, params) + .await + .unwrap(); + + // Create a link + let link = repo + .upstream_oauth_link() + .add( + &mut rng, + &state.clock, + &provider, + UPSTREAM_OAUTH_SUBJECT.to_owned(), + Some("test@idp.example.com".to_owned()), + ) + .await + .unwrap(); + + // Associate link to user + repo.upstream_oauth_link() + .associate_to_user(&link, &user) + .await + .unwrap(); + + // Create an upstream session + let session = repo + .upstream_oauth_session() + .add( + &mut rng, + &state.clock, + &provider, + "state123".to_owned(), + Some("verifier123".to_owned()), + Some("nonce123".to_owned()), + ) + .await + .unwrap(); + + // Complete the session with the link and ID token claims (including sub and + // sid) + let id_token_claims = serde_json::json!({ + "sub": UPSTREAM_OAUTH_SUBJECT, + "sid": UPSTREAM_OAUTH_SESSION_ID, + }); + let session = repo + .upstream_oauth_session() + .complete_with_link( + &state.clock, + session, + &link, + Some("fake-id-token".to_owned()), + Some(id_token_claims), + None, + None, + ) + .await + .unwrap(); + + // Consume the session and link it to the browser session + let session = repo + .upstream_oauth_session() + .consume(&state.clock, session, &browser_session) + .await + .unwrap(); + + (Some(provider), Some(link), Some(session)) + } else { + (None, None, None) + }; + + repo.save().await.unwrap(); + + TestSessionHierarchy { + user, + browser_session, + compat_session, + oauth2_session, + upstream_session, + upstream_link, + provider, + mock_server, + } +} + +/// Test that sessions finished less than 30 days ago are NOT deleted. +#[sqlx::test(migrator = "mas_storage_pg::MIGRATOR")] +async fn test_cleanup_sessions_within_retention_preserved(pool: PgPool) { + setup(); + let state = TestState::from_pool(pool).await.unwrap(); + + // Create a full hierarchy with all session types + let hierarchy = create_session_hierarchy(&state, true, true, false).await; + + // Finish all sessions + let mut repo = state.repository().await.unwrap(); + let browser_session = repo + .browser_session() + .finish(&state.clock, hierarchy.browser_session) + .await + .unwrap(); + let compat_session = repo + .compat_session() + .finish(&state.clock, hierarchy.compat_session.unwrap()) + .await + .unwrap(); + let oauth2_session = repo + .oauth2_session() + .finish(&state.clock, hierarchy.oauth2_session.unwrap()) + .await + .unwrap(); + repo.save().await.unwrap(); + + // Wait one day and run the cleanup jobs a few times + state.clock.advance(Duration::try_days(1).unwrap()); + state.run_jobs_in_queue().await; + for _ in 0..5 { + state.clock.advance(Duration::try_hours(1).unwrap()); + state.run_jobs_in_queue().await; + } + + // Verify all sessions still exist + let mut repo = state.repository().await.unwrap(); + assert!( + repo.browser_session() + .lookup(browser_session.id) + .await + .unwrap() + .is_some(), + "Browser session should still exist" + ); + assert!( + repo.compat_session() + .lookup(compat_session.id) + .await + .unwrap() + .is_some(), + "Compat session should still exist" + ); + assert!( + repo.oauth2_session() + .lookup(oauth2_session.id) + .await + .unwrap() + .is_some(), + "OAuth2 session should still exist" + ); +} + +/// Test that deactivated users eventually get all their sessions cleaned up +#[sqlx::test(migrator = "mas_storage_pg::MIGRATOR")] +async fn test_cleanup_deactivated_users(pool: PgPool) { + setup(); + let state = TestState::from_pool(pool).await.unwrap(); + + let mut rng = state.rng(); + + // Create a hierarchy with all session types + let hierarchy = create_session_hierarchy(&state, true, true, true).await; + + // Deactivate the user + let mut repo = state.repository().await.unwrap(); + let user = repo + .user() + .lookup(hierarchy.user.id) + .await + .unwrap() + .unwrap(); + let user = repo.user().deactivate(&state.clock, user).await.unwrap(); + repo.queue_job() + .schedule_job(&mut rng, &state.clock, DeactivateUserJob::new(&user, false)) + .await + .unwrap(); + repo.save().await.unwrap(); + + state.run_jobs_in_queue().await; + + // Verify all sessions are finished + let mut repo = state.repository().await.unwrap(); + assert!( + repo.compat_session() + .lookup(hierarchy.compat_session.as_ref().unwrap().id) + .await + .unwrap() + .unwrap() + .is_finished(), + "Compat session should be finished" + ); + assert!( + repo.oauth2_session() + .lookup(hierarchy.oauth2_session.as_ref().unwrap().id) + .await + .unwrap() + .unwrap() + .is_finished(), + "OAuth2 session should be finished" + ); + assert!( + repo.browser_session() + .lookup(hierarchy.browser_session.id) + .await + .unwrap() + .unwrap() + .finished_at + .is_some(), + "Browser session should be there" + ); + assert!( + repo.upstream_oauth_session() + .lookup(hierarchy.upstream_session.as_ref().unwrap().id) + .await + .unwrap() + .is_some(), + "Upstream OAuth session should be there" + ); + + // Wait 31 days and run the cleanup jobs a few times + state.clock.advance(Duration::try_days(31).unwrap()); + state.run_jobs_in_queue().await; + for _ in 0..5 { + state.clock.advance(Duration::try_hours(1).unwrap()); + state.run_jobs_in_queue().await; + } + + // Verify all sessions are deleted + let mut repo = state.repository().await.unwrap(); + assert!( + repo.compat_session() + .lookup(hierarchy.compat_session.as_ref().unwrap().id) + .await + .unwrap() + .is_none(), + "Compat session should be deleted" + ); + assert!( + repo.oauth2_session() + .lookup(hierarchy.oauth2_session.as_ref().unwrap().id) + .await + .unwrap() + .is_none(), + "OAuth2 session should be deleted" + ); + assert!( + repo.browser_session() + .lookup(hierarchy.browser_session.id) + .await + .unwrap() + .is_none(), + "Browser session should be deleted" + ); + assert!( + repo.upstream_oauth_session() + .lookup(hierarchy.upstream_session.as_ref().unwrap().id) + .await + .unwrap() + .is_none(), + "Upstream OAuth session should be deleted" + ); +} + +/// Test that sessions finished more than 30 days ago ARE deleted. +#[sqlx::test(migrator = "mas_storage_pg::MIGRATOR")] +async fn test_cleanup_sessions_after_retention_deleted(pool: PgPool) { + setup(); + let state = TestState::from_pool(pool).await.unwrap(); + + // Create hierarchy with compat and oauth2 sessions + let hierarchy = create_session_hierarchy(&state, true, true, false).await; + + // Finish all sessions + let mut repo = state.repository().await.unwrap(); + let browser_session = repo + .browser_session() + .finish(&state.clock, hierarchy.browser_session) + .await + .unwrap(); + let compat_session = repo + .compat_session() + .finish(&state.clock, hierarchy.compat_session.unwrap()) + .await + .unwrap(); + let oauth2_session = repo + .oauth2_session() + .finish(&state.clock, hierarchy.oauth2_session.unwrap()) + .await + .unwrap(); + repo.save().await.unwrap(); + + // Wait 31 days and run the cleanup jobs a few times + state.clock.advance(Duration::try_days(31).unwrap()); + state.run_jobs_in_queue().await; + for _ in 0..5 { + state.clock.advance(Duration::try_hours(1).unwrap()); + state.run_jobs_in_queue().await; + } + + // Verify all sessions are deleted + let mut repo = state.repository().await.unwrap(); + assert!( + repo.compat_session() + .lookup(compat_session.id) + .await + .unwrap() + .is_none(), + "Compat session should be deleted" + ); + assert!( + repo.oauth2_session() + .lookup(oauth2_session.id) + .await + .unwrap() + .is_none(), + "OAuth2 session should be deleted" + ); + // Browser session should also be deleted since children are gone + assert!( + repo.browser_session() + .lookup(browser_session.id) + .await + .unwrap() + .is_none(), + "Browser session should be deleted after children are gone" + ); +} + +/// Test that user sessions with remaining child sessions are NOT deleted. +#[sqlx::test(migrator = "mas_storage_pg::MIGRATOR")] +async fn test_cleanup_user_session_blocked_by_child_sessions(pool: PgPool) { + setup(); + let state = TestState::from_pool(pool).await.unwrap(); + + // Create hierarchy with compat session only + let hierarchy = create_session_hierarchy(&state, true, false, false).await; + + // Finish only the browser session (not the compat session) + let mut repo = state.repository().await.unwrap(); + let browser_session = repo + .browser_session() + .finish(&state.clock, hierarchy.browser_session) + .await + .unwrap(); + repo.save().await.unwrap(); + + let compat_session_id = hierarchy.compat_session.as_ref().unwrap().id; + + // Wait 31 days and run the cleanup jobs a few times + state.clock.advance(Duration::try_days(31).unwrap()); + state.run_jobs_in_queue().await; + for _ in 0..5 { + state.clock.advance(Duration::try_hours(1).unwrap()); + state.run_jobs_in_queue().await; + } + + // Verify browser session still exists because compat session is still active + let mut repo = state.repository().await.unwrap(); + assert!( + repo.browser_session() + .lookup(browser_session.id) + .await + .unwrap() + .is_some(), + "Browser session should NOT be deleted because it has an active child session" + ); + assert!( + repo.compat_session() + .lookup(compat_session_id) + .await + .unwrap() + .is_some(), + "Compat session should still exist (not finished)" + ); +} + +/// Test that backchannel logout can find sessions before cleanup. +#[sqlx::test(migrator = "mas_storage_pg::MIGRATOR")] +async fn test_backchannel_logout_works_before_cleanup(pool: PgPool) { + setup(); + let state = TestState::from_pool(pool).await.unwrap(); + + // Create hierarchy with upstream session + let hierarchy = create_session_hierarchy(&state, true, true, true).await; + + let provider = hierarchy.provider.as_ref().unwrap(); + + // The edge case we're trying to make works, is that if the browser session + // is finished for 30 days but *not* the child sessions, that browser + // session and the upstream sessions stay there so that backchannel logout + // still works + let mut repo = state.repository().await.unwrap(); + let browser_session = repo + .browser_session() + .lookup(hierarchy.browser_session.id) + .await + .unwrap() + .unwrap(); + repo.browser_session() + .finish(&state.clock, browser_session) + .await + .unwrap(); + repo.save().await.unwrap(); + + // Now wait 31 days and run the cleanup jobs a few times + state.clock.advance(Duration::try_days(31).unwrap()); + state.run_jobs_in_queue().await; + for _ in 0..5 { + state.clock.advance(Duration::try_hours(1).unwrap()); + state.run_jobs_in_queue().await; + } + + // Now let's craft a backchannel logout request + let ts = state.clock.now().timestamp(); + let payload = serde_json::json!({ + "iss": UPSTREAM_OAUTH_ISSUER, + "aud": UPSTREAM_OAUTH_CLIENT_ID, + "sub": UPSTREAM_OAUTH_SUBJECT, + "sid": UPSTREAM_OAUTH_SESSION_ID, + "jti": "iswearthisisrandom", + "iat": ts, + "exp": ts + 300, + "events": { + "http://schemas.openid.net/event/backchannel-logout": {} + } + }); + + let key = state + .key_store + .signing_key_for_algorithm(&JsonWebSignatureAlg::Rs256) + .unwrap(); + let signer = key + .params() + .signing_key_for_alg(&JsonWebSignatureAlg::Rs256) + .unwrap(); + let signed = Jwt::sign( + JsonWebSignatureHeader::new(JsonWebSignatureAlg::Rs256), + payload, + &signer, + ) + .unwrap(); + + let request = Request::post(format!("/upstream/backchannel-logout/{}", provider.id)).form( + serde_json::json!({ + "logout_token": signed.as_str(), + }), + ); + + let response = state.request(request).await; + response.assert_status(StatusCode::OK); + + // The session should still exist, but are finished + let mut repo = state.repository().await.unwrap(); + assert!( + !repo + .browser_session() + .lookup(hierarchy.browser_session.id) + .await + .unwrap() + .unwrap() + .active(), + "Inactive browser session should not be cleaned up" + ); + assert!( + repo.compat_session() + .lookup(hierarchy.compat_session.as_ref().unwrap().id) + .await + .unwrap() + .unwrap() + .is_finished(), + "Active compat session should not be cleaned up" + ); + assert!( + repo.oauth2_session() + .lookup(hierarchy.oauth2_session.as_ref().unwrap().id) + .await + .unwrap() + .unwrap() + .is_finished(), + "Active OAuth2 session should not be cleaned up" + ); + + // Wait again, then the sessions should be completely deleted + state.clock.advance(Duration::try_days(31).unwrap()); + state.run_jobs_in_queue().await; + for _ in 0..5 { + state.clock.advance(Duration::try_hours(1).unwrap()); + state.run_jobs_in_queue().await; + } + + let mut repo = state.repository().await.unwrap(); + assert!( + repo.browser_session() + .lookup(hierarchy.browser_session.id) + .await + .unwrap() + .is_none(), + "Browser session should be deleted" + ); + assert!( + repo.compat_session() + .lookup(hierarchy.compat_session.as_ref().unwrap().id) + .await + .unwrap() + .is_none(), + "Compat session should be deleted" + ); + assert!( + repo.oauth2_session() + .lookup(hierarchy.oauth2_session.as_ref().unwrap().id) + .await + .unwrap() + .is_none(), + "OAuth2 session should be deleted" + ); + assert!( + repo.upstream_oauth_session() + .lookup(hierarchy.upstream_session.as_ref().unwrap().id) + .await + .unwrap() + .is_none(), + "Upstream OAuth session should be deleted" + ); +} + +/// Test that active sessions are not cleaned up even after retention period. +#[sqlx::test(migrator = "mas_storage_pg::MIGRATOR")] +async fn test_active_sessions_not_cleaned_up(pool: PgPool) { + setup(); + let state = TestState::from_pool(pool).await.unwrap(); + + // Create hierarchy without finishing any sessions + let hierarchy = create_session_hierarchy(&state, true, true, false).await; + + let browser_session_id = hierarchy.browser_session.id; + let compat_session_id = hierarchy.compat_session.as_ref().unwrap().id; + let oauth2_session_id = hierarchy.oauth2_session.as_ref().unwrap().id; + + // Wait 31 days and run the cleanup jobs a few times + state.clock.advance(Duration::try_days(31).unwrap()); + state.run_jobs_in_queue().await; + for _ in 0..5 { + state.clock.advance(Duration::try_hours(1).unwrap()); + state.run_jobs_in_queue().await; + } + + // All sessions should still exist because they're active + let mut repo = state.repository().await.unwrap(); + assert!( + repo.browser_session() + .lookup(browser_session_id) + .await + .unwrap() + .is_some(), + "Active browser session should not be cleaned up" + ); + assert!( + repo.compat_session() + .lookup(compat_session_id) + .await + .unwrap() + .is_some(), + "Active compat session should not be cleaned up" + ); + assert!( + repo.oauth2_session() + .lookup(oauth2_session_id) + .await + .unwrap() + .is_some(), + "Active OAuth2 session should not be cleaned up" + ); +} diff --git a/crates/handlers/src/lib.rs b/crates/handlers/src/lib.rs index ebd223e4a..0cb450f53 100644 --- a/crates/handlers/src/lib.rs +++ b/crates/handlers/src/lib.rs @@ -62,6 +62,8 @@ mod views; mod activity_tracker; mod captcha; +#[cfg(test)] +mod cleanup_tests; mod preferred_language; mod rate_limit; mod session; From 04bc6cf5db425cd04396dbd467d48756af8aa117 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Feb 2026 13:54:23 +0000 Subject: [PATCH 012/104] build(deps-dev): bump @graphql-codegen/cli Bumps the graphql-codegen group in /frontend with 1 update: [@graphql-codegen/cli](https://github.com/dotansimha/graphql-code-generator/tree/HEAD/packages/graphql-codegen-cli). Updates `@graphql-codegen/cli` from 6.1.0 to 6.1.1 - [Release notes](https://github.com/dotansimha/graphql-code-generator/releases) - [Changelog](https://github.com/dotansimha/graphql-code-generator/blob/master/packages/graphql-codegen-cli/CHANGELOG.md) - [Commits](https://github.com/dotansimha/graphql-code-generator/commits/@graphql-codegen/cli@6.1.1/packages/graphql-codegen-cli) --- updated-dependencies: - dependency-name: "@graphql-codegen/cli" dependency-version: 6.1.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: graphql-codegen ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 8 ++++---- frontend/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 1fcfd0e1f..54a9ee449 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -33,7 +33,7 @@ "@browser-logos/chrome": "^2.0.0", "@browser-logos/firefox": "^3.0.10", "@browser-logos/safari": "^2.1.0", - "@graphql-codegen/cli": "^6.1.0", + "@graphql-codegen/cli": "^6.1.1", "@graphql-codegen/client-preset": "^5.2.2", "@graphql-codegen/typescript-msw": "^3.0.1", "@storybook/addon-docs": "^10.1.11", @@ -1845,9 +1845,9 @@ "license": "0BSD" }, "node_modules/@graphql-codegen/cli": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-6.1.0.tgz", - "integrity": "sha512-7w3Zq5IFONVOBcyOiP01Nv9WRxGS/TEaBCAb/ALYA3xHq95dqKCpoGnxt/Ut9R18jiS+aMgT0gc8Tr8sHy44jA==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-6.1.1.tgz", + "integrity": "sha512-Ni8UdZ6D/UTvLvDtPb6PzshI0lTqtLDnmv/2t1w2SYP92H0MMEdAzxB/ujDWwIXm2LzVPvvrGvzzCTMsyXa+mA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index b4a80273b..597a6e07b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -43,7 +43,7 @@ "@browser-logos/chrome": "^2.0.0", "@browser-logos/firefox": "^3.0.10", "@browser-logos/safari": "^2.1.0", - "@graphql-codegen/cli": "^6.1.0", + "@graphql-codegen/cli": "^6.1.1", "@graphql-codegen/client-preset": "^5.2.2", "@graphql-codegen/typescript-msw": "^3.0.1", "@storybook/addon-docs": "^10.1.11", From 0e3dc0396ffd69be818efc58fca465db3710c7c3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Feb 2026 13:54:39 +0000 Subject: [PATCH 013/104] build(deps-dev): bump the vitest group in /frontend with 2 updates Bumps the vitest group in /frontend with 2 updates: [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) and [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest). Updates `@vitest/coverage-v8` from 4.0.16 to 4.0.17 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.17/packages/coverage-v8) Updates `vitest` from 4.0.16 to 4.0.17 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.17/packages/vitest) --- updated-dependencies: - dependency-name: "@vitest/coverage-v8" dependency-version: 4.0.17 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vitest - dependency-name: vitest dependency-version: 4.0.17 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vitest ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 128 ++++++++++++++++--------------------- frontend/package.json | 2 +- 2 files changed, 57 insertions(+), 73 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 1fcfd0e1f..c2ab07f9e 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -49,7 +49,7 @@ "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", "@vitejs/plugin-react": "^5.1.2", - "@vitest/coverage-v8": "^4.0.16", + "@vitest/coverage-v8": "^4.0.18", "autoprefixer": "^10.4.23", "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", @@ -6109,18 +6109,17 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.16.tgz", - "integrity": "sha512-2rNdjEIsPRzsdu6/9Eq0AYAzYdpP6Bx9cje9tL3FE5XzXRQF1fNU9pe/1yE8fCrS0HD+fBtt6gLPh6LI57tX7A==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.18.tgz", + "integrity": "sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^1.0.2", - "@vitest/utils": "4.0.16", - "ast-v8-to-istanbul": "^0.3.8", + "@vitest/utils": "4.0.18", + "ast-v8-to-istanbul": "^0.3.10", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", - "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.2.0", "magicast": "^0.5.1", "obug": "^2.1.1", @@ -6131,8 +6130,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "4.0.16", - "vitest": "4.0.16" + "@vitest/browser": "4.0.18", + "vitest": "4.0.18" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -6233,9 +6232,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.16.tgz", - "integrity": "sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", + "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", "dev": true, "license": "MIT", "dependencies": { @@ -6246,13 +6245,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.16.tgz", - "integrity": "sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.18.tgz", + "integrity": "sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.0.16", + "@vitest/utils": "4.0.18", "pathe": "^2.0.3" }, "funding": { @@ -6260,13 +6259,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.16.tgz", - "integrity": "sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.18.tgz", + "integrity": "sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.16", + "@vitest/pretty-format": "4.0.18", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -6288,13 +6287,13 @@ } }, "node_modules/@vitest/utils": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.16.tgz", - "integrity": "sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", + "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.16", + "@vitest/pretty-format": "4.0.18", "tinyrainbow": "^3.0.3" }, "funding": { @@ -6562,15 +6561,15 @@ } }, "node_modules/ast-v8-to-istanbul": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.9.tgz", - "integrity": "sha512-dSC6tJeOJxbZrPzPbv5mMd6CMiQ1ugaVXXPRad2fXUSsy1kstFn9XQWemV9VW7Y7kpxgQ/4WMoZfwdH8XSU48w==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.11.tgz", + "integrity": "sha512-Qya9fkoofMjCBNVdWINMjB5KZvkYfaO9/anwkWnjxibpWUxo5iHl2sOdP7/uAqaRuUYuoo8rDwnbaaKVFxoUvw==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.31", "estree-walker": "^3.0.3", - "js-tokens": "^9.0.1" + "js-tokens": "^10.0.0" } }, "node_modules/ast-v8-to-istanbul/node_modules/estree-walker": { @@ -6584,9 +6583,9 @@ } }, "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", "dev": true, "license": "MIT" }, @@ -9679,21 +9678,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/istanbul-reports": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", @@ -13214,19 +13198,19 @@ } }, "node_modules/vitest": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.16.tgz", - "integrity": "sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.18.tgz", + "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.0.16", - "@vitest/mocker": "4.0.16", - "@vitest/pretty-format": "4.0.16", - "@vitest/runner": "4.0.16", - "@vitest/snapshot": "4.0.16", - "@vitest/spy": "4.0.16", - "@vitest/utils": "4.0.16", + "@vitest/expect": "4.0.18", + "@vitest/mocker": "4.0.18", + "@vitest/pretty-format": "4.0.18", + "@vitest/runner": "4.0.18", + "@vitest/snapshot": "4.0.18", + "@vitest/spy": "4.0.18", + "@vitest/utils": "4.0.18", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", @@ -13254,10 +13238,10 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.0.16", - "@vitest/browser-preview": "4.0.16", - "@vitest/browser-webdriverio": "4.0.16", - "@vitest/ui": "4.0.16", + "@vitest/browser-playwright": "4.0.18", + "@vitest/browser-preview": "4.0.18", + "@vitest/browser-webdriverio": "4.0.18", + "@vitest/ui": "4.0.18", "happy-dom": "*", "jsdom": "*" }, @@ -13292,16 +13276,16 @@ } }, "node_modules/vitest/node_modules/@vitest/expect": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.16.tgz", - "integrity": "sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz", + "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.0.16", - "@vitest/utils": "4.0.16", + "@vitest/spy": "4.0.18", + "@vitest/utils": "4.0.18", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" }, @@ -13310,13 +13294,13 @@ } }, "node_modules/vitest/node_modules/@vitest/mocker": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.16.tgz", - "integrity": "sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.18.tgz", + "integrity": "sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.0.16", + "@vitest/spy": "4.0.18", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, @@ -13337,9 +13321,9 @@ } }, "node_modules/vitest/node_modules/@vitest/spy": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.16.tgz", - "integrity": "sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", + "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", "dev": true, "license": "MIT", "funding": { diff --git a/frontend/package.json b/frontend/package.json index b4a80273b..cf57cbcdb 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -59,7 +59,7 @@ "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", "@vitejs/plugin-react": "^5.1.2", - "@vitest/coverage-v8": "^4.0.16", + "@vitest/coverage-v8": "^4.0.18", "autoprefixer": "^10.4.23", "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", From 046e7132b690a75dd7cf3f6ffdb0bae65cad7ecd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Feb 2026 15:52:00 +0000 Subject: [PATCH 014/104] build(deps-dev): bump msw from 2.12.4 to 2.12.7 in /frontend Bumps [msw](https://github.com/mswjs/msw) from 2.12.4 to 2.12.7. - [Release notes](https://github.com/mswjs/msw/releases) - [Changelog](https://github.com/mswjs/msw/blob/main/CHANGELOG.md) - [Commits](https://github.com/mswjs/msw/compare/v2.12.4...v2.12.7) --- updated-dependencies: - dependency-name: msw dependency-version: 2.12.7 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 24 ++++++++++++------------ frontend/package.json | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index f4a28eb86..9300adca9 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -56,7 +56,7 @@ "happy-dom": "^20.0.11", "i18next-cli": "^1.36.1", "knip": "^5.81.0", - "msw": "^2.12.4", + "msw": "^2.12.8", "msw-storybook-addon": "^2.0.6", "postcss": "^8.5.6", "postcss-import": "^16.1.1", @@ -3476,9 +3476,9 @@ } }, "node_modules/@mswjs/interceptors": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.40.0.tgz", - "integrity": "sha512-EFd6cVbHsgLa6wa4RljGj6Wk75qoHxUSyc5asLyyPSyuhIcdS2Q3Phw6ImS1q+CkALthJRShiYfKANcQMuMqsQ==", + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.41.0.tgz", + "integrity": "sha512-edAo9bW53BLYeSK+UPRr2Iz1Fj9DeGMjytvVM0HXRoo750ElWUgPsZPAOTQa12EUiwgDErH2PsFNTLvk1jBxjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10328,15 +10328,15 @@ "license": "MIT" }, "node_modules/msw": { - "version": "2.12.4", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.12.4.tgz", - "integrity": "sha512-rHNiVfTyKhzc0EjoXUBVGteNKBevdjOlVC6GlIRXpy+/3LHEIGRovnB5WPjcvmNODVQ1TNFnoa7wsGbd0V3epg==", + "version": "2.12.8", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.12.8.tgz", + "integrity": "sha512-KOriJUhjefCO+liF7Ie1KlSXcBAQEzuLhPZ4EKuEUSEmAR4YhuuzT9YuGxTipjqDrg6eWQ6oMoGVhvEnqukFGg==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { "@inquirer/confirm": "^5.0.0", - "@mswjs/interceptors": "^0.40.0", + "@mswjs/interceptors": "^0.41.0", "@open-draft/deferred-promise": "^2.2.0", "@types/statuses": "^2.0.6", "cookie": "^1.0.2", @@ -10346,7 +10346,7 @@ "outvariant": "^1.4.3", "path-to-regexp": "^6.3.0", "picocolors": "^1.1.1", - "rettime": "^0.7.0", + "rettime": "^0.10.1", "statuses": "^2.0.2", "strict-event-emitter": "^0.5.1", "tough-cookie": "^6.0.0", @@ -11709,9 +11709,9 @@ } }, "node_modules/rettime": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rettime/-/rettime-0.7.0.tgz", - "integrity": "sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/rettime/-/rettime-0.10.1.tgz", + "integrity": "sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw==", "dev": true, "license": "MIT" }, diff --git a/frontend/package.json b/frontend/package.json index 3575ff5b7..c458420f8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -66,7 +66,7 @@ "happy-dom": "^20.0.11", "i18next-cli": "^1.36.1", "knip": "^5.81.0", - "msw": "^2.12.4", + "msw": "^2.12.8", "msw-storybook-addon": "^2.0.6", "postcss": "^8.5.6", "postcss-import": "^16.1.1", From 30bb94735e324ffdb8811e7ad4ce3ab021741567 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Wed, 4 Feb 2026 16:58:53 +0100 Subject: [PATCH 015/104] Update msw --- .../.storybook/public/mockServiceWorker.js | 2 +- frontend/package-lock.json | 42 ++++++++++++++----- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/frontend/.storybook/public/mockServiceWorker.js b/frontend/.storybook/public/mockServiceWorker.js index 558540fa5..258b1b1e1 100644 --- a/frontend/.storybook/public/mockServiceWorker.js +++ b/frontend/.storybook/public/mockServiceWorker.js @@ -7,7 +7,7 @@ * - Please do NOT modify this file. */ -const PACKAGE_VERSION = '2.12.4' +const PACKAGE_VERSION = '2.12.8' const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82' const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') const activeClientIds = new Set() diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 9300adca9..2a8a91f41 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -147,6 +147,7 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -1807,6 +1808,7 @@ "resolved": "https://registry.npmjs.org/@fontsource/inconsolata/-/inconsolata-5.2.8.tgz", "integrity": "sha512-lIZW+WOZYpUH91g9r6rYYhfTmptF3YPPM54ZOs8IYVeeL4SeiAu4tfj7mdr8llYEq31DLYgi6JtGIJa192gB0Q==", "license": "OFL-1.1", + "peer": true, "funding": { "url": "https://github.com/sponsors/ayuhito" } @@ -1816,6 +1818,7 @@ "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.2.8.tgz", "integrity": "sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==", "license": "OFL-1.1", + "peer": true, "funding": { "url": "https://github.com/sponsors/ayuhito" } @@ -1850,6 +1853,7 @@ "integrity": "sha512-Ni8UdZ6D/UTvLvDtPb6PzshI0lTqtLDnmv/2t1w2SYP92H0MMEdAzxB/ujDWwIXm2LzVPvvrGvzzCTMsyXa+mA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/generator": "^7.18.13", "@babel/template": "^7.18.10", @@ -5485,6 +5489,7 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.16.tgz", "integrity": "sha512-bpMGOmV4OPmif7TNMteU/Ehf/hoC0Kf98PDc0F4BZkFrEapRMEqI/V6YS0lyzwSV6PQpY1y4xxArUIfBW5LVxQ==", "license": "MIT", + "peer": true, "dependencies": { "@tanstack/query-core": "5.90.16" }, @@ -5519,6 +5524,7 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.150.0.tgz", "integrity": "sha512-k/oycTCpBT2XoEk9dNd/nNYhF0X9fLSB10lT40+NVX1TjOtBq5whksk8MT6oRnSoQ8KWeb7La3G9kFaAeSULkA==", "license": "MIT", + "peer": true, "dependencies": { "@tanstack/history": "1.145.7", "@tanstack/react-store": "^0.8.0", @@ -5590,6 +5596,7 @@ "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.150.0.tgz", "integrity": "sha512-cAm44t/tUbfyzaDH+rE/WO4u3AgaZdpJp00xjQ4gNkC2O95ntVHq5fx+4fhtrkKpgdXoKldgk8OK66djiWpuGQ==", "license": "MIT", + "peer": true, "dependencies": { "@tanstack/history": "1.145.7", "@tanstack/store": "^0.8.0", @@ -5885,8 +5892,7 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -5978,6 +5984,7 @@ "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -5988,6 +5995,7 @@ "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -5998,6 +6006,7 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -6045,6 +6054,7 @@ "resolved": "https://registry.npmjs.org/@vector-im/compound-design-tokens/-/compound-design-tokens-6.4.3.tgz", "integrity": "sha512-Zyqag2QCAfpRipLHSX/LEXj6OGFgBpilMQvNdr3a0iXeGASfkM3HZGid077kMRp9lvyHiQfPIs1BdllENwDSNQ==", "license": "SEE LICENSE IN README.md", + "peer": true, "peerDependencies": { "@types/react": "*", "react": "^17 || ^18 || ^19.0.0" @@ -6772,6 +6782,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -7371,7 +7382,8 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "devOptional": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", @@ -7585,8 +7597,7 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/dot-case": { "version": "3.0.4", @@ -7687,6 +7698,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -8209,6 +8221,7 @@ "integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -8643,6 +8656,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.28.4" }, @@ -10127,7 +10141,6 @@ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -10334,6 +10347,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "dependencies": { "@inquirer/confirm": "^5.0.0", "@mswjs/interceptors": "^0.41.0", @@ -11062,6 +11076,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -11232,6 +11247,7 @@ "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -11269,7 +11285,6 @@ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -11285,7 +11300,6 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10" }, @@ -11345,6 +11359,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -11386,6 +11401,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -11425,8 +11441,7 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/react-refresh": { "version": "0.18.0", @@ -11777,6 +11792,7 @@ "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -11910,6 +11926,7 @@ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.4.2.tgz", "integrity": "sha512-N3HEHRCZYn3cQbsC4B5ldj9j+tHdf4JZoYPlcI4rRYu0Xy4qN8MQf1Z08EibzB0WpgRG5BGK08FTrmM66eSzKQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=10" } @@ -12140,6 +12157,7 @@ "integrity": "sha512-pKP5jXJYM4OjvNklGuHKO53wOCAwfx79KvZyOWHoi9zXUH5WVMFUe/ZfWyxXG/GTcj0maRgHGUjq/0I43r0dDQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@storybook/global": "^5.0.0", "@storybook/icons": "^2.0.0", @@ -12849,6 +12867,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13116,6 +13135,7 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -13203,6 +13223,7 @@ "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", @@ -13591,6 +13612,7 @@ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10.0.0" }, From 87b185343e2aeb95edbfb307197f6694cd6cfb7a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Feb 2026 16:13:27 +0000 Subject: [PATCH 016/104] build(deps-dev): bump the storybook group in /frontend with 3 updates Bumps the storybook group in /frontend with 3 updates: [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/docs), [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) and [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/core). Updates `@storybook/addon-docs` from 10.1.11 to 10.2.6 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.6/code/addons/docs) Updates `@storybook/react-vite` from 10.1.11 to 10.2.6 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.6/code/frameworks/react-vite) Updates `storybook` from 10.1.11 to 10.2.6 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.6/code/core) --- updated-dependencies: - dependency-name: "@storybook/addon-docs" dependency-version: 10.2.6 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: storybook - dependency-name: "@storybook/react-vite" dependency-version: 10.2.6 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: storybook - dependency-name: storybook dependency-version: 10.2.6 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: storybook ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 156 ++++++++++++------------------------- frontend/package.json | 4 +- 2 files changed, 50 insertions(+), 110 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2a8a91f41..fe0ba4db6 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -36,8 +36,8 @@ "@graphql-codegen/cli": "^6.1.1", "@graphql-codegen/client-preset": "^5.2.2", "@graphql-codegen/typescript-msw": "^3.0.1", - "@storybook/addon-docs": "^10.1.11", - "@storybook/react-vite": "^10.1.11", + "@storybook/addon-docs": "^10.2.6", + "@storybook/react-vite": "^10.2.6", "@tanstack/react-query-devtools": "^5.91.2", "@tanstack/react-router-devtools": "^1.150.0", "@tanstack/router-plugin": "^1.150.0", @@ -147,7 +147,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -1808,7 +1807,6 @@ "resolved": "https://registry.npmjs.org/@fontsource/inconsolata/-/inconsolata-5.2.8.tgz", "integrity": "sha512-lIZW+WOZYpUH91g9r6rYYhfTmptF3YPPM54ZOs8IYVeeL4SeiAu4tfj7mdr8llYEq31DLYgi6JtGIJa192gB0Q==", "license": "OFL-1.1", - "peer": true, "funding": { "url": "https://github.com/sponsors/ayuhito" } @@ -1818,7 +1816,6 @@ "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.2.8.tgz", "integrity": "sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==", "license": "OFL-1.1", - "peer": true, "funding": { "url": "https://github.com/sponsors/ayuhito" } @@ -1853,7 +1850,6 @@ "integrity": "sha512-Ni8UdZ6D/UTvLvDtPb6PzshI0lTqtLDnmv/2t1w2SYP92H0MMEdAzxB/ujDWwIXm2LzVPvvrGvzzCTMsyXa+mA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/generator": "^7.18.13", "@babel/template": "^7.18.10", @@ -5058,16 +5054,16 @@ "license": "MIT" }, "node_modules/@storybook/addon-docs": { - "version": "10.1.11", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.1.11.tgz", - "integrity": "sha512-Jwm291Fhim2eVcZIVlkG1B2skb0ZI9oru6nqMbJxceQZlvZmcIa4oxvS1oaMTKw2DJnCv97gLm57P/YvRZ8eUg==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.6.tgz", + "integrity": "sha512-7a37fu2hdOJRCITS+EimhVN9xVVvSeodmX6QdfxOim+2ECYnvMC9YVYpJ0et3XC8xnl9/3AbQ4y670Uw1hXcmg==", "dev": true, "license": "MIT", "dependencies": { "@mdx-js/react": "^3.0.0", - "@storybook/csf-plugin": "10.1.11", - "@storybook/icons": "^2.0.0", - "@storybook/react-dom-shim": "10.1.11", + "@storybook/csf-plugin": "10.2.6", + "@storybook/icons": "^2.0.1", + "@storybook/react-dom-shim": "10.2.6", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "ts-dedent": "^2.0.0" @@ -5077,18 +5073,17 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.1.11" + "storybook": "^10.2.6" } }, "node_modules/@storybook/builder-vite": { - "version": "10.1.11", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.1.11.tgz", - "integrity": "sha512-MMD09Ap7FyzDfWG961pkIMv/w684XXe1bBEi+wCEpHxvrgAd3j3A9w/Rqp9Am2uRDPCEdi1QgSzS3SGW3aGThQ==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.6.tgz", + "integrity": "sha512-O/kvmUrfEn2VpzVOGJV3VvEQ9N4AOI8csdvsUsfjs6PSNwAiwvsx8+qTYYcheMilrO9+1Da9lFmd7oucSPto3Q==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf-plugin": "10.1.11", - "@vitest/mocker": "3.2.4", + "@storybook/csf-plugin": "10.2.6", "ts-dedent": "^2.0.0" }, "funding": { @@ -5096,14 +5091,14 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.1.11", + "storybook": "^10.2.6", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "node_modules/@storybook/csf-plugin": { - "version": "10.1.11", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.1.11.tgz", - "integrity": "sha512-Ant0NhgqHKzQsseeVTSetZCuDHHs0W2HRkHt51Kg/sUl0T/sDtfVA+fWZT8nGzGZqYSFkxqYPWjauPmIhPtaRw==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.6.tgz", + "integrity": "sha512-1ZeRfmMTjUweXRaNVNg49m0r+l2VQmfeicTCRwjXrq70eBeWG8Dx2w0simVM9nX0lRGiGL3S36lhrrswuEF/6A==", "dev": true, "license": "MIT", "dependencies": { @@ -5116,7 +5111,7 @@ "peerDependencies": { "esbuild": "*", "rollup": "*", - "storybook": "^10.1.11", + "storybook": "^10.2.6", "vite": "*", "webpack": "*" }, @@ -5154,14 +5149,14 @@ } }, "node_modules/@storybook/react": { - "version": "10.1.11", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.1.11.tgz", - "integrity": "sha512-rmMGmEwBaM2YpB8oDk2moM0MNjNMqtwyoPPZxjyruY9WVhYca8EDPGKEdRzUlb4qZJsTgLi7VU4eqg6LD/mL3Q==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.2.6.tgz", + "integrity": "sha512-0haWDV7A/p3PdOsP6klacN7D5Zbzg08EVLh5br8X3AOxAznhLUTS4WngMtaMFbkheNLmyoVK+4SkTrL4n6/7zQ==", "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/react-dom-shim": "10.1.11", + "@storybook/react-dom-shim": "10.2.6", "react-docgen": "^8.0.2" }, "funding": { @@ -5171,7 +5166,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.1.11", + "storybook": "^10.2.6", "typescript": ">= 4.9.x" }, "peerDependenciesMeta": { @@ -5181,9 +5176,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "10.1.11", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.1.11.tgz", - "integrity": "sha512-o8WPhRlZbORUWG9lAgDgJP0pi905VHJUFJr1Kp8980gHqtlemtnzjPxKy5vFwj6glNhAlK8SS8OOYzWP7hloTQ==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.6.tgz", + "integrity": "sha512-jgGLf5Ck35+kHa9fY8LreuT+PrtrDXPgy7uh8C3KkRnWoyTHaorW5q3Kw2no0UA79vXA87uX87kQVY6Ka8InzA==", "dev": true, "license": "MIT", "funding": { @@ -5193,20 +5188,20 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.1.11" + "storybook": "^10.2.6" } }, "node_modules/@storybook/react-vite": { - "version": "10.1.11", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.1.11.tgz", - "integrity": "sha512-qh1BCD25nIoiDfqwha+qBkl7pcG4WuzM+c8tsE63YEm8AFIbNKg5K8lVUoclF+4CpFz7IwBpWe61YUTDfp+91w==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.2.6.tgz", + "integrity": "sha512-RYkbzro1dfmLujz2fXm3eAuSyfLRdgl4SoGUa3W+WjTiHu5+sF1i+/CBYaOUmFFiPMibWRy4MNodrSInERb4qA==", "dev": true, "license": "MIT", "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "^0.6.3", "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "10.1.11", - "@storybook/react": "10.1.11", + "@storybook/builder-vite": "10.2.6", + "@storybook/react": "10.2.6", "empathic": "^2.0.0", "magic-string": "^0.30.0", "react-docgen": "^8.0.0", @@ -5220,7 +5215,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.1.11", + "storybook": "^10.2.6", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, @@ -5489,7 +5484,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.16.tgz", "integrity": "sha512-bpMGOmV4OPmif7TNMteU/Ehf/hoC0Kf98PDc0F4BZkFrEapRMEqI/V6YS0lyzwSV6PQpY1y4xxArUIfBW5LVxQ==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/query-core": "5.90.16" }, @@ -5524,7 +5518,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.150.0.tgz", "integrity": "sha512-k/oycTCpBT2XoEk9dNd/nNYhF0X9fLSB10lT40+NVX1TjOtBq5whksk8MT6oRnSoQ8KWeb7La3G9kFaAeSULkA==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/history": "1.145.7", "@tanstack/react-store": "^0.8.0", @@ -5596,7 +5589,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.150.0.tgz", "integrity": "sha512-cAm44t/tUbfyzaDH+rE/WO4u3AgaZdpJp00xjQ4gNkC2O95ntVHq5fx+4fhtrkKpgdXoKldgk8OK66djiWpuGQ==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/history": "1.145.7", "@tanstack/store": "^0.8.0", @@ -5892,7 +5884,8 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -5984,7 +5977,6 @@ "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -5995,7 +5987,6 @@ "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -6006,7 +5997,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -6054,7 +6044,6 @@ "resolved": "https://registry.npmjs.org/@vector-im/compound-design-tokens/-/compound-design-tokens-6.4.3.tgz", "integrity": "sha512-Zyqag2QCAfpRipLHSX/LEXj6OGFgBpilMQvNdr3a0iXeGASfkM3HZGid077kMRp9lvyHiQfPIs1BdllENwDSNQ==", "license": "SEE LICENSE IN README.md", - "peer": true, "peerDependencies": { "@types/react": "*", "react": "^17 || ^18 || ^19.0.0" @@ -6204,43 +6193,6 @@ "node": ">=14.0.0" } }, - "node_modules/@vitest/mocker": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", - "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "3.2.4", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.17" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/@vitest/mocker/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "node_modules/@vitest/pretty-format": { "version": "4.0.18", "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", @@ -6782,7 +6734,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -7382,8 +7333,7 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", @@ -7597,7 +7547,8 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/dot-case": { "version": "3.0.4", @@ -7698,7 +7649,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -8221,7 +8171,6 @@ "integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -8656,7 +8605,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.28.4" }, @@ -10141,6 +10089,7 @@ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -10347,7 +10296,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "@inquirer/confirm": "^5.0.0", "@mswjs/interceptors": "^0.41.0", @@ -11076,7 +11024,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -11247,7 +11194,6 @@ "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -11285,6 +11231,7 @@ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -11300,6 +11247,7 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -11359,7 +11307,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -11401,7 +11348,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -11441,7 +11387,8 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/react-refresh": { "version": "0.18.0", @@ -11792,7 +11739,6 @@ "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -11926,7 +11872,6 @@ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.4.2.tgz", "integrity": "sha512-N3HEHRCZYn3cQbsC4B5ldj9j+tHdf4JZoYPlcI4rRYu0Xy4qN8MQf1Z08EibzB0WpgRG5BGK08FTrmM66eSzKQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=10" } @@ -12152,15 +12097,14 @@ } }, "node_modules/storybook": { - "version": "10.1.11", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.1.11.tgz", - "integrity": "sha512-pKP5jXJYM4OjvNklGuHKO53wOCAwfx79KvZyOWHoi9zXUH5WVMFUe/ZfWyxXG/GTcj0maRgHGUjq/0I43r0dDQ==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.6.tgz", + "integrity": "sha512-5UY1f0f4TCAmJ19DCvYmWbvZaYwszIOY+PxTzu0S/WJpqm4pzO0bjn6Wfx113Jnh/tffUZ3MVuQgjJq20/ttNg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/icons": "^2.0.0", + "@storybook/icons": "^2.0.1", "@testing-library/jest-dom": "^6.6.3", "@testing-library/user-event": "^14.6.1", "@vitest/expect": "3.2.4", @@ -12168,7 +12112,7 @@ "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0 || ^0.26.0 || ^0.27.0", "open": "^10.2.0", "recast": "^0.23.5", - "semver": "^7.6.2", + "semver": "^7.7.3", "use-sync-external-store": "^1.5.0", "ws": "^8.18.0" }, @@ -12867,7 +12811,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13135,7 +13078,6 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -13223,7 +13165,6 @@ "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", @@ -13612,7 +13553,6 @@ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.0.0" }, diff --git a/frontend/package.json b/frontend/package.json index c458420f8..93a2593e3 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -46,8 +46,8 @@ "@graphql-codegen/cli": "^6.1.1", "@graphql-codegen/client-preset": "^5.2.2", "@graphql-codegen/typescript-msw": "^3.0.1", - "@storybook/addon-docs": "^10.1.11", - "@storybook/react-vite": "^10.1.11", + "@storybook/addon-docs": "^10.2.6", + "@storybook/react-vite": "^10.2.6", "@tanstack/react-query-devtools": "^5.91.2", "@tanstack/react-router-devtools": "^1.150.0", "@tanstack/router-plugin": "^1.150.0", From 1c97d960b78ec483057736015947f96e9fc4823a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Feb 2026 16:13:41 +0000 Subject: [PATCH 017/104] build(deps-dev): bump @vitejs/plugin-react Bumps the vite group in /frontend with 1 update: [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react). Updates `@vitejs/plugin-react` from 5.1.2 to 5.1.3 - [Release notes](https://github.com/vitejs/vite-plugin-react/releases) - [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@5.1.3/packages/plugin-react) --- updated-dependencies: - dependency-name: "@vitejs/plugin-react" dependency-version: 5.1.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vite ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 190 ++++++++++++++++--------------------- frontend/package.json | 2 +- 2 files changed, 85 insertions(+), 107 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2a8a91f41..3298400dc 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -48,7 +48,7 @@ "@types/react": "19.2.7", "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", - "@vitejs/plugin-react": "^5.1.2", + "@vitejs/plugin-react": "^5.1.3", "@vitest/coverage-v8": "^4.0.18", "autoprefixer": "^10.4.23", "browserslist-to-esbuild": "^2.1.1", @@ -117,13 +117,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -132,9 +132,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "dev": true, "license": "MIT", "engines": { @@ -142,22 +142,21 @@ } }, "node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -174,14 +173,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -204,13 +203,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -267,29 +266,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -384,27 +383,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -922,33 +921,33 @@ } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -956,9 +955,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, "license": "MIT", "dependencies": { @@ -1808,7 +1807,6 @@ "resolved": "https://registry.npmjs.org/@fontsource/inconsolata/-/inconsolata-5.2.8.tgz", "integrity": "sha512-lIZW+WOZYpUH91g9r6rYYhfTmptF3YPPM54ZOs8IYVeeL4SeiAu4tfj7mdr8llYEq31DLYgi6JtGIJa192gB0Q==", "license": "OFL-1.1", - "peer": true, "funding": { "url": "https://github.com/sponsors/ayuhito" } @@ -1818,7 +1816,6 @@ "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.2.8.tgz", "integrity": "sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==", "license": "OFL-1.1", - "peer": true, "funding": { "url": "https://github.com/sponsors/ayuhito" } @@ -1853,7 +1850,6 @@ "integrity": "sha512-Ni8UdZ6D/UTvLvDtPb6PzshI0lTqtLDnmv/2t1w2SYP92H0MMEdAzxB/ujDWwIXm2LzVPvvrGvzzCTMsyXa+mA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/generator": "^7.18.13", "@babel/template": "^7.18.10", @@ -4686,9 +4682,9 @@ "license": "MIT" }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", - "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", + "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", "dev": true, "license": "MIT" }, @@ -5489,7 +5485,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.16.tgz", "integrity": "sha512-bpMGOmV4OPmif7TNMteU/Ehf/hoC0Kf98PDc0F4BZkFrEapRMEqI/V6YS0lyzwSV6PQpY1y4xxArUIfBW5LVxQ==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/query-core": "5.90.16" }, @@ -5524,7 +5519,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.150.0.tgz", "integrity": "sha512-k/oycTCpBT2XoEk9dNd/nNYhF0X9fLSB10lT40+NVX1TjOtBq5whksk8MT6oRnSoQ8KWeb7La3G9kFaAeSULkA==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/history": "1.145.7", "@tanstack/react-store": "^0.8.0", @@ -5596,7 +5590,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.150.0.tgz", "integrity": "sha512-cAm44t/tUbfyzaDH+rE/WO4u3AgaZdpJp00xjQ4gNkC2O95ntVHq5fx+4fhtrkKpgdXoKldgk8OK66djiWpuGQ==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/history": "1.145.7", "@tanstack/store": "^0.8.0", @@ -5892,7 +5885,8 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -5984,7 +5978,6 @@ "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -5995,7 +5988,6 @@ "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -6006,7 +5998,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -6054,7 +6045,6 @@ "resolved": "https://registry.npmjs.org/@vector-im/compound-design-tokens/-/compound-design-tokens-6.4.3.tgz", "integrity": "sha512-Zyqag2QCAfpRipLHSX/LEXj6OGFgBpilMQvNdr3a0iXeGASfkM3HZGid077kMRp9lvyHiQfPIs1BdllENwDSNQ==", "license": "SEE LICENSE IN README.md", - "peer": true, "peerDependencies": { "@types/react": "*", "react": "^17 || ^18 || ^19.0.0" @@ -6098,16 +6088,16 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz", - "integrity": "sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.3.tgz", + "integrity": "sha512-NVUnA6gQCl8jfoYqKqQU5Clv0aPw14KkZYCsX6T9Lfu9slI0LOU10OTwFHS/WmptsMMpshNd/1tuWsHQ2Uk+cg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.28.5", + "@babel/core": "^7.29.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.53", + "@rolldown/pluginutils": "1.0.0-rc.2", "@types/babel__core": "^7.20.5", "react-refresh": "^0.18.0" }, @@ -6782,7 +6772,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -7382,8 +7371,7 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", @@ -7597,7 +7585,8 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/dot-case": { "version": "3.0.4", @@ -7698,7 +7687,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -8221,7 +8209,6 @@ "integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -8656,7 +8643,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.28.4" }, @@ -10141,6 +10127,7 @@ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -10347,7 +10334,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "@inquirer/confirm": "^5.0.0", "@mswjs/interceptors": "^0.41.0", @@ -11076,7 +11062,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -11247,7 +11232,6 @@ "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -11285,6 +11269,7 @@ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -11300,6 +11285,7 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -11359,7 +11345,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -11401,7 +11386,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -11441,7 +11425,8 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/react-refresh": { "version": "0.18.0", @@ -11792,7 +11777,6 @@ "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -11926,7 +11910,6 @@ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.4.2.tgz", "integrity": "sha512-N3HEHRCZYn3cQbsC4B5ldj9j+tHdf4JZoYPlcI4rRYu0Xy4qN8MQf1Z08EibzB0WpgRG5BGK08FTrmM66eSzKQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=10" } @@ -12157,7 +12140,6 @@ "integrity": "sha512-pKP5jXJYM4OjvNklGuHKO53wOCAwfx79KvZyOWHoi9zXUH5WVMFUe/ZfWyxXG/GTcj0maRgHGUjq/0I43r0dDQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@storybook/global": "^5.0.0", "@storybook/icons": "^2.0.0", @@ -12867,7 +12849,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13135,7 +13116,6 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -13223,7 +13203,6 @@ "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", @@ -13612,7 +13591,6 @@ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.0.0" }, diff --git a/frontend/package.json b/frontend/package.json index c458420f8..22e4a23af 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -58,7 +58,7 @@ "@types/react": "19.2.7", "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", - "@vitejs/plugin-react": "^5.1.2", + "@vitejs/plugin-react": "^5.1.3", "@vitest/coverage-v8": "^4.0.18", "autoprefixer": "^10.4.23", "browserslist-to-esbuild": "^2.1.1", From 9bd113df36f60f92aeeaae4d97d377cb01ca6ff5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Feb 2026 16:14:37 +0000 Subject: [PATCH 018/104] build(deps): bump the sentry group with 3 updates Bumps the sentry group with 3 updates: [sentry](https://github.com/getsentry/sentry-rust), [sentry-tower](https://github.com/getsentry/sentry-rust) and [sentry-tracing](https://github.com/getsentry/sentry-rust). Updates `sentry` from 0.46.0 to 0.46.2 - [Release notes](https://github.com/getsentry/sentry-rust/releases) - [Changelog](https://github.com/getsentry/sentry-rust/blob/master/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-rust/compare/0.46.0...0.46.2) Updates `sentry-tower` from 0.46.0 to 0.46.2 - [Release notes](https://github.com/getsentry/sentry-rust/releases) - [Changelog](https://github.com/getsentry/sentry-rust/blob/master/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-rust/compare/0.46.0...0.46.2) Updates `sentry-tracing` from 0.46.0 to 0.46.2 - [Release notes](https://github.com/getsentry/sentry-rust/releases) - [Changelog](https://github.com/getsentry/sentry-rust/blob/master/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-rust/compare/0.46.0...0.46.2) --- updated-dependencies: - dependency-name: sentry dependency-version: 0.46.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: sentry - dependency-name: sentry-tower dependency-version: 0.46.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: sentry - dependency-name: sentry-tracing dependency-version: 0.46.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: sentry ... Signed-off-by: dependabot[bot] --- Cargo.lock | 59 ++++++++++++++++++++++++++++++------------------------ Cargo.toml | 2 +- 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9d54d9e89..43e0980fe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -882,6 +882,12 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chacha20" version = "0.9.1" @@ -1736,7 +1742,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4086,7 +4092,7 @@ dependencies = [ "sha1", "sha2", "sprintf", - "thiserror 1.0.69", + "thiserror 2.0.17", "tokio", "tracing", "urlencoding", @@ -4708,7 +4714,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425" dependencies = [ "anyhow", - "itertools 0.13.0", + "itertools 0.14.0", "proc-macro2", "quote", "syn", @@ -4968,9 +4974,9 @@ checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "reqwest" -version = "0.12.24" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64", "bytes", @@ -5146,7 +5152,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5418,10 +5424,11 @@ checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "sentry" -version = "0.46.0" +version = "0.46.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9794f69ad475e76c057e326175d3088509649e3aed98473106b9fe94ba59424" +checksum = "d92d893ba7469d361a6958522fa440e4e2bc8bf4c5803cd1bf40b9af63f8f9a8" dependencies = [ + "cfg_aliases", "httpdate", "reqwest", "sentry-backtrace", @@ -5435,9 +5442,9 @@ dependencies = [ [[package]] name = "sentry-backtrace" -version = "0.46.0" +version = "0.46.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e81137ad53b8592bd0935459ad74c0376053c40084aa170451e74eeea8dbc6c3" +checksum = "5f8784d0a27b5cd4b5f75769ffc84f0b7580e3c35e1af9cd83cb90b612d769cc" dependencies = [ "backtrace", "regex", @@ -5446,9 +5453,9 @@ dependencies = [ [[package]] name = "sentry-contexts" -version = "0.46.0" +version = "0.46.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb403c66cc2651a01b9bacda2e7c22cd51f7e8f56f206aa4310147eb3259282" +checksum = "0e5eb42f4cd4f9fdfec9e3b07b25a4c9769df83d218a7e846658984d5948ad3e" dependencies = [ "hostname", "libc", @@ -5460,9 +5467,9 @@ dependencies = [ [[package]] name = "sentry-core" -version = "0.46.0" +version = "0.46.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfc409727ae90765ca8ea76fe6c949d6f159a11d02e130b357fa652ee9efcada" +checksum = "b0b1e7ca40f965db239da279bf278d87b7407469b98835f27f0c8e59ed189b06" dependencies = [ "rand 0.9.2", "sentry-types", @@ -5473,9 +5480,9 @@ dependencies = [ [[package]] name = "sentry-panic" -version = "0.46.0" +version = "0.46.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df79f4e1e72b2a8b75a0ebf49e78709ceb9b3f0b451f13adc92a0361b0aaabe" +checksum = "8906f8be87aea5ac7ef937323fb655d66607427f61007b99b7cb3504dc5a156c" dependencies = [ "sentry-backtrace", "sentry-core", @@ -5483,9 +5490,9 @@ dependencies = [ [[package]] name = "sentry-tower" -version = "0.46.0" +version = "0.46.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eec9885bceb8ba374858d015bb6fa39dbb341d94ca088bc8f13bee2e64e2c68" +checksum = "56aebe376310840b49dad4cca55c7b32d9abdc14946cd071d4158ecb149b63a4" dependencies = [ "axum", "http", @@ -5498,9 +5505,9 @@ dependencies = [ [[package]] name = "sentry-tracing" -version = "0.46.0" +version = "0.46.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2046f527fd4b75e0b6ab3bd656c67dce42072f828dc4d03c206d15dca74a93" +checksum = "5b07eefe04486316c57aba08ab53dd44753c25102d1d3fe05775cc93a13262d9" dependencies = [ "bitflags", "sentry-backtrace", @@ -5511,9 +5518,9 @@ dependencies = [ [[package]] name = "sentry-types" -version = "0.46.0" +version = "0.46.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7b9b4e4c03a4d3643c18c78b8aa91d2cbee5da047d2fa0ca4bb29bc67e6c55c" +checksum = "567711f01f86a842057e1fc17779eba33a336004227e1a1e7e6cc2599e22e259" dependencies = [ "debugid", "hex", @@ -6191,7 +6198,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -6491,9 +6498,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ "bitflags", "bytes", @@ -7318,7 +7325,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 0f98906bc..62ebde108 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -567,7 +567,7 @@ features = [ # Sentry error tracking [workspace.dependencies.sentry] -version = "0.46.0" +version = "0.46.2" default-features = false features = ["backtrace", "contexts", "panic", "tower", "reqwest"] From 1b2c2c38f23c2e456ae3923f935d23b22e3b4e08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Feb 2026 16:15:04 +0000 Subject: [PATCH 019/104] build(deps): bump tracing-subscriber in the tracing group Bumps the tracing group with 1 update: [tracing-subscriber](https://github.com/tokio-rs/tracing). Updates `tracing-subscriber` from 0.3.20 to 0.3.22 - [Release notes](https://github.com/tokio-rs/tracing/releases) - [Commits](https://github.com/tokio-rs/tracing/compare/tracing-subscriber-0.3.20...tracing-subscriber-0.3.22) --- updated-dependencies: - dependency-name: tracing-subscriber dependency-version: 0.3.22 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: tracing ... Signed-off-by: dependabot[bot] --- Cargo.lock | 28 ++++++++++++++-------------- Cargo.toml | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9d54d9e89..88d465c03 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1736,7 +1736,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4086,7 +4086,7 @@ dependencies = [ "sha1", "sha2", "sprintf", - "thiserror 1.0.69", + "thiserror 2.0.17", "tokio", "tracing", "urlencoding", @@ -4708,7 +4708,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425" dependencies = [ "anyhow", - "itertools 0.13.0", + "itertools 0.14.0", "proc-macro2", "quote", "syn", @@ -5146,7 +5146,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -6191,7 +6191,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -6531,9 +6531,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -6555,9 +6555,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", @@ -6566,9 +6566,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -6616,9 +6616,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.20" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" dependencies = [ "matchers", "nu-ansi-term", @@ -7318,7 +7318,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 0f98906bc..a289a2e6b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -685,7 +685,7 @@ features = ["cors", "fs", "add-extension", "set-header"] [workspace.dependencies.tracing] version = "0.1.41" [workspace.dependencies.tracing-subscriber] -version = "0.3.20" +version = "0.3.22" features = ["env-filter"] [workspace.dependencies.tracing-appender] version = "0.2.4" From 6f4033a9db3144d0f5a45180c446cbaf8693e4d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Feb 2026 16:29:00 +0000 Subject: [PATCH 020/104] build(deps): bump arc-swap from 1.7.1 to 1.8.1 Bumps [arc-swap](https://github.com/vorner/arc-swap) from 1.7.1 to 1.8.1. - [Changelog](https://github.com/vorner/arc-swap/blob/master/CHANGELOG.md) - [Commits](https://github.com/vorner/arc-swap/compare/v1.7.1...v1.8.1) --- updated-dependencies: - dependency-name: arc-swap dependency-version: 1.8.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Cargo.lock | 19 +++++++++++-------- Cargo.toml | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9d54d9e89..ee854233f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -197,9 +197,12 @@ checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" [[package]] name = "arc-swap" -version = "1.7.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" +checksum = "9ded5f9a03ac8f24d1b8a25101ee812cd32cdc8c50a4c50237de2c4915850e73" +dependencies = [ + "rustversion", +] [[package]] name = "argon2" @@ -1736,7 +1739,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4086,7 +4089,7 @@ dependencies = [ "sha1", "sha2", "sprintf", - "thiserror 1.0.69", + "thiserror 2.0.17", "tokio", "tracing", "urlencoding", @@ -4708,7 +4711,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425" dependencies = [ "anyhow", - "itertools 0.13.0", + "itertools 0.14.0", "proc-macro2", "quote", "syn", @@ -5146,7 +5149,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -6191,7 +6194,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -7318,7 +7321,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 0f98906bc..639d409c8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -71,7 +71,7 @@ features = ["axum", "axum-extra", "axum-extra-query", "axum-json", "macros"] # An `Arc` that can be atomically updated [workspace.dependencies.arc-swap] -version = "1.7.1" +version = "1.8.1" # GraphQL server [workspace.dependencies.async-graphql] From 08308fa716cd4a34468fb5e1dd0b320e46b3a55b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Feb 2026 16:30:10 +0000 Subject: [PATCH 021/104] build(deps): bump the react group in /frontend with 2 updates Bumps the react group in /frontend with 2 updates: [react](https://github.com/facebook/react/tree/HEAD/packages/react) and [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom). Updates `react` from 19.2.3 to 19.2.4 - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v19.2.4/packages/react) Updates `react-dom` from 19.2.3 to 19.2.4 - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v19.2.4/packages/react-dom) --- updated-dependencies: - dependency-name: react dependency-version: 19.2.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: react - dependency-name: react-dom dependency-version: 19.2.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: react ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 26 +++++++++++++------------- frontend/package.json | 6 +++--- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index bc4e1eaf7..681dbe0bb 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -21,8 +21,8 @@ "classnames": "^2.5.1", "date-fns": "^4.1.0", "i18next": "^25.7.4", - "react": "^19.2.3", - "react-dom": "^19.2.3", + "react": "^19.2.4", + "react-dom": "^19.2.4", "react-i18next": "^16.5.3", "swagger-ui-dist": "^5.31.0", "valibot": "^1.2.0", @@ -45,7 +45,7 @@ "@testing-library/react": "^16.3.1", "@testing-library/user-event": "^14.6.1", "@types/node": "^25.0.3", - "@types/react": "19.2.7", + "@types/react": "19.2.11", "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", "@vitejs/plugin-react": "^5.1.3", @@ -5982,9 +5982,9 @@ } }, "node_modules/@types/react": { - "version": "19.2.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", - "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "version": "19.2.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.11.tgz", + "integrity": "sha512-tORuanb01iEzWvMGVGv2ZDhYZVeRMrw453DCSAIn/5yvcSVnMoUMTyf33nQJLahYEnv9xqrTNbgz4qY5EfSh0g==", "devOptional": true, "license": "MIT", "dependencies": { @@ -11303,9 +11303,9 @@ "license": "MIT" }, "node_modules/react": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", - "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11344,15 +11344,15 @@ } }, "node_modules/react-dom": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.3" + "react": "^19.2.4" } }, "node_modules/react-i18next": { diff --git a/frontend/package.json b/frontend/package.json index 42cbce457..52d89c164 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -31,8 +31,8 @@ "classnames": "^2.5.1", "date-fns": "^4.1.0", "i18next": "^25.7.4", - "react": "^19.2.3", - "react-dom": "^19.2.3", + "react": "^19.2.4", + "react-dom": "^19.2.4", "react-i18next": "^16.5.3", "swagger-ui-dist": "^5.31.0", "valibot": "^1.2.0", @@ -55,7 +55,7 @@ "@testing-library/react": "^16.3.1", "@testing-library/user-event": "^14.6.1", "@types/node": "^25.0.3", - "@types/react": "19.2.7", + "@types/react": "19.2.11", "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", "@vitejs/plugin-react": "^5.1.3", From 375164b235c250e58b80e3d1992604b6f08ab808 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Wed, 4 Feb 2026 17:49:17 +0100 Subject: [PATCH 022/104] Fix changes in React types --- frontend/src/components/AccountDeleteButton.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/AccountDeleteButton.tsx b/frontend/src/components/AccountDeleteButton.tsx index 6f1b80bec..a5ab30991 100644 --- a/frontend/src/components/AccountDeleteButton.tsx +++ b/frontend/src/components/AccountDeleteButton.tsx @@ -109,8 +109,8 @@ const AccountDeleteButton: React.FC = (props) => { setAllowSubmitting(false); }, [isMaybeValid]); - const onPasswordChange = useCallback( - (e: React.ChangeEvent) => { + const onPasswordInput = useCallback( + (e: React.InputEvent) => { // We don't know if the password is correct, so we consider the form as // valid if the field is not empty setIsMaybeValid(e.currentTarget.value !== ""); @@ -118,8 +118,8 @@ const AccountDeleteButton: React.FC = (props) => { [], ); - const onMxidChange = useCallback( - (e: React.ChangeEvent) => { + const onMxidInput = useCallback( + (e: React.InputEvent) => { setIsMaybeValid(e.currentTarget.value === user.matrix.mxid); }, [user.matrix.mxid], @@ -208,7 +208,7 @@ const AccountDeleteButton: React.FC = (props) => { @@ -232,7 +232,7 @@ const AccountDeleteButton: React.FC = (props) => { From 207c526f00daac477d9d4d599ecf50b81a1365c0 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Wed, 4 Feb 2026 17:24:22 +0100 Subject: [PATCH 023/104] Upgrade Rust, opa, regal, cargo-auditable and Node --- .github/actions/build-policies/action.yml | 2 +- .github/workflows/ci.yaml | 4 ++-- Dockerfile | 9 +++++---- policies/Makefile | 4 ++-- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/.github/actions/build-policies/action.yml b/.github/actions/build-policies/action.yml index e1dc28547..6264047ef 100644 --- a/.github/actions/build-policies/action.yml +++ b/.github/actions/build-policies/action.yml @@ -13,7 +13,7 @@ runs: uses: open-policy-agent/setup-opa@v2.2.0 with: # Keep in sync with the Dockerfile and policies/Makefile - version: 1.8.0 + version: 1.13.1 - name: Build the policies run: make diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 6444b1033..ba90f2be1 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -42,7 +42,7 @@ jobs: uses: StyraInc/setup-regal@v1 with: # Keep in sync with policies/Makefile - version: 0.36.1 + version: 0.38.1 - name: Lint policies working-directory: ./policies @@ -216,7 +216,7 @@ jobs: uses: actions/checkout@v6 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@1.89.0 + uses: dtolnay/rust-toolchain@1.93.0 with: components: clippy diff --git a/Dockerfile b/Dockerfile index 479dee308..a8d9b14c8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,11 +12,12 @@ # The Debian version and version name must be in sync ARG DEBIAN_VERSION=12 ARG DEBIAN_VERSION_NAME=bookworm -ARG RUSTC_VERSION=1.89.0 -ARG NODEJS_VERSION=24.11.0 +# Keep in sync with .github/workflows/ci.yaml +ARG RUSTC_VERSION=1.93.0 +ARG NODEJS_VERSION=24.13.0 # Keep in sync with .github/actions/build-policies/action.yml and policies/Makefile -ARG OPA_VERSION=1.8.0 -ARG CARGO_AUDITABLE_VERSION=0.7.0 +ARG OPA_VERSION=1.13.1 +ARG CARGO_AUDITABLE_VERSION=0.7.2 ########################################## ## Build stage that builds the frontend ## diff --git a/policies/Makefile b/policies/Makefile index db5991672..de4d063ad 100644 --- a/policies/Makefile +++ b/policies/Makefile @@ -7,9 +7,9 @@ DOCKER := 0 PODMAN := 0 # Keep in sync with Dockerfile and .github/actions/build-policies/action.yml -OPA_DOCKER_IMAGE := docker.io/openpolicyagent/opa:1.8.0-debug +OPA_DOCKER_IMAGE := docker.io/openpolicyagent/opa:1.13.1 # Keep in sync with .github/workflows/ci.yaml -REGAL_DOCKER_IMAGE := ghcr.io/open-policy-agent/regal:0.36.1 +REGAL_DOCKER_IMAGE := ghcr.io/open-policy-agent/regal:0.38.1 INPUTS := \ common/common.rego \ From c4c19d10a6a86f1c8633f574fe51efa5b2423830 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Wed, 4 Feb 2026 17:25:11 +0100 Subject: [PATCH 024/104] Remove unused code --- crates/config/src/sections/clients.rs | 13 ------------- crates/config/src/sections/email.rs | 9 --------- 2 files changed, 22 deletions(-) diff --git a/crates/config/src/sections/clients.rs b/crates/config/src/sections/clients.rs index 8b9120045..2387d642d 100644 --- a/crates/config/src/sections/clients.rs +++ b/crates/config/src/sections/clients.rs @@ -16,19 +16,6 @@ use url::Url; use super::{ClientSecret, ClientSecretRaw, ConfigurationSection}; -#[derive(JsonSchema, Serialize, Deserialize, Clone, Debug)] -#[serde(rename_all = "snake_case")] -pub enum JwksOrJwksUri { - Jwks(PublicJsonWebKeySet), - JwksUri(Url), -} - -impl From for JwksOrJwksUri { - fn from(jwks: PublicJsonWebKeySet) -> Self { - Self::Jwks(jwks) - } -} - /// Authentication method used by clients #[derive(JsonSchema, Serialize, Deserialize, Copy, Clone, Debug)] #[serde(rename_all = "snake_case")] diff --git a/crates/config/src/sections/email.rs b/crates/config/src/sections/email.rs index 3df0c99db..8c365e3e5 100644 --- a/crates/config/src/sections/email.rs +++ b/crates/config/src/sections/email.rs @@ -14,15 +14,6 @@ use serde::{Deserialize, Serialize, de::Error}; use super::ConfigurationSection; -#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)] -pub struct Credentials { - /// Username for use to authenticate when connecting to the SMTP server - pub username: String, - - /// Password for use to authenticate when connecting to the SMTP server - pub password: String, -} - /// Encryption mode to use #[derive(Clone, Copy, Debug, Serialize, Deserialize, JsonSchema)] #[serde(rename_all = "lowercase")] From 202d7337b180e662616d45520830c8697ae16835 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Wed, 4 Feb 2026 17:33:38 +0100 Subject: [PATCH 025/104] Update Docker image to Debian 13 --- Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index a8d9b14c8..79ee6cc4f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,5 @@ # syntax = docker/dockerfile:1.7.1 +# Copyright 2025, 2026 Element Creations Ltd. # Copyright 2025 New Vector Ltd. # # SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial @@ -10,8 +11,8 @@ # being the platform being built. # The Debian version and version name must be in sync -ARG DEBIAN_VERSION=12 -ARG DEBIAN_VERSION_NAME=bookworm +ARG DEBIAN_VERSION=13 +ARG DEBIAN_VERSION_NAME=trixie # Keep in sync with .github/workflows/ci.yaml ARG RUSTC_VERSION=1.93.0 ARG NODEJS_VERSION=24.13.0 From f21634ada506a0c58f2bfb7a0ea97aa3a931d8e5 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Wed, 4 Feb 2026 17:44:12 +0100 Subject: [PATCH 026/104] Update dockerfile frontend --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 79ee6cc4f..ba2ed16c8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -# syntax = docker/dockerfile:1.7.1 +# syntax = docker/dockerfile:1.21.0 # Copyright 2025, 2026 Element Creations Ltd. # Copyright 2025 New Vector Ltd. # From c6ebac68a5e8baef540a0cb8c26686e7df809255 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Feb 2026 13:54:47 +0000 Subject: [PATCH 027/104] build(deps): bump the tanstack-query group in /frontend with 2 updates Bumps the tanstack-query group in /frontend with 2 updates: [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) and [@tanstack/react-query-devtools](https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools). Updates `@tanstack/react-query` from 5.90.16 to 5.90.20 - [Release notes](https://github.com/TanStack/query/releases) - [Changelog](https://github.com/TanStack/query/blob/main/packages/react-query/CHANGELOG.md) - [Commits](https://github.com/TanStack/query/commits/@tanstack/react-query@5.90.20/packages/react-query) Updates `@tanstack/react-query-devtools` from 5.91.2 to 5.91.3 - [Release notes](https://github.com/TanStack/query/releases) - [Changelog](https://github.com/TanStack/query/blob/main/packages/react-query-devtools/CHANGELOG.md) - [Commits](https://github.com/TanStack/query/commits/@tanstack/react-query-devtools@5.91.3/packages/react-query-devtools) --- updated-dependencies: - dependency-name: "@tanstack/react-query" dependency-version: 5.90.20 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: tanstack-query - dependency-name: "@tanstack/react-query-devtools" dependency-version: 5.91.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: tanstack-query ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 34 +++++++++++++++++----------------- frontend/package.json | 4 ++-- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 681dbe0bb..bcd6d0c95 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -12,7 +12,7 @@ "@fontsource/inter": "^5.2.8", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", - "@tanstack/react-query": "^5.90.16", + "@tanstack/react-query": "^5.90.20", "@tanstack/react-router": "^1.150.0", "@vector-im/compound-design-tokens": "6.4.3", "@vector-im/compound-web": "^8.3.5", @@ -38,7 +38,7 @@ "@graphql-codegen/typescript-msw": "^3.0.1", "@storybook/addon-docs": "^10.2.6", "@storybook/react-vite": "^10.2.6", - "@tanstack/react-query-devtools": "^5.91.2", + "@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-router-devtools": "^1.150.0", "@tanstack/router-plugin": "^1.150.0", "@testing-library/jest-dom": "^6.9.1", @@ -5459,9 +5459,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.90.16", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.16.tgz", - "integrity": "sha512-MvtWckSVufs/ja463/K4PyJeqT+HMlJWtw6PrCpywznd2NSgO3m4KwO9RqbFqGg6iDE8vVMFWMeQI4Io3eEYww==", + "version": "5.90.20", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.20.tgz", + "integrity": "sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==", "license": "MIT", "funding": { "type": "github", @@ -5469,9 +5469,9 @@ } }, "node_modules/@tanstack/query-devtools": { - "version": "5.92.0", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.92.0.tgz", - "integrity": "sha512-N8D27KH1vEpVacvZgJL27xC6yPFUy0Zkezn5gnB3L3gRCxlDeSuiya7fKge8Y91uMTnC8aSxBQhcK6ocY7alpQ==", + "version": "5.93.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.93.0.tgz", + "integrity": "sha512-+kpsx1NQnOFTZsw6HAFCW3HkKg0+2cepGtAWXjiiSOJJ1CtQpt72EE2nyZb+AjAbLRPoeRmPJ8MtQd8r8gsPdg==", "dev": true, "license": "MIT", "funding": { @@ -5480,12 +5480,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.90.16", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.16.tgz", - "integrity": "sha512-bpMGOmV4OPmif7TNMteU/Ehf/hoC0Kf98PDc0F4BZkFrEapRMEqI/V6YS0lyzwSV6PQpY1y4xxArUIfBW5LVxQ==", + "version": "5.90.20", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.20.tgz", + "integrity": "sha512-vXBxa+qeyveVO7OA0jX1z+DeyCA4JKnThKv411jd5SORpBKgkcVnYKCiBgECvADvniBX7tobwBmg01qq9JmMJw==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.90.16" + "@tanstack/query-core": "5.90.20" }, "funding": { "type": "github", @@ -5496,20 +5496,20 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.91.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.91.2.tgz", - "integrity": "sha512-ZJ1503ay5fFeEYFUdo7LMNFzZryi6B0Cacrgr2h1JRkvikK1khgIq6Nq2EcblqEdIlgB/r7XDW8f8DQ89RuUgg==", + "version": "5.91.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.91.3.tgz", + "integrity": "sha512-nlahjMtd/J1h7IzOOfqeyDh5LNfG0eULwlltPEonYy0QL+nqrBB+nyzJfULV+moL7sZyxc2sHdNJki+vLA9BSA==", "dev": true, "license": "MIT", "dependencies": { - "@tanstack/query-devtools": "5.92.0" + "@tanstack/query-devtools": "5.93.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.90.14", + "@tanstack/react-query": "^5.90.20", "react": "^18 || ^19" } }, diff --git a/frontend/package.json b/frontend/package.json index 52d89c164..d8d57719b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -22,7 +22,7 @@ "@fontsource/inter": "^5.2.8", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", - "@tanstack/react-query": "^5.90.16", + "@tanstack/react-query": "^5.90.20", "@tanstack/react-router": "^1.150.0", "@vector-im/compound-design-tokens": "6.4.3", "@vector-im/compound-web": "^8.3.5", @@ -48,7 +48,7 @@ "@graphql-codegen/typescript-msw": "^3.0.1", "@storybook/addon-docs": "^10.2.6", "@storybook/react-vite": "^10.2.6", - "@tanstack/react-query-devtools": "^5.91.2", + "@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-router-devtools": "^1.150.0", "@tanstack/router-plugin": "^1.150.0", "@testing-library/jest-dom": "^6.9.1", From 84eebc44e5fc156eb69251682dca44926021fb64 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Feb 2026 13:55:04 +0000 Subject: [PATCH 028/104] build(deps-dev): bump the types group in /frontend with 2 updates Bumps the types group in /frontend with 2 updates: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) and [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react). Updates `@types/node` from 25.0.3 to 25.2.0 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `@types/react` from 19.2.11 to 19.2.13 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 25.2.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: types - dependency-name: "@types/react" dependency-version: 19.2.13 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: types ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 16 ++++++++-------- frontend/package.json | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 681dbe0bb..73ab1f453 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -44,8 +44,8 @@ "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.1", "@testing-library/user-event": "^14.6.1", - "@types/node": "^25.0.3", - "@types/react": "19.2.11", + "@types/node": "^25.2.0", + "@types/react": "19.2.13", "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", "@vitejs/plugin-react": "^5.1.3", @@ -5972,9 +5972,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.0.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", - "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", + "version": "25.2.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz", + "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==", "dev": true, "license": "MIT", "dependencies": { @@ -5982,9 +5982,9 @@ } }, "node_modules/@types/react": { - "version": "19.2.11", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.11.tgz", - "integrity": "sha512-tORuanb01iEzWvMGVGv2ZDhYZVeRMrw453DCSAIn/5yvcSVnMoUMTyf33nQJLahYEnv9xqrTNbgz4qY5EfSh0g==", + "version": "19.2.13", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.13.tgz", + "integrity": "sha512-KkiJeU6VbYbUOp5ITMIc7kBfqlYkKA5KhEHVrGMmUUMt7NeaZg65ojdPk+FtNrBAOXNVM5QM72jnADjM+XVRAQ==", "devOptional": true, "license": "MIT", "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index 52d89c164..01767f4d1 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -54,8 +54,8 @@ "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.1", "@testing-library/user-event": "^14.6.1", - "@types/node": "^25.0.3", - "@types/react": "19.2.11", + "@types/node": "^25.2.0", + "@types/react": "19.2.13", "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", "@vitejs/plugin-react": "^5.1.3", From 0d8d4898eb20b80270b2b02158242dc99639d52c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Feb 2026 13:55:12 +0000 Subject: [PATCH 029/104] build(deps): bump insta from 1.43.2 to 1.46.3 Bumps [insta](https://github.com/mitsuhiko/insta) from 1.43.2 to 1.46.3. - [Release notes](https://github.com/mitsuhiko/insta/releases) - [Changelog](https://github.com/mitsuhiko/insta/blob/master/CHANGELOG.md) - [Commits](https://github.com/mitsuhiko/insta/compare/1.43.2...1.46.3) --- updated-dependencies: - dependency-name: insta dependency-version: 1.46.3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Cargo.lock | 5 +++-- Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7d687070f..a8c2d6f19 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2788,14 +2788,15 @@ dependencies = [ [[package]] name = "insta" -version = "1.43.2" +version = "1.46.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fdb647ebde000f43b5b53f773c30cf9b0cb4300453208713fa38b2c70935a0" +checksum = "e82db8c87c7f1ccecb34ce0c24399b8a73081427f3c7c50a5d597925356115e4" dependencies = [ "console", "once_cell", "serde", "similar", + "tempfile", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 5d1d9c78e..2bb73d98c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -330,7 +330,7 @@ version = "2.0.6" # Snapshot testing [workspace.dependencies.insta] -version = "1.43.2" +version = "1.46.3" features = ["yaml", "json"] # IP network address types From 6fd27306f6450fc20fab7a5971e654757c630afa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Feb 2026 13:55:15 +0000 Subject: [PATCH 030/104] build(deps-dev): bump happy-dom from 20.0.11 to 20.5.0 in /frontend Bumps [happy-dom](https://github.com/capricorn86/happy-dom) from 20.0.11 to 20.5.0. - [Release notes](https://github.com/capricorn86/happy-dom/releases) - [Commits](https://github.com/capricorn86/happy-dom/compare/v20.0.11...v20.5.0) --- updated-dependencies: - dependency-name: happy-dom dependency-version: 20.5.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 45 +++++++++++++++++++------------------- frontend/package.json | 2 +- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 681dbe0bb..467c4e7ff 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -53,7 +53,7 @@ "autoprefixer": "^10.4.23", "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", - "happy-dom": "^20.0.11", + "happy-dom": "^20.5.0", "i18next-cli": "^1.36.1", "knip": "^5.81.0", "msw": "^2.12.8", @@ -7602,6 +7602,19 @@ "node": ">=14" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -8488,37 +8501,23 @@ } }, "node_modules/happy-dom": { - "version": "20.0.11", - "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-20.0.11.tgz", - "integrity": "sha512-QsCdAUHAmiDeKeaNojb1OHOPF7NjcWPBR7obdu3NwH2a/oyQaLg5d0aaCy/9My6CdPChYF07dvz5chaXBGaD4g==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-20.5.0.tgz", + "integrity": "sha512-VQe+Q5CYiGOgcCERXhcfNsbnrN92FDEKciMH/x6LppU9dd0j4aTjCTlqONFOIMcAm/5JxS3+utowbXV1OoFr+g==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "^20.0.0", + "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", - "whatwg-mimetype": "^3.0.0" + "@types/ws": "^8.18.1", + "entities": "^4.5.0", + "whatwg-mimetype": "^3.0.0", + "ws": "^8.18.3" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/happy-dom/node_modules/@types/node": { - "version": "20.19.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", - "integrity": "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/happy-dom/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 52d89c164..e8706ad64 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -63,7 +63,7 @@ "autoprefixer": "^10.4.23", "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", - "happy-dom": "^20.0.11", + "happy-dom": "^20.5.0", "i18next-cli": "^1.36.1", "knip": "^5.81.0", "msw": "^2.12.8", From d0f1aab686166818d92d3130ec88d1491c33d08f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Feb 2026 18:51:18 +0000 Subject: [PATCH 031/104] build(deps): bump time from 0.3.43 to 0.3.47 Bumps [time](https://github.com/time-rs/time) from 0.3.43 to 0.3.47. - [Release notes](https://github.com/time-rs/time/releases) - [Changelog](https://github.com/time-rs/time/blob/main/CHANGELOG.md) - [Commits](https://github.com/time-rs/time/compare/v0.3.43...v0.3.47) --- updated-dependencies: - dependency-name: time dependency-version: 0.3.47 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- Cargo.lock | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a8c2d6f19..e993b690d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3960,9 +3960,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" [[package]] name = "num-integer" @@ -6287,31 +6287,32 @@ dependencies = [ [[package]] name = "time" -version = "0.3.43" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", + "itoa", "libc", "num-conv", "num_threads", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.24" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", From 91c900588cd8666aa62ac9c31b47c34494c1b7e5 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Fri, 6 Feb 2026 09:42:56 +0100 Subject: [PATCH 032/104] Make the compat login SSO redirect query parameters ignore invalid values --- crates/handlers/src/compat/login_sso_redirect.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/handlers/src/compat/login_sso_redirect.rs b/crates/handlers/src/compat/login_sso_redirect.rs index 1ad47c55e..f8b4435a1 100644 --- a/crates/handlers/src/compat/login_sso_redirect.rs +++ b/crates/handlers/src/compat/login_sso_redirect.rs @@ -13,18 +13,21 @@ use mas_router::{CompatLoginSsoAction, CompatLoginSsoComplete, UrlBuilder}; use mas_storage::{BoxRepository, compat::CompatSsoLoginRepository}; use rand::distributions::{Alphanumeric, DistString}; use serde::Deserialize; -use serde_with::serde; +use serde_with::{DefaultOnError, serde, serde_as}; use thiserror::Error; use url::Url; use crate::impl_from_error_for_route; +#[serde_as] #[derive(Debug, Deserialize)] pub struct Params { #[serde(rename = "redirectUrl")] redirect_url: Option, + #[serde_as(deserialize_as = "DefaultOnError")] action: Option, + #[serde_as(deserialize_as = "DefaultOnError")] #[serde(rename = "org.matrix.msc3824.action")] unstable_action: Option, } From 72eef700ce0d0614bc8d8076abb35c46ad4b5722 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Feb 2026 18:51:18 +0000 Subject: [PATCH 033/104] build(deps): bump time from 0.3.43 to 0.3.47 Bumps [time](https://github.com/time-rs/time) from 0.3.43 to 0.3.47. - [Release notes](https://github.com/time-rs/time/releases) - [Changelog](https://github.com/time-rs/time/blob/main/CHANGELOG.md) - [Commits](https://github.com/time-rs/time/compare/v0.3.43...v0.3.47) --- updated-dependencies: - dependency-name: time dependency-version: 0.3.47 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- Cargo.lock | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9d54d9e89..0699c7203 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3950,9 +3950,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" [[package]] name = "num-integer" @@ -6276,31 +6276,32 @@ dependencies = [ [[package]] name = "time" -version = "0.3.43" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", + "itoa", "libc", "num-conv", "num_threads", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.24" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", From c66012772102b47e8e15bcba87c692d2d832b13b Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Fri, 6 Feb 2026 11:31:39 +0100 Subject: [PATCH 034/104] Use #[serde(other)] for unknown values instead of serde_with::DefaultOnError --- .../handlers/src/compat/login_sso_complete.rs | 4 +- .../handlers/src/compat/login_sso_redirect.rs | 45 +++++++++++++++---- crates/router/src/endpoints.rs | 10 +++++ 3 files changed, 49 insertions(+), 10 deletions(-) diff --git a/crates/handlers/src/compat/login_sso_complete.rs b/crates/handlers/src/compat/login_sso_complete.rs index 84c8f8525..df059cd36 100644 --- a/crates/handlers/src/compat/login_sso_complete.rs +++ b/crates/handlers/src/compat/login_sso_complete.rs @@ -83,7 +83,7 @@ pub async fn get( Some(CompatLoginSsoAction::Register) => { url_builder.redirect(&mas_router::Register::and_continue_compat_sso_login(id)) } - Some(CompatLoginSsoAction::Login) | None => { + Some(CompatLoginSsoAction::Login | CompatLoginSsoAction::Unknown) | None => { url_builder.redirect(&mas_router::Login::and_continue_compat_sso_login(id)) } }; @@ -224,7 +224,7 @@ pub async fn post( Some(CompatLoginSsoAction::Register) => { url_builder.redirect(&mas_router::Register::and_continue_compat_sso_login(id)) } - Some(CompatLoginSsoAction::Login) | None => { + Some(CompatLoginSsoAction::Login | CompatLoginSsoAction::Unknown) | None => { url_builder.redirect(&mas_router::Login::and_continue_compat_sso_login(id)) } }; diff --git a/crates/handlers/src/compat/login_sso_redirect.rs b/crates/handlers/src/compat/login_sso_redirect.rs index f8b4435a1..8edb868fd 100644 --- a/crates/handlers/src/compat/login_sso_redirect.rs +++ b/crates/handlers/src/compat/login_sso_redirect.rs @@ -13,25 +13,30 @@ use mas_router::{CompatLoginSsoAction, CompatLoginSsoComplete, UrlBuilder}; use mas_storage::{BoxRepository, compat::CompatSsoLoginRepository}; use rand::distributions::{Alphanumeric, DistString}; use serde::Deserialize; -use serde_with::{DefaultOnError, serde, serde_as}; use thiserror::Error; use url::Url; use crate::impl_from_error_for_route; -#[serde_as] #[derive(Debug, Deserialize)] pub struct Params { #[serde(rename = "redirectUrl")] redirect_url: Option, - #[serde_as(deserialize_as = "DefaultOnError")] + action: Option, - #[serde_as(deserialize_as = "DefaultOnError")] #[serde(rename = "org.matrix.msc3824.action")] unstable_action: Option, } +impl Params { + fn action(&self) -> Option { + self.action + .filter(CompatLoginSsoAction::is_known) + .or(self.unstable_action.filter(CompatLoginSsoAction::is_known)) + } +} + #[derive(Debug, Error)] pub enum RouteError { #[error(transparent)] @@ -65,6 +70,8 @@ pub async fn get( State(url_builder): State, Query(params): Query, ) -> Result { + let action = params.action(); + // Check the redirectUrl parameter let redirect_url = params.redirect_url.ok_or(RouteError::MissingRedirectUrl)?; let redirect_url = Url::parse(&redirect_url).map_err(|_| RouteError::InvalidRedirectUrl)?; @@ -87,10 +94,7 @@ pub async fn get( repo.save().await?; - Ok(url_builder.absolute_redirect(&CompatLoginSsoComplete::new( - login.id, - params.action.or(params.unstable_action), - ))) + Ok(url_builder.absolute_redirect(&CompatLoginSsoComplete::new(login.id, action))) } #[cfg(test)] @@ -124,4 +128,29 @@ mod tests { assert!(location.contains("org.matrix.msc3824.action=register")); assert!(location.contains("action=register")); } + + #[sqlx::test(migrator = "mas_storage_pg::MIGRATOR")] + async fn test_unknown_action(pool: PgPool) { + let state: TestState = TestState::from_pool(pool).await.unwrap(); + + let request = Request::get( + "/_matrix/client/v3/login/sso/redirect?\ + redirectUrl=http://example.com/\ + &org.matrix.msc3824.action=undefinedaction", + ) + .empty(); + + let response = state.request(request).await; + + response.assert_status(StatusCode::SEE_OTHER); + + let location = response + .headers() + .get("Location") + .unwrap() + .to_str() + .unwrap(); + assert!(!location.contains("org.matrix.msc3824.action")); + assert!(!location.contains("action")); + } } diff --git a/crates/router/src/endpoints.rs b/crates/router/src/endpoints.rs index 37c200aac..6aa18f13d 100644 --- a/crates/router/src/endpoints.rs +++ b/crates/router/src/endpoints.rs @@ -628,6 +628,16 @@ impl SimpleRoute for CompatLoginSsoRedirectIdp { pub enum CompatLoginSsoAction { Login, Register, + #[serde(other)] + Unknown, +} + +impl CompatLoginSsoAction { + /// Returns true if the action is a known action. + #[must_use] + pub fn is_known(&self) -> bool { + !matches!(self, Self::Unknown) + } } #[derive(Debug, Serialize, Deserialize, Clone, Copy)] From e2c0cee6f13f1819d87782742bee229a9105cee4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 6 Feb 2026 11:02:32 +0000 Subject: [PATCH 035/104] 1.11.0-rc.1 --- Cargo.lock | 56 +++++++++++++++++++++++++------------------------- Cargo.toml | 60 +++++++++++++++++++++++++++--------------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0699c7203..6cd5e3ebb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3097,7 +3097,7 @@ dependencies = [ [[package]] name = "mas-axum-utils" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "anyhow", "axum", @@ -3131,7 +3131,7 @@ dependencies = [ [[package]] name = "mas-cli" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "anyhow", "axum", @@ -3206,7 +3206,7 @@ dependencies = [ [[package]] name = "mas-config" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "anyhow", "camino", @@ -3237,7 +3237,7 @@ dependencies = [ [[package]] name = "mas-context" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "console", "opentelemetry", @@ -3253,7 +3253,7 @@ dependencies = [ [[package]] name = "mas-data-model" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "base64ct", "chrono", @@ -3276,7 +3276,7 @@ dependencies = [ [[package]] name = "mas-email" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "async-trait", "lettre", @@ -3287,7 +3287,7 @@ dependencies = [ [[package]] name = "mas-handlers" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "aide", "anyhow", @@ -3367,7 +3367,7 @@ dependencies = [ [[package]] name = "mas-http" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "futures-util", "headers", @@ -3388,7 +3388,7 @@ dependencies = [ [[package]] name = "mas-i18n" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "camino", "icu_calendar", @@ -3410,7 +3410,7 @@ dependencies = [ [[package]] name = "mas-i18n-scan" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "camino", "clap", @@ -3424,7 +3424,7 @@ dependencies = [ [[package]] name = "mas-iana" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "schemars 0.9.0", "serde", @@ -3432,7 +3432,7 @@ dependencies = [ [[package]] name = "mas-iana-codegen" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "anyhow", "async-trait", @@ -3449,7 +3449,7 @@ dependencies = [ [[package]] name = "mas-jose" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "base64ct", "chrono", @@ -3479,7 +3479,7 @@ dependencies = [ [[package]] name = "mas-keystore" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "aead", "base64ct", @@ -3507,7 +3507,7 @@ dependencies = [ [[package]] name = "mas-listener" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "anyhow", "bytes", @@ -3531,7 +3531,7 @@ dependencies = [ [[package]] name = "mas-matrix" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "anyhow", "async-trait", @@ -3541,7 +3541,7 @@ dependencies = [ [[package]] name = "mas-matrix-synapse" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "anyhow", "async-trait", @@ -3558,7 +3558,7 @@ dependencies = [ [[package]] name = "mas-oidc-client" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "assert_matches", "async-trait", @@ -3594,7 +3594,7 @@ dependencies = [ [[package]] name = "mas-policy" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "anyhow", "arc-swap", @@ -3611,7 +3611,7 @@ dependencies = [ [[package]] name = "mas-router" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "axum", "serde", @@ -3622,7 +3622,7 @@ dependencies = [ [[package]] name = "mas-spa" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "camino", "serde", @@ -3631,7 +3631,7 @@ dependencies = [ [[package]] name = "mas-storage" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "async-trait", "chrono", @@ -3653,7 +3653,7 @@ dependencies = [ [[package]] name = "mas-storage-pg" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "async-trait", "chrono", @@ -3683,7 +3683,7 @@ dependencies = [ [[package]] name = "mas-tasks" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "anyhow", "async-trait", @@ -3715,7 +3715,7 @@ dependencies = [ [[package]] name = "mas-templates" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "anyhow", "arc-swap", @@ -3747,7 +3747,7 @@ dependencies = [ [[package]] name = "mas-tower" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "http", "opentelemetry", @@ -4016,7 +4016,7 @@ dependencies = [ [[package]] name = "oauth2-types" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "assert_matches", "base64ct", @@ -6120,7 +6120,7 @@ dependencies = [ [[package]] name = "syn2mas" -version = "1.11.0-rc.0" +version = "1.11.0-rc.1" dependencies = [ "anyhow", "arc-swap", diff --git a/Cargo.toml b/Cargo.toml index 0f98906bc..8deb5b050 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ members = ["crates/*"] resolver = "2" # Updated in the CI with a `sed` command -package.version = "1.11.0-rc.0" +package.version = "1.11.0-rc.1" package.license = "AGPL-3.0-only OR LicenseRef-Element-Commercial" package.authors = ["Element Backend Team"] package.edition = "2024" @@ -34,35 +34,35 @@ broken_intra_doc_links = "deny" [workspace.dependencies] # Workspace crates -mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.11.0-rc.0" } -mas-cli = { path = "./crates/cli/", version = "=1.11.0-rc.0" } -mas-config = { path = "./crates/config/", version = "=1.11.0-rc.0" } -mas-context = { path = "./crates/context/", version = "=1.11.0-rc.0" } -mas-data-model = { path = "./crates/data-model/", version = "=1.11.0-rc.0" } -mas-email = { path = "./crates/email/", version = "=1.11.0-rc.0" } -mas-graphql = { path = "./crates/graphql/", version = "=1.11.0-rc.0" } -mas-handlers = { path = "./crates/handlers/", version = "=1.11.0-rc.0" } -mas-http = { path = "./crates/http/", version = "=1.11.0-rc.0" } -mas-i18n = { path = "./crates/i18n/", version = "=1.11.0-rc.0" } -mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.11.0-rc.0" } -mas-iana = { path = "./crates/iana/", version = "=1.11.0-rc.0" } -mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.11.0-rc.0" } -mas-jose = { path = "./crates/jose/", version = "=1.11.0-rc.0" } -mas-keystore = { path = "./crates/keystore/", version = "=1.11.0-rc.0" } -mas-listener = { path = "./crates/listener/", version = "=1.11.0-rc.0" } -mas-matrix = { path = "./crates/matrix/", version = "=1.11.0-rc.0" } -mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.11.0-rc.0" } -mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.11.0-rc.0" } -mas-policy = { path = "./crates/policy/", version = "=1.11.0-rc.0" } -mas-router = { path = "./crates/router/", version = "=1.11.0-rc.0" } -mas-spa = { path = "./crates/spa/", version = "=1.11.0-rc.0" } -mas-storage = { path = "./crates/storage/", version = "=1.11.0-rc.0" } -mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.11.0-rc.0" } -mas-tasks = { path = "./crates/tasks/", version = "=1.11.0-rc.0" } -mas-templates = { path = "./crates/templates/", version = "=1.11.0-rc.0" } -mas-tower = { path = "./crates/tower/", version = "=1.11.0-rc.0" } -oauth2-types = { path = "./crates/oauth2-types/", version = "=1.11.0-rc.0" } -syn2mas = { path = "./crates/syn2mas", version = "=1.11.0-rc.0" } +mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.11.0-rc.1" } +mas-cli = { path = "./crates/cli/", version = "=1.11.0-rc.1" } +mas-config = { path = "./crates/config/", version = "=1.11.0-rc.1" } +mas-context = { path = "./crates/context/", version = "=1.11.0-rc.1" } +mas-data-model = { path = "./crates/data-model/", version = "=1.11.0-rc.1" } +mas-email = { path = "./crates/email/", version = "=1.11.0-rc.1" } +mas-graphql = { path = "./crates/graphql/", version = "=1.11.0-rc.1" } +mas-handlers = { path = "./crates/handlers/", version = "=1.11.0-rc.1" } +mas-http = { path = "./crates/http/", version = "=1.11.0-rc.1" } +mas-i18n = { path = "./crates/i18n/", version = "=1.11.0-rc.1" } +mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.11.0-rc.1" } +mas-iana = { path = "./crates/iana/", version = "=1.11.0-rc.1" } +mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.11.0-rc.1" } +mas-jose = { path = "./crates/jose/", version = "=1.11.0-rc.1" } +mas-keystore = { path = "./crates/keystore/", version = "=1.11.0-rc.1" } +mas-listener = { path = "./crates/listener/", version = "=1.11.0-rc.1" } +mas-matrix = { path = "./crates/matrix/", version = "=1.11.0-rc.1" } +mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.11.0-rc.1" } +mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.11.0-rc.1" } +mas-policy = { path = "./crates/policy/", version = "=1.11.0-rc.1" } +mas-router = { path = "./crates/router/", version = "=1.11.0-rc.1" } +mas-spa = { path = "./crates/spa/", version = "=1.11.0-rc.1" } +mas-storage = { path = "./crates/storage/", version = "=1.11.0-rc.1" } +mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.11.0-rc.1" } +mas-tasks = { path = "./crates/tasks/", version = "=1.11.0-rc.1" } +mas-templates = { path = "./crates/templates/", version = "=1.11.0-rc.1" } +mas-tower = { path = "./crates/tower/", version = "=1.11.0-rc.1" } +oauth2-types = { path = "./crates/oauth2-types/", version = "=1.11.0-rc.1" } +syn2mas = { path = "./crates/syn2mas", version = "=1.11.0-rc.1" } # OpenAPI schema generation and validation [workspace.dependencies.aide] From aa5a9677a4e6947e53b168274dafaaa89c74f6d0 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Thu, 5 Feb 2026 11:56:19 +0100 Subject: [PATCH 036/104] Upgrade Rust to 1.93, Debian base image & other tools (#5471) --- .github/actions/build-policies/action.yml | 2 +- .github/workflows/ci.yaml | 4 ++-- Dockerfile | 16 +++++++++------- crates/config/src/sections/clients.rs | 13 ------------- crates/config/src/sections/email.rs | 9 --------- policies/Makefile | 4 ++-- 6 files changed, 14 insertions(+), 34 deletions(-) diff --git a/.github/actions/build-policies/action.yml b/.github/actions/build-policies/action.yml index e1dc28547..6264047ef 100644 --- a/.github/actions/build-policies/action.yml +++ b/.github/actions/build-policies/action.yml @@ -13,7 +13,7 @@ runs: uses: open-policy-agent/setup-opa@v2.2.0 with: # Keep in sync with the Dockerfile and policies/Makefile - version: 1.8.0 + version: 1.13.1 - name: Build the policies run: make diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 8dc71d0d6..2998edb02 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -42,7 +42,7 @@ jobs: uses: StyraInc/setup-regal@v1 with: # Keep in sync with policies/Makefile - version: 0.36.1 + version: 0.38.1 - name: Lint policies working-directory: ./policies @@ -216,7 +216,7 @@ jobs: uses: actions/checkout@v6 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@1.89.0 + uses: dtolnay/rust-toolchain@1.93.0 with: components: clippy diff --git a/Dockerfile b/Dockerfile index 479dee308..ba2ed16c8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,5 @@ -# syntax = docker/dockerfile:1.7.1 +# syntax = docker/dockerfile:1.21.0 +# Copyright 2025, 2026 Element Creations Ltd. # Copyright 2025 New Vector Ltd. # # SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial @@ -10,13 +11,14 @@ # being the platform being built. # The Debian version and version name must be in sync -ARG DEBIAN_VERSION=12 -ARG DEBIAN_VERSION_NAME=bookworm -ARG RUSTC_VERSION=1.89.0 -ARG NODEJS_VERSION=24.11.0 +ARG DEBIAN_VERSION=13 +ARG DEBIAN_VERSION_NAME=trixie +# Keep in sync with .github/workflows/ci.yaml +ARG RUSTC_VERSION=1.93.0 +ARG NODEJS_VERSION=24.13.0 # Keep in sync with .github/actions/build-policies/action.yml and policies/Makefile -ARG OPA_VERSION=1.8.0 -ARG CARGO_AUDITABLE_VERSION=0.7.0 +ARG OPA_VERSION=1.13.1 +ARG CARGO_AUDITABLE_VERSION=0.7.2 ########################################## ## Build stage that builds the frontend ## diff --git a/crates/config/src/sections/clients.rs b/crates/config/src/sections/clients.rs index 8b9120045..2387d642d 100644 --- a/crates/config/src/sections/clients.rs +++ b/crates/config/src/sections/clients.rs @@ -16,19 +16,6 @@ use url::Url; use super::{ClientSecret, ClientSecretRaw, ConfigurationSection}; -#[derive(JsonSchema, Serialize, Deserialize, Clone, Debug)] -#[serde(rename_all = "snake_case")] -pub enum JwksOrJwksUri { - Jwks(PublicJsonWebKeySet), - JwksUri(Url), -} - -impl From for JwksOrJwksUri { - fn from(jwks: PublicJsonWebKeySet) -> Self { - Self::Jwks(jwks) - } -} - /// Authentication method used by clients #[derive(JsonSchema, Serialize, Deserialize, Copy, Clone, Debug)] #[serde(rename_all = "snake_case")] diff --git a/crates/config/src/sections/email.rs b/crates/config/src/sections/email.rs index 3df0c99db..8c365e3e5 100644 --- a/crates/config/src/sections/email.rs +++ b/crates/config/src/sections/email.rs @@ -14,15 +14,6 @@ use serde::{Deserialize, Serialize, de::Error}; use super::ConfigurationSection; -#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)] -pub struct Credentials { - /// Username for use to authenticate when connecting to the SMTP server - pub username: String, - - /// Password for use to authenticate when connecting to the SMTP server - pub password: String, -} - /// Encryption mode to use #[derive(Clone, Copy, Debug, Serialize, Deserialize, JsonSchema)] #[serde(rename_all = "lowercase")] diff --git a/policies/Makefile b/policies/Makefile index db5991672..de4d063ad 100644 --- a/policies/Makefile +++ b/policies/Makefile @@ -7,9 +7,9 @@ DOCKER := 0 PODMAN := 0 # Keep in sync with Dockerfile and .github/actions/build-policies/action.yml -OPA_DOCKER_IMAGE := docker.io/openpolicyagent/opa:1.8.0-debug +OPA_DOCKER_IMAGE := docker.io/openpolicyagent/opa:1.13.1 # Keep in sync with .github/workflows/ci.yaml -REGAL_DOCKER_IMAGE := ghcr.io/open-policy-agent/regal:0.36.1 +REGAL_DOCKER_IMAGE := ghcr.io/open-policy-agent/regal:0.38.1 INPUTS := \ common/common.rego \ From 3e706859f98733c295991c2efc47e76884ec1b7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Feb 2026 13:55:10 +0000 Subject: [PATCH 037/104] build(deps-dev): bump postcss-nesting from 13.0.2 to 14.0.0 in /frontend Bumps [postcss-nesting](https://github.com/csstools/postcss-plugins/tree/HEAD/plugins/postcss-nesting) from 13.0.2 to 14.0.0. - [Changelog](https://github.com/csstools/postcss-plugins/blob/main/plugins/postcss-nesting/CHANGELOG.md) - [Commits](https://github.com/csstools/postcss-plugins/commits/HEAD/plugins/postcss-nesting) --- updated-dependencies: - dependency-name: postcss-nesting dependency-version: 14.0.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 36 ++++++++++++++++++------------------ frontend/package.json | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index fd27e8d35..6f0fe74b9 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -60,7 +60,7 @@ "msw-storybook-addon": "^2.0.6", "postcss": "^8.5.6", "postcss-import": "^16.1.1", - "postcss-nesting": "^13.0.2", + "postcss-nesting": "^14.0.0", "rimraf": "^6.1.2", "storybook": "^10.1.11", "tailwindcss": "^3.4.19", @@ -1177,9 +1177,9 @@ } }, "node_modules/@csstools/selector-resolve-nested": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz", - "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-4.0.0.tgz", + "integrity": "sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==", "dev": true, "funding": [ { @@ -1193,16 +1193,16 @@ ], "license": "MIT-0", "engines": { - "node": ">=18" + "node": ">=20.19.0" }, "peerDependencies": { - "postcss-selector-parser": "^7.0.0" + "postcss-selector-parser": "^7.1.1" } }, "node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-6.0.0.tgz", + "integrity": "sha512-4sSgl78OtOXEX/2d++8A83zHNTgwCJMaR24FvsYL7Uf/VS8HZk9PTwR51elTbGqMuwH3szLvvOXEaVnqn0Z3zA==", "dev": true, "funding": [ { @@ -1216,10 +1216,10 @@ ], "license": "MIT-0", "engines": { - "node": ">=18" + "node": ">=20.19.0" }, "peerDependencies": { - "postcss-selector-parser": "^7.0.0" + "postcss-selector-parser": "^7.1.1" } }, "node_modules/@emnapi/core": { @@ -11160,9 +11160,9 @@ } }, "node_modules/postcss-nesting": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", - "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-14.0.0.tgz", + "integrity": "sha512-YGFOfVrjxYfeGTS5XctP1WCI5hu8Lr9SmntjfRC+iX5hCihEO+QZl9Ra+pkjqkgoVdDKvb2JccpElcowhZtzpw==", "dev": true, "funding": [ { @@ -11176,12 +11176,12 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/selector-resolve-nested": "^3.1.0", - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" + "@csstools/selector-resolve-nested": "^4.0.0", + "@csstools/selector-specificity": "^6.0.0", + "postcss-selector-parser": "^7.1.1" }, "engines": { - "node": ">=18" + "node": ">=20.19.0" }, "peerDependencies": { "postcss": "^8.4" diff --git a/frontend/package.json b/frontend/package.json index a51b2e554..1bcd9357a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -70,7 +70,7 @@ "msw-storybook-addon": "^2.0.6", "postcss": "^8.5.6", "postcss-import": "^16.1.1", - "postcss-nesting": "^13.0.2", + "postcss-nesting": "^14.0.0", "rimraf": "^6.1.2", "storybook": "^10.1.11", "tailwindcss": "^3.4.19", From f4d9808a21ae32b41740040a3bd48b2f179decbf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Feb 2026 13:55:12 +0000 Subject: [PATCH 038/104] build(deps): bump bcrypt from 0.17.1 to 0.18.0 Bumps [bcrypt](https://github.com/Keats/rust-bcrypt) from 0.17.1 to 0.18.0. - [Commits](https://github.com/Keats/rust-bcrypt/compare/v0.17.1...v0.18.0) --- updated-dependencies: - dependency-name: bcrypt dependency-version: 0.18.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fa7907595..23182d7d1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -680,9 +680,9 @@ checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "bcrypt" -version = "0.17.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abaf6da45c74385272ddf00e1ac074c7d8a6c1a1dda376902bd6a427522a8b2c" +checksum = "9a0f5948f30df5f43ac29d310b7476793be97c50787e6ef4a63d960a0d0be827" dependencies = [ "base64", "blowfish", diff --git a/Cargo.toml b/Cargo.toml index 45cbfd08e..ca47c91ee 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -124,7 +124,7 @@ features = ["std"] # Bcrypt password hashing [workspace.dependencies.bcrypt] -version = "0.17.1" +version = "0.18.0" default-features = true # Packed bitfields From 56a37fc7aeec28a2d844ea74492232a4be50d69c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Beno=C3=AEt=20Grimaldi?= Date: Sat, 7 Feb 2026 11:44:22 +0100 Subject: [PATCH 039/104] Fix wrong username regex --- frontend/src/entrypoints/templates.ts | 2 +- policies/register/register.rego | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/entrypoints/templates.ts b/frontend/src/entrypoints/templates.ts index 2e0cf93d2..77587ee58 100644 --- a/frontend/src/entrypoints/templates.ts +++ b/frontend/src/entrypoints/templates.ts @@ -10,7 +10,7 @@ // Ideally later on we could find a way to hydrate full React components instead // of doing this, as this can very quickly get out of hands. -const VALID_USERNAME_RE = /^\s*([a-z0-9.=_/-]+|@[a-z0-9.=_/-]+(:.*)?)\s*$/g; +const VALID_USERNAME_RE = /^\s*([a-z0-9.=_/+-]+|@[a-z0-9.=_/+-]+(:.*)?)\s*$/g; /** Grab the nearest error message inserted by the templates by error kind and code */ function grabErrorMessage( diff --git a/policies/register/register.rego b/policies/register/register.rego index 89002a075..93ef86a0d 100644 --- a/policies/register/register.rego +++ b/policies/register/register.rego @@ -49,7 +49,7 @@ violation contains { "field": "username", "code": "username-invalid-chars", "msg": "username contains invalid characters", } if { - not regex.match(`^[a-z0-9.=_/-]+$`, input.username) + not regex.match(`^[a-z0-9.=_/+-]+$`, input.username) } violation contains { From e42a634f265096229f5a17d56d60461e4328796d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 13:29:34 +0000 Subject: [PATCH 040/104] Translations updates --- frontend/.storybook/locales.ts | 66 +++++++++++++++++----------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/frontend/.storybook/locales.ts b/frontend/.storybook/locales.ts index 9a545003e..b0f0f3731 100644 --- a/frontend/.storybook/locales.ts +++ b/frontend/.storybook/locales.ts @@ -27,7 +27,7 @@ export type LocalazyMetadata = { }; const localazyMetadata: LocalazyMetadata = { - projectUrl: "https://localazy.com/p/matrix-authentication-service", + projectUrl: "https://localazy.com/p/matrix-authentication-service!v1.11", baseLocale: "en", languages: [ { @@ -181,22 +181,22 @@ const localazyMetadata: LocalazyMetadata = { file: "frontend.json", path: "", cdnFiles: { - "cs": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/cs/frontend.json", - "da": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/da/frontend.json", - "de": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/de/frontend.json", - "en": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/en/frontend.json", - "et": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/et/frontend.json", - "fi": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fi/frontend.json", - "fr": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fr/frontend.json", - "hu": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/hu/frontend.json", - "nb_NO": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nb-NO/frontend.json", - "nl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nl/frontend.json", - "pl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pl/frontend.json", - "pt": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt/frontend.json", - "ru": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/ru/frontend.json", - "sv": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sv/frontend.json", - "uk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uk/frontend.json", - "zh#Hans": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/zh-Hans/frontend.json" + "cs": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/cs/frontend.json", + "da": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/da/frontend.json", + "de": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/de/frontend.json", + "en": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/en/frontend.json", + "et": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/et/frontend.json", + "fi": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fi/frontend.json", + "fr": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fr/frontend.json", + "hu": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/hu/frontend.json", + "nb_NO": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nb-NO/frontend.json", + "nl": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nl/frontend.json", + "pl": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pl/frontend.json", + "pt": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt/frontend.json", + "ru": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/ru/frontend.json", + "sv": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sv/frontend.json", + "uk": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uk/frontend.json", + "zh#Hans": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/zh-Hans/frontend.json" } }, { @@ -204,22 +204,22 @@ const localazyMetadata: LocalazyMetadata = { file: "file.json", path: "", cdnFiles: { - "cs": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/cs/file.json", - "da": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/da/file.json", - "de": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/de/file.json", - "en": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/en/file.json", - "et": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/et/file.json", - "fi": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fi/file.json", - "fr": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fr/file.json", - "hu": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/hu/file.json", - "nb_NO": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nb-NO/file.json", - "nl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nl/file.json", - "pl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pl/file.json", - "pt": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt/file.json", - "ru": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/ru/file.json", - "sv": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sv/file.json", - "uk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uk/file.json", - "zh#Hans": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/zh-Hans/file.json" + "cs": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/cs/file.json", + "da": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/da/file.json", + "de": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/de/file.json", + "en": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/en/file.json", + "et": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/et/file.json", + "fi": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fi/file.json", + "fr": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fr/file.json", + "hu": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/hu/file.json", + "nb_NO": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nb-NO/file.json", + "nl": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nl/file.json", + "pl": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pl/file.json", + "pt": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt/file.json", + "ru": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/ru/file.json", + "sv": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sv/file.json", + "uk": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uk/file.json", + "zh#Hans": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/zh-Hans/file.json" } } ] From 2b081f79b1515c7debfe25fc03ce22341a963985 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 13:34:45 +0000 Subject: [PATCH 041/104] 1.11.0 --- Cargo.lock | 56 +++++++++++++++++++++++++------------------------- Cargo.toml | 60 +++++++++++++++++++++++++++--------------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6cd5e3ebb..1b7f52065 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3097,7 +3097,7 @@ dependencies = [ [[package]] name = "mas-axum-utils" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "anyhow", "axum", @@ -3131,7 +3131,7 @@ dependencies = [ [[package]] name = "mas-cli" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "anyhow", "axum", @@ -3206,7 +3206,7 @@ dependencies = [ [[package]] name = "mas-config" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "anyhow", "camino", @@ -3237,7 +3237,7 @@ dependencies = [ [[package]] name = "mas-context" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "console", "opentelemetry", @@ -3253,7 +3253,7 @@ dependencies = [ [[package]] name = "mas-data-model" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "base64ct", "chrono", @@ -3276,7 +3276,7 @@ dependencies = [ [[package]] name = "mas-email" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "async-trait", "lettre", @@ -3287,7 +3287,7 @@ dependencies = [ [[package]] name = "mas-handlers" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "aide", "anyhow", @@ -3367,7 +3367,7 @@ dependencies = [ [[package]] name = "mas-http" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "futures-util", "headers", @@ -3388,7 +3388,7 @@ dependencies = [ [[package]] name = "mas-i18n" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "camino", "icu_calendar", @@ -3410,7 +3410,7 @@ dependencies = [ [[package]] name = "mas-i18n-scan" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "camino", "clap", @@ -3424,7 +3424,7 @@ dependencies = [ [[package]] name = "mas-iana" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "schemars 0.9.0", "serde", @@ -3432,7 +3432,7 @@ dependencies = [ [[package]] name = "mas-iana-codegen" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "anyhow", "async-trait", @@ -3449,7 +3449,7 @@ dependencies = [ [[package]] name = "mas-jose" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "base64ct", "chrono", @@ -3479,7 +3479,7 @@ dependencies = [ [[package]] name = "mas-keystore" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "aead", "base64ct", @@ -3507,7 +3507,7 @@ dependencies = [ [[package]] name = "mas-listener" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "anyhow", "bytes", @@ -3531,7 +3531,7 @@ dependencies = [ [[package]] name = "mas-matrix" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "anyhow", "async-trait", @@ -3541,7 +3541,7 @@ dependencies = [ [[package]] name = "mas-matrix-synapse" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "anyhow", "async-trait", @@ -3558,7 +3558,7 @@ dependencies = [ [[package]] name = "mas-oidc-client" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "assert_matches", "async-trait", @@ -3594,7 +3594,7 @@ dependencies = [ [[package]] name = "mas-policy" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "anyhow", "arc-swap", @@ -3611,7 +3611,7 @@ dependencies = [ [[package]] name = "mas-router" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "axum", "serde", @@ -3622,7 +3622,7 @@ dependencies = [ [[package]] name = "mas-spa" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "camino", "serde", @@ -3631,7 +3631,7 @@ dependencies = [ [[package]] name = "mas-storage" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "async-trait", "chrono", @@ -3653,7 +3653,7 @@ dependencies = [ [[package]] name = "mas-storage-pg" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "async-trait", "chrono", @@ -3683,7 +3683,7 @@ dependencies = [ [[package]] name = "mas-tasks" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "anyhow", "async-trait", @@ -3715,7 +3715,7 @@ dependencies = [ [[package]] name = "mas-templates" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "anyhow", "arc-swap", @@ -3747,7 +3747,7 @@ dependencies = [ [[package]] name = "mas-tower" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "http", "opentelemetry", @@ -4016,7 +4016,7 @@ dependencies = [ [[package]] name = "oauth2-types" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "assert_matches", "base64ct", @@ -6120,7 +6120,7 @@ dependencies = [ [[package]] name = "syn2mas" -version = "1.11.0-rc.1" +version = "1.11.0" dependencies = [ "anyhow", "arc-swap", diff --git a/Cargo.toml b/Cargo.toml index 8deb5b050..77af03c5c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ members = ["crates/*"] resolver = "2" # Updated in the CI with a `sed` command -package.version = "1.11.0-rc.1" +package.version = "1.11.0" package.license = "AGPL-3.0-only OR LicenseRef-Element-Commercial" package.authors = ["Element Backend Team"] package.edition = "2024" @@ -34,35 +34,35 @@ broken_intra_doc_links = "deny" [workspace.dependencies] # Workspace crates -mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.11.0-rc.1" } -mas-cli = { path = "./crates/cli/", version = "=1.11.0-rc.1" } -mas-config = { path = "./crates/config/", version = "=1.11.0-rc.1" } -mas-context = { path = "./crates/context/", version = "=1.11.0-rc.1" } -mas-data-model = { path = "./crates/data-model/", version = "=1.11.0-rc.1" } -mas-email = { path = "./crates/email/", version = "=1.11.0-rc.1" } -mas-graphql = { path = "./crates/graphql/", version = "=1.11.0-rc.1" } -mas-handlers = { path = "./crates/handlers/", version = "=1.11.0-rc.1" } -mas-http = { path = "./crates/http/", version = "=1.11.0-rc.1" } -mas-i18n = { path = "./crates/i18n/", version = "=1.11.0-rc.1" } -mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.11.0-rc.1" } -mas-iana = { path = "./crates/iana/", version = "=1.11.0-rc.1" } -mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.11.0-rc.1" } -mas-jose = { path = "./crates/jose/", version = "=1.11.0-rc.1" } -mas-keystore = { path = "./crates/keystore/", version = "=1.11.0-rc.1" } -mas-listener = { path = "./crates/listener/", version = "=1.11.0-rc.1" } -mas-matrix = { path = "./crates/matrix/", version = "=1.11.0-rc.1" } -mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.11.0-rc.1" } -mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.11.0-rc.1" } -mas-policy = { path = "./crates/policy/", version = "=1.11.0-rc.1" } -mas-router = { path = "./crates/router/", version = "=1.11.0-rc.1" } -mas-spa = { path = "./crates/spa/", version = "=1.11.0-rc.1" } -mas-storage = { path = "./crates/storage/", version = "=1.11.0-rc.1" } -mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.11.0-rc.1" } -mas-tasks = { path = "./crates/tasks/", version = "=1.11.0-rc.1" } -mas-templates = { path = "./crates/templates/", version = "=1.11.0-rc.1" } -mas-tower = { path = "./crates/tower/", version = "=1.11.0-rc.1" } -oauth2-types = { path = "./crates/oauth2-types/", version = "=1.11.0-rc.1" } -syn2mas = { path = "./crates/syn2mas", version = "=1.11.0-rc.1" } +mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.11.0" } +mas-cli = { path = "./crates/cli/", version = "=1.11.0" } +mas-config = { path = "./crates/config/", version = "=1.11.0" } +mas-context = { path = "./crates/context/", version = "=1.11.0" } +mas-data-model = { path = "./crates/data-model/", version = "=1.11.0" } +mas-email = { path = "./crates/email/", version = "=1.11.0" } +mas-graphql = { path = "./crates/graphql/", version = "=1.11.0" } +mas-handlers = { path = "./crates/handlers/", version = "=1.11.0" } +mas-http = { path = "./crates/http/", version = "=1.11.0" } +mas-i18n = { path = "./crates/i18n/", version = "=1.11.0" } +mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.11.0" } +mas-iana = { path = "./crates/iana/", version = "=1.11.0" } +mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.11.0" } +mas-jose = { path = "./crates/jose/", version = "=1.11.0" } +mas-keystore = { path = "./crates/keystore/", version = "=1.11.0" } +mas-listener = { path = "./crates/listener/", version = "=1.11.0" } +mas-matrix = { path = "./crates/matrix/", version = "=1.11.0" } +mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.11.0" } +mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.11.0" } +mas-policy = { path = "./crates/policy/", version = "=1.11.0" } +mas-router = { path = "./crates/router/", version = "=1.11.0" } +mas-spa = { path = "./crates/spa/", version = "=1.11.0" } +mas-storage = { path = "./crates/storage/", version = "=1.11.0" } +mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.11.0" } +mas-tasks = { path = "./crates/tasks/", version = "=1.11.0" } +mas-templates = { path = "./crates/templates/", version = "=1.11.0" } +mas-tower = { path = "./crates/tower/", version = "=1.11.0" } +oauth2-types = { path = "./crates/oauth2-types/", version = "=1.11.0" } +syn2mas = { path = "./crates/syn2mas", version = "=1.11.0" } # OpenAPI schema generation and validation [workspace.dependencies.aide] From bc78f47b8fdf27b42491197d1ec5de74a81a13ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 13:54:48 +0000 Subject: [PATCH 042/104] build(deps): bump the i18next group across 1 directory with 3 updates Bumps the i18next group with 3 updates in the /frontend directory: [i18next](https://github.com/i18next/i18next), [react-i18next](https://github.com/i18next/react-i18next) and [i18next-cli](https://github.com/i18next/i18next-cli). Updates `i18next` from 25.7.4 to 25.8.0 - [Release notes](https://github.com/i18next/i18next/releases) - [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next/compare/v25.7.4...v25.8.0) Updates `react-i18next` from 16.5.3 to 16.5.4 - [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/react-i18next/compare/v16.5.3...v16.5.4) Updates `i18next-cli` from 1.36.1 to 1.39.9 - [Changelog](https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next-cli/compare/v1.36.1...v1.39.9) --- updated-dependencies: - dependency-name: i18next dependency-version: 25.8.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: i18next - dependency-name: react-i18next dependency-version: 16.5.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: i18next - dependency-name: i18next-cli dependency-version: 1.39.9 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: i18next ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 384 ++++++++++++++++++------------------- frontend/package.json | 6 +- 2 files changed, 195 insertions(+), 195 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index fd27e8d35..edbfd1e74 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -20,10 +20,10 @@ "@zxcvbn-ts/language-common": "^3.0.4", "classnames": "^2.5.1", "date-fns": "^4.1.0", - "i18next": "^25.7.4", + "i18next": "^25.8.4", "react": "^19.2.4", "react-dom": "^19.2.4", - "react-i18next": "^16.5.3", + "react-i18next": "^16.5.4", "swagger-ui-dist": "^5.31.0", "valibot": "^1.2.0", "vaul": "^1.1.2" @@ -54,7 +54,7 @@ "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", "happy-dom": "^20.5.0", - "i18next-cli": "^1.36.1", + "i18next-cli": "^1.42.6", "knip": "^5.81.0", "msw": "^2.12.8", "msw-storybook-addon": "^2.0.6", @@ -3326,9 +3326,9 @@ } }, "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", + "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5220,9 +5220,9 @@ } }, "node_modules/@swc/core": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.4.tgz", - "integrity": "sha512-fH81BPo6EiJ7BUb6Qa5SY/NLWIRVambqU3740g0XPFPEz5KFPnzRYpR6zodQNOcEb9XUtZzRO1Y0WyIJP7iBxQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.11.tgz", + "integrity": "sha512-iLmLTodbYxU39HhMPaMUooPwO/zqJWvsqkrXv1ZI38rMb048p6N7qtAtTp37sw9NzSrvH6oli8EdDygo09IZ/w==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -5238,16 +5238,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.15.4", - "@swc/core-darwin-x64": "1.15.4", - "@swc/core-linux-arm-gnueabihf": "1.15.4", - "@swc/core-linux-arm64-gnu": "1.15.4", - "@swc/core-linux-arm64-musl": "1.15.4", - "@swc/core-linux-x64-gnu": "1.15.4", - "@swc/core-linux-x64-musl": "1.15.4", - "@swc/core-win32-arm64-msvc": "1.15.4", - "@swc/core-win32-ia32-msvc": "1.15.4", - "@swc/core-win32-x64-msvc": "1.15.4" + "@swc/core-darwin-arm64": "1.15.11", + "@swc/core-darwin-x64": "1.15.11", + "@swc/core-linux-arm-gnueabihf": "1.15.11", + "@swc/core-linux-arm64-gnu": "1.15.11", + "@swc/core-linux-arm64-musl": "1.15.11", + "@swc/core-linux-x64-gnu": "1.15.11", + "@swc/core-linux-x64-musl": "1.15.11", + "@swc/core-win32-arm64-msvc": "1.15.11", + "@swc/core-win32-ia32-msvc": "1.15.11", + "@swc/core-win32-x64-msvc": "1.15.11" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" @@ -5259,9 +5259,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.4.tgz", - "integrity": "sha512-NU/Of+ShFGG/i0lXKsF6GaGeTBNsr9iD8uUzdXxFfGbEjTeuKNXc5CWn3/Uo4Gr4LMAGD3hsRwG2Jq5iBDMalw==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.11.tgz", + "integrity": "sha512-QoIupRWVH8AF1TgxYyeA5nS18dtqMuxNwchjBIwJo3RdwLEFiJq6onOx9JAxHtuPwUkIVuU2Xbp+jCJ7Vzmgtg==", "cpu": [ "arm64" ], @@ -5276,9 +5276,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.4.tgz", - "integrity": "sha512-9oWYMZHiEfHLqjjRGrXL17I8HdAOpWK/Rps34RKQ74O+eliygi1Iyq1TDUzYqUXcNvqN2K5fHgoMLRIni41ClQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.11.tgz", + "integrity": "sha512-S52Gu1QtPSfBYDiejlcfp9GlN+NjTZBRRNsz8PNwBgSE626/FUf2PcllVUix7jqkoMC+t0rS8t+2/aSWlMuQtA==", "cpu": [ "x64" ], @@ -5293,9 +5293,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.4.tgz", - "integrity": "sha512-I1dPxXli3N1Vr71JXogUTLcspM5ICgCYaA16RE+JKchj3XKKmxLlYjwAHAA4lh/Cy486ikzACaG6pIBcegoGkg==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.11.tgz", + "integrity": "sha512-lXJs8oXo6Z4yCpimpQ8vPeCjkgoHu5NoMvmJZ8qxDyU99KVdg6KwU9H79vzrmB+HfH+dCZ7JGMqMF//f8Cfvdg==", "cpu": [ "arm" ], @@ -5310,9 +5310,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.4.tgz", - "integrity": "sha512-iGpuS/2PDZ68ioAlhkxiN5M4+pB9uDJolTKk4mZ0JM29uFf9YIkiyk7Bbr2y1QtmD82rF0tDHhoG9jtnV8mZMg==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.11.tgz", + "integrity": "sha512-chRsz1K52/vj8Mfq/QOugVphlKPWlMh10V99qfH41hbGvwAU6xSPd681upO4bKiOr9+mRIZZW+EfJqY42ZzRyA==", "cpu": [ "arm64" ], @@ -5327,9 +5327,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.4.tgz", - "integrity": "sha512-Ly95wc+VXDhl08pjAoPUhVu5vNbuPMbURknRZa5QOZuiizJ6DkaSI0/zsEc26PpC6HTc4prNLY3ARVwZ7j/IJQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.11.tgz", + "integrity": "sha512-PYftgsTaGnfDK4m6/dty9ryK1FbLk+LosDJ/RJR2nkXGc8rd+WenXIlvHjWULiBVnS1RsjHHOXmTS4nDhe0v0w==", "cpu": [ "arm64" ], @@ -5344,9 +5344,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.4.tgz", - "integrity": "sha512-7pIG0BnaMn4zTpHeColPwyrWoTY9Drr+ISZQIgYHUKh3oaPtNCrXb289ScGbPPPjLsSfcGTeOy2pXmNczMC+yg==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.11.tgz", + "integrity": "sha512-DKtnJKIHiZdARyTKiX7zdRjiDS1KihkQWatQiCHMv+zc2sfwb4Glrodx2VLOX4rsa92NLR0Sw8WLcPEMFY1szQ==", "cpu": [ "x64" ], @@ -5361,9 +5361,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.4.tgz", - "integrity": "sha512-oaqTV25V9H+PpSkvTcK25q6Q56FvXc6d2xBu486dv9LAPCHWgeAworE8WpBLV26g8rubcN5nGhO5HwSunXA7Ww==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.11.tgz", + "integrity": "sha512-mUjjntHj4+8WBaiDe5UwRNHuEzLjIWBTSGTw0JT9+C9/Yyuh4KQqlcEQ3ro6GkHmBGXBFpGIj/o5VMyRWfVfWw==", "cpu": [ "x64" ], @@ -5378,9 +5378,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.4.tgz", - "integrity": "sha512-VcPuUJw27YbGo1HcOaAriI50dpM3ZZeDW3x2cMnJW6vtkeyzUFk1TADmTwFax0Fn+yicCxhaWjnFE3eAzGAxIQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.11.tgz", + "integrity": "sha512-ZkNNG5zL49YpaFzfl6fskNOSxtcZ5uOYmWBkY4wVAvgbSAQzLRVBp+xArGWh2oXlY/WgL99zQSGTv7RI5E6nzA==", "cpu": [ "arm64" ], @@ -5395,9 +5395,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.4.tgz", - "integrity": "sha512-dREjghAZEuKAK9nQzJETAiCSihSpAVS6Vk9+y2ElaoeTj68tNB1txV/m1RTPPD/+Kgbz6ITPNyXRWxPdkP5aXw==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.11.tgz", + "integrity": "sha512-6XnzORkZCQzvTQ6cPrU7iaT9+i145oLwnin8JrfsLG41wl26+5cNQ2XV3zcbrnFEV6esjOceom9YO1w9mGJByw==", "cpu": [ "ia32" ], @@ -5412,9 +5412,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.4.tgz", - "integrity": "sha512-o/odIBuQkoxKbRweJWOMI9LeRSOenFKN2zgPeaaNQ/cyuVk2r6DCAobKMOodvDdZWlMn6N1xJrldeCRSTZIgiQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.11.tgz", + "integrity": "sha512-IQ2n6af7XKLL6P1gIeZACskSxK8jWtoKpJWLZmdXTDj1MGzktUy4i+FvpdtxFmJWNavRWH1VmTr6kAubRDHeKw==", "cpu": [ "x64" ], @@ -7006,9 +7006,9 @@ } }, "node_modules/cli-spinners": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.3.0.tgz", - "integrity": "sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", + "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", "dev": true, "license": "MIT", "engines": { @@ -7178,9 +7178,9 @@ "license": "MIT" }, "node_modules/commander": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", - "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "dev": true, "license": "MIT", "engines": { @@ -8586,9 +8586,9 @@ } }, "node_modules/i18next": { - "version": "25.7.4", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.7.4.tgz", - "integrity": "sha512-hRkpEblXXcXSNbw8mBNq9042OEetgyB/ahc/X17uV/khPwzV+uB8RHceHh3qavyrkPJvmXFKXME2Sy1E0KjAfw==", + "version": "25.8.4", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.8.4.tgz", + "integrity": "sha512-a9A0MnUjKvzjEN/26ZY1okpra9kA8MEwzYEz1BNm+IyxUKPRH6ihf0p7vj8YvULwZHKHl3zkJ6KOt4hewxBecQ==", "funding": [ { "type": "individual", @@ -8617,28 +8617,29 @@ } }, "node_modules/i18next-cli": { - "version": "1.36.1", - "resolved": "https://registry.npmjs.org/i18next-cli/-/i18next-cli-1.36.1.tgz", - "integrity": "sha512-q4lRuqVPTNI6Ip5YFCRNNGiTh/s/5nfl18coOnjDu7Cb1BiJeRXShFGL5Tcka4ii0k5ndOMjxIAkoNN6EXCwyQ==", + "version": "1.42.6", + "resolved": "https://registry.npmjs.org/i18next-cli/-/i18next-cli-1.42.6.tgz", + "integrity": "sha512-pRKf0K4J7KdHJMRgVRolf1emfKfzjpBmpm+mxKRWNh8iYQp+mL4gzpgopF5ikRRw6GXu2l9CCzVFRLD0qFpg5A==", "dev": true, "license": "MIT", "dependencies": { "@croct/json5-parser": "0.2.2", - "@swc/core": "1.15.4", + "@swc/core": "1.15.11", "chalk": "5.6.2", "chokidar": "5.0.0", - "commander": "14.0.2", + "commander": "14.0.3", "execa": "9.6.1", - "glob": "13.0.0", + "glob": "13.0.1", "i18next-resources-for-ts": "2.0.0", - "inquirer": "13.1.0", + "inquirer": "13.2.2", "jiti": "2.6.1", "jsonc-parser": "3.3.1", - "minimatch": "10.1.1", - "ora": "9.0.0", - "react": "^19.2.3", - "react-i18next": "^16.5.1", - "swc-walk": "1.0.1" + "minimatch": "10.1.2", + "ora": "9.3.0", + "react": "^19.2.4", + "react-i18next": "^16.5.4", + "swc-walk": "1.0.1", + "yaml": "2.8.2" }, "bin": { "i18next-cli": "dist/esm/cli.js" @@ -8677,13 +8678,13 @@ } }, "node_modules/i18next-cli/node_modules/glob": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.1.tgz", + "integrity": "sha512-B7U/vJpE3DkJ5WXTgTpTRN63uV42DseiXXKMwG14LQBXmsdeIoHAPbU/MEo6II0k5ED74uc2ZGTC6MwHFQhF6w==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "minimatch": "^10.1.1", + "minimatch": "^10.1.2", "minipass": "^7.1.2", "path-scurry": "^2.0.0" }, @@ -8755,9 +8756,9 @@ } }, "node_modules/iconv-lite": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", - "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "dev": true, "license": "MIT", "dependencies": { @@ -8861,16 +8862,16 @@ "license": "ISC" }, "node_modules/inquirer": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.1.0.tgz", - "integrity": "sha512-4vv4GS/9HLnn0radvmHlXUXiNkd2gYCBQ4U1rxZWBJDisu2Z06bzUM9CFU8pcu1vwuAQjo6O+CFiqCYNsEi6qQ==", + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.2.2.tgz", + "integrity": "sha512-+hlN8I88JE9T3zjWHGnMhryniRDbSgFNJHJTyD2iKO5YNpMRyfghQ6wVoe+gV4ygMM4r4GzlsBxNa1g/UUZixA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/ansi": "^2.0.2", - "@inquirer/core": "^11.1.0", - "@inquirer/prompts": "^8.1.0", - "@inquirer/type": "^4.0.2", + "@inquirer/ansi": "^2.0.3", + "@inquirer/core": "^11.1.1", + "@inquirer/prompts": "^8.2.0", + "@inquirer/type": "^4.0.3", "mute-stream": "^3.0.0", "run-async": "^4.0.6", "rxjs": "^7.8.2" @@ -8888,9 +8889,9 @@ } }, "node_modules/inquirer/node_modules/@inquirer/ansi": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.2.tgz", - "integrity": "sha512-SYLX05PwJVnW+WVegZt1T4Ip1qba1ik+pNJPDiqvk6zS5Y/i8PhRzLpGEtVd7sW0G8cMtkD8t4AZYhQwm8vnww==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.3.tgz", + "integrity": "sha512-g44zhR3NIKVs0zUesa4iMzExmZpLUdTLRMCStqX3GE5NT6VkPcxQGJ+uC8tDgBUC/vB1rUhUd55cOf++4NZcmw==", "dev": true, "license": "MIT", "engines": { @@ -8898,16 +8899,16 @@ } }, "node_modules/inquirer/node_modules/@inquirer/checkbox": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.0.3.tgz", - "integrity": "sha512-xtQP2eXMFlOcAhZ4ReKP2KZvDIBb1AnCfZ81wWXG3DXLVH0f0g4obE0XDPH+ukAEMRcZT0kdX2AS1jrWGXbpxw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.0.4.tgz", + "integrity": "sha512-DrAMU3YBGMUAp6ArwTIp/25CNDtDbxk7UjIrrtM25JVVrlVYlVzHh5HR1BDFu9JMyUoZ4ZanzeaHqNDttf3gVg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/ansi": "^2.0.2", - "@inquirer/core": "^11.1.0", - "@inquirer/figures": "^2.0.2", - "@inquirer/type": "^4.0.2" + "@inquirer/ansi": "^2.0.3", + "@inquirer/core": "^11.1.1", + "@inquirer/figures": "^2.0.3", + "@inquirer/type": "^4.0.3" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -8922,14 +8923,14 @@ } }, "node_modules/inquirer/node_modules/@inquirer/confirm": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.3.tgz", - "integrity": "sha512-lyEvibDFL+NA5R4xl8FUmNhmu81B+LDL9L/MpKkZlQDJZXzG8InxiqYxiAlQYa9cqLLhYqKLQwZqXmSTqCLjyw==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.4.tgz", + "integrity": "sha512-WdaPe7foUnoGYvXzH4jp4wH/3l+dBhZ3uwhKjXjwdrq5tEIFaANxj6zrGHxLdsIA0yKM0kFPVcEalOZXBB5ISA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.0", - "@inquirer/type": "^4.0.2" + "@inquirer/core": "^11.1.1", + "@inquirer/type": "^4.0.3" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -8944,15 +8945,15 @@ } }, "node_modules/inquirer/node_modules/@inquirer/core": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.0.tgz", - "integrity": "sha512-+jD/34T1pK8M5QmZD/ENhOfXdl9Zr+BrQAUc5h2anWgi7gggRq15ZbiBeLoObj0TLbdgW7TAIQRU2boMc9uOKQ==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.1.tgz", + "integrity": "sha512-hV9o15UxX46OyQAtaoMqAOxGR8RVl1aZtDx1jHbCtSJy1tBdTfKxLPKf7utsE4cRy4tcmCQ4+vdV+ca+oNxqNA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/ansi": "^2.0.2", - "@inquirer/figures": "^2.0.2", - "@inquirer/type": "^4.0.2", + "@inquirer/ansi": "^2.0.3", + "@inquirer/figures": "^2.0.3", + "@inquirer/type": "^4.0.3", "cli-width": "^4.1.0", "mute-stream": "^3.0.0", "signal-exit": "^4.1.0", @@ -8971,15 +8972,15 @@ } }, "node_modules/inquirer/node_modules/@inquirer/editor": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.0.3.tgz", - "integrity": "sha512-wYyQo96TsAqIciP/r5D3cFeV8h4WqKQ/YOvTg5yOfP2sqEbVVpbxPpfV3LM5D0EP4zUI3EZVHyIUIllnoIa8OQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.0.4.tgz", + "integrity": "sha512-QI3Jfqcv6UO2/VJaEFONH8Im1ll++Xn/AJTBn9Xf+qx2M+H8KZAdQ5sAe2vtYlo+mLW+d7JaMJB4qWtK4BG3pw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.0", - "@inquirer/external-editor": "^2.0.2", - "@inquirer/type": "^4.0.2" + "@inquirer/core": "^11.1.1", + "@inquirer/external-editor": "^2.0.3", + "@inquirer/type": "^4.0.3" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -8994,14 +8995,14 @@ } }, "node_modules/inquirer/node_modules/@inquirer/expand": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.3.tgz", - "integrity": "sha512-2oINvuL27ujjxd95f6K2K909uZOU2x1WiAl7Wb1X/xOtL8CgQ1kSxzykIr7u4xTkXkXOAkCuF45T588/YKee7w==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.4.tgz", + "integrity": "sha512-0I/16YwPPP0Co7a5MsomlZLpch48NzYfToyqYAOWtBmaXSB80RiNQ1J+0xx2eG+Wfxt0nHtpEWSRr6CzNVnOGg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.0", - "@inquirer/type": "^4.0.2" + "@inquirer/core": "^11.1.1", + "@inquirer/type": "^4.0.3" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -9016,14 +9017,14 @@ } }, "node_modules/inquirer/node_modules/@inquirer/external-editor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-2.0.2.tgz", - "integrity": "sha512-X/fMXK7vXomRWEex1j8mnj7s1mpnTeP4CO/h2gysJhHLT2WjBnLv4ZQEGpm/kcYI8QfLZ2fgW+9kTKD+jeopLg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-2.0.3.tgz", + "integrity": "sha512-LgyI7Agbda74/cL5MvA88iDpvdXI2KuMBCGRkbCl2Dg1vzHeOgs+s0SDcXV7b+WZJrv2+ERpWSM65Fpi9VfY3w==", "dev": true, "license": "MIT", "dependencies": { "chardet": "^2.1.1", - "iconv-lite": "^0.7.0" + "iconv-lite": "^0.7.2" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -9038,9 +9039,9 @@ } }, "node_modules/inquirer/node_modules/@inquirer/figures": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.2.tgz", - "integrity": "sha512-qXm6EVvQx/FmnSrCWCIGtMHwqeLgxABP8XgcaAoywsL0NFga9gD5kfG0gXiv80GjK9Hsoz4pgGwF/+CjygyV9A==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.3.tgz", + "integrity": "sha512-y09iGt3JKoOCBQ3w4YrSJdokcD8ciSlMIWsD+auPu+OZpfxLuyz+gICAQ6GCBOmJJt4KEQGHuZSVff2jiNOy7g==", "dev": true, "license": "MIT", "engines": { @@ -9048,14 +9049,14 @@ } }, "node_modules/inquirer/node_modules/@inquirer/input": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.3.tgz", - "integrity": "sha512-4R0TdWl53dtp79Vs6Df2OHAtA2FVNqya1hND1f5wjHWxZJxwDMSNB1X5ADZJSsQKYAJ5JHCTO+GpJZ42mK0Otw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.4.tgz", + "integrity": "sha512-4B3s3jvTREDFvXWit92Yc6jF1RJMDy2VpSqKtm4We2oVU65YOh2szY5/G14h4fHlyQdpUmazU5MPCFZPRJ0AOw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.0", - "@inquirer/type": "^4.0.2" + "@inquirer/core": "^11.1.1", + "@inquirer/type": "^4.0.3" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -9070,14 +9071,14 @@ } }, "node_modules/inquirer/node_modules/@inquirer/number": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.3.tgz", - "integrity": "sha512-TjQLe93GGo5snRlu83JxE38ZPqj5ZVggL+QqqAF2oBA5JOJoxx25GG3EGH/XN/Os5WOmKfO8iLVdCXQxXRZIMQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.4.tgz", + "integrity": "sha512-CmMp9LF5HwE+G/xWsC333TlCzYYbXMkcADkKzcawh49fg2a1ryLc7JL1NJYYt1lJ+8f4slikNjJM9TEL/AljYQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.0", - "@inquirer/type": "^4.0.2" + "@inquirer/core": "^11.1.1", + "@inquirer/type": "^4.0.3" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -9092,15 +9093,15 @@ } }, "node_modules/inquirer/node_modules/@inquirer/password": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.3.tgz", - "integrity": "sha512-rCozGbUMAHedTeYWEN8sgZH4lRCdgG/WinFkit6ZPsp8JaNg2T0g3QslPBS5XbpORyKP/I+xyBO81kFEvhBmjA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.4.tgz", + "integrity": "sha512-ZCEPyVYvHK4W4p2Gy6sTp9nqsdHQCfiPXIP9LbJVW4yCinnxL/dDDmPaEZVysGrj8vxVReRnpfS2fOeODe9zjg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/ansi": "^2.0.2", - "@inquirer/core": "^11.1.0", - "@inquirer/type": "^4.0.2" + "@inquirer/ansi": "^2.0.3", + "@inquirer/core": "^11.1.1", + "@inquirer/type": "^4.0.3" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -9115,22 +9116,22 @@ } }, "node_modules/inquirer/node_modules/@inquirer/prompts": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.1.0.tgz", - "integrity": "sha512-LsZMdKcmRNF5LyTRuZE5nWeOjganzmN3zwbtNfcs6GPh3I2TsTtF1UYZlbxVfhxd+EuUqLGs/Lm3Xt4v6Az1wA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.2.0.tgz", + "integrity": "sha512-rqTzOprAj55a27jctS3vhvDDJzYXsr33WXTjODgVOru21NvBo9yIgLIAf7SBdSV0WERVly3dR6TWyp7ZHkvKFA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/checkbox": "^5.0.3", - "@inquirer/confirm": "^6.0.3", - "@inquirer/editor": "^5.0.3", - "@inquirer/expand": "^5.0.3", - "@inquirer/input": "^5.0.3", - "@inquirer/number": "^4.0.3", - "@inquirer/password": "^5.0.3", - "@inquirer/rawlist": "^5.1.0", - "@inquirer/search": "^4.0.3", - "@inquirer/select": "^5.0.3" + "@inquirer/checkbox": "^5.0.4", + "@inquirer/confirm": "^6.0.4", + "@inquirer/editor": "^5.0.4", + "@inquirer/expand": "^5.0.4", + "@inquirer/input": "^5.0.4", + "@inquirer/number": "^4.0.4", + "@inquirer/password": "^5.0.4", + "@inquirer/rawlist": "^5.2.0", + "@inquirer/search": "^4.1.0", + "@inquirer/select": "^5.0.4" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -9145,14 +9146,14 @@ } }, "node_modules/inquirer/node_modules/@inquirer/rawlist": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.1.0.tgz", - "integrity": "sha512-yUCuVh0jW026Gr2tZlG3kHignxcrLKDR3KBp+eUgNz+BAdSeZk0e18yt2gyBr+giYhj/WSIHCmPDOgp1mT2niQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.0.tgz", + "integrity": "sha512-CciqGoOUMrFo6HxvOtU5uL8fkjCmzyeB6fG7O1vdVAZVSopUBYECOwevDBlqNLyyYmzpm2Gsn/7nLrpruy9RFg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.0", - "@inquirer/type": "^4.0.2" + "@inquirer/core": "^11.1.1", + "@inquirer/type": "^4.0.3" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -9167,15 +9168,15 @@ } }, "node_modules/inquirer/node_modules/@inquirer/search": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.0.3.tgz", - "integrity": "sha512-lzqVw0YwuKYetk5VwJ81Ba+dyVlhseHPx9YnRKQgwXdFS0kEavCz2gngnNhnMIxg8+j1N/rUl1t5s1npwa7bqg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.0.tgz", + "integrity": "sha512-EAzemfiP4IFvIuWnrHpgZs9lAhWDA0GM3l9F4t4mTQ22IFtzfrk8xbkMLcAN7gmVML9O/i+Hzu8yOUyAaL6BKA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.0", - "@inquirer/figures": "^2.0.2", - "@inquirer/type": "^4.0.2" + "@inquirer/core": "^11.1.1", + "@inquirer/figures": "^2.0.3", + "@inquirer/type": "^4.0.3" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -9190,16 +9191,16 @@ } }, "node_modules/inquirer/node_modules/@inquirer/select": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.0.3.tgz", - "integrity": "sha512-M+ynbwS0ecQFDYMFrQrybA0qL8DV0snpc4kKevCCNaTpfghsRowRY7SlQBeIYNzHqXtiiz4RG9vTOeb/udew7w==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.0.4.tgz", + "integrity": "sha512-s8KoGpPYMEQ6WXc0dT9blX2NtIulMdLOO3LA1UKOiv7KFWzlJ6eLkEYTDBIi+JkyKXyn8t/CD6TinxGjyLt57g==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/ansi": "^2.0.2", - "@inquirer/core": "^11.1.0", - "@inquirer/figures": "^2.0.2", - "@inquirer/type": "^4.0.2" + "@inquirer/ansi": "^2.0.3", + "@inquirer/core": "^11.1.1", + "@inquirer/figures": "^2.0.3", + "@inquirer/type": "^4.0.3" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -9214,9 +9215,9 @@ } }, "node_modules/inquirer/node_modules/@inquirer/type": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.2.tgz", - "integrity": "sha512-cae7mzluplsjSdgFA6ACLygb5jC8alO0UUnFPyu0E7tNRPrL+q/f8VcSXp+cjZQ7l5CMpDpi2G1+IQvkOiL1Lw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.3.tgz", + "integrity": "sha512-cKZN7qcXOpj1h+1eTTcGDVLaBIHNMT1Rz9JqJP5MnEJ0JhgVWllx7H/tahUp5YEK1qaByH2Itb8wLG/iScD5kw==", "dev": true, "license": "MIT", "engines": { @@ -10246,13 +10247,13 @@ } }, "node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", + "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "@isaacs/brace-expansion": "^5.0.1" }, "engines": { "node": "20 || >=22" @@ -10578,9 +10579,9 @@ } }, "node_modules/ora": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-9.0.0.tgz", - "integrity": "sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.3.0.tgz", + "integrity": "sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==", "dev": true, "license": "MIT", "dependencies": { @@ -10590,9 +10591,8 @@ "is-interactive": "^2.0.0", "is-unicode-supported": "^2.1.0", "log-symbols": "^7.0.1", - "stdin-discarder": "^0.2.2", - "string-width": "^8.1.0", - "strip-ansi": "^7.1.2" + "stdin-discarder": "^0.3.1", + "string-width": "^8.1.0" }, "engines": { "node": ">=20" @@ -10632,9 +10632,9 @@ } }, "node_modules/ora/node_modules/string-width": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", - "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.1.tgz", + "integrity": "sha512-KpqHIdDL9KwYk22wEOg/VIqYbrnLeSApsKT/bSj6Ez7pn3CftUiLAv2Lccpq1ALcpLV9UX1Ppn92npZWu2w/aw==", "dev": true, "license": "MIT", "dependencies": { @@ -11355,9 +11355,9 @@ } }, "node_modules/react-i18next": { - "version": "16.5.3", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-16.5.3.tgz", - "integrity": "sha512-fo+/NNch37zqxOzlBYrWMx0uy/yInPkRfjSuy4lqKdaecR17nvCHnEUt3QyzA8XjQ2B/0iW/5BhaHR3ZmukpGw==", + "version": "16.5.4", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-16.5.4.tgz", + "integrity": "sha512-6yj+dcfMncEC21QPhOTsW8mOSO+pzFmT6uvU7XXdvM/Cp38zJkmTeMeKmTrmCMD5ToT79FmiE/mRWiYWcJYW4g==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.28.4", @@ -12083,9 +12083,9 @@ "license": "MIT" }, "node_modules/stdin-discarder": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", - "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.1.tgz", + "integrity": "sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==", "dev": true, "license": "MIT", "engines": { diff --git a/frontend/package.json b/frontend/package.json index a51b2e554..2b5becaa0 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -30,10 +30,10 @@ "@zxcvbn-ts/language-common": "^3.0.4", "classnames": "^2.5.1", "date-fns": "^4.1.0", - "i18next": "^25.7.4", + "i18next": "^25.8.4", "react": "^19.2.4", "react-dom": "^19.2.4", - "react-i18next": "^16.5.3", + "react-i18next": "^16.5.4", "swagger-ui-dist": "^5.31.0", "valibot": "^1.2.0", "vaul": "^1.1.2" @@ -64,7 +64,7 @@ "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", "happy-dom": "^20.5.0", - "i18next-cli": "^1.36.1", + "i18next-cli": "^1.42.6", "knip": "^5.81.0", "msw": "^2.12.8", "msw-storybook-addon": "^2.0.6", From b93c4305a33606c19ee1e44de84358b72c9e290e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 13:55:05 +0000 Subject: [PATCH 043/104] build(deps-dev): bump the storybook group in /frontend with 3 updates --- updated-dependencies: - dependency-name: "@storybook/addon-docs" dependency-version: 10.2.7 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: "@storybook/react-vite" dependency-version: 10.2.7 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: storybook dependency-version: 10.2.7 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 70 +++++++++++++++++++------------------- frontend/package.json | 4 +-- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index fd27e8d35..2a31b829f 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -36,8 +36,8 @@ "@graphql-codegen/cli": "^6.1.1", "@graphql-codegen/client-preset": "^5.2.2", "@graphql-codegen/typescript-msw": "^3.0.1", - "@storybook/addon-docs": "^10.2.6", - "@storybook/react-vite": "^10.2.6", + "@storybook/addon-docs": "^10.2.8", + "@storybook/react-vite": "^10.2.8", "@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-router-devtools": "^1.150.0", "@tanstack/router-plugin": "^1.150.0", @@ -5054,16 +5054,16 @@ "license": "MIT" }, "node_modules/@storybook/addon-docs": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.6.tgz", - "integrity": "sha512-7a37fu2hdOJRCITS+EimhVN9xVVvSeodmX6QdfxOim+2ECYnvMC9YVYpJ0et3XC8xnl9/3AbQ4y670Uw1hXcmg==", + "version": "10.2.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.8.tgz", + "integrity": "sha512-cEoWqQrLzrxOwZFee5zrD4cYrdEWKV80POb7jUZO0r5vfl2DuslIr3n/+RfLT52runCV4aZcFEfOfP/IWHNPxg==", "dev": true, "license": "MIT", "dependencies": { "@mdx-js/react": "^3.0.0", - "@storybook/csf-plugin": "10.2.6", + "@storybook/csf-plugin": "10.2.8", "@storybook/icons": "^2.0.1", - "@storybook/react-dom-shim": "10.2.6", + "@storybook/react-dom-shim": "10.2.8", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "ts-dedent": "^2.0.0" @@ -5073,17 +5073,17 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.6" + "storybook": "^10.2.8" } }, "node_modules/@storybook/builder-vite": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.6.tgz", - "integrity": "sha512-O/kvmUrfEn2VpzVOGJV3VvEQ9N4AOI8csdvsUsfjs6PSNwAiwvsx8+qTYYcheMilrO9+1Da9lFmd7oucSPto3Q==", + "version": "10.2.8", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.8.tgz", + "integrity": "sha512-+6/Lwi7W0YIbzHDh798GPp0IHUYDwp0yv0Y1eVNK/StZD0tnv4/1C28NKyP+O7JOsFsuWI1qHiDhw8kNURugZw==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf-plugin": "10.2.6", + "@storybook/csf-plugin": "10.2.8", "ts-dedent": "^2.0.0" }, "funding": { @@ -5091,14 +5091,14 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.6", + "storybook": "^10.2.8", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "node_modules/@storybook/csf-plugin": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.6.tgz", - "integrity": "sha512-1ZeRfmMTjUweXRaNVNg49m0r+l2VQmfeicTCRwjXrq70eBeWG8Dx2w0simVM9nX0lRGiGL3S36lhrrswuEF/6A==", + "version": "10.2.8", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.8.tgz", + "integrity": "sha512-kKkLYhRXb33YtIPdavD2DU25sb14sqPYdcQFpyqu4TaD9truPPqW8P5PLTUgERydt/eRvRlnhauPHavU1kjsnA==", "dev": true, "license": "MIT", "dependencies": { @@ -5111,7 +5111,7 @@ "peerDependencies": { "esbuild": "*", "rollup": "*", - "storybook": "^10.2.6", + "storybook": "^10.2.8", "vite": "*", "webpack": "*" }, @@ -5149,14 +5149,14 @@ } }, "node_modules/@storybook/react": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.2.6.tgz", - "integrity": "sha512-0haWDV7A/p3PdOsP6klacN7D5Zbzg08EVLh5br8X3AOxAznhLUTS4WngMtaMFbkheNLmyoVK+4SkTrL4n6/7zQ==", + "version": "10.2.8", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.2.8.tgz", + "integrity": "sha512-nMFqQFUXq6Zg2O5SeuomyWnrIx61QfpNQMrfor8eCEzHrWNnXrrvVsz2RnHIgXN8RVyaWGDPh1srAECu/kDHXw==", "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/react-dom-shim": "10.2.6", + "@storybook/react-dom-shim": "10.2.8", "react-docgen": "^8.0.2" }, "funding": { @@ -5166,7 +5166,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.6", + "storybook": "^10.2.8", "typescript": ">= 4.9.x" }, "peerDependenciesMeta": { @@ -5176,9 +5176,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.6.tgz", - "integrity": "sha512-jgGLf5Ck35+kHa9fY8LreuT+PrtrDXPgy7uh8C3KkRnWoyTHaorW5q3Kw2no0UA79vXA87uX87kQVY6Ka8InzA==", + "version": "10.2.8", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.8.tgz", + "integrity": "sha512-Xde9X3VszFV1pTXfc2ZFM89XOCGRxJD8MUIzDwkcT9xaki5a+8srs/fsXj75fMY6gMYfcL5lNRZvCqg37HOmcQ==", "dev": true, "license": "MIT", "funding": { @@ -5188,20 +5188,20 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.6" + "storybook": "^10.2.8" } }, "node_modules/@storybook/react-vite": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.2.6.tgz", - "integrity": "sha512-RYkbzro1dfmLujz2fXm3eAuSyfLRdgl4SoGUa3W+WjTiHu5+sF1i+/CBYaOUmFFiPMibWRy4MNodrSInERb4qA==", + "version": "10.2.8", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.2.8.tgz", + "integrity": "sha512-x5kmw+TPhxkQV84n4e9X0q6/rA5T8V2QQFolMuN+U93q1HX1r+GZ6g/nXaaq9ox168PhHUJZQnn+LzSQKGCMBA==", "dev": true, "license": "MIT", "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "^0.6.3", "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "10.2.6", - "@storybook/react": "10.2.6", + "@storybook/builder-vite": "10.2.8", + "@storybook/react": "10.2.8", "empathic": "^2.0.0", "magic-string": "^0.30.0", "react-docgen": "^8.0.0", @@ -5215,7 +5215,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.6", + "storybook": "^10.2.8", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, @@ -12096,9 +12096,9 @@ } }, "node_modules/storybook": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.6.tgz", - "integrity": "sha512-5UY1f0f4TCAmJ19DCvYmWbvZaYwszIOY+PxTzu0S/WJpqm4pzO0bjn6Wfx113Jnh/tffUZ3MVuQgjJq20/ttNg==", + "version": "10.2.8", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.8.tgz", + "integrity": "sha512-885uSIn8NQw2ZG7vy84K45lHCOSyz1DVsDV8pHiHQj3J0riCuWLNeO50lK9z98zE8kjhgTtxAAkMTy5nkmNRKQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index a51b2e554..e2f392946 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -46,8 +46,8 @@ "@graphql-codegen/cli": "^6.1.1", "@graphql-codegen/client-preset": "^5.2.2", "@graphql-codegen/typescript-msw": "^3.0.1", - "@storybook/addon-docs": "^10.2.6", - "@storybook/react-vite": "^10.2.6", + "@storybook/addon-docs": "^10.2.8", + "@storybook/react-vite": "^10.2.8", "@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-router-devtools": "^1.150.0", "@tanstack/router-plugin": "^1.150.0", From 08e94a8c0cd8f4abfed362e1fd89d5853ea6ad43 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Feb 2026 13:54:26 +0000 Subject: [PATCH 044/104] build(deps-dev): bump the types group across 1 directory with 2 updates Bumps the types group with 2 updates in the /frontend directory: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) and [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react). Updates `@types/node` from 25.2.0 to 25.2.3 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `@types/react` from 19.2.13 to 19.2.14 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 25.2.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: types - dependency-name: "@types/react" dependency-version: 19.2.14 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: types ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 16 ++++++++-------- frontend/package.json | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index fd27e8d35..4f6b8a948 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -44,8 +44,8 @@ "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.1", "@testing-library/user-event": "^14.6.1", - "@types/node": "^25.2.0", - "@types/react": "19.2.13", + "@types/node": "^25.2.3", + "@types/react": "19.2.14", "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", "@vitejs/plugin-react": "^5.1.3", @@ -5972,9 +5972,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.2.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz", - "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==", + "version": "25.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz", + "integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5982,9 +5982,9 @@ } }, "node_modules/@types/react": { - "version": "19.2.13", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.13.tgz", - "integrity": "sha512-KkiJeU6VbYbUOp5ITMIc7kBfqlYkKA5KhEHVrGMmUUMt7NeaZg65ojdPk+FtNrBAOXNVM5QM72jnADjM+XVRAQ==", + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "devOptional": true, "license": "MIT", "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index a51b2e554..fdc794969 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -54,8 +54,8 @@ "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.1", "@testing-library/user-event": "^14.6.1", - "@types/node": "^25.2.0", - "@types/react": "19.2.13", + "@types/node": "^25.2.3", + "@types/react": "19.2.14", "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", "@vitejs/plugin-react": "^5.1.3", From e84a7a9d8be46b947e4d62a3f6e911945fc32aa3 Mon Sep 17 00:00:00 2001 From: w0xel Date: Thu, 12 Feb 2026 23:51:11 +0100 Subject: [PATCH 045/104] Create default Message-ID for sent mail --- crates/email/src/mailer.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/email/src/mailer.rs b/crates/email/src/mailer.rs index d31fe96ab..12ee5e35e 100644 --- a/crates/email/src/mailer.rs +++ b/crates/email/src/mailer.rs @@ -53,6 +53,7 @@ impl Mailer { Message::builder() .from(self.from.clone()) .reply_to(self.reply_to.clone()) + .message_id(None) } fn prepare_verification_email( From 94c97a5fedc02f9f46c7fb134a84d3291c138e91 Mon Sep 17 00:00:00 2001 From: Olivier 'reivilibre Date: Fri, 13 Feb 2026 14:16:35 +0000 Subject: [PATCH 046/104] Add compat token refresh regression test --- crates/handlers/src/compat/mod.rs | 3 + crates/handlers/src/compat/tests.rs | 234 ++++++++++++++++++++++++++++ 2 files changed, 237 insertions(+) create mode 100644 crates/handlers/src/compat/tests.rs diff --git a/crates/handlers/src/compat/mod.rs b/crates/handlers/src/compat/mod.rs index 1c30d5e04..dd5600afe 100644 --- a/crates/handlers/src/compat/mod.rs +++ b/crates/handlers/src/compat/mod.rs @@ -25,6 +25,9 @@ pub(crate) mod logout; pub(crate) mod logout_all; pub(crate) mod refresh; +#[cfg(test)] +mod tests; + #[derive(Debug, Serialize)] struct MatrixError { errcode: &'static str, diff --git a/crates/handlers/src/compat/tests.rs b/crates/handlers/src/compat/tests.rs new file mode 100644 index 000000000..f4827f5de --- /dev/null +++ b/crates/handlers/src/compat/tests.rs @@ -0,0 +1,234 @@ +// Copyright 2026 Element Creations Ltd. +// +// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +// Please see LICENSE files in the repository root for full details. + +use axum::http::{Request, StatusCode}; +use mas_matrix::{HomeserverConnection, ProvisionRequest}; +use serde::{Deserialize, Serialize}; +use zeroize::Zeroizing; + +use crate::test_utils::{RequestBuilderExt, ResponseExt, TestState, setup}; + +#[derive(Debug, Serialize)] +#[serde(tag = "type")] +enum LoginCredentials { + #[serde(rename = "m.login.password")] + Password { + identifier: LoginIdentifier, + password: String, + }, +} + +#[derive(Debug, Serialize)] +#[serde(tag = "type")] +enum LoginIdentifier { + #[serde(rename = "m.id.user")] + User { user: String }, +} + +#[derive(Debug, Serialize)] +struct LoginRequest { + #[serde(flatten)] + credentials: LoginCredentials, + #[serde(default)] + refresh_token: bool, +} + +#[derive(Debug, Deserialize)] +struct LoginResponse { + #[allow(dead_code)] + access_token: String, + #[allow(dead_code)] + user_id: String, + #[allow(dead_code)] + device_id: Option, + refresh_token: Option, +} + +#[derive(Debug, Serialize)] +struct RefreshRequest { + refresh_token: String, +} + +#[derive(Debug, Deserialize, PartialEq, Eq)] +struct RefreshResponse { + access_token: String, + refresh_token: String, + expires_in_ms: i64, +} + +/// Test using a compatibility refresh token. +#[sqlx::test(migrator = "mas_storage_pg::MIGRATOR")] +async fn test_compat_refresh(pool: sqlx::PgPool) { + setup(); + let state = TestState::from_pool(pool).await.unwrap(); + + // Create a user + create_test_user(&state, "testuser").await; + + // Login to get initial tokens + let login_request = Request::post("/_matrix/client/v3/login").json(&LoginRequest { + credentials: LoginCredentials::Password { + identifier: LoginIdentifier::User { + user: "testuser".to_owned(), + }, + password: "password".to_owned(), + }, + refresh_token: true, + }); + + let login_response = state.request(login_request).await; + login_response.assert_status(StatusCode::OK); + + let login_response: LoginResponse = login_response.json(); + let initial_refresh_token = login_response + .refresh_token + .expect("Login should return a refresh token"); + + // First refresh + let refresh_request = Request::post("/_matrix/client/v3/refresh").json(&RefreshRequest { + refresh_token: initial_refresh_token.clone(), + }); + + let first_refresh_response = state.request(refresh_request).await; + first_refresh_response.assert_status(StatusCode::OK); + + let first_refresh_response: RefreshResponse = first_refresh_response.json(); + let first_new_refresh_token = first_refresh_response.refresh_token.clone(); + + assert_eq!( + first_refresh_response, + RefreshResponse { + access_token: "mct_fNbm5KAQovodfVQz7IvDc44woP66fR_fsaiD1".to_owned(), + refresh_token: "mcr_42oTpLoieH5IecxG6gZXyvelQWW9Xq_a8g5N3".to_owned(), + expires_in_ms: 300_000 + } + ); + + // Use the token from the /refresh response to /refresh again, + // proving that it works. + // This is a regression test: we were previously consuming the refresh token + // before it was returned from /refresh. + let second_refresh_request = + Request::post("/_matrix/client/v3/refresh").json(&RefreshRequest { + refresh_token: first_new_refresh_token.clone(), + }); + + let second_refresh_response = state.request(second_refresh_request).await; + second_refresh_response.assert_status(StatusCode::OK); + + let second_refresh_response: RefreshResponse = second_refresh_response.json(); + + assert_eq!( + second_refresh_response, + RefreshResponse { + access_token: "???".to_owned(), + refresh_token: "???".to_owned(), + expires_in_ms: 300_000 + } + ); +} + +#[sqlx::test(migrator = "mas_storage_pg::MIGRATOR")] +async fn test_refresh_with_invalid_token(pool: sqlx::PgPool) { + setup(); + let state = TestState::from_pool(pool).await.unwrap(); + + let refresh_request = RefreshRequest { + refresh_token: "invalid_token".to_owned(), + }; + + let refresh_request = Request::post("/_matrix/client/v3/refresh").json(&refresh_request); + + let response = state.request(refresh_request).await; + response.assert_status(StatusCode::UNAUTHORIZED); +} + +#[sqlx::test(migrator = "mas_storage_pg::MIGRATOR")] +async fn test_refresh_with_consumed_token(pool: sqlx::PgPool) { + setup(); + let state = TestState::from_pool(pool).await.unwrap(); + + // Create a user and login + create_test_user(&state, "testuser").await; + + let login_request = LoginRequest { + credentials: LoginCredentials::Password { + identifier: LoginIdentifier::User { + user: "testuser".to_owned(), + }, + password: "password".to_owned(), + }, + refresh_token: true, + }; + + let login_request = Request::post("/_matrix/client/v3/login").json(&login_request); + + let login_response = state.request(login_request).await; + login_response.assert_status(StatusCode::OK); + + let login_response: LoginResponse = login_response.json(); + let refresh_token = login_response + .refresh_token + .expect("Login should return a refresh token"); + + let refresh_request = RefreshRequest { + refresh_token: refresh_token.clone(), + }; + + // Use the refresh token once + let first_refresh_request = Request::post("/_matrix/client/v3/refresh").json(&refresh_request); + let first_refresh_response = state.request(first_refresh_request).await; + first_refresh_response.assert_status(StatusCode::OK); + + let _first_refresh_response: RefreshResponse = first_refresh_response.json(); + + // Try to use the same refresh token again - should fail because it's consumed + let second_refresh_request = + Request::post("/_matrix/client/v3/refresh").json(&refresh_request); + + let second_refresh_response = state.request(second_refresh_request).await; + second_refresh_response.assert_status(StatusCode::UNAUTHORIZED); +} + +async fn create_test_user(state: &TestState, username: &str) -> mas_data_model::User { + let mut repo = state.repository().await.unwrap(); + let mut rng = state.rng(); + + let user = repo + .user() + .add(&mut rng, &state.clock, username.to_owned()) + .await + .unwrap(); + + let password = Zeroizing::new("password".to_owned()); + let (version, hashed_password) = state + .password_manager + .hash(&mut rng, password) + .await + .unwrap(); + + repo.user_password() + .add( + &mut rng, + &state.clock, + &user, + version, + hashed_password, + None, + ) + .await + .unwrap(); + + // Provision the user on the homeserver + state + .homeserver_connection + .provision_user(&ProvisionRequest::new(&user.username, &user.sub)) + .await + .unwrap(); + + repo.save().await.unwrap(); + + user +} From bac118ab12bfddec6d28e11ca2ea16bf8585deb6 Mon Sep 17 00:00:00 2001 From: Olivier 'reivilibre Date: Fri, 13 Feb 2026 14:57:27 +0000 Subject: [PATCH 047/104] Fix compat token refresh giving back a consumed token --- crates/handlers/src/compat/refresh.rs | 2 +- crates/handlers/src/compat/tests.rs | 7 +++--- ...f69eb67adaa4d40fc1910dfcd2640e32ab37.json} | 7 +++--- crates/storage-pg/src/compat/mod.rs | 21 +++++++++++++--- crates/storage-pg/src/compat/refresh_token.rs | 12 +++++++-- crates/storage/src/compat/refresh_token.rs | 25 +++++++++++++------ 6 files changed, 53 insertions(+), 21 deletions(-) rename crates/storage-pg/.sqlx/{query-f75e44b528234dac708640ad9a111f3f6b468a91bf0d5b574795bf8c80605f19.json => query-4e64540bbffe5f4b9c4a6589012cf69eb67adaa4d40fc1910dfcd2640e32ab37.json} (66%) diff --git a/crates/handlers/src/compat/refresh.rs b/crates/handlers/src/compat/refresh.rs index 95679af1d..dabdaefe7 100644 --- a/crates/handlers/src/compat/refresh.rs +++ b/crates/handlers/src/compat/refresh.rs @@ -156,7 +156,7 @@ pub(crate) async fn post( .await?; repo.compat_refresh_token() - .consume(&clock, refresh_token) + .consume_and_replace(&clock, refresh_token, &new_refresh_token) .await?; if let Some(access_token) = access_token { diff --git a/crates/handlers/src/compat/tests.rs b/crates/handlers/src/compat/tests.rs index f4827f5de..cb6b76aba 100644 --- a/crates/handlers/src/compat/tests.rs +++ b/crates/handlers/src/compat/tests.rs @@ -123,8 +123,8 @@ async fn test_compat_refresh(pool: sqlx::PgPool) { assert_eq!( second_refresh_response, RefreshResponse { - access_token: "???".to_owned(), - refresh_token: "???".to_owned(), + access_token: "mct_Wc6Hx4l9DGzqGtgLoYqtrtBUBcWlE4_ZFyTp2".to_owned(), + refresh_token: "mcr_Yp7FM44zJN5qePGMLvvMXC4Ds1A3lC_0YcYCM".to_owned(), expires_in_ms: 300_000 } ); @@ -185,8 +185,7 @@ async fn test_refresh_with_consumed_token(pool: sqlx::PgPool) { let _first_refresh_response: RefreshResponse = first_refresh_response.json(); // Try to use the same refresh token again - should fail because it's consumed - let second_refresh_request = - Request::post("/_matrix/client/v3/refresh").json(&refresh_request); + let second_refresh_request = Request::post("/_matrix/client/v3/refresh").json(&refresh_request); let second_refresh_response = state.request(second_refresh_request).await; second_refresh_response.assert_status(StatusCode::UNAUTHORIZED); diff --git a/crates/storage-pg/.sqlx/query-f75e44b528234dac708640ad9a111f3f6b468a91bf0d5b574795bf8c80605f19.json b/crates/storage-pg/.sqlx/query-4e64540bbffe5f4b9c4a6589012cf69eb67adaa4d40fc1910dfcd2640e32ab37.json similarity index 66% rename from crates/storage-pg/.sqlx/query-f75e44b528234dac708640ad9a111f3f6b468a91bf0d5b574795bf8c80605f19.json rename to crates/storage-pg/.sqlx/query-4e64540bbffe5f4b9c4a6589012cf69eb67adaa4d40fc1910dfcd2640e32ab37.json index 0d597ca3b..54b801174 100644 --- a/crates/storage-pg/.sqlx/query-f75e44b528234dac708640ad9a111f3f6b468a91bf0d5b574795bf8c80605f19.json +++ b/crates/storage-pg/.sqlx/query-4e64540bbffe5f4b9c4a6589012cf69eb67adaa4d40fc1910dfcd2640e32ab37.json @@ -1,15 +1,16 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE compat_refresh_tokens\n SET consumed_at = $2\n WHERE compat_session_id = $1\n AND consumed_at IS NULL\n ", + "query": "\n UPDATE compat_refresh_tokens\n SET consumed_at = $2\n WHERE compat_session_id = $1\n AND consumed_at IS NULL\n AND compat_refresh_token_id <> $3\n ", "describe": { "columns": [], "parameters": { "Left": [ "Uuid", - "Timestamptz" + "Timestamptz", + "Uuid" ] }, "nullable": [] }, - "hash": "f75e44b528234dac708640ad9a111f3f6b468a91bf0d5b574795bf8c80605f19" + "hash": "4e64540bbffe5f4b9c4a6589012cf69eb67adaa4d40fc1910dfcd2640e32ab37" } diff --git a/crates/storage-pg/src/compat/mod.rs b/crates/storage-pg/src/compat/mod.rs index d42c9b1af..b9ce82da4 100644 --- a/crates/storage-pg/src/compat/mod.rs +++ b/crates/storage-pg/src/compat/mod.rs @@ -437,6 +437,7 @@ mod tests { async fn test_refresh_token_repository(pool: PgPool) { const ACCESS_TOKEN: &str = "access_token"; const REFRESH_TOKEN: &str = "refresh_token"; + const REFRESH_TOKEN2: &str = "refresh_token2"; let mut rng = ChaChaRng::seed_from_u64(42); let clock = MockClock::default(); let mut repo = PgRepository::from_pool(&pool).await.unwrap().boxed(); @@ -508,16 +509,28 @@ mod tests { assert!(refresh_token_lookup.is_valid()); assert!(!refresh_token_lookup.is_consumed()); - // Consume it + // Consume the first token, but to do so we need a 2nd to replace it with + let refresh_token2 = repo + .compat_refresh_token() + .add( + &mut rng, + &clock, + &session, + &access_token, + REFRESH_TOKEN2.to_owned(), + ) + .await + .unwrap(); + let refresh_token = repo .compat_refresh_token() - .consume(&clock, refresh_token) + .consume_and_replace(&clock, refresh_token, &refresh_token2) .await .unwrap(); assert!(!refresh_token.is_valid()); assert!(refresh_token.is_consumed()); - // Reload it and check again + // Reload the first token and check again let refresh_token_lookup = repo .compat_refresh_token() .find_by_token(REFRESH_TOKEN) @@ -530,7 +543,7 @@ mod tests { // Consuming it again should not work assert!( repo.compat_refresh_token() - .consume(&clock, refresh_token) + .consume_and_replace(&clock, refresh_token, &refresh_token2) .await .is_err() ); diff --git a/crates/storage-pg/src/compat/refresh_token.rs b/crates/storage-pg/src/compat/refresh_token.rs index 5c6add046..3cb9d7944 100644 --- a/crates/storage-pg/src/compat/refresh_token.rs +++ b/crates/storage-pg/src/compat/refresh_token.rs @@ -185,20 +185,26 @@ impl CompatRefreshTokenRepository for PgCompatRefreshTokenRepository<'_> { } #[tracing::instrument( - name = "db.compat_refresh_token.consume", + name = "db.compat_refresh_token.consume_and_replace", skip_all, fields( db.query.text, %compat_refresh_token.id, + %successor_compat_refresh_token.id, compat_session.id = %compat_refresh_token.session_id, ), err, )] - async fn consume( + async fn consume_and_replace( &mut self, clock: &dyn Clock, compat_refresh_token: CompatRefreshToken, + successor_compat_refresh_token: &CompatRefreshToken, ) -> Result { + if compat_refresh_token.session_id != successor_compat_refresh_token.session_id { + return Err(DatabaseError::invalid_operation()); + } + let consumed_at = clock.now(); let res = sqlx::query!( r#" @@ -206,9 +212,11 @@ impl CompatRefreshTokenRepository for PgCompatRefreshTokenRepository<'_> { SET consumed_at = $2 WHERE compat_session_id = $1 AND consumed_at IS NULL + AND compat_refresh_token_id <> $3 "#, Uuid::from(compat_refresh_token.session_id), consumed_at, + Uuid::from(successor_compat_refresh_token.id), ) .traced() .execute(&mut *self.conn) diff --git a/crates/storage/src/compat/refresh_token.rs b/crates/storage/src/compat/refresh_token.rs index 6ffefbc69..d4434569c 100644 --- a/crates/storage/src/compat/refresh_token.rs +++ b/crates/storage/src/compat/refresh_token.rs @@ -69,16 +69,22 @@ pub trait CompatRefreshTokenRepository: Send + Sync { token: String, ) -> Result; - /// Consume a compat refresh token. + /// Consume the given compat refresh token, as well as all other refresh + /// tokens from the same session, except for the given successor compat + /// refresh token. /// - /// This also marks other refresh tokens in the same session as consumed. + /// The given successor refresh token will thereafter be the only valid + /// refresh token for the session. + /// + /// # Historical context + /// + /// When using a refresh token, we must be able to mark multiple other + /// refresh tokens in the same session as consumed. /// This is desirable because the syn2mas migration process can import /// multiple refresh tokens for one device (compat session). /// But once the user uses one of those, the others should no longer /// be valid. /// - /// Returns the consumed compat refresh token - /// /// # Parameters /// /// * `clock`: The clock used to generate timestamps @@ -86,11 +92,15 @@ pub trait CompatRefreshTokenRepository: Send + Sync { /// /// # Errors /// - /// Returns [`Self::Error`] if the underlying repository fails - async fn consume( + /// - Returns [`Self::Error`] if the underlying repository fails + /// - Returns an error if `compat_refresh_token` is not valid to be + /// consumed. + /// - Returns an error if no refresh tokens would be consumed. + async fn consume_and_replace( &mut self, clock: &dyn Clock, compat_refresh_token: CompatRefreshToken, + successor_compat_refresh_token: &CompatRefreshToken, ) -> Result; } @@ -111,9 +121,10 @@ repository_impl!(CompatRefreshTokenRepository: token: String, ) -> Result; - async fn consume( + async fn consume_and_replace( &mut self, clock: &dyn Clock, compat_refresh_token: CompatRefreshToken, + successor_compat_refresh_token: &CompatRefreshToken, ) -> Result; ); From 82e39a761da1a12fb33b2df0478833b0be0e3bbe Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Tue, 17 Feb 2026 11:50:32 +0100 Subject: [PATCH 048/104] Comment what `.message_id(None)` means using lettre --- crates/email/src/mailer.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/email/src/mailer.rs b/crates/email/src/mailer.rs index 12ee5e35e..0b5f96d97 100644 --- a/crates/email/src/mailer.rs +++ b/crates/email/src/mailer.rs @@ -53,6 +53,8 @@ impl Mailer { Message::builder() .from(self.from.clone()) .reply_to(self.reply_to.clone()) + // By passing `None`, lettre generates a random message ID + // with a random UUID and the hostname for us .message_id(None) } From a4080bc21ceab798df4dbaaeadc901c8c7c3ae1e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 13:54:49 +0000 Subject: [PATCH 049/104] build(deps-dev): bump the storybook group in /frontend with 3 updates Bumps the storybook group in /frontend with 3 updates: [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/docs), [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) and [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/core). Updates `@storybook/addon-docs` from 10.2.8 to 10.2.9 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/v10.2.9/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.9/code/addons/docs) Updates `@storybook/react-vite` from 10.2.8 to 10.2.9 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/v10.2.9/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.9/code/frameworks/react-vite) Updates `storybook` from 10.2.8 to 10.2.9 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/v10.2.9/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.9/code/core) --- updated-dependencies: - dependency-name: "@storybook/addon-docs" dependency-version: 10.2.9 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: "@storybook/react-vite" dependency-version: 10.2.9 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: storybook dependency-version: 10.2.9 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 384 +++++++++---------------------------- frontend/package.json | 4 +- 2 files changed, 97 insertions(+), 291 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index fea909db3..0d86218eb 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -36,8 +36,8 @@ "@graphql-codegen/cli": "^6.1.1", "@graphql-codegen/client-preset": "^5.2.2", "@graphql-codegen/typescript-msw": "^3.0.1", - "@storybook/addon-docs": "^10.2.8", - "@storybook/react-vite": "^10.2.8", + "@storybook/addon-docs": "^10.2.9", + "@storybook/react-vite": "^10.2.9", "@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-router-devtools": "^1.150.0", "@tanstack/router-plugin": "^1.150.0", @@ -3339,62 +3339,23 @@ } }, "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=18" } }, "node_modules/@joshwooding/vite-plugin-react-docgen-typescript": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.6.3.tgz", - "integrity": "sha512-9TGZuAX+liGkNKkwuo3FYJu7gHWT0vkBcf7GkOe7s7fmC19XwH/4u5u7sDIFrMooe558ORcmuBvBz7Ur5PlbHw==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.6.4.tgz", + "integrity": "sha512-6PyZBYKnnVNqOSB0YFly+62R7dmov8segT27A+RVTBVd4iAE6kbW9QBJGlyR2yG4D4ohzhZSTIu7BK1UTtmFFA==", "dev": true, "license": "MIT", "dependencies": { - "glob": "^11.1.0", + "glob": "^13.0.1", "react-docgen-typescript": "^2.2.2" }, "peerDependencies": { @@ -5054,16 +5015,16 @@ "license": "MIT" }, "node_modules/@storybook/addon-docs": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.8.tgz", - "integrity": "sha512-cEoWqQrLzrxOwZFee5zrD4cYrdEWKV80POb7jUZO0r5vfl2DuslIr3n/+RfLT52runCV4aZcFEfOfP/IWHNPxg==", + "version": "10.2.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.9.tgz", + "integrity": "sha512-rPUSyymt6IDI8PbZVEXPnqOysstp+mKeZiPRxcKIklecDhLUiy5Yc2PQneYY//Gp7Z/CEe54tJHr+WpFgtLPYg==", "dev": true, "license": "MIT", "dependencies": { "@mdx-js/react": "^3.0.0", - "@storybook/csf-plugin": "10.2.8", + "@storybook/csf-plugin": "10.2.9", "@storybook/icons": "^2.0.1", - "@storybook/react-dom-shim": "10.2.8", + "@storybook/react-dom-shim": "10.2.9", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "ts-dedent": "^2.0.0" @@ -5073,17 +5034,17 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.8" + "storybook": "^10.2.9" } }, "node_modules/@storybook/builder-vite": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.8.tgz", - "integrity": "sha512-+6/Lwi7W0YIbzHDh798GPp0IHUYDwp0yv0Y1eVNK/StZD0tnv4/1C28NKyP+O7JOsFsuWI1qHiDhw8kNURugZw==", + "version": "10.2.9", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.9.tgz", + "integrity": "sha512-01DvThkchYqHh2GzqFTNrrNsrn3URuHXfHlDt2u+ggqiBKjObxeRhlgZN0ntG9w41Y05mhWH9pRAKbPMGDBIwQ==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf-plugin": "10.2.8", + "@storybook/csf-plugin": "10.2.9", "ts-dedent": "^2.0.0" }, "funding": { @@ -5091,14 +5052,14 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.8", + "storybook": "^10.2.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "node_modules/@storybook/csf-plugin": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.8.tgz", - "integrity": "sha512-kKkLYhRXb33YtIPdavD2DU25sb14sqPYdcQFpyqu4TaD9truPPqW8P5PLTUgERydt/eRvRlnhauPHavU1kjsnA==", + "version": "10.2.9", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.9.tgz", + "integrity": "sha512-vfGZeszuDZc742eQgpA/W6ok54ePYPYz9MLdM6u3XBHJXmNhsjbcwSFTXZHrxjyDn88vXdo+Frg3HBKkOQBnbQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5111,7 +5072,7 @@ "peerDependencies": { "esbuild": "*", "rollup": "*", - "storybook": "^10.2.8", + "storybook": "^10.2.9", "vite": "*", "webpack": "*" }, @@ -5149,14 +5110,14 @@ } }, "node_modules/@storybook/react": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.2.8.tgz", - "integrity": "sha512-nMFqQFUXq6Zg2O5SeuomyWnrIx61QfpNQMrfor8eCEzHrWNnXrrvVsz2RnHIgXN8RVyaWGDPh1srAECu/kDHXw==", + "version": "10.2.9", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.2.9.tgz", + "integrity": "sha512-cYJroaHWHmauPO8EcfpDTU3Odc7z5/DbuLO+jQ4SAaoupwnE35HNe8WAdpD3jpmI20cqKauqOENIT/+HjxhlYA==", "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/react-dom-shim": "10.2.8", + "@storybook/react-dom-shim": "10.2.9", "react-docgen": "^8.0.2" }, "funding": { @@ -5166,7 +5127,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.8", + "storybook": "^10.2.9", "typescript": ">= 4.9.x" }, "peerDependenciesMeta": { @@ -5176,9 +5137,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.8.tgz", - "integrity": "sha512-Xde9X3VszFV1pTXfc2ZFM89XOCGRxJD8MUIzDwkcT9xaki5a+8srs/fsXj75fMY6gMYfcL5lNRZvCqg37HOmcQ==", + "version": "10.2.9", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.9.tgz", + "integrity": "sha512-hlvFl0ylK/RZ4GxOXcBfzQNoOm3/x0LEgaPYlkR2/P4CTbKKTc+fHRsZMpFgP/X0g8oZmfm93mdhQdX0zlF8JQ==", "dev": true, "license": "MIT", "funding": { @@ -5188,20 +5149,20 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.8" + "storybook": "^10.2.9" } }, "node_modules/@storybook/react-vite": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.2.8.tgz", - "integrity": "sha512-x5kmw+TPhxkQV84n4e9X0q6/rA5T8V2QQFolMuN+U93q1HX1r+GZ6g/nXaaq9ox168PhHUJZQnn+LzSQKGCMBA==", + "version": "10.2.9", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.2.9.tgz", + "integrity": "sha512-uDuo8TeBc3E519xQQGGGaH43TaCEbEgNjDV3vX/G6ikWgJoYzFFILO4EKhKKsf7t3dJl+FIXJEcvPw7Azd0VPw==", "dev": true, "license": "MIT", "dependencies": { - "@joshwooding/vite-plugin-react-docgen-typescript": "^0.6.3", + "@joshwooding/vite-plugin-react-docgen-typescript": "^0.6.4", "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "10.2.8", - "@storybook/react": "10.2.8", + "@storybook/builder-vite": "10.2.9", + "@storybook/react": "10.2.9", "empathic": "^2.0.0", "magic-string": "^0.30.0", "react-docgen": "^8.0.0", @@ -5215,7 +5176,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.8", + "storybook": "^10.2.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, @@ -7571,13 +7532,6 @@ "node": ">=4" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, "node_modules/electron-to-chromium": { "version": "1.5.267", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", @@ -7585,13 +7539,6 @@ "dev": true, "license": "ISC" }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, "node_modules/empathic": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", @@ -7946,23 +7893,6 @@ "node": ">=8" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/formatly": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/formatly/-/formatly-0.3.0.tgz", @@ -8111,22 +8041,16 @@ } }, "node_modules/glob": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", - "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "version": "13.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.4.tgz", + "integrity": "sha512-KACie1EOs9BIOMtenFaxwmYODWA3/fTfGSUnLhMJpXRntu1g+uL/Xvub5f8SCTppvo9q62Qy4LeOoUiaL54G5A==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.1.1", + "minimatch": "^10.2.1", "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, "engines": { "node": "20 || >=22" }, @@ -8147,6 +8071,48 @@ "node": ">= 6" } }, + "node_modules/glob/node_modules/balanced-match": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.2.tgz", + "integrity": "sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "jackspeak": "^4.2.3" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", + "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -9655,13 +9621,13 @@ } }, "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "@isaacs/cliui": "^9.0.0" }, "engines": { "node": "20 || >=22" @@ -11714,24 +11680,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rollup": { "version": "4.53.5", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.5.tgz", @@ -12096,9 +12044,9 @@ } }, "node_modules/storybook": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.8.tgz", - "integrity": "sha512-885uSIn8NQw2ZG7vy84K45lHCOSyz1DVsDV8pHiHQj3J0riCuWLNeO50lK9z98zE8kjhgTtxAAkMTy5nkmNRKQ==", + "version": "10.2.9", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.9.tgz", + "integrity": "sha512-DGok7XwIwdPWF+a49Yw+4madER5DZWRo9CdyySBLT3zeuxiEPt0Ua7ouJHm/y6ojnb/FVKZcQe8YmrE71s0qPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12158,70 +12106,6 @@ "dev": true, "license": "MIT" }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-ansi": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", @@ -12238,20 +12122,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-ansi/node_modules/ansi-regex": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", @@ -13430,70 +13300,6 @@ "node": ">=8" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index c9a8ea85b..ff115e83a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -46,8 +46,8 @@ "@graphql-codegen/cli": "^6.1.1", "@graphql-codegen/client-preset": "^5.2.2", "@graphql-codegen/typescript-msw": "^3.0.1", - "@storybook/addon-docs": "^10.2.8", - "@storybook/react-vite": "^10.2.8", + "@storybook/addon-docs": "^10.2.9", + "@storybook/react-vite": "^10.2.9", "@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-router-devtools": "^1.150.0", "@tanstack/router-plugin": "^1.150.0", From 85e512f49d9eef2557082d075aa8793392887834 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 13:55:02 +0000 Subject: [PATCH 050/104] build(deps-dev): bump @vitejs/plugin-react Bumps the vite group in /frontend with 1 update: [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react). Updates `@vitejs/plugin-react` from 5.1.3 to 5.1.4 - [Release notes](https://github.com/vitejs/vite-plugin-react/releases) - [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@5.1.4/packages/plugin-react) --- updated-dependencies: - dependency-name: "@vitejs/plugin-react" dependency-version: 5.1.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vite ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 16 ++++++++-------- frontend/package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index fea909db3..3c791338e 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -48,7 +48,7 @@ "@types/react": "19.2.14", "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", - "@vitejs/plugin-react": "^5.1.3", + "@vitejs/plugin-react": "^5.1.4", "@vitest/coverage-v8": "^4.0.18", "autoprefixer": "^10.4.23", "browserslist-to-esbuild": "^2.1.1", @@ -4682,9 +4682,9 @@ "license": "MIT" }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.2", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", - "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", + "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", "dev": true, "license": "MIT" }, @@ -6087,16 +6087,16 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.3.tgz", - "integrity": "sha512-NVUnA6gQCl8jfoYqKqQU5Clv0aPw14KkZYCsX6T9Lfu9slI0LOU10OTwFHS/WmptsMMpshNd/1tuWsHQ2Uk+cg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.4.tgz", + "integrity": "sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.29.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-rc.2", + "@rolldown/pluginutils": "1.0.0-rc.3", "@types/babel__core": "^7.20.5", "react-refresh": "^0.18.0" }, diff --git a/frontend/package.json b/frontend/package.json index c9a8ea85b..c088e8a39 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -58,7 +58,7 @@ "@types/react": "19.2.14", "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", - "@vitejs/plugin-react": "^5.1.3", + "@vitejs/plugin-react": "^5.1.4", "@vitest/coverage-v8": "^4.0.18", "autoprefixer": "^10.4.23", "browserslist-to-esbuild": "^2.1.1", From 7182574a98c7f2fd45f53d22d6dd30e8a1d11d53 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 13:55:15 +0000 Subject: [PATCH 051/104] build(deps): bump minijinja from 2.12.0 to 2.15.1 Bumps [minijinja](https://github.com/mitsuhiko/minijinja) from 2.12.0 to 2.15.1. - [Release notes](https://github.com/mitsuhiko/minijinja/releases) - [Changelog](https://github.com/mitsuhiko/minijinja/blob/main/CHANGELOG.md) - [Commits](https://github.com/mitsuhiko/minijinja/compare/2.12.0...minijinja-go/v2.15.1) --- updated-dependencies: - dependency-name: minijinja dependency-version: 2.15.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 66fc14d49..672ff39bc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3833,9 +3833,9 @@ dependencies = [ [[package]] name = "minijinja" -version = "2.12.0" +version = "2.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9f264d75233323f4b7d2f03aefe8a990690cdebfbfe26ea86bcbaec5e9ac990" +checksum = "b479616bb6f0779fb0f3964246beda02d4b01144e1b0d5519616e012ccc2a245" dependencies = [ "memo-map", "percent-encoding", diff --git a/Cargo.toml b/Cargo.toml index 718343ab8..36875f3b6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -378,7 +378,7 @@ version = "0.3.17" # Templates [workspace.dependencies.minijinja] -version = "2.12.0" +version = "2.15.1" features = ["urlencode", "loader", "json", "speedups", "unstable_machinery"] # Additional filters for minijinja From 398bdcb65351e9d1bf945365479c98bbb978ae9d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 13:55:18 +0000 Subject: [PATCH 052/104] build(deps): bump the i18next group in /frontend with 2 updates Bumps the i18next group in /frontend with 2 updates: [i18next](https://github.com/i18next/i18next) and [i18next-cli](https://github.com/i18next/i18next-cli). Updates `i18next` from 25.8.4 to 25.8.10 - [Release notes](https://github.com/i18next/i18next/releases) - [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next/compare/v25.8.4...v25.8.10) Updates `i18next-cli` from 1.42.6 to 1.42.9 - [Changelog](https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next-cli/compare/v1.42.6...v1.42.9) --- updated-dependencies: - dependency-name: i18next dependency-version: 25.8.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: i18next - dependency-name: i18next-cli dependency-version: 1.42.9 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: i18next ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 57 ++++++-------------------------------- frontend/package.json | 4 +-- 2 files changed, 10 insertions(+), 51 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index fea909db3..e1cc21702 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -20,7 +20,7 @@ "@zxcvbn-ts/language-common": "^3.0.4", "classnames": "^2.5.1", "date-fns": "^4.1.0", - "i18next": "^25.8.4", + "i18next": "^25.8.10", "react": "^19.2.4", "react-dom": "^19.2.4", "react-i18next": "^16.5.4", @@ -54,7 +54,7 @@ "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", "happy-dom": "^20.5.0", - "i18next-cli": "^1.42.6", + "i18next-cli": "^1.42.9", "knip": "^5.81.0", "msw": "^2.12.8", "msw-storybook-addon": "^2.0.6", @@ -6347,19 +6347,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/ansi-escapes": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", @@ -8586,9 +8573,9 @@ } }, "node_modules/i18next": { - "version": "25.8.4", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.8.4.tgz", - "integrity": "sha512-a9A0MnUjKvzjEN/26ZY1okpra9kA8MEwzYEz1BNm+IyxUKPRH6ihf0p7vj8YvULwZHKHl3zkJ6KOt4hewxBecQ==", + "version": "25.8.10", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.8.10.tgz", + "integrity": "sha512-CtPJLMAz1G8sxo+mIzfBjGgLxWs7d6WqIjlmmv9BTsOat4pJIfwZ8cm07n3kFS6bP9c6YwsYutYrwsEeJVBo2g==", "funding": [ { "type": "individual", @@ -8617,15 +8604,14 @@ } }, "node_modules/i18next-cli": { - "version": "1.42.6", - "resolved": "https://registry.npmjs.org/i18next-cli/-/i18next-cli-1.42.6.tgz", - "integrity": "sha512-pRKf0K4J7KdHJMRgVRolf1emfKfzjpBmpm+mxKRWNh8iYQp+mL4gzpgopF5ikRRw6GXu2l9CCzVFRLD0qFpg5A==", + "version": "1.42.9", + "resolved": "https://registry.npmjs.org/i18next-cli/-/i18next-cli-1.42.9.tgz", + "integrity": "sha512-Gh11eWLMyuqoxYVBRp+e+3DEmT2hDGJswjg04iqXMnMzT89buryLKx6zL20x8F7AwkM6n4KR5iN6H61drV6EAQ==", "dev": true, "license": "MIT", "dependencies": { "@croct/json5-parser": "0.2.2", "@swc/core": "1.15.11", - "chalk": "5.6.2", "chokidar": "5.0.0", "commander": "14.0.3", "execa": "9.6.1", @@ -8638,7 +8624,6 @@ "ora": "9.3.0", "react": "^19.2.4", "react-i18next": "^16.5.4", - "swc-walk": "1.0.1", "yaml": "2.8.2" }, "bin": { @@ -8648,19 +8633,6 @@ "node": ">=22" } }, - "node_modules/i18next-cli/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/i18next-cli/node_modules/chokidar": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", @@ -12392,19 +12364,6 @@ "tslib": "^2.0.3" } }, - "node_modules/swc-walk": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/swc-walk/-/swc-walk-1.0.1.tgz", - "integrity": "sha512-bHR0Zs+MdFxKKq5QXmPZuvbXybAJh4wV56zZT7n7hQC55eHpGvL1TeeHxNwL5XlXYSAXKK57GsKY0aEttGDuWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn-walk": "^8.3.4" - }, - "engines": { - "node": ">=20.2.0" - } - }, "node_modules/sync-fetch": { "version": "0.6.0-2", "resolved": "https://registry.npmjs.org/sync-fetch/-/sync-fetch-0.6.0-2.tgz", diff --git a/frontend/package.json b/frontend/package.json index c9a8ea85b..44e18587e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -30,7 +30,7 @@ "@zxcvbn-ts/language-common": "^3.0.4", "classnames": "^2.5.1", "date-fns": "^4.1.0", - "i18next": "^25.8.4", + "i18next": "^25.8.10", "react": "^19.2.4", "react-dom": "^19.2.4", "react-i18next": "^16.5.4", @@ -64,7 +64,7 @@ "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", "happy-dom": "^20.5.0", - "i18next-cli": "^1.42.6", + "i18next-cli": "^1.42.9", "knip": "^5.81.0", "msw": "^2.12.8", "msw-storybook-addon": "^2.0.6", From d0efd98a18a8ef1b820e92b5f98fbb9283a85d93 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 14:07:54 +0000 Subject: [PATCH 053/104] build(deps): bump socket2 from 0.6.1 to 0.6.2 Bumps [socket2](https://github.com/rust-lang/socket2) from 0.6.1 to 0.6.2. - [Release notes](https://github.com/rust-lang/socket2/releases) - [Changelog](https://github.com/rust-lang/socket2/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-lang/socket2/compare/v0.6.1...v0.6.2) --- updated-dependencies: - dependency-name: socket2 dependency-version: 0.6.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 66fc14d49..ef48cd2c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5797,9 +5797,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" dependencies = [ "libc", "windows-sys 0.60.2", diff --git a/Cargo.toml b/Cargo.toml index 718343ab8..c764b6ffe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -614,7 +614,7 @@ version = "2.2.0" # Low-level socket manipulation [workspace.dependencies.socket2] -version = "0.6.1" +version = "0.6.2" # Subject Public Key Info [workspace.dependencies.spki] From bf9444f070c36fbfb52dbc166e5a32389abe4249 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 14:27:31 +0000 Subject: [PATCH 054/104] build(deps): bump @tanstack/react-query Bumps the tanstack-query group in /frontend with 1 update: [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query). Updates `@tanstack/react-query` from 5.90.20 to 5.90.21 - [Release notes](https://github.com/TanStack/query/releases) - [Changelog](https://github.com/TanStack/query/blob/main/packages/react-query/CHANGELOG.md) - [Commits](https://github.com/TanStack/query/commits/@tanstack/react-query@5.90.21/packages/react-query) --- updated-dependencies: - dependency-name: "@tanstack/react-query" dependency-version: 5.90.21 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: tanstack-query ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 8 ++++---- frontend/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 5f0b92b90..d060b6313 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -12,7 +12,7 @@ "@fontsource/inter": "^5.2.8", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", - "@tanstack/react-query": "^5.90.20", + "@tanstack/react-query": "^5.90.21", "@tanstack/react-router": "^1.150.0", "@vector-im/compound-design-tokens": "6.4.3", "@vector-im/compound-web": "^8.3.5", @@ -5441,9 +5441,9 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.90.20", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.20.tgz", - "integrity": "sha512-vXBxa+qeyveVO7OA0jX1z+DeyCA4JKnThKv411jd5SORpBKgkcVnYKCiBgECvADvniBX7tobwBmg01qq9JmMJw==", + "version": "5.90.21", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.21.tgz", + "integrity": "sha512-0Lu6y5t+tvlTJMTO7oh5NSpJfpg/5D41LlThfepTixPYkJ0sE2Jj0m0f6yYqujBwIXlId87e234+MxG3D3g7kg==", "license": "MIT", "dependencies": { "@tanstack/query-core": "5.90.20" diff --git a/frontend/package.json b/frontend/package.json index 1d142d977..099b1d319 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -22,7 +22,7 @@ "@fontsource/inter": "^5.2.8", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", - "@tanstack/react-query": "^5.90.20", + "@tanstack/react-query": "^5.90.21", "@tanstack/react-router": "^1.150.0", "@vector-im/compound-design-tokens": "6.4.3", "@vector-im/compound-web": "^8.3.5", From 9c66bc679c8f6301eacf1cee7656321788385e28 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 16:24:32 +0000 Subject: [PATCH 055/104] Translations updates --- frontend/.storybook/locales.ts | 66 +++++++++++++++++----------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/frontend/.storybook/locales.ts b/frontend/.storybook/locales.ts index b0f0f3731..9a545003e 100644 --- a/frontend/.storybook/locales.ts +++ b/frontend/.storybook/locales.ts @@ -27,7 +27,7 @@ export type LocalazyMetadata = { }; const localazyMetadata: LocalazyMetadata = { - projectUrl: "https://localazy.com/p/matrix-authentication-service!v1.11", + projectUrl: "https://localazy.com/p/matrix-authentication-service", baseLocale: "en", languages: [ { @@ -181,22 +181,22 @@ const localazyMetadata: LocalazyMetadata = { file: "frontend.json", path: "", cdnFiles: { - "cs": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/cs/frontend.json", - "da": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/da/frontend.json", - "de": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/de/frontend.json", - "en": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/en/frontend.json", - "et": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/et/frontend.json", - "fi": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fi/frontend.json", - "fr": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fr/frontend.json", - "hu": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/hu/frontend.json", - "nb_NO": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nb-NO/frontend.json", - "nl": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nl/frontend.json", - "pl": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pl/frontend.json", - "pt": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt/frontend.json", - "ru": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/ru/frontend.json", - "sv": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sv/frontend.json", - "uk": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uk/frontend.json", - "zh#Hans": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/zh-Hans/frontend.json" + "cs": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/cs/frontend.json", + "da": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/da/frontend.json", + "de": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/de/frontend.json", + "en": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/en/frontend.json", + "et": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/et/frontend.json", + "fi": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fi/frontend.json", + "fr": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fr/frontend.json", + "hu": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/hu/frontend.json", + "nb_NO": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nb-NO/frontend.json", + "nl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nl/frontend.json", + "pl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pl/frontend.json", + "pt": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt/frontend.json", + "ru": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/ru/frontend.json", + "sv": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sv/frontend.json", + "uk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uk/frontend.json", + "zh#Hans": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/zh-Hans/frontend.json" } }, { @@ -204,22 +204,22 @@ const localazyMetadata: LocalazyMetadata = { file: "file.json", path: "", cdnFiles: { - "cs": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/cs/file.json", - "da": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/da/file.json", - "de": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/de/file.json", - "en": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/en/file.json", - "et": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/et/file.json", - "fi": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fi/file.json", - "fr": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fr/file.json", - "hu": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/hu/file.json", - "nb_NO": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nb-NO/file.json", - "nl": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nl/file.json", - "pl": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pl/file.json", - "pt": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt/file.json", - "ru": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/ru/file.json", - "sv": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sv/file.json", - "uk": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uk/file.json", - "zh#Hans": "https://delivery.localazy.com/_a6642094778790161378d4638916/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/zh-Hans/file.json" + "cs": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/cs/file.json", + "da": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/da/file.json", + "de": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/de/file.json", + "en": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/en/file.json", + "et": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/et/file.json", + "fi": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fi/file.json", + "fr": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fr/file.json", + "hu": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/hu/file.json", + "nb_NO": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nb-NO/file.json", + "nl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nl/file.json", + "pl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pl/file.json", + "pt": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt/file.json", + "ru": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/ru/file.json", + "sv": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sv/file.json", + "uk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uk/file.json", + "zh#Hans": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/zh-Hans/file.json" } } ] From e9cf83e051c72b52a001544d88e0c66772553cfb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 16:27:58 +0000 Subject: [PATCH 056/104] 1.12.0-rc.0 --- Cargo.lock | 56 +++++++++++++++++++++++++------------------------- Cargo.toml | 60 +++++++++++++++++++++++++++--------------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d4aa50594..00347ea5d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3107,7 +3107,7 @@ dependencies = [ [[package]] name = "mas-axum-utils" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "anyhow", "axum", @@ -3141,7 +3141,7 @@ dependencies = [ [[package]] name = "mas-cli" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "anyhow", "axum", @@ -3216,7 +3216,7 @@ dependencies = [ [[package]] name = "mas-config" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "anyhow", "camino", @@ -3247,7 +3247,7 @@ dependencies = [ [[package]] name = "mas-context" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "console", "opentelemetry", @@ -3263,7 +3263,7 @@ dependencies = [ [[package]] name = "mas-data-model" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "base64ct", "chrono", @@ -3286,7 +3286,7 @@ dependencies = [ [[package]] name = "mas-email" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "async-trait", "lettre", @@ -3297,7 +3297,7 @@ dependencies = [ [[package]] name = "mas-handlers" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "aide", "anyhow", @@ -3377,7 +3377,7 @@ dependencies = [ [[package]] name = "mas-http" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "futures-util", "headers", @@ -3398,7 +3398,7 @@ dependencies = [ [[package]] name = "mas-i18n" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "camino", "icu_calendar", @@ -3420,7 +3420,7 @@ dependencies = [ [[package]] name = "mas-i18n-scan" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "camino", "clap", @@ -3434,7 +3434,7 @@ dependencies = [ [[package]] name = "mas-iana" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "schemars 0.9.0", "serde", @@ -3442,7 +3442,7 @@ dependencies = [ [[package]] name = "mas-iana-codegen" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "anyhow", "async-trait", @@ -3459,7 +3459,7 @@ dependencies = [ [[package]] name = "mas-jose" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "base64ct", "chrono", @@ -3489,7 +3489,7 @@ dependencies = [ [[package]] name = "mas-keystore" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "aead", "base64ct", @@ -3517,7 +3517,7 @@ dependencies = [ [[package]] name = "mas-listener" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "anyhow", "bytes", @@ -3541,7 +3541,7 @@ dependencies = [ [[package]] name = "mas-matrix" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "anyhow", "async-trait", @@ -3551,7 +3551,7 @@ dependencies = [ [[package]] name = "mas-matrix-synapse" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "anyhow", "async-trait", @@ -3568,7 +3568,7 @@ dependencies = [ [[package]] name = "mas-oidc-client" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "assert_matches", "async-trait", @@ -3604,7 +3604,7 @@ dependencies = [ [[package]] name = "mas-policy" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "anyhow", "arc-swap", @@ -3621,7 +3621,7 @@ dependencies = [ [[package]] name = "mas-router" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "axum", "serde", @@ -3632,7 +3632,7 @@ dependencies = [ [[package]] name = "mas-spa" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "camino", "serde", @@ -3641,7 +3641,7 @@ dependencies = [ [[package]] name = "mas-storage" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "async-trait", "chrono", @@ -3663,7 +3663,7 @@ dependencies = [ [[package]] name = "mas-storage-pg" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "async-trait", "chrono", @@ -3693,7 +3693,7 @@ dependencies = [ [[package]] name = "mas-tasks" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "anyhow", "async-trait", @@ -3725,7 +3725,7 @@ dependencies = [ [[package]] name = "mas-templates" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "anyhow", "arc-swap", @@ -3757,7 +3757,7 @@ dependencies = [ [[package]] name = "mas-tower" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "http", "opentelemetry", @@ -4026,7 +4026,7 @@ dependencies = [ [[package]] name = "oauth2-types" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "assert_matches", "base64ct", @@ -6131,7 +6131,7 @@ dependencies = [ [[package]] name = "syn2mas" -version = "1.11.0" +version = "1.12.0-rc.0" dependencies = [ "anyhow", "arc-swap", diff --git a/Cargo.toml b/Cargo.toml index 2fb195b13..9b876dadc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ members = ["crates/*"] resolver = "2" # Updated in the CI with a `sed` command -package.version = "1.11.0" +package.version = "1.12.0-rc.0" package.license = "AGPL-3.0-only OR LicenseRef-Element-Commercial" package.authors = ["Element Backend Team"] package.edition = "2024" @@ -34,35 +34,35 @@ broken_intra_doc_links = "deny" [workspace.dependencies] # Workspace crates -mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.11.0" } -mas-cli = { path = "./crates/cli/", version = "=1.11.0" } -mas-config = { path = "./crates/config/", version = "=1.11.0" } -mas-context = { path = "./crates/context/", version = "=1.11.0" } -mas-data-model = { path = "./crates/data-model/", version = "=1.11.0" } -mas-email = { path = "./crates/email/", version = "=1.11.0" } -mas-graphql = { path = "./crates/graphql/", version = "=1.11.0" } -mas-handlers = { path = "./crates/handlers/", version = "=1.11.0" } -mas-http = { path = "./crates/http/", version = "=1.11.0" } -mas-i18n = { path = "./crates/i18n/", version = "=1.11.0" } -mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.11.0" } -mas-iana = { path = "./crates/iana/", version = "=1.11.0" } -mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.11.0" } -mas-jose = { path = "./crates/jose/", version = "=1.11.0" } -mas-keystore = { path = "./crates/keystore/", version = "=1.11.0" } -mas-listener = { path = "./crates/listener/", version = "=1.11.0" } -mas-matrix = { path = "./crates/matrix/", version = "=1.11.0" } -mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.11.0" } -mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.11.0" } -mas-policy = { path = "./crates/policy/", version = "=1.11.0" } -mas-router = { path = "./crates/router/", version = "=1.11.0" } -mas-spa = { path = "./crates/spa/", version = "=1.11.0" } -mas-storage = { path = "./crates/storage/", version = "=1.11.0" } -mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.11.0" } -mas-tasks = { path = "./crates/tasks/", version = "=1.11.0" } -mas-templates = { path = "./crates/templates/", version = "=1.11.0" } -mas-tower = { path = "./crates/tower/", version = "=1.11.0" } -oauth2-types = { path = "./crates/oauth2-types/", version = "=1.11.0" } -syn2mas = { path = "./crates/syn2mas", version = "=1.11.0" } +mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.12.0-rc.0" } +mas-cli = { path = "./crates/cli/", version = "=1.12.0-rc.0" } +mas-config = { path = "./crates/config/", version = "=1.12.0-rc.0" } +mas-context = { path = "./crates/context/", version = "=1.12.0-rc.0" } +mas-data-model = { path = "./crates/data-model/", version = "=1.12.0-rc.0" } +mas-email = { path = "./crates/email/", version = "=1.12.0-rc.0" } +mas-graphql = { path = "./crates/graphql/", version = "=1.12.0-rc.0" } +mas-handlers = { path = "./crates/handlers/", version = "=1.12.0-rc.0" } +mas-http = { path = "./crates/http/", version = "=1.12.0-rc.0" } +mas-i18n = { path = "./crates/i18n/", version = "=1.12.0-rc.0" } +mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.12.0-rc.0" } +mas-iana = { path = "./crates/iana/", version = "=1.12.0-rc.0" } +mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.12.0-rc.0" } +mas-jose = { path = "./crates/jose/", version = "=1.12.0-rc.0" } +mas-keystore = { path = "./crates/keystore/", version = "=1.12.0-rc.0" } +mas-listener = { path = "./crates/listener/", version = "=1.12.0-rc.0" } +mas-matrix = { path = "./crates/matrix/", version = "=1.12.0-rc.0" } +mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.12.0-rc.0" } +mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.12.0-rc.0" } +mas-policy = { path = "./crates/policy/", version = "=1.12.0-rc.0" } +mas-router = { path = "./crates/router/", version = "=1.12.0-rc.0" } +mas-spa = { path = "./crates/spa/", version = "=1.12.0-rc.0" } +mas-storage = { path = "./crates/storage/", version = "=1.12.0-rc.0" } +mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.12.0-rc.0" } +mas-tasks = { path = "./crates/tasks/", version = "=1.12.0-rc.0" } +mas-templates = { path = "./crates/templates/", version = "=1.12.0-rc.0" } +mas-tower = { path = "./crates/tower/", version = "=1.12.0-rc.0" } +oauth2-types = { path = "./crates/oauth2-types/", version = "=1.12.0-rc.0" } +syn2mas = { path = "./crates/syn2mas", version = "=1.12.0-rc.0" } # OpenAPI schema generation and validation [workspace.dependencies.aide] From 559054f1dfccbc28be9eb9a05a853d369009d14b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 13:56:02 +0000 Subject: [PATCH 057/104] build(deps-dev): bump @biomejs/biome from 2.3.9 to 2.4.2 in /frontend Bumps [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) from 2.3.9 to 2.4.2. - [Release notes](https://github.com/biomejs/biome/releases) - [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md) - [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.4.2/packages/@biomejs/biome) --- updated-dependencies: - dependency-name: "@biomejs/biome" dependency-version: 2.4.2 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 72 +++++++++++++++++++------------------- frontend/package.json | 2 +- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 78c33a119..020d38ca8 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -29,7 +29,7 @@ "vaul": "^1.1.2" }, "devDependencies": { - "@biomejs/biome": "^2.3.9", + "@biomejs/biome": "^2.4.2", "@browser-logos/chrome": "^2.0.0", "@browser-logos/firefox": "^3.0.10", "@browser-logos/safari": "^2.1.0", @@ -979,9 +979,9 @@ } }, "node_modules/@biomejs/biome": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.3.9.tgz", - "integrity": "sha512-js+34KpnY65I00k8P71RH0Uh2rJk4BrpxMGM5m2nBfM9XTlKE5N1URn5ydILPRyXXq4ebhKCjsvR+txS+D4z2A==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.2.tgz", + "integrity": "sha512-vVE/FqLxNLbvYnFDYg3Xfrh1UdFhmPT5i+yPT9GE2nTUgI4rkqo5krw5wK19YHBd7aE7J6r91RRmb8RWwkjy6w==", "dev": true, "license": "MIT OR Apache-2.0", "bin": { @@ -995,20 +995,20 @@ "url": "https://opencollective.com/biome" }, "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "2.3.9", - "@biomejs/cli-darwin-x64": "2.3.9", - "@biomejs/cli-linux-arm64": "2.3.9", - "@biomejs/cli-linux-arm64-musl": "2.3.9", - "@biomejs/cli-linux-x64": "2.3.9", - "@biomejs/cli-linux-x64-musl": "2.3.9", - "@biomejs/cli-win32-arm64": "2.3.9", - "@biomejs/cli-win32-x64": "2.3.9" + "@biomejs/cli-darwin-arm64": "2.4.2", + "@biomejs/cli-darwin-x64": "2.4.2", + "@biomejs/cli-linux-arm64": "2.4.2", + "@biomejs/cli-linux-arm64-musl": "2.4.2", + "@biomejs/cli-linux-x64": "2.4.2", + "@biomejs/cli-linux-x64-musl": "2.4.2", + "@biomejs/cli-win32-arm64": "2.4.2", + "@biomejs/cli-win32-x64": "2.4.2" } }, "node_modules/@biomejs/cli-darwin-arm64": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.9.tgz", - "integrity": "sha512-hHbYYnna/WBwem5iCpssQQLtm5ey8ADuDT8N2zqosk6LVWimlEuUnPy6Mbzgu4GWVriyL5ijWd+1zphX6ll4/A==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.2.tgz", + "integrity": "sha512-3pEcKCP/1POKyaZZhXcxFl3+d9njmeAihZ17k8lL/1vk+6e0Cbf0yPzKItFiT+5Yh6TQA4uKvnlqe0oVZwRxCA==", "cpu": [ "arm64" ], @@ -1023,9 +1023,9 @@ } }, "node_modules/@biomejs/cli-darwin-x64": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.9.tgz", - "integrity": "sha512-sKMW5fpvGDmPdqCchtVH5MVlbVeSU3ad4CuKS45x8VHt3tNSC8CZ2QbxffAOKYK9v/mAeUiPC6Cx6+wtyU1q7g==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.2.tgz", + "integrity": "sha512-P7hK1jLVny+0R9UwyGcECxO6sjETxfPyBm/1dmFjnDOHgdDPjPqozByunrwh4xPKld8sxOr5eAsSqal5uKgeBg==", "cpu": [ "x64" ], @@ -1040,9 +1040,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.9.tgz", - "integrity": "sha512-BXBB6HbAgZI6T6QB8q6NSwIapVngqArP6K78BqkMerht7YjL6yWctqfeTnJm0qGF2bKBYFexslrbV+VTlM2E6g==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.2.tgz", + "integrity": "sha512-DI3Mi7GT2zYNgUTDEbSjl3e1KhoP76OjQdm8JpvZYZWtVDRyLd3w8llSr2TWk1z+U3P44kUBWY3X7H9MD1/DGQ==", "cpu": [ "arm64" ], @@ -1057,9 +1057,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.9.tgz", - "integrity": "sha512-JOHyG2nl8XDpncbMazm1uBSi1dPX9VbQDOjKcfSVXTqajD0PsgodMOKyuZ/PkBu5Lw877sWMTGKfEfpM7jE7Cw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.2.tgz", + "integrity": "sha512-/x04YK9+7erw6tYEcJv9WXoBHcULI/wMOvNdAyE9S3JStZZ9yJyV67sWAI+90UHuDo/BDhq0d96LDqGlSVv7WA==", "cpu": [ "arm64" ], @@ -1074,9 +1074,9 @@ } }, "node_modules/@biomejs/cli-linux-x64": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.9.tgz", - "integrity": "sha512-PjYuv2WLmvf0WtidxAkFjlElsn0P6qcvfPijrqu1j+3GoW3XSQh3ywGu7gZ25J25zrYj3KEovUjvUZB55ATrGw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.2.tgz", + "integrity": "sha512-GK2ErnrKpWFigYP68cXiCHK4RTL4IUWhK92AFS3U28X/nuAL5+hTuy6hyobc8JZRSt+upXt1nXChK+tuHHx4mA==", "cpu": [ "x64" ], @@ -1091,9 +1091,9 @@ } }, "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.9.tgz", - "integrity": "sha512-FUkb/5beCIC2trpqAbW9e095X4vamdlju80c1ExSmhfdrojLZnWkah/XfTSixKb/dQzbAjpD7vvs6rWkJ+P07Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.2.tgz", + "integrity": "sha512-wbBmTkeAoAYbOQ33f6sfKG7pcRSydQiF+dTYOBjJsnXO2mWEOQHllKlC2YVnedqZFERp2WZhFUoO7TNRwnwEHQ==", "cpu": [ "x64" ], @@ -1108,9 +1108,9 @@ } }, "node_modules/@biomejs/cli-win32-arm64": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.9.tgz", - "integrity": "sha512-w48Yh/XbYHO2cBw8B5laK3vCAEKuocX5ItGXVDAqFE7Ze2wnR00/1vkY6GXglfRDOjWHu2XtxI0WKQ52x1qxEA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.2.tgz", + "integrity": "sha512-k2uqwLYrNNxnaoiW3RJxoMGnbKda8FuCmtYG3cOtVljs3CzWxaTR+AoXwKGHscC9thax9R4kOrtWqWN0+KdPTw==", "cpu": [ "arm64" ], @@ -1125,9 +1125,9 @@ } }, "node_modules/@biomejs/cli-win32-x64": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.9.tgz", - "integrity": "sha512-90+J63VT7qImy9s3pkWL0ZX27VzVwMNCRzpLpe5yMzMYPbO1vcjL/w/Q5f/juAGMvP7a2Fd0H7IhAR6F7/i78A==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.2.tgz", + "integrity": "sha512-9ma7C4g8Sq3cBlRJD2yrsHXB1mnnEBdpy7PhvFrylQWQb4PoyCmPucdX7frvsSBQuFtIiKCrolPl/8tCZrKvgQ==", "cpu": [ "x64" ], diff --git a/frontend/package.json b/frontend/package.json index 4e10f1ae9..84b1c7c21 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -39,7 +39,7 @@ "vaul": "^1.1.2" }, "devDependencies": { - "@biomejs/biome": "^2.3.9", + "@biomejs/biome": "^2.4.2", "@browser-logos/chrome": "^2.0.0", "@browser-logos/firefox": "^3.0.10", "@browser-logos/safari": "^2.1.0", From 673392fcc836326cba77d3d45b42977b30d975a8 Mon Sep 17 00:00:00 2001 From: Tonkku Date: Mon, 23 Feb 2026 13:06:59 +0200 Subject: [PATCH 058/104] Support MSC4198 login_hint in account management uri --- Cargo.lock | 3 +- crates/data-model/Cargo.toml | 2 - .../src/oauth2/authorization_grant.rs | 132 ------------------ crates/data-model/src/oauth2/mod.rs | 4 +- crates/handlers/Cargo.toml | 1 + .../handlers/src/oauth2/authorization/mod.rs | 12 +- crates/handlers/src/views/app.rs | 24 ++-- crates/handlers/src/views/login.rs | 37 ++--- crates/handlers/src/views/shared.rs | 109 +++++++++++++++ crates/router/src/endpoints.rs | 25 +++- 10 files changed, 179 insertions(+), 170 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 00347ea5d..a63408569 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3268,14 +3268,12 @@ dependencies = [ "base64ct", "chrono", "crc", - "lettre", "mas-iana", "mas-jose", "oauth2-types", "rand 0.8.5", "rand_chacha 0.3.1", "regex", - "ruma-common", "serde", "serde_json", "thiserror 2.0.17", @@ -3352,6 +3350,7 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "reqwest", + "ruma-common", "rustls", "schemars 0.9.0", "sentry", diff --git a/crates/data-model/Cargo.toml b/crates/data-model/Cargo.toml index da7021b11..7e9be8282 100644 --- a/crates/data-model/Cargo.toml +++ b/crates/data-model/Cargo.toml @@ -29,8 +29,6 @@ rand.workspace = true rand_chacha.workspace = true regex.workspace = true woothee.workspace = true -ruma-common.workspace = true -lettre.workspace = true mas-iana.workspace = true mas-jose.workspace = true diff --git a/crates/data-model/src/oauth2/authorization_grant.rs b/crates/data-model/src/oauth2/authorization_grant.rs index 738277b84..2ad0488ce 100644 --- a/crates/data-model/src/oauth2/authorization_grant.rs +++ b/crates/data-model/src/oauth2/authorization_grant.rs @@ -4,8 +4,6 @@ // SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial // Please see LICENSE files in the repository root for full details. -use std::str::FromStr as _; - use chrono::{DateTime, Utc}; use mas_iana::oauth::PkceCodeChallengeMethod; use oauth2_types::{ @@ -17,7 +15,6 @@ use rand::{ RngCore, distributions::{Alphanumeric, DistString}, }; -use ruma_common::UserId; use serde::Serialize; use ulid::Ulid; use url::Url; @@ -142,12 +139,6 @@ impl AuthorizationGrantStage { } } -pub enum LoginHint<'a> { - MXID(&'a UserId), - Email(lettre::Address), - None, -} - #[derive(Debug, Clone, PartialEq, Eq, Serialize)] pub struct AuthorizationGrant { pub id: Ulid, @@ -175,31 +166,6 @@ impl std::ops::Deref for AuthorizationGrant { } impl AuthorizationGrant { - /// Parse a `login_hint` - /// - /// Returns `LoginHint::MXID` for valid mxid 'mxid:@john.doe:example.com' - /// - /// Returns `LoginHint::Email` for valid email 'john.doe@example.com' - /// - /// Otherwise returns `LoginHint::None` - #[must_use] - pub fn parse_login_hint(&self, homeserver: &str) -> LoginHint<'_> { - let Some(login_hint) = &self.login_hint else { - return LoginHint::None; - }; - - if let Some(value) = login_hint.strip_prefix("mxid:") - && let Ok(mxid) = <&UserId>::try_from(value) - && mxid.server_name() == homeserver - { - LoginHint::MXID(mxid) - } else if let Ok(email) = lettre::Address::from_str(login_hint) { - LoginHint::Email(email) - } else { - LoginHint::None - } - } - /// Mark the authorization grant as exchanged. /// /// # Errors @@ -266,101 +232,3 @@ impl AuthorizationGrant { } } } - -#[cfg(test)] -mod tests { - use rand::SeedableRng; - - use super::*; - use crate::clock::{Clock, MockClock}; - - #[test] - fn no_login_hint() { - let now = MockClock::default().now(); - let mut rng = rand_chacha::ChaChaRng::seed_from_u64(42); - - let grant = AuthorizationGrant { - login_hint: None, - ..AuthorizationGrant::sample(now, &mut rng) - }; - - let hint = grant.parse_login_hint("example.com"); - - assert!(matches!(hint, LoginHint::None)); - } - - #[test] - fn valid_login_hint() { - let now = MockClock::default().now(); - let mut rng = rand_chacha::ChaChaRng::seed_from_u64(42); - - let grant = AuthorizationGrant { - login_hint: Some(String::from("mxid:@example-user:example.com")), - ..AuthorizationGrant::sample(now, &mut rng) - }; - - let hint = grant.parse_login_hint("example.com"); - - assert!(matches!(hint, LoginHint::MXID(mxid) if mxid.localpart() == "example-user")); - } - - #[test] - fn valid_login_hint_with_email() { - let now = MockClock::default().now(); - let mut rng = rand_chacha::ChaChaRng::seed_from_u64(42); - - let grant = AuthorizationGrant { - login_hint: Some(String::from("example@user")), - ..AuthorizationGrant::sample(now, &mut rng) - }; - - let hint = grant.parse_login_hint("example.com"); - - assert!(matches!(hint, LoginHint::Email(email) if email.to_string() == "example@user")); - } - - #[test] - fn invalid_login_hint() { - let now = MockClock::default().now(); - let mut rng = rand_chacha::ChaChaRng::seed_from_u64(42); - - let grant = AuthorizationGrant { - login_hint: Some(String::from("example-user")), - ..AuthorizationGrant::sample(now, &mut rng) - }; - - let hint = grant.parse_login_hint("example.com"); - - assert!(matches!(hint, LoginHint::None)); - } - - #[test] - fn valid_login_hint_for_wrong_homeserver() { - let now = MockClock::default().now(); - let mut rng = rand_chacha::ChaChaRng::seed_from_u64(42); - - let grant = AuthorizationGrant { - login_hint: Some(String::from("mxid:@example-user:matrix.org")), - ..AuthorizationGrant::sample(now, &mut rng) - }; - - let hint = grant.parse_login_hint("example.com"); - - assert!(matches!(hint, LoginHint::None)); - } - - #[test] - fn unknown_login_hint_type() { - let now = MockClock::default().now(); - let mut rng = rand_chacha::ChaChaRng::seed_from_u64(42); - - let grant = AuthorizationGrant { - login_hint: Some(String::from("something:anything")), - ..AuthorizationGrant::sample(now, &mut rng) - }; - - let hint = grant.parse_login_hint("example.com"); - - assert!(matches!(hint, LoginHint::None)); - } -} diff --git a/crates/data-model/src/oauth2/mod.rs b/crates/data-model/src/oauth2/mod.rs index 6221a32fc..798e07e54 100644 --- a/crates/data-model/src/oauth2/mod.rs +++ b/crates/data-model/src/oauth2/mod.rs @@ -10,9 +10,7 @@ mod device_code_grant; mod session; pub use self::{ - authorization_grant::{ - AuthorizationCode, AuthorizationGrant, AuthorizationGrantStage, LoginHint, Pkce, - }, + authorization_grant::{AuthorizationCode, AuthorizationGrant, AuthorizationGrantStage, Pkce}, client::{Client, InvalidRedirectUriError, JwksOrJwksUri}, device_code_grant::{DeviceCodeGrant, DeviceCodeGrantState}, session::{Session, SessionState}, diff --git a/crates/handlers/Cargo.toml b/crates/handlers/Cargo.toml index 57f391854..97710930b 100644 --- a/crates/handlers/Cargo.toml +++ b/crates/handlers/Cargo.toml @@ -49,6 +49,7 @@ psl.workspace = true rand_chacha.workspace = true rand.workspace = true reqwest.workspace = true +ruma-common.workspace = true rustls.workspace = true schemars.workspace = true sentry.workspace = true diff --git a/crates/handlers/src/oauth2/authorization/mod.rs b/crates/handlers/src/oauth2/authorization/mod.rs index 6037bd9ad..a3988b0ce 100644 --- a/crates/handlers/src/oauth2/authorization/mod.rs +++ b/crates/handlers/src/oauth2/authorization/mod.rs @@ -278,9 +278,15 @@ pub(crate) async fn get( // Other cases where we don't have a session, ask for a login repo.save().await?; - url_builder - .redirect(&mas_router::Login::and_then(continue_grant)) - .into_response() + let mut url = mas_router::Login::and_then(continue_grant); + + url = if let Some(login_hint) = grant.login_hint { + url.with_login_hint(login_hint) + } else { + url + }; + + url_builder.redirect(&url).into_response() } Some(user_session) => { diff --git a/crates/handlers/src/views/app.rs b/crates/handlers/src/views/app.rs index 4ae5f5222..cc09c0d03 100644 --- a/crates/handlers/src/views/app.rs +++ b/crates/handlers/src/views/app.rs @@ -25,6 +25,9 @@ use crate::{ pub struct Params { #[serde(default, flatten)] action: Option, + + #[serde(rename = "org.matrix.msc4198.login_hint")] + unstable_login_hint: Option, } #[tracing::instrument(name = "handlers.views.app.get", skip_all)] @@ -33,7 +36,10 @@ pub async fn get( State(templates): State, activity_tracker: BoundActivityTracker, State(url_builder): State, - Query(Params { action }): Query, + Query(Params { + action, + unstable_login_hint, + }): Query, mut repo: BoxRepository, clock: BoxClock, mut rng: BoxRng, @@ -54,13 +60,15 @@ pub async fn get( // TODO: keep the full path, not just the action let Some(session) = maybe_session else { - return Ok(( - cookie_jar, - url_builder.redirect(&mas_router::Login::and_then( - PostAuthAction::manage_account(action), - )), - ) - .into_response()); + let mut url = mas_router::Login::and_then(PostAuthAction::manage_account(action)); + + url = if let Some(login_hint) = unstable_login_hint { + url.with_login_hint(login_hint) + } else { + url + }; + + return Ok((cookie_jar, url_builder.redirect(&url)).into_response()); }; activity_tracker diff --git a/crates/handlers/src/views/login.rs b/crates/handlers/src/views/login.rs index 72e1566fe..a4fef8eba 100644 --- a/crates/handlers/src/views/login.rs +++ b/crates/handlers/src/views/login.rs @@ -17,7 +17,7 @@ use mas_axum_utils::{ cookies::CookieJar, csrf::{CsrfExt, ProtectedForm}, }; -use mas_data_model::{BoxClock, BoxRng, Clock, oauth2::LoginHint}; +use mas_data_model::{BoxClock, BoxRng, Clock}; use mas_i18n::DataLocale; use mas_matrix::HomeserverConnection; use mas_router::{UpstreamOAuth2Authorize, UrlBuilder}; @@ -28,14 +28,14 @@ use mas_storage::{ }; use mas_templates::{ AccountInactiveContext, FieldError, FormError, FormState, LoginContext, LoginFormField, - PostAuthContext, PostAuthContextInner, TemplateContext, Templates, ToFormState, + TemplateContext, Templates, ToFormState, }; use opentelemetry::{Key, KeyValue, metrics::Counter}; use rand::Rng; use serde::{Deserialize, Serialize}; use zeroize::Zeroizing; -use super::shared::OptionalPostAuthAction; +use super::shared::{LoginHint, OptionalPostAuthAction, QueryLoginHint}; use crate::{ BoundActivityTracker, Limiter, METER, PreferredLanguage, RequesterFingerprint, SiteConfig, passwords::{PasswordManager, PasswordVerificationResult}, @@ -73,6 +73,7 @@ pub(crate) async fn get( mut repo: BoxRepository, activity_tracker: BoundActivityTracker, Query(query): Query, + Query(query_login_hint): Query, cookie_jar: CookieJar, ) -> Result { let (cookie_jar, maybe_session) = match load_session_or_fallback( @@ -124,6 +125,7 @@ pub(crate) async fn get( &templates, &homeserver, &site_config, + query_login_hint, ) .await } @@ -142,7 +144,7 @@ pub(crate) async fn post( mut repo: BoxRepository, activity_tracker: BoundActivityTracker, requester: RequesterFingerprint, - Query(query): Query, + (Query(query), Query(query_login_hint)): (Query, Query), cookie_jar: CookieJar, user_agent: Option>, Form(form): Form>, @@ -180,6 +182,7 @@ pub(crate) async fn post( &templates, &homeserver, &site_config, + query_login_hint, ) .await; } @@ -206,6 +209,7 @@ pub(crate) async fn post( &templates, &homeserver, &site_config, + query_login_hint, ) .await; }; @@ -226,6 +230,7 @@ pub(crate) async fn post( &templates, &homeserver, &site_config, + query_login_hint, ) .await; } @@ -248,6 +253,7 @@ pub(crate) async fn post( &templates, &homeserver, &site_config, + query_login_hint, ) .await; }; @@ -293,6 +299,7 @@ pub(crate) async fn post( &templates, &homeserver, &site_config, + query_login_hint, ) .await; } @@ -375,7 +382,7 @@ async fn get_user_by_email_or_by_username( fn handle_login_hint( mut ctx: LoginContext, - next: &PostAuthContext, + query_login_hint: &QueryLoginHint, homeserver: &dyn HomeserverConnection, site_config: &SiteConfig, ) -> LoginContext { @@ -386,16 +393,12 @@ fn handle_login_hint( return ctx; } - if let PostAuthContextInner::ContinueAuthorizationGrant { ref grant } = next.ctx { - let value = match grant.parse_login_hint(homeserver.homeserver()) { - LoginHint::MXID(mxid) => Some(mxid.localpart().to_owned()), - LoginHint::Email(email) if site_config.login_with_email_allowed => { - Some(email.to_string()) - } - _ => None, - }; - form_state.set_value(LoginFormField::Username, value); - } + let value = match query_login_hint.parse_login_hint(homeserver.homeserver()) { + LoginHint::Mxid(mxid) => Some(mxid.localpart().to_owned()), + LoginHint::Email(email) if site_config.login_with_email_allowed => Some(email.to_string()), + _ => None, + }; + form_state.set_value(LoginFormField::Username, value); ctx } @@ -411,6 +414,7 @@ async fn render( templates: &Templates, homeserver: &dyn HomeserverConnection, site_config: &SiteConfig, + query_login_hint: QueryLoginHint, ) -> Result { let (csrf_token, cookie_jar) = cookie_jar.csrf_token(clock, rng); let providers = repo.upstream_oauth_provider().all_enabled().await?; @@ -419,12 +423,13 @@ async fn render( .with_form_state(form_state) .with_upstream_providers(providers); + let ctx = handle_login_hint(ctx, &query_login_hint, homeserver, site_config); + let next = action .load_context(repo) .await .map_err(InternalError::from_anyhow)?; let ctx = if let Some(next) = next { - let ctx = handle_login_hint(ctx, &next, homeserver, site_config); ctx.with_post_action(next) } else { ctx diff --git a/crates/handlers/src/views/shared.rs b/crates/handlers/src/views/shared.rs index 85edf299f..b0c7b8ac1 100644 --- a/crates/handlers/src/views/shared.rs +++ b/crates/handlers/src/views/shared.rs @@ -4,6 +4,8 @@ // SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial // Please see LICENSE files in the repository root for full details. +use std::str::FromStr as _; + use anyhow::Context; use mas_router::{PostAuthAction, Route, UrlBuilder}; use mas_storage::{ @@ -13,6 +15,7 @@ use mas_storage::{ upstream_oauth2::{UpstreamOAuthLinkRepository, UpstreamOAuthProviderRepository}, }; use mas_templates::{PostAuthContext, PostAuthContextInner}; +use ruma_common::UserId; use serde::{Deserialize, Serialize}; use tracing::warn; @@ -107,3 +110,109 @@ impl OptionalPostAuthAction { })) } } + +pub enum LoginHint<'a> { + Mxid(&'a UserId), + Email(lettre::Address), + None, +} + +#[derive(Debug, Deserialize)] +pub(crate) struct QueryLoginHint { + login_hint: Option, +} + +impl QueryLoginHint { + /// Parse a `login_hint` + /// + /// Returns `LoginHint::MXID` for valid mxid 'mxid:@john.doe:example.com' + /// + /// Returns `LoginHint::Email` for valid email 'john.doe@example.com' + /// + /// Otherwise returns `LoginHint::None` + pub fn parse_login_hint(&self, homeserver: &str) -> LoginHint<'_> { + let Some(login_hint) = &self.login_hint else { + return LoginHint::None; + }; + + if let Some(value) = login_hint.strip_prefix("mxid:") + && let Ok(mxid) = <&UserId>::try_from(value) + && mxid.server_name() == homeserver + { + LoginHint::Mxid(mxid) + } else if let Ok(email) = lettre::Address::from_str(login_hint) { + LoginHint::Email(email) + } else { + LoginHint::None + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn no_login_hint() { + let query_login_hint = QueryLoginHint { login_hint: None }; + + let hint = query_login_hint.parse_login_hint("example.com"); + + assert!(matches!(hint, LoginHint::None)); + } + + #[test] + fn valid_login_hint() { + let query_login_hint = QueryLoginHint { + login_hint: Some(String::from("mxid:@example-user:example.com")), + }; + + let hint = query_login_hint.parse_login_hint("example.com"); + + assert!(matches!(hint, LoginHint::Mxid(mxid) if mxid.localpart() == "example-user")); + } + + #[test] + fn valid_login_hint_with_email() { + let query_login_hint = QueryLoginHint { + login_hint: Some(String::from("example@user")), + }; + + let hint = query_login_hint.parse_login_hint("example.com"); + + assert!(matches!(hint, LoginHint::Email(email) if email.to_string() == "example@user")); + } + + #[test] + fn invalid_login_hint() { + let query_login_hint = QueryLoginHint { + login_hint: Some(String::from("example-user")), + }; + + let hint = query_login_hint.parse_login_hint("example.com"); + + assert!(matches!(hint, LoginHint::None)); + } + + #[test] + fn valid_login_hint_for_wrong_homeserver() { + let query_login_hint = QueryLoginHint { + login_hint: Some(String::from("mxid:@example-user:matrix.org")), + }; + + let hint = query_login_hint.parse_login_hint("example.com"); + + assert!(matches!(hint, LoginHint::None)); + } + + #[test] + fn unknown_login_hint_type() { + let query_login_hint = QueryLoginHint { + login_hint: Some(String::from("something:anything")), + }; + + let hint = query_login_hint.parse_login_hint("example.com"); + + assert!(matches!(hint, LoginHint::None)); + } +} diff --git a/crates/router/src/endpoints.rs b/crates/router/src/endpoints.rs index 6aa18f13d..239f24b25 100644 --- a/crates/router/src/endpoints.rs +++ b/crates/router/src/endpoints.rs @@ -172,20 +172,23 @@ impl SimpleRoute for Healthcheck { } /// `GET|POST /login` -#[derive(Default, Debug, Clone)] +#[derive(Default, Debug, Clone, Serialize, Deserialize)] pub struct Login { + #[serde(flatten)] post_auth_action: Option, + + login_hint: Option, } impl Route for Login { - type Query = PostAuthAction; + type Query = Self; fn route() -> &'static str { "/login" } fn query(&self) -> Option<&Self::Query> { - self.post_auth_action.as_ref() + Some(self) } } @@ -194,6 +197,7 @@ impl Login { pub const fn and_then(action: PostAuthAction) -> Self { Self { post_auth_action: Some(action), + login_hint: None, } } @@ -201,6 +205,7 @@ impl Login { pub const fn and_continue_grant(id: Ulid) -> Self { Self { post_auth_action: Some(PostAuthAction::continue_grant(id)), + login_hint: None, } } @@ -208,6 +213,7 @@ impl Login { pub const fn and_continue_device_code_grant(id: Ulid) -> Self { Self { post_auth_action: Some(PostAuthAction::continue_device_code_grant(id)), + login_hint: None, } } @@ -215,6 +221,7 @@ impl Login { pub const fn and_continue_compat_sso_login(id: Ulid) -> Self { Self { post_auth_action: Some(PostAuthAction::continue_compat_sso_login(id)), + login_hint: None, } } @@ -222,9 +229,16 @@ impl Login { pub const fn and_link_upstream(id: Ulid) -> Self { Self { post_auth_action: Some(PostAuthAction::link_upstream(id)), + login_hint: None, } } + #[must_use] + pub fn with_login_hint(mut self, login_hint: String) -> Self { + self.login_hint = Some(login_hint); + self + } + /// Get a reference to the login's post auth action. #[must_use] pub fn post_auth_action(&self) -> Option<&PostAuthAction> { @@ -241,7 +255,10 @@ impl Login { impl From> for Login { fn from(post_auth_action: Option) -> Self { - Self { post_auth_action } + Self { + post_auth_action, + login_hint: None, + } } } From f343390644a8291f9477bd4c401c2519e5f7d0c1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 24 Feb 2026 10:21:03 +0000 Subject: [PATCH 059/104] 1.12.0 --- Cargo.lock | 56 +++++++++++++++++++++++++------------------------- Cargo.toml | 60 +++++++++++++++++++++++++++--------------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 00347ea5d..496fe0fd1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3107,7 +3107,7 @@ dependencies = [ [[package]] name = "mas-axum-utils" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "anyhow", "axum", @@ -3141,7 +3141,7 @@ dependencies = [ [[package]] name = "mas-cli" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "anyhow", "axum", @@ -3216,7 +3216,7 @@ dependencies = [ [[package]] name = "mas-config" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "anyhow", "camino", @@ -3247,7 +3247,7 @@ dependencies = [ [[package]] name = "mas-context" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "console", "opentelemetry", @@ -3263,7 +3263,7 @@ dependencies = [ [[package]] name = "mas-data-model" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "base64ct", "chrono", @@ -3286,7 +3286,7 @@ dependencies = [ [[package]] name = "mas-email" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "async-trait", "lettre", @@ -3297,7 +3297,7 @@ dependencies = [ [[package]] name = "mas-handlers" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "aide", "anyhow", @@ -3377,7 +3377,7 @@ dependencies = [ [[package]] name = "mas-http" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "futures-util", "headers", @@ -3398,7 +3398,7 @@ dependencies = [ [[package]] name = "mas-i18n" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "camino", "icu_calendar", @@ -3420,7 +3420,7 @@ dependencies = [ [[package]] name = "mas-i18n-scan" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "camino", "clap", @@ -3434,7 +3434,7 @@ dependencies = [ [[package]] name = "mas-iana" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "schemars 0.9.0", "serde", @@ -3442,7 +3442,7 @@ dependencies = [ [[package]] name = "mas-iana-codegen" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "anyhow", "async-trait", @@ -3459,7 +3459,7 @@ dependencies = [ [[package]] name = "mas-jose" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "base64ct", "chrono", @@ -3489,7 +3489,7 @@ dependencies = [ [[package]] name = "mas-keystore" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "aead", "base64ct", @@ -3517,7 +3517,7 @@ dependencies = [ [[package]] name = "mas-listener" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "anyhow", "bytes", @@ -3541,7 +3541,7 @@ dependencies = [ [[package]] name = "mas-matrix" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "anyhow", "async-trait", @@ -3551,7 +3551,7 @@ dependencies = [ [[package]] name = "mas-matrix-synapse" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "anyhow", "async-trait", @@ -3568,7 +3568,7 @@ dependencies = [ [[package]] name = "mas-oidc-client" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "assert_matches", "async-trait", @@ -3604,7 +3604,7 @@ dependencies = [ [[package]] name = "mas-policy" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "anyhow", "arc-swap", @@ -3621,7 +3621,7 @@ dependencies = [ [[package]] name = "mas-router" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "axum", "serde", @@ -3632,7 +3632,7 @@ dependencies = [ [[package]] name = "mas-spa" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "camino", "serde", @@ -3641,7 +3641,7 @@ dependencies = [ [[package]] name = "mas-storage" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "async-trait", "chrono", @@ -3663,7 +3663,7 @@ dependencies = [ [[package]] name = "mas-storage-pg" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "async-trait", "chrono", @@ -3693,7 +3693,7 @@ dependencies = [ [[package]] name = "mas-tasks" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "anyhow", "async-trait", @@ -3725,7 +3725,7 @@ dependencies = [ [[package]] name = "mas-templates" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "anyhow", "arc-swap", @@ -3757,7 +3757,7 @@ dependencies = [ [[package]] name = "mas-tower" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "http", "opentelemetry", @@ -4026,7 +4026,7 @@ dependencies = [ [[package]] name = "oauth2-types" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "assert_matches", "base64ct", @@ -6131,7 +6131,7 @@ dependencies = [ [[package]] name = "syn2mas" -version = "1.12.0-rc.0" +version = "1.12.0" dependencies = [ "anyhow", "arc-swap", diff --git a/Cargo.toml b/Cargo.toml index 9b876dadc..2b0ab4ae3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ members = ["crates/*"] resolver = "2" # Updated in the CI with a `sed` command -package.version = "1.12.0-rc.0" +package.version = "1.12.0" package.license = "AGPL-3.0-only OR LicenseRef-Element-Commercial" package.authors = ["Element Backend Team"] package.edition = "2024" @@ -34,35 +34,35 @@ broken_intra_doc_links = "deny" [workspace.dependencies] # Workspace crates -mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.12.0-rc.0" } -mas-cli = { path = "./crates/cli/", version = "=1.12.0-rc.0" } -mas-config = { path = "./crates/config/", version = "=1.12.0-rc.0" } -mas-context = { path = "./crates/context/", version = "=1.12.0-rc.0" } -mas-data-model = { path = "./crates/data-model/", version = "=1.12.0-rc.0" } -mas-email = { path = "./crates/email/", version = "=1.12.0-rc.0" } -mas-graphql = { path = "./crates/graphql/", version = "=1.12.0-rc.0" } -mas-handlers = { path = "./crates/handlers/", version = "=1.12.0-rc.0" } -mas-http = { path = "./crates/http/", version = "=1.12.0-rc.0" } -mas-i18n = { path = "./crates/i18n/", version = "=1.12.0-rc.0" } -mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.12.0-rc.0" } -mas-iana = { path = "./crates/iana/", version = "=1.12.0-rc.0" } -mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.12.0-rc.0" } -mas-jose = { path = "./crates/jose/", version = "=1.12.0-rc.0" } -mas-keystore = { path = "./crates/keystore/", version = "=1.12.0-rc.0" } -mas-listener = { path = "./crates/listener/", version = "=1.12.0-rc.0" } -mas-matrix = { path = "./crates/matrix/", version = "=1.12.0-rc.0" } -mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.12.0-rc.0" } -mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.12.0-rc.0" } -mas-policy = { path = "./crates/policy/", version = "=1.12.0-rc.0" } -mas-router = { path = "./crates/router/", version = "=1.12.0-rc.0" } -mas-spa = { path = "./crates/spa/", version = "=1.12.0-rc.0" } -mas-storage = { path = "./crates/storage/", version = "=1.12.0-rc.0" } -mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.12.0-rc.0" } -mas-tasks = { path = "./crates/tasks/", version = "=1.12.0-rc.0" } -mas-templates = { path = "./crates/templates/", version = "=1.12.0-rc.0" } -mas-tower = { path = "./crates/tower/", version = "=1.12.0-rc.0" } -oauth2-types = { path = "./crates/oauth2-types/", version = "=1.12.0-rc.0" } -syn2mas = { path = "./crates/syn2mas", version = "=1.12.0-rc.0" } +mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.12.0" } +mas-cli = { path = "./crates/cli/", version = "=1.12.0" } +mas-config = { path = "./crates/config/", version = "=1.12.0" } +mas-context = { path = "./crates/context/", version = "=1.12.0" } +mas-data-model = { path = "./crates/data-model/", version = "=1.12.0" } +mas-email = { path = "./crates/email/", version = "=1.12.0" } +mas-graphql = { path = "./crates/graphql/", version = "=1.12.0" } +mas-handlers = { path = "./crates/handlers/", version = "=1.12.0" } +mas-http = { path = "./crates/http/", version = "=1.12.0" } +mas-i18n = { path = "./crates/i18n/", version = "=1.12.0" } +mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.12.0" } +mas-iana = { path = "./crates/iana/", version = "=1.12.0" } +mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.12.0" } +mas-jose = { path = "./crates/jose/", version = "=1.12.0" } +mas-keystore = { path = "./crates/keystore/", version = "=1.12.0" } +mas-listener = { path = "./crates/listener/", version = "=1.12.0" } +mas-matrix = { path = "./crates/matrix/", version = "=1.12.0" } +mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.12.0" } +mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.12.0" } +mas-policy = { path = "./crates/policy/", version = "=1.12.0" } +mas-router = { path = "./crates/router/", version = "=1.12.0" } +mas-spa = { path = "./crates/spa/", version = "=1.12.0" } +mas-storage = { path = "./crates/storage/", version = "=1.12.0" } +mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.12.0" } +mas-tasks = { path = "./crates/tasks/", version = "=1.12.0" } +mas-templates = { path = "./crates/templates/", version = "=1.12.0" } +mas-tower = { path = "./crates/tower/", version = "=1.12.0" } +oauth2-types = { path = "./crates/oauth2-types/", version = "=1.12.0" } +syn2mas = { path = "./crates/syn2mas", version = "=1.12.0" } # OpenAPI schema generation and validation [workspace.dependencies.aide] From 1a66fc9a4c4a8a7dbc26ef62776aabeaa70994f6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Feb 2026 10:33:33 +0000 Subject: [PATCH 060/104] build(deps): bump anyhow from 1.0.100 to 1.0.101 Bumps [anyhow](https://github.com/dtolnay/anyhow) from 1.0.100 to 1.0.101. - [Release notes](https://github.com/dtolnay/anyhow/releases) - [Commits](https://github.com/dtolnay/anyhow/compare/1.0.100...1.0.101) --- updated-dependencies: - dependency-name: anyhow dependency-version: 1.0.101 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 496fe0fd1..8d4b5bd2e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -185,9 +185,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "arbitrary" diff --git a/Cargo.toml b/Cargo.toml index 2b0ab4ae3..b4ec5e50d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -88,7 +88,7 @@ version = "0.1.89" # High-level error handling [workspace.dependencies.anyhow] -version = "1.0.100" +version = "1.0.102" # Assert that a value matches a pattern [workspace.dependencies.assert_matches] From c4da17af3ba4f065f1a20d097213bd4232bd2f1c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Feb 2026 13:58:15 +0000 Subject: [PATCH 061/104] build(deps-dev): bump the graphql-codegen group across 1 directory with 2 updates Bumps the graphql-codegen group with 2 updates in the /frontend directory: [@graphql-codegen/cli](https://github.com/dotansimha/graphql-code-generator/tree/HEAD/packages/graphql-codegen-cli) and [@graphql-codegen/client-preset](https://github.com/dotansimha/graphql-code-generator/tree/HEAD/packages/presets/client). Updates `@graphql-codegen/cli` from 6.1.1 to 6.1.2 - [Release notes](https://github.com/dotansimha/graphql-code-generator/releases) - [Changelog](https://github.com/dotansimha/graphql-code-generator/blob/master/packages/graphql-codegen-cli/CHANGELOG.md) - [Commits](https://github.com/dotansimha/graphql-code-generator/commits/@graphql-codegen/cli@6.1.2/packages/graphql-codegen-cli) Updates `@graphql-codegen/client-preset` from 5.2.2 to 5.2.3 - [Release notes](https://github.com/dotansimha/graphql-code-generator/releases) - [Changelog](https://github.com/dotansimha/graphql-code-generator/blob/master/packages/presets/client/CHANGELOG.md) - [Commits](https://github.com/dotansimha/graphql-code-generator/commits/@graphql-codegen/client-preset@5.2.3/packages/presets/client) --- updated-dependencies: - dependency-name: "@graphql-codegen/cli" dependency-version: 6.1.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: graphql-codegen - dependency-name: "@graphql-codegen/client-preset" dependency-version: 5.2.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: graphql-codegen ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 93 +++++++++++++++++++++++--------------- frontend/package.json | 4 +- 2 files changed, 58 insertions(+), 39 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 78c33a119..956ad97ac 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -33,8 +33,8 @@ "@browser-logos/chrome": "^2.0.0", "@browser-logos/firefox": "^3.0.10", "@browser-logos/safari": "^2.1.0", - "@graphql-codegen/cli": "^6.1.1", - "@graphql-codegen/client-preset": "^5.2.2", + "@graphql-codegen/cli": "^6.1.2", + "@graphql-codegen/client-preset": "^5.2.3", "@graphql-codegen/typescript-msw": "^3.0.1", "@storybook/addon-docs": "^10.2.9", "@storybook/react-vite": "^10.2.9", @@ -1845,9 +1845,9 @@ "license": "0BSD" }, "node_modules/@graphql-codegen/cli": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-6.1.1.tgz", - "integrity": "sha512-Ni8UdZ6D/UTvLvDtPb6PzshI0lTqtLDnmv/2t1w2SYP92H0MMEdAzxB/ujDWwIXm2LzVPvvrGvzzCTMsyXa+mA==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-6.1.2.tgz", + "integrity": "sha512-BQ49LF0jnQNL12rU1RucTemoX1bHx8slR4B11nOrp4k5NTojhcc1A1czzU5wXCK/1+ezNHrVGONWg3jxZUy08w==", "dev": true, "license": "MIT", "dependencies": { @@ -1906,21 +1906,21 @@ } }, "node_modules/@graphql-codegen/client-preset": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-5.2.2.tgz", - "integrity": "sha512-1xufIJZr04ylx0Dnw49m8Jrx1s1kujUNVm+Tp5cPRsQmgPN9VjB7wWY7CGD8ArStv6Vjb0a31Xnm5I+VzZM+Rw==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-5.2.3.tgz", + "integrity": "sha512-zgbk0dTY+KC/8TG00RGct6HnXWJU6jQaty3wAXKl1CvCXTKO73pW8Npph+RSJMTEEXb+QuJL3vyaPiGM1gw8sw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/template": "^7.20.7", "@graphql-codegen/add": "^6.0.0", - "@graphql-codegen/gql-tag-operations": "5.1.2", + "@graphql-codegen/gql-tag-operations": "5.1.3", "@graphql-codegen/plugin-helpers": "^6.1.0", - "@graphql-codegen/typed-document-node": "^6.1.5", - "@graphql-codegen/typescript": "^5.0.7", - "@graphql-codegen/typescript-operations": "^5.0.7", - "@graphql-codegen/visitor-plugin-common": "^6.2.2", + "@graphql-codegen/typed-document-node": "^6.1.6", + "@graphql-codegen/typescript": "^5.0.8", + "@graphql-codegen/typescript-operations": "^5.0.8", + "@graphql-codegen/visitor-plugin-common": "^6.2.3", "@graphql-tools/documents": "^1.0.0", "@graphql-tools/utils": "^10.0.0", "@graphql-typed-document-node/core": "3.2.0", @@ -1973,14 +1973,14 @@ "license": "0BSD" }, "node_modules/@graphql-codegen/gql-tag-operations": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-5.1.2.tgz", - "integrity": "sha512-BIv66VJ2bKlpfXBeVakJxihBSKnBIdGFLMaFdnGPxqYlKIzaGffjsGbhViPwwBinmBChW4Se6PU4Py7eysYEiA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-5.1.3.tgz", + "integrity": "sha512-yh/GTGW5Nf8f/zaCHZwWb04ItWAm+UfUJf7pb6n4SrqRxvWOSJk36LJ4l8UuDW1tmAOobjeXB8HSKSJsUjmA1g==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^6.1.0", - "@graphql-codegen/visitor-plugin-common": "6.2.2", + "@graphql-codegen/visitor-plugin-common": "6.2.3", "@graphql-tools/utils": "^10.0.0", "auto-bind": "~4.0.0", "tslib": "~2.6.0" @@ -2053,14 +2053,14 @@ "license": "0BSD" }, "node_modules/@graphql-codegen/typed-document-node": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-6.1.5.tgz", - "integrity": "sha512-6dgEPz+YRMzSPpATj7tsKh/L6Y8OZImiyXIUzvSq/dRAEgoinahrES5y/eZQyc7CVxfoFCyHF9KMQQ9jiLn7lw==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-6.1.6.tgz", + "integrity": "sha512-USuQdUWBXij9HQl+GWXuLm05kjpOVwViBfnNi7ijES4HFwAmt/EDAnYSCfUoOHCfFQeWcfqYbtcUGJO9iXiSYQ==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^6.1.0", - "@graphql-codegen/visitor-plugin-common": "6.2.2", + "@graphql-codegen/visitor-plugin-common": "6.2.3", "auto-bind": "~4.0.0", "change-case-all": "1.0.15", "tslib": "~2.6.0" @@ -2080,15 +2080,15 @@ "license": "0BSD" }, "node_modules/@graphql-codegen/typescript": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-5.0.7.tgz", - "integrity": "sha512-kZwcu9Iat5RWXxLGPnDbG6qVbGTigF25/aGqCG/DCQ1Al8RufSjVXhIOkJBp7QWAqXn3AupHXL1WTMXP7xs4dQ==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-5.0.8.tgz", + "integrity": "sha512-lUW6ari+rXP6tz5B0LXjmV9rEMOphoCZAkt+SJGObLQ6w6544ZsXSsRga/EJiSvZ1fRfm9yaFoErOZ56IVThyg==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^6.1.0", "@graphql-codegen/schema-ast": "^5.0.0", - "@graphql-codegen/visitor-plugin-common": "6.2.2", + "@graphql-codegen/visitor-plugin-common": "6.2.3", "auto-bind": "~4.0.0", "tslib": "~2.6.0" }, @@ -2395,15 +2395,15 @@ } }, "node_modules/@graphql-codegen/typescript-operations": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-5.0.7.tgz", - "integrity": "sha512-5N3myNse1putRQlp8+l1k9ayvc98oq2mPJx0zN8MTOlTBxcb2grVPFRLy5wJJjuv9NffpyCkVJ9LvUaf8mqQgg==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-5.0.8.tgz", + "integrity": "sha512-5H58DnDIy59Q+wcPRu13UnAS7fkMCW/vPI1+g8rHBmxuV9YGyGlVL9lE/fmJ06181hI7G9YGuUaoFYMJFU6bxQ==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^6.1.0", - "@graphql-codegen/typescript": "^5.0.7", - "@graphql-codegen/visitor-plugin-common": "6.2.2", + "@graphql-codegen/typescript": "^5.0.8", + "@graphql-codegen/visitor-plugin-common": "6.2.3", "auto-bind": "~4.0.0", "tslib": "~2.6.0" }, @@ -2435,9 +2435,9 @@ "license": "0BSD" }, "node_modules/@graphql-codegen/visitor-plugin-common": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-6.2.2.tgz", - "integrity": "sha512-wEJ4zJj58PKlXISItZfr0xIHyM1lAuRfoflPegsb1L17Mx5+YzNOy0WAlLele3yzyV89WvCiprFKMcVQ7KfDXg==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-6.2.3.tgz", + "integrity": "sha512-Rewl/QRFfIOXHFK3i/ts4VodsaB4N22kckH1zweTzq7SFodkfrqGrLa/MrGLJ/q6aUuqGiqao7f4Za2IjjkCxw==", "dev": true, "license": "MIT", "dependencies": { @@ -2854,14 +2854,33 @@ } }, "node_modules/@graphql-tools/relay-operation-optimizer": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-7.0.26.tgz", - "integrity": "sha512-cVdS2Hw4hg/WgPVV2wRIzZM975pW5k4vdih3hR4SvEDQVr6MmozmlTQSqzMyi9yg8LKTq540Oz3bYQa286yGmg==", + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-7.0.27.tgz", + "integrity": "sha512-rdkL1iDMFaGDiHWd7Bwv7hbhrhnljkJaD0MXeqdwQlZVgVdUDlMot2WuF7CEKVgijpH6eSC6AxXMDeqVgSBS2g==", "dev": true, "license": "MIT", "dependencies": { "@ardatan/relay-compiler": "^12.0.3", - "@graphql-tools/utils": "^10.11.0", + "@graphql-tools/utils": "^11.0.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/relay-operation-optimizer/node_modules/@graphql-tools/utils": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-11.0.0.tgz", + "integrity": "sha512-bM1HeZdXA2C3LSIeLOnH/bcqSgbQgKEDrjxODjqi3y58xai2TkNrtYcQSoWzGbt9VMN1dORGjR7Vem8SPnUFQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "@whatwg-node/promise-helpers": "^1.0.0", + "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "engines": { diff --git a/frontend/package.json b/frontend/package.json index 4e10f1ae9..a69666c2e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -43,8 +43,8 @@ "@browser-logos/chrome": "^2.0.0", "@browser-logos/firefox": "^3.0.10", "@browser-logos/safari": "^2.1.0", - "@graphql-codegen/cli": "^6.1.1", - "@graphql-codegen/client-preset": "^5.2.2", + "@graphql-codegen/cli": "^6.1.2", + "@graphql-codegen/client-preset": "^5.2.3", "@graphql-codegen/typescript-msw": "^3.0.1", "@storybook/addon-docs": "^10.2.9", "@storybook/react-vite": "^10.2.9", From 5afbd0c7e2d9b183c6eef32cb8469c399a02ca2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Feb 2026 13:58:56 +0000 Subject: [PATCH 062/104] build(deps): bump the i18next group across 1 directory with 2 updates Bumps the i18next group with 2 updates in the /frontend directory: [i18next](https://github.com/i18next/i18next) and [i18next-cli](https://github.com/i18next/i18next-cli). Updates `i18next` from 25.8.10 to 25.8.12 - [Release notes](https://github.com/i18next/i18next/releases) - [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next/compare/v25.8.10...v25.8.12) Updates `i18next-cli` from 1.42.9 to 1.42.10 - [Changelog](https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next-cli/compare/v1.42.9...v1.42.10) --- updated-dependencies: - dependency-name: i18next dependency-version: 25.8.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: i18next - dependency-name: i18next-cli dependency-version: 1.42.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: i18next ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 409 +++++++++++++------------------------ frontend/package.json | 4 +- 2 files changed, 149 insertions(+), 264 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 78c33a119..92b2778f6 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -20,7 +20,7 @@ "@zxcvbn-ts/language-common": "^3.0.4", "classnames": "^2.5.1", "date-fns": "^4.1.0", - "i18next": "^25.8.10", + "i18next": "^25.8.13", "react": "^19.2.4", "react-dom": "^19.2.4", "react-i18next": "^16.5.4", @@ -54,7 +54,7 @@ "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", "happy-dom": "^20.5.0", - "i18next-cli": "^1.42.9", + "i18next-cli": "^1.43.0", "knip": "^5.81.0", "msw": "^2.12.8", "msw-storybook-addon": "^2.0.6", @@ -3315,39 +3315,6 @@ } } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", - "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/cliui": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", - "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, "node_modules/@joshwooding/vite-plugin-react-docgen-typescript": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.6.4.tgz", @@ -7733,6 +7700,33 @@ "node": ">=8.6.0" } }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.0.tgz", + "integrity": "sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -8028,18 +8022,18 @@ } }, "node_modules/glob": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.4.tgz", - "integrity": "sha512-KACie1EOs9BIOMtenFaxwmYODWA3/fTfGSUnLhMJpXRntu1g+uL/Xvub5f8SCTppvo9q62Qy4LeOoUiaL54G5A==", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "minimatch": "^10.2.1", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -8058,48 +8052,6 @@ "node": ">= 6" } }, - "node_modules/glob/node_modules/balanced-match": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.2.tgz", - "integrity": "sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "jackspeak": "^4.2.3" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", - "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", - "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -8539,9 +8491,9 @@ } }, "node_modules/i18next": { - "version": "25.8.10", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.8.10.tgz", - "integrity": "sha512-CtPJLMAz1G8sxo+mIzfBjGgLxWs7d6WqIjlmmv9BTsOat4pJIfwZ8cm07n3kFS6bP9c6YwsYutYrwsEeJVBo2g==", + "version": "25.8.13", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.8.13.tgz", + "integrity": "sha512-E0vzjBY1yM+nsFrtgkjLhST2NBkirkvOVoQa0MSldhsuZ3jUge7ZNpuwG0Cfc74zwo5ZwRzg3uOgT+McBn32iA==", "funding": [ { "type": "individual", @@ -8570,9 +8522,9 @@ } }, "node_modules/i18next-cli": { - "version": "1.42.9", - "resolved": "https://registry.npmjs.org/i18next-cli/-/i18next-cli-1.42.9.tgz", - "integrity": "sha512-Gh11eWLMyuqoxYVBRp+e+3DEmT2hDGJswjg04iqXMnMzT89buryLKx6zL20x8F7AwkM6n4KR5iN6H61drV6EAQ==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/i18next-cli/-/i18next-cli-1.43.0.tgz", + "integrity": "sha512-qCh/qRVndNfW7CQP9BmyfZX82Cx1Tzs0cIR2fBIiExlpj6ucN7aunl5iQQOI3ixr1x1P8GcaEhzsLR58ovKhXA==", "dev": true, "license": "MIT", "dependencies": { @@ -8581,12 +8533,12 @@ "chokidar": "5.0.0", "commander": "14.0.3", "execa": "9.6.1", - "glob": "13.0.1", + "glob": "13.0.6", "i18next-resources-for-ts": "2.0.0", - "inquirer": "13.2.2", + "inquirer": "13.2.5", "jiti": "2.6.1", "jsonc-parser": "3.3.1", - "minimatch": "10.1.2", + "minimatch": "10.2.2", "ora": "9.3.0", "react": "^19.2.4", "react-i18next": "^16.5.4", @@ -8615,24 +8567,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/i18next-cli/node_modules/glob": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.1.tgz", - "integrity": "sha512-B7U/vJpE3DkJ5WXTgTpTRN63uV42DseiXXKMwG14LQBXmsdeIoHAPbU/MEo6II0k5ED74uc2ZGTC6MwHFQhF6w==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.1.2", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/i18next-cli/node_modules/readdirp": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", @@ -8800,15 +8734,15 @@ "license": "ISC" }, "node_modules/inquirer": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.2.2.tgz", - "integrity": "sha512-+hlN8I88JE9T3zjWHGnMhryniRDbSgFNJHJTyD2iKO5YNpMRyfghQ6wVoe+gV4ygMM4r4GzlsBxNa1g/UUZixA==", + "version": "13.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.2.5.tgz", + "integrity": "sha512-JHvVPgOIre0NrA9o8BGHUBh9rNuKkN1gS1ffbYgy3BuuJmJZhnFy9IHz3pcNbZm9zK6qTYvQ6LN5wl3Xcg4Jkw==", "dev": true, "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.3", - "@inquirer/core": "^11.1.1", - "@inquirer/prompts": "^8.2.0", + "@inquirer/core": "^11.1.4", + "@inquirer/prompts": "^8.2.1", "@inquirer/type": "^4.0.3", "mute-stream": "^3.0.0", "run-async": "^4.0.6", @@ -8837,14 +8771,14 @@ } }, "node_modules/inquirer/node_modules/@inquirer/checkbox": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.0.4.tgz", - "integrity": "sha512-DrAMU3YBGMUAp6ArwTIp/25CNDtDbxk7UjIrrtM25JVVrlVYlVzHh5HR1BDFu9JMyUoZ4ZanzeaHqNDttf3gVg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.1.0.tgz", + "integrity": "sha512-/HjF1LN0a1h4/OFsbGKHNDtWICFU/dqXCdym719HFTyJo9IG7Otr+ziGWc9S0iQuohRZllh+WprSgd5UW5Fw0g==", "dev": true, "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.3", - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.5", "@inquirer/figures": "^2.0.3", "@inquirer/type": "^4.0.3" }, @@ -8861,13 +8795,13 @@ } }, "node_modules/inquirer/node_modules/@inquirer/confirm": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.4.tgz", - "integrity": "sha512-WdaPe7foUnoGYvXzH4jp4wH/3l+dBhZ3uwhKjXjwdrq5tEIFaANxj6zrGHxLdsIA0yKM0kFPVcEalOZXBB5ISA==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.8.tgz", + "integrity": "sha512-Di6dgmiZ9xCSUxWUReWTqDtbhXCuG2MQm2xmgSAIruzQzBqNf49b8E07/vbCYY506kDe8BiwJbegXweG8M1klw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.5", "@inquirer/type": "^4.0.3" }, "engines": { @@ -8883,9 +8817,9 @@ } }, "node_modules/inquirer/node_modules/@inquirer/core": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.1.tgz", - "integrity": "sha512-hV9o15UxX46OyQAtaoMqAOxGR8RVl1aZtDx1jHbCtSJy1tBdTfKxLPKf7utsE4cRy4tcmCQ4+vdV+ca+oNxqNA==", + "version": "11.1.5", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.5.tgz", + "integrity": "sha512-QQPAX+lka8GyLcZ7u7Nb1h6q72iZ/oy0blilC3IB2nSt1Qqxp7akt94Jqhi/DzARuN3Eo9QwJRvtl4tmVe4T5A==", "dev": true, "license": "MIT", "dependencies": { @@ -8893,9 +8827,9 @@ "@inquirer/figures": "^2.0.3", "@inquirer/type": "^4.0.3", "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", "mute-stream": "^3.0.0", - "signal-exit": "^4.1.0", - "wrap-ansi": "^9.0.2" + "signal-exit": "^4.1.0" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -8910,13 +8844,13 @@ } }, "node_modules/inquirer/node_modules/@inquirer/editor": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.0.4.tgz", - "integrity": "sha512-QI3Jfqcv6UO2/VJaEFONH8Im1ll++Xn/AJTBn9Xf+qx2M+H8KZAdQ5sAe2vtYlo+mLW+d7JaMJB4qWtK4BG3pw==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.0.8.tgz", + "integrity": "sha512-sLcpbb9B3XqUEGrj1N66KwhDhEckzZ4nI/W6SvLXyBX8Wic3LDLENlWRvkOGpCPoserabe+MxQkpiMoI8irvyA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.5", "@inquirer/external-editor": "^2.0.3", "@inquirer/type": "^4.0.3" }, @@ -8933,13 +8867,13 @@ } }, "node_modules/inquirer/node_modules/@inquirer/expand": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.4.tgz", - "integrity": "sha512-0I/16YwPPP0Co7a5MsomlZLpch48NzYfToyqYAOWtBmaXSB80RiNQ1J+0xx2eG+Wfxt0nHtpEWSRr6CzNVnOGg==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.8.tgz", + "integrity": "sha512-QieW3F1prNw3j+hxO7/NKkG1pk3oz7pOB6+5Upwu3OIwADfPX0oZVppsqlL+Vl/uBHHDSOBY0BirLctLnXwGGg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.5", "@inquirer/type": "^4.0.3" }, "engines": { @@ -8987,13 +8921,13 @@ } }, "node_modules/inquirer/node_modules/@inquirer/input": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.4.tgz", - "integrity": "sha512-4B3s3jvTREDFvXWit92Yc6jF1RJMDy2VpSqKtm4We2oVU65YOh2szY5/G14h4fHlyQdpUmazU5MPCFZPRJ0AOw==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.8.tgz", + "integrity": "sha512-p0IJslw0AmedLEkOU+yrEX3Aj2RTpQq7ZOf8nc1DIhjzaxRWrrgeuE5Kyh39fVRgtcACaMXx/9WNo8+GjgBOfw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.5", "@inquirer/type": "^4.0.3" }, "engines": { @@ -9009,13 +8943,13 @@ } }, "node_modules/inquirer/node_modules/@inquirer/number": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.4.tgz", - "integrity": "sha512-CmMp9LF5HwE+G/xWsC333TlCzYYbXMkcADkKzcawh49fg2a1ryLc7JL1NJYYt1lJ+8f4slikNjJM9TEL/AljYQ==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.8.tgz", + "integrity": "sha512-uGLiQah9A0F9UIvJBX52m0CnqtLaym0WpT9V4YZrjZ+YRDKZdwwoEPz06N6w8ChE2lrnsdyhY9sL+Y690Kh9gQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.5", "@inquirer/type": "^4.0.3" }, "engines": { @@ -9031,14 +8965,14 @@ } }, "node_modules/inquirer/node_modules/@inquirer/password": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.4.tgz", - "integrity": "sha512-ZCEPyVYvHK4W4p2Gy6sTp9nqsdHQCfiPXIP9LbJVW4yCinnxL/dDDmPaEZVysGrj8vxVReRnpfS2fOeODe9zjg==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.8.tgz", + "integrity": "sha512-zt1sF4lYLdvPqvmvHdmjOzuUUjuCQ897pdUCO8RbXMUDKXJTTyOQgtn23le+jwcb+MpHl3VAFvzIdxRAf6aPlA==", "dev": true, "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.3", - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.5", "@inquirer/type": "^4.0.3" }, "engines": { @@ -9054,22 +8988,22 @@ } }, "node_modules/inquirer/node_modules/@inquirer/prompts": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.2.0.tgz", - "integrity": "sha512-rqTzOprAj55a27jctS3vhvDDJzYXsr33WXTjODgVOru21NvBo9yIgLIAf7SBdSV0WERVly3dR6TWyp7ZHkvKFA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.3.0.tgz", + "integrity": "sha512-JAj66kjdH/F1+B7LCigjARbwstt3SNUOSzMdjpsvwJmzunK88gJeXmcm95L9nw1KynvFVuY4SzXh/3Y0lvtgSg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/checkbox": "^5.0.4", - "@inquirer/confirm": "^6.0.4", - "@inquirer/editor": "^5.0.4", - "@inquirer/expand": "^5.0.4", - "@inquirer/input": "^5.0.4", - "@inquirer/number": "^4.0.4", - "@inquirer/password": "^5.0.4", - "@inquirer/rawlist": "^5.2.0", - "@inquirer/search": "^4.1.0", - "@inquirer/select": "^5.0.4" + "@inquirer/checkbox": "^5.1.0", + "@inquirer/confirm": "^6.0.8", + "@inquirer/editor": "^5.0.8", + "@inquirer/expand": "^5.0.8", + "@inquirer/input": "^5.0.8", + "@inquirer/number": "^4.0.8", + "@inquirer/password": "^5.0.8", + "@inquirer/rawlist": "^5.2.4", + "@inquirer/search": "^4.1.4", + "@inquirer/select": "^5.1.0" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -9084,13 +9018,13 @@ } }, "node_modules/inquirer/node_modules/@inquirer/rawlist": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.0.tgz", - "integrity": "sha512-CciqGoOUMrFo6HxvOtU5uL8fkjCmzyeB6fG7O1vdVAZVSopUBYECOwevDBlqNLyyYmzpm2Gsn/7nLrpruy9RFg==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.4.tgz", + "integrity": "sha512-fTuJ5Cq9W286isLxwj6GGyfTjx1Zdk4qppVEPexFuA6yioCCXS4V1zfKroQqw7QdbDPN73xs2DiIAlo55+kBqg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.5", "@inquirer/type": "^4.0.3" }, "engines": { @@ -9106,13 +9040,13 @@ } }, "node_modules/inquirer/node_modules/@inquirer/search": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.0.tgz", - "integrity": "sha512-EAzemfiP4IFvIuWnrHpgZs9lAhWDA0GM3l9F4t4mTQ22IFtzfrk8xbkMLcAN7gmVML9O/i+Hzu8yOUyAaL6BKA==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.4.tgz", + "integrity": "sha512-9yPTxq7LPmYjrGn3DRuaPuPbmC6u3fiWcsE9ggfLcdgO/ICHYgxq7mEy1yJ39brVvgXhtOtvDVjDh9slJxE4LQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.5", "@inquirer/figures": "^2.0.3", "@inquirer/type": "^4.0.3" }, @@ -9129,14 +9063,14 @@ } }, "node_modules/inquirer/node_modules/@inquirer/select": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.0.4.tgz", - "integrity": "sha512-s8KoGpPYMEQ6WXc0dT9blX2NtIulMdLOO3LA1UKOiv7KFWzlJ6eLkEYTDBIi+JkyKXyn8t/CD6TinxGjyLt57g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.1.0.tgz", + "integrity": "sha512-OyYbKnchS1u+zRe14LpYrN8S0wH1vD0p2yKISvSsJdH2TpI87fh4eZdWnpdbrGauCRWDph3NwxRmM4Pcm/hx1Q==", "dev": true, "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.3", - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.5", "@inquirer/figures": "^2.0.3", "@inquirer/type": "^4.0.3" }, @@ -9170,26 +9104,6 @@ } } }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, "node_modules/inquirer/node_modules/mute-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz", @@ -9200,42 +9114,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/inquirer/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -9592,22 +9470,6 @@ "node": ">=8" } }, - "node_modules/jackspeak": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", - "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^9.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/jiti": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", @@ -10185,21 +10047,44 @@ } }, "node_modules/minimatch": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", - "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz", + "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.1" + "brace-expansion": "^5.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/minimatch/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/minimatch/node_modules/brace-expansion": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", + "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", @@ -10211,11 +10096,11 @@ } }, "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -10841,9 +10726,9 @@ } }, "node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -10851,16 +10736,16 @@ "minipass": "^7.1.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", "dev": true, "license": "BlueOak-1.0.0", "engines": { diff --git a/frontend/package.json b/frontend/package.json index 4e10f1ae9..cb1b69cdf 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -30,7 +30,7 @@ "@zxcvbn-ts/language-common": "^3.0.4", "classnames": "^2.5.1", "date-fns": "^4.1.0", - "i18next": "^25.8.10", + "i18next": "^25.8.13", "react": "^19.2.4", "react-dom": "^19.2.4", "react-i18next": "^16.5.4", @@ -64,7 +64,7 @@ "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", "happy-dom": "^20.5.0", - "i18next-cli": "^1.42.9", + "i18next-cli": "^1.43.0", "knip": "^5.81.0", "msw": "^2.12.8", "msw-storybook-addon": "^2.0.6", From 0e702cc065c0b0714655f611774f6e98cfee9827 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Feb 2026 13:59:13 +0000 Subject: [PATCH 063/104] build(deps-dev): bump the storybook group in /frontend with 3 updates Bumps the storybook group in /frontend with 3 updates: [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/docs), [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) and [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/core). Updates `@storybook/addon-docs` from 10.2.9 to 10.2.10 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.10/code/addons/docs) Updates `@storybook/react-vite` from 10.2.9 to 10.2.10 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.10/code/frameworks/react-vite) Updates `storybook` from 10.2.9 to 10.2.10 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.10/code/core) --- updated-dependencies: - dependency-name: "@storybook/addon-docs" dependency-version: 10.2.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: "@storybook/react-vite" dependency-version: 10.2.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: storybook dependency-version: 10.2.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 70 +++++++++++++++++++------------------- frontend/package.json | 4 +-- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 78c33a119..cde0b25a8 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -36,8 +36,8 @@ "@graphql-codegen/cli": "^6.1.1", "@graphql-codegen/client-preset": "^5.2.2", "@graphql-codegen/typescript-msw": "^3.0.1", - "@storybook/addon-docs": "^10.2.9", - "@storybook/react-vite": "^10.2.9", + "@storybook/addon-docs": "^10.2.11", + "@storybook/react-vite": "^10.2.11", "@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-router-devtools": "^1.150.0", "@tanstack/router-plugin": "^1.150.0", @@ -5015,16 +5015,16 @@ "license": "MIT" }, "node_modules/@storybook/addon-docs": { - "version": "10.2.9", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.9.tgz", - "integrity": "sha512-rPUSyymt6IDI8PbZVEXPnqOysstp+mKeZiPRxcKIklecDhLUiy5Yc2PQneYY//Gp7Z/CEe54tJHr+WpFgtLPYg==", + "version": "10.2.11", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.11.tgz", + "integrity": "sha512-1zMv2M8gvuPFBi9TbZlKo4jWL8FNCe8tbfah0jcpu+akyvracI78sKsJ8h8RtZa7XcS9qVcOyskPHtOctmHCVQ==", "dev": true, "license": "MIT", "dependencies": { "@mdx-js/react": "^3.0.0", - "@storybook/csf-plugin": "10.2.9", + "@storybook/csf-plugin": "10.2.11", "@storybook/icons": "^2.0.1", - "@storybook/react-dom-shim": "10.2.9", + "@storybook/react-dom-shim": "10.2.11", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "ts-dedent": "^2.0.0" @@ -5034,17 +5034,17 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.9" + "storybook": "^10.2.11" } }, "node_modules/@storybook/builder-vite": { - "version": "10.2.9", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.9.tgz", - "integrity": "sha512-01DvThkchYqHh2GzqFTNrrNsrn3URuHXfHlDt2u+ggqiBKjObxeRhlgZN0ntG9w41Y05mhWH9pRAKbPMGDBIwQ==", + "version": "10.2.11", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.11.tgz", + "integrity": "sha512-am7/kfMUSSwQt+9Cwzwe9cUUk9vFGJktr6Lgh3LDuLs35mHzpIpV+DgLqGlGsvWioriha9tNC57q1QwRop2KHA==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf-plugin": "10.2.9", + "@storybook/csf-plugin": "10.2.11", "ts-dedent": "^2.0.0" }, "funding": { @@ -5052,14 +5052,14 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.9", + "storybook": "^10.2.11", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "node_modules/@storybook/csf-plugin": { - "version": "10.2.9", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.9.tgz", - "integrity": "sha512-vfGZeszuDZc742eQgpA/W6ok54ePYPYz9MLdM6u3XBHJXmNhsjbcwSFTXZHrxjyDn88vXdo+Frg3HBKkOQBnbQ==", + "version": "10.2.11", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.11.tgz", + "integrity": "sha512-sHPc5SaTpee+WsTI7N8DUFYo/DJj3BxZNuzmRkPXN3vf/aHOPdGKLZiglIRQvXBucKF2JDSpbYHoz9+702O/cQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5072,7 +5072,7 @@ "peerDependencies": { "esbuild": "*", "rollup": "*", - "storybook": "^10.2.9", + "storybook": "^10.2.11", "vite": "*", "webpack": "*" }, @@ -5110,14 +5110,14 @@ } }, "node_modules/@storybook/react": { - "version": "10.2.9", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.2.9.tgz", - "integrity": "sha512-cYJroaHWHmauPO8EcfpDTU3Odc7z5/DbuLO+jQ4SAaoupwnE35HNe8WAdpD3jpmI20cqKauqOENIT/+HjxhlYA==", + "version": "10.2.11", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.2.11.tgz", + "integrity": "sha512-JGfmA8AE5/hZFkHsXJ2tT+Q4hoTOZZUSfKKG9u/Dn0lh/lSAYm1gpH+5ZFFGScZZ1p+ByFVxJnSRUBn/taaZgw==", "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/react-dom-shim": "10.2.9", + "@storybook/react-dom-shim": "10.2.11", "react-docgen": "^8.0.2" }, "funding": { @@ -5127,7 +5127,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.9", + "storybook": "^10.2.11", "typescript": ">= 4.9.x" }, "peerDependenciesMeta": { @@ -5137,9 +5137,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "10.2.9", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.9.tgz", - "integrity": "sha512-hlvFl0ylK/RZ4GxOXcBfzQNoOm3/x0LEgaPYlkR2/P4CTbKKTc+fHRsZMpFgP/X0g8oZmfm93mdhQdX0zlF8JQ==", + "version": "10.2.11", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.11.tgz", + "integrity": "sha512-29kqYYLvASuxFdagwMUX0xmPgDKbRYdm4uzYGEFWiKVZvJHarbTThzSaCDNhvoQk4qPp783duO29uHkztEHc8Q==", "dev": true, "license": "MIT", "funding": { @@ -5149,20 +5149,20 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.9" + "storybook": "^10.2.11" } }, "node_modules/@storybook/react-vite": { - "version": "10.2.9", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.2.9.tgz", - "integrity": "sha512-uDuo8TeBc3E519xQQGGGaH43TaCEbEgNjDV3vX/G6ikWgJoYzFFILO4EKhKKsf7t3dJl+FIXJEcvPw7Azd0VPw==", + "version": "10.2.11", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.2.11.tgz", + "integrity": "sha512-NcxejnemYUbqBNHHIgq/jryc5kUr89Eph0gV4GLa33rvqHStTY8pHj8lfg5N8aGlhTPnDk+vXRu6KdCmiLAMzQ==", "dev": true, "license": "MIT", "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "^0.6.4", "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "10.2.9", - "@storybook/react": "10.2.9", + "@storybook/builder-vite": "10.2.11", + "@storybook/react": "10.2.11", "empathic": "^2.0.0", "magic-string": "^0.30.0", "react-docgen": "^8.0.0", @@ -5176,7 +5176,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.9", + "storybook": "^10.2.11", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, @@ -12016,9 +12016,9 @@ } }, "node_modules/storybook": { - "version": "10.2.9", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.9.tgz", - "integrity": "sha512-DGok7XwIwdPWF+a49Yw+4madER5DZWRo9CdyySBLT3zeuxiEPt0Ua7ouJHm/y6ojnb/FVKZcQe8YmrE71s0qPQ==", + "version": "10.2.11", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.11.tgz", + "integrity": "sha512-uBK2CdmCZmwdHIE+Xk4hO9p3KQxJYrr5+/s1ybQU6m4GVInyp0od0E0rXEUmFDFcehLiYOCgE1kUPP9dZOC0Wg==", "dev": true, "license": "MIT", "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index 4e10f1ae9..26035a818 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -46,8 +46,8 @@ "@graphql-codegen/cli": "^6.1.1", "@graphql-codegen/client-preset": "^5.2.2", "@graphql-codegen/typescript-msw": "^3.0.1", - "@storybook/addon-docs": "^10.2.9", - "@storybook/react-vite": "^10.2.9", + "@storybook/addon-docs": "^10.2.11", + "@storybook/react-vite": "^10.2.11", "@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-router-devtools": "^1.150.0", "@tanstack/router-plugin": "^1.150.0", From 6324e5ed2ce496b43dc7564950c018fb0dc7644e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Feb 2026 23:00:28 +0000 Subject: [PATCH 064/104] build(deps): bump wasmtime from 40.0.3 to 40.0.4 Bumps [wasmtime](https://github.com/bytecodealliance/wasmtime) from 40.0.3 to 40.0.4. - [Release notes](https://github.com/bytecodealliance/wasmtime/releases) - [Changelog](https://github.com/bytecodealliance/wasmtime/blob/v40.0.4/RELEASES.md) - [Commits](https://github.com/bytecodealliance/wasmtime/compare/v40.0.3...v40.0.4) --- updated-dependencies: - dependency-name: wasmtime dependency-version: 40.0.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- Cargo.lock | 124 ++++++++++++++++++++++++++--------------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8d4b5bd2e..ce1a9c354 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1175,36 +1175,36 @@ dependencies = [ [[package]] name = "cranelift-assembler-x64" -version = "0.127.3" +version = "0.127.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08cdfa673abeaf2aa0634988468a751fbf5b3de612bd48c1bb36a3dc7e42fe44" +checksum = "d6abf69c884fde2d9d4cc232a585fb18f16af3ae04c634315c84ebe158ded92d" dependencies = [ "cranelift-assembler-x64-meta", ] [[package]] name = "cranelift-assembler-x64-meta" -version = "0.127.3" +version = "0.127.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744d5b84c226fe5dd5cc522552d2c69a55e1ea9f98e650b9075493d263698fca" +checksum = "263d31fcdf83a10267e8c38b53bc8f7688dfbc331267fd8fdf5b22e0dc47a55b" dependencies = [ "cranelift-srcgen", ] [[package]] name = "cranelift-bforest" -version = "0.127.3" +version = "0.127.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb9850ce67c4bdc5708204a24f3f571e1e933be2852ec785c778ad76e1f91a5e" +checksum = "d459d5377c01c4472b71029caa2df41afaf47711676aa9b12d7414f15104637b" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-bitset" -version = "0.127.3" +version = "0.127.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efa84e3a1dba026781d0a24761b072e03bbb404b8015f621d332457f627b3a19" +checksum = "8283088d5823ba7856ab8d531b7c3654b24984748f9fd99dcf3210701fd1d065" dependencies = [ "serde", "serde_derive", @@ -1212,9 +1212,9 @@ dependencies = [ [[package]] name = "cranelift-codegen" -version = "0.127.3" +version = "0.127.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cabfe32111207a68ddd237d184300789c6d650d47db0ff7c9c53ef48e347902" +checksum = "7d3138316d8dd341d725d6ab1598750545c76ad32892837fde558edd68a01b43" dependencies = [ "bumpalo", "cranelift-assembler-x64", @@ -1239,9 +1239,9 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.127.3" +version = "0.127.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdc5479395bb325f96e2e5e714e8c276b061c0eaa020525332bf16c6046a825" +checksum = "505cead19304a8dc8689e31b29038775c3f73f9d5ea7a5e33864437a1f46c6b6" dependencies = [ "cranelift-assembler-x64-meta", "cranelift-codegen-shared", @@ -1252,24 +1252,24 @@ dependencies = [ [[package]] name = "cranelift-codegen-shared" -version = "0.127.3" +version = "0.127.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678aea3a48ca54a38e1b057c253daf2ff4c2869b1e70af6545bee1475434b20d" +checksum = "ce62ba94f570644ce7de6ed05bd39ca28936665dec10a2a1f6f2c531d6add45c" [[package]] name = "cranelift-control" -version = "0.127.3" +version = "0.127.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d5210a53058d2b2504269d168fb075f80f3921126dd27e593e726b6387413be" +checksum = "db6cfe339689c3926412a7060ab00ef3b2b43d936b537e7a3f696121be9d0eaa" dependencies = [ "arbitrary", ] [[package]] name = "cranelift-entity" -version = "0.127.3" +version = "0.127.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb138631be4325459938ea0507fb6001a9bbfe6022ee130423acbd8583c47244" +checksum = "625518090e912bdfe3c41464bf97ae421f6044d4ca0f5c3267dcacdb352b033d" dependencies = [ "cranelift-bitset", "serde", @@ -1278,9 +1278,9 @@ dependencies = [ [[package]] name = "cranelift-frontend" -version = "0.127.3" +version = "0.127.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c087396f79a0cdcdd38c7adc1e9955ba3022d026afb9f08769f0c13795d1b6b" +checksum = "17f652d40ddf3afb55be64d8979d312b52b384a8cebbcde1dd1c2e32ebcd4466" dependencies = [ "cranelift-codegen", "log", @@ -1290,15 +1290,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.127.3" +version = "0.127.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52eaa7b30b2a2d85f177790227f8f7a9b76d35da96302ef28fb394e588e3530b" +checksum = "9f512767e83015f4baf6e732cabca93cea82907e3ab237f826ef64f7ece75eb6" [[package]] name = "cranelift-native" -version = "0.127.3" +version = "0.127.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c68cefa46cc4e37728d0789a11744dc619a5bd96cabbe44cb9d8dcacc20134" +checksum = "cb1ca6e4dca568ff988d367e4707be2362cee9782265b0a501eaf467ffd550a8" dependencies = [ "cranelift-codegen", "libc", @@ -1307,9 +1307,9 @@ dependencies = [ [[package]] name = "cranelift-srcgen" -version = "0.127.3" +version = "0.127.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9092860471c4562c18ea1e47f446072795ad344a4a01f7d0f8cee445390d545" +checksum = "97400ad8fbd3a434092fc0b486fa7784150b53187941d818b1087f3ac0a547f0" [[package]] name = "crc" @@ -1745,7 +1745,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -4096,7 +4096,7 @@ dependencies = [ "sha1", "sha2", "sprintf", - "thiserror 2.0.17", + "thiserror 1.0.69", "tokio", "tracing", "urlencoding", @@ -4718,7 +4718,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425" dependencies = [ "anyhow", - "itertools 0.14.0", + "itertools 0.13.0", "proc-macro2", "quote", "syn", @@ -4750,9 +4750,9 @@ dependencies = [ [[package]] name = "pulley-interpreter" -version = "40.0.3" +version = "40.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63350fc565d2b7ab7f610d0655b28f5f80348658c2cf33d05d7ec43356c4be3c" +checksum = "5de307c194cf6310d486dd5595ffc329c53b4acafd54e214752c1eb2e68be3a9" dependencies = [ "cranelift-bitset", "log", @@ -4762,9 +4762,9 @@ dependencies = [ [[package]] name = "pulley-macros" -version = "40.0.3" +version = "40.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d46b2339b894fed7983d91e5723c40e4bc593cb78cd86ffac0798d29f21372e0" +checksum = "99dca2747e910d10bafe911e172a1b35860268421c3ee5ddb7e16c35e0288b4a" dependencies = [ "proc-macro2", "quote", @@ -5156,7 +5156,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -6202,7 +6202,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -7043,9 +7043,9 @@ dependencies = [ [[package]] name = "wasmtime" -version = "40.0.3" +version = "40.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f033059744520d5943887511a83731856a78a00f0dac943dc9e9d2292289cad" +checksum = "0702b64d4c3fe43ae4ce229e06af06a27783e48c519e68586d180717cdd24314" dependencies = [ "addr2line", "anyhow", @@ -7086,9 +7086,9 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "40.0.3" +version = "40.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c6de1f26b145fbe9e6980b0495e1c855920091d31c0d1e32e7e49318211103" +checksum = "3ffeb777a21965a85e4b1ce7b308c63ba130df91912096b49b95523bf3bdd2c7" dependencies = [ "anyhow", "cranelift-bitset", @@ -7109,9 +7109,9 @@ dependencies = [ [[package]] name = "wasmtime-internal-component-macro" -version = "40.0.3" +version = "40.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bc0996221d4e178c1b9286aa40e448af1cdf40a37f1a3f71755f0502a11eb23" +checksum = "935bb8db1e2829bf26b80ed3daeed6cf9fc804f7002c90a8d17dbd5e93c69e0b" dependencies = [ "anyhow", "proc-macro2", @@ -7124,15 +7124,15 @@ dependencies = [ [[package]] name = "wasmtime-internal-component-util" -version = "40.0.3" +version = "40.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146d953836b26c44dc39173b00c5a783e9adcb4369460b2052169cd81e90e729" +checksum = "52625d0c8fe2df1d7dd96d45d37dae8818c183c183a82b2368e3741ee5253859" [[package]] name = "wasmtime-internal-cranelift" -version = "40.0.3" +version = "40.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1fbd0cae8d129883a7bad7f2272e6662dcebf4e0f6b38539603359235959a" +checksum = "85da1ba5fee01a3ee21c4d0c8052cc9035388639fa091a969b534d4c6f8449d4" dependencies = [ "anyhow", "cfg-if", @@ -7158,9 +7158,9 @@ dependencies = [ [[package]] name = "wasmtime-internal-fiber" -version = "40.0.3" +version = "40.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52a2a724a50b8ace66a6089002cbe99eec0f611a15c78262739b6aeb590ab252" +checksum = "a4c7de5a0872764c1ca640886af10a70cf7f8526386906245b43cdb345ece0e6" dependencies = [ "anyhow", "cc", @@ -7173,9 +7173,9 @@ dependencies = [ [[package]] name = "wasmtime-internal-jit-debug" -version = "40.0.3" +version = "40.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f3ea5e264b8f6a3a91444ffee58449288e239c9d60c2483bf78c631f3269fa7" +checksum = "160acd973d770d62bef1b2697d7fac83a8fe63ef966215e624382b2a9532bd58" dependencies = [ "cc", "wasmtime-internal-versioned-export-macros", @@ -7183,9 +7183,9 @@ dependencies = [ [[package]] name = "wasmtime-internal-jit-icache-coherence" -version = "40.0.3" +version = "40.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c161f4e0636998a68f2c2159260a0d8bbb2d2d2b762938f7be62b2ac0535ed4" +checksum = "cc57f590ba7ea967ea9e8c8560175c6926e5b15d11c29bbde3ad0013a29470eb" dependencies = [ "anyhow", "cfg-if", @@ -7195,24 +7195,24 @@ dependencies = [ [[package]] name = "wasmtime-internal-math" -version = "40.0.3" +version = "40.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55d246d16cad85ab49f6e76026d934df2f45974d97eb2ab837a6312dda4c76a" +checksum = "07612904518d47b677e8db67ca47c16d8c8cefb0099020729f886776950cb58b" dependencies = [ "libm", ] [[package]] name = "wasmtime-internal-slab" -version = "40.0.3" +version = "40.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6e7127a10a3d38939c54fa3e1701512bd78340ec112ffc628c36516e38bd3a" +checksum = "bc83ff16531e1e1537e0de2b630af56a0a9e1fab864130c5b7e213da71783a0f" [[package]] name = "wasmtime-internal-unwinder" -version = "40.0.3" +version = "40.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a899f4006b6332a9312060c9216beaf58447da5939af8f19144138f59d6e366" +checksum = "47371d697244785e4bbb371229f9a2daa8628d1e03368ec895cf658370e1bf38" dependencies = [ "anyhow", "cfg-if", @@ -7223,9 +7223,9 @@ dependencies = [ [[package]] name = "wasmtime-internal-versioned-export-macros" -version = "40.0.3" +version = "40.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "426e1088960ab200c49b8e5812667a442c705df018b5c57bd9b3cf80c12b0bdb" +checksum = "ad3cd4aff8f2e7ec658c7a0424b74ad88a6940505303fb0616323592a1c400a6" dependencies = [ "proc-macro2", "quote", @@ -7234,9 +7234,9 @@ dependencies = [ [[package]] name = "wasmtime-internal-wit-bindgen" -version = "40.0.3" +version = "40.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bf7e687a48c5b82d81c59c8963a4f90ca495955170fab9c1bf75176fd1ba014" +checksum = "73a5774737acccdc70ff27bbe9e09c45b156bd7792bb83906735a572ce122247" dependencies = [ "anyhow", "bitflags", @@ -7330,7 +7330,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.48.0", ] [[package]] From 1d3dcafb2a57f3d91bd0e0ac14b0b3fafec5f930 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Feb 2026 13:54:59 +0000 Subject: [PATCH 065/104] build(deps-dev): bump the storybook group in /frontend with 3 updates Bumps the storybook group in /frontend with 3 updates: [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/docs), [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) and [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/core). Updates `@storybook/addon-docs` from 10.2.11 to 10.2.12 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.12/code/addons/docs) Updates `@storybook/react-vite` from 10.2.11 to 10.2.12 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.12/code/frameworks/react-vite) Updates `storybook` from 10.2.11 to 10.2.12 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.12/code/core) --- updated-dependencies: - dependency-name: "@storybook/addon-docs" dependency-version: 10.2.12 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: "@storybook/react-vite" dependency-version: 10.2.12 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: storybook dependency-version: 10.2.12 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 70 +++++++++++++++++++------------------- frontend/package.json | 4 +-- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 6ab2361c9..0a25a3f5c 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -36,8 +36,8 @@ "@graphql-codegen/cli": "^6.1.2", "@graphql-codegen/client-preset": "^5.2.3", "@graphql-codegen/typescript-msw": "^3.0.1", - "@storybook/addon-docs": "^10.2.11", - "@storybook/react-vite": "^10.2.11", + "@storybook/addon-docs": "^10.2.12", + "@storybook/react-vite": "^10.2.12", "@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-router-devtools": "^1.150.0", "@tanstack/router-plugin": "^1.150.0", @@ -5001,16 +5001,16 @@ "license": "MIT" }, "node_modules/@storybook/addon-docs": { - "version": "10.2.11", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.11.tgz", - "integrity": "sha512-1zMv2M8gvuPFBi9TbZlKo4jWL8FNCe8tbfah0jcpu+akyvracI78sKsJ8h8RtZa7XcS9qVcOyskPHtOctmHCVQ==", + "version": "10.2.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.12.tgz", + "integrity": "sha512-LlLQSYxISugG2mEVVV/rNMyZaF1wIvIhaq5kGKbBuAz18GOtQmvaa/o3fJjlebmvTn/AOmipNlQ4ChOXSAwmdg==", "dev": true, "license": "MIT", "dependencies": { "@mdx-js/react": "^3.0.0", - "@storybook/csf-plugin": "10.2.11", + "@storybook/csf-plugin": "10.2.12", "@storybook/icons": "^2.0.1", - "@storybook/react-dom-shim": "10.2.11", + "@storybook/react-dom-shim": "10.2.12", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "ts-dedent": "^2.0.0" @@ -5020,17 +5020,17 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.11" + "storybook": "^10.2.12" } }, "node_modules/@storybook/builder-vite": { - "version": "10.2.11", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.11.tgz", - "integrity": "sha512-am7/kfMUSSwQt+9Cwzwe9cUUk9vFGJktr6Lgh3LDuLs35mHzpIpV+DgLqGlGsvWioriha9tNC57q1QwRop2KHA==", + "version": "10.2.12", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.12.tgz", + "integrity": "sha512-QaOwhNpoBs4Af8xYG1NOoyOvbapcN7EpwYq53ERpMz2uU+yOeApqy4XeJ5xM7doCvkJKZqidwLMXZQeN/j/mUw==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf-plugin": "10.2.11", + "@storybook/csf-plugin": "10.2.12", "ts-dedent": "^2.0.0" }, "funding": { @@ -5038,14 +5038,14 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.11", + "storybook": "^10.2.12", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "node_modules/@storybook/csf-plugin": { - "version": "10.2.11", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.11.tgz", - "integrity": "sha512-sHPc5SaTpee+WsTI7N8DUFYo/DJj3BxZNuzmRkPXN3vf/aHOPdGKLZiglIRQvXBucKF2JDSpbYHoz9+702O/cQ==", + "version": "10.2.12", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.12.tgz", + "integrity": "sha512-+6nv7oX21K+BRmMUCfeaFeS3UFgDu5/2M4YsLYzXnx/YmAP3yg0bb09falzvCKTCncHCJUWaO8GDvavj32anaA==", "dev": true, "license": "MIT", "dependencies": { @@ -5058,7 +5058,7 @@ "peerDependencies": { "esbuild": "*", "rollup": "*", - "storybook": "^10.2.11", + "storybook": "^10.2.12", "vite": "*", "webpack": "*" }, @@ -5096,14 +5096,14 @@ } }, "node_modules/@storybook/react": { - "version": "10.2.11", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.2.11.tgz", - "integrity": "sha512-JGfmA8AE5/hZFkHsXJ2tT+Q4hoTOZZUSfKKG9u/Dn0lh/lSAYm1gpH+5ZFFGScZZ1p+ByFVxJnSRUBn/taaZgw==", + "version": "10.2.12", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.2.12.tgz", + "integrity": "sha512-7HV/qwEmrDK27FzVHt0/yr8Wu3UTVR9jez3p07M+l/+deIpYrlPiSWm/aoD60gN6kUKzxbeLJFJruS/OM9xnPA==", "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/react-dom-shim": "10.2.11", + "@storybook/react-dom-shim": "10.2.12", "react-docgen": "^8.0.2" }, "funding": { @@ -5113,7 +5113,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.11", + "storybook": "^10.2.12", "typescript": ">= 4.9.x" }, "peerDependenciesMeta": { @@ -5123,9 +5123,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "10.2.11", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.11.tgz", - "integrity": "sha512-29kqYYLvASuxFdagwMUX0xmPgDKbRYdm4uzYGEFWiKVZvJHarbTThzSaCDNhvoQk4qPp783duO29uHkztEHc8Q==", + "version": "10.2.12", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.12.tgz", + "integrity": "sha512-T4uHPAgtEbroRazubGDIByopvNw1WKAp1kOlNqKWR8LZPDaVyEr8X7J6zaJo1y+vE8j6fUXvk6jZVMwhi/Jeig==", "dev": true, "license": "MIT", "funding": { @@ -5135,20 +5135,20 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.11" + "storybook": "^10.2.12" } }, "node_modules/@storybook/react-vite": { - "version": "10.2.11", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.2.11.tgz", - "integrity": "sha512-NcxejnemYUbqBNHHIgq/jryc5kUr89Eph0gV4GLa33rvqHStTY8pHj8lfg5N8aGlhTPnDk+vXRu6KdCmiLAMzQ==", + "version": "10.2.12", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.2.12.tgz", + "integrity": "sha512-y5326n/fJBSUzBtSmVigu1W/NKAqvEQ23DEBNO3sK29TAxQyTM5oaYket9zHqPT3Eb3M1t9+TNCFUZSQ6yOTvQ==", "dev": true, "license": "MIT", "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "^0.6.4", "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "10.2.11", - "@storybook/react": "10.2.11", + "@storybook/builder-vite": "10.2.12", + "@storybook/react": "10.2.12", "empathic": "^2.0.0", "magic-string": "^0.30.0", "react-docgen": "^8.0.0", @@ -5162,7 +5162,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.11", + "storybook": "^10.2.12", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, @@ -11920,9 +11920,9 @@ } }, "node_modules/storybook": { - "version": "10.2.11", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.11.tgz", - "integrity": "sha512-uBK2CdmCZmwdHIE+Xk4hO9p3KQxJYrr5+/s1ybQU6m4GVInyp0od0E0rXEUmFDFcehLiYOCgE1kUPP9dZOC0Wg==", + "version": "10.2.12", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.12.tgz", + "integrity": "sha512-eT4266OqLdRE3J/pxl2dk36Rnj9vv17Y6rNMpzxohOMjRVONyKkozUd6gaZ2C4WUcwYdIw6VE+ft4LwrJXt/4Q==", "dev": true, "license": "MIT", "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index 7d7cef7c9..1cd545f2a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -46,8 +46,8 @@ "@graphql-codegen/cli": "^6.1.2", "@graphql-codegen/client-preset": "^5.2.3", "@graphql-codegen/typescript-msw": "^3.0.1", - "@storybook/addon-docs": "^10.2.11", - "@storybook/react-vite": "^10.2.11", + "@storybook/addon-docs": "^10.2.12", + "@storybook/react-vite": "^10.2.12", "@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-router-devtools": "^1.150.0", "@tanstack/router-plugin": "^1.150.0", From 136b374b2d6fc436d75171cad63251fe56d28906 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Feb 2026 13:55:13 +0000 Subject: [PATCH 066/104] build(deps-dev): bump i18next-cli in /frontend in the i18next group Bumps the i18next group in /frontend with 1 update: [i18next-cli](https://github.com/i18next/i18next-cli). Updates `i18next-cli` from 1.43.0 to 1.44.0 - [Changelog](https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next-cli/compare/v1.43.0...v1.44.0) --- updated-dependencies: - dependency-name: i18next-cli dependency-version: 1.44.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: i18next ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 8 ++++---- frontend/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 6ab2361c9..37000c2ab 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -54,7 +54,7 @@ "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", "happy-dom": "^20.5.0", - "i18next-cli": "^1.43.0", + "i18next-cli": "^1.44.0", "knip": "^5.81.0", "msw": "^2.12.8", "msw-storybook-addon": "^2.0.6", @@ -8541,9 +8541,9 @@ } }, "node_modules/i18next-cli": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/i18next-cli/-/i18next-cli-1.43.0.tgz", - "integrity": "sha512-qCh/qRVndNfW7CQP9BmyfZX82Cx1Tzs0cIR2fBIiExlpj6ucN7aunl5iQQOI3ixr1x1P8GcaEhzsLR58ovKhXA==", + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/i18next-cli/-/i18next-cli-1.44.0.tgz", + "integrity": "sha512-QQa6Z+HwaGfdW3AoudhCdOoXQzSw+ELLjDon46589wpbUP7uylzPHgEXmvrHaVD2f/llMiEDChJZ0iMdnDHF+A==", "dev": true, "license": "MIT", "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index 7d7cef7c9..b39aa5c42 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -64,7 +64,7 @@ "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", "happy-dom": "^20.5.0", - "i18next-cli": "^1.43.0", + "i18next-cli": "^1.44.0", "knip": "^5.81.0", "msw": "^2.12.8", "msw-storybook-addon": "^2.0.6", From ceef1521fc9593f5a2fa624ddb31e0bfd02e5c8a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Feb 2026 13:55:34 +0000 Subject: [PATCH 067/104] build(deps-dev): bump @types/node in /frontend in the types group Bumps the types group in /frontend with 1 update: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node). Updates `@types/node` from 25.2.3 to 25.3.0 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 25.3.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: types ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 16 ++++++++-------- frontend/package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 6ab2361c9..752e1f72f 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -44,7 +44,7 @@ "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.1", "@testing-library/user-event": "^14.6.1", - "@types/node": "^25.2.3", + "@types/node": "^25.3.0", "@types/react": "19.2.14", "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", @@ -5919,13 +5919,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz", - "integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==", + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.0.tgz", + "integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.16.0" + "undici-types": "~7.18.0" } }, "node_modules/@types/react": { @@ -12589,9 +12589,9 @@ } }, "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", "dev": true, "license": "MIT" }, diff --git a/frontend/package.json b/frontend/package.json index 7d7cef7c9..72839976e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -54,7 +54,7 @@ "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.1", "@testing-library/user-event": "^14.6.1", - "@types/node": "^25.2.3", + "@types/node": "^25.3.0", "@types/react": "19.2.14", "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", From 2e3027ad7a4a5fb9d60cafed23c05d2032f19626 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Feb 2026 13:55:45 +0000 Subject: [PATCH 068/104] build(deps): bump @vector-im/compound-design-tokens in /frontend Bumps [@vector-im/compound-design-tokens](https://github.com/element-hq/compound-design-tokens) from 6.4.3 to 6.10.1. - [Release notes](https://github.com/element-hq/compound-design-tokens/releases) - [Changelog](https://github.com/element-hq/compound-design-tokens/blob/main/docs/release.md) - [Commits](https://github.com/element-hq/compound-design-tokens/compare/v6.4.3...v6.10.1) --- updated-dependencies: - dependency-name: "@vector-im/compound-design-tokens" dependency-version: 6.10.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 8 ++++---- frontend/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 6ab2361c9..73764c1b5 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -14,7 +14,7 @@ "@radix-ui/react-dialog": "^1.1.15", "@tanstack/react-query": "^5.90.21", "@tanstack/react-router": "^1.150.0", - "@vector-im/compound-design-tokens": "6.4.3", + "@vector-im/compound-design-tokens": "6.10.1", "@vector-im/compound-web": "^8.3.5", "@zxcvbn-ts/core": "^3.0.4", "@zxcvbn-ts/language-common": "^3.0.4", @@ -5987,9 +5987,9 @@ } }, "node_modules/@vector-im/compound-design-tokens": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/@vector-im/compound-design-tokens/-/compound-design-tokens-6.4.3.tgz", - "integrity": "sha512-Zyqag2QCAfpRipLHSX/LEXj6OGFgBpilMQvNdr3a0iXeGASfkM3HZGid077kMRp9lvyHiQfPIs1BdllENwDSNQ==", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/@vector-im/compound-design-tokens/-/compound-design-tokens-6.10.1.tgz", + "integrity": "sha512-rbb+aUQhB6DppZrfZpwg5o2K4Uzil5QGmAoOSBmAdfgFMwQWkhwk1jnZozbH/vbsqwTLtRdX6tztXRZ1W9sJ0A==", "license": "SEE LICENSE IN README.md", "peerDependencies": { "@types/react": "*", diff --git a/frontend/package.json b/frontend/package.json index 7d7cef7c9..6504506b8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -24,7 +24,7 @@ "@radix-ui/react-dialog": "^1.1.15", "@tanstack/react-query": "^5.90.21", "@tanstack/react-router": "^1.150.0", - "@vector-im/compound-design-tokens": "6.4.3", + "@vector-im/compound-design-tokens": "6.10.1", "@vector-im/compound-web": "^8.3.5", "@zxcvbn-ts/core": "^3.0.4", "@zxcvbn-ts/language-common": "^3.0.4", From 5f881b3d2d49b3e01b466080b387f64b0d834a42 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Feb 2026 13:54:01 +0000 Subject: [PATCH 069/104] build(deps): bump actions/download-artifact from 7 to 8 Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 7 to 8. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/v7...v8) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: '8' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yaml | 10 +++++----- .github/workflows/ci.yaml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 0eb691e95..83c77848f 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -162,19 +162,19 @@ jobs: steps: - name: Download assets - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: assets path: assets-dist - name: Download binary x86_64 - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: binary-x86_64-unknown-linux-gnu path: binary-x86_64 - name: Download binary aarch64 - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: binary-aarch64-unknown-linux-gnu path: binary-aarch64 @@ -320,7 +320,7 @@ jobs: - build-image steps: - name: Download the artifacts from the previous job - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: pattern: mas-cli-* path: artifacts @@ -382,7 +382,7 @@ jobs: .github/scripts - name: Download the artifacts from the previous job - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: pattern: mas-cli-* path: artifacts diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ba90f2be1..a0db2c720 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -305,7 +305,7 @@ jobs: - uses: ./.github/actions/build-policies - name: Download archive - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: nextest-archive From 99a17d7ac6ccb4aae702caf66f7503ad37952350 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Feb 2026 13:54:09 +0000 Subject: [PATCH 070/104] build(deps): bump actions/upload-artifact from 6.0.0 to 7.0.0 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6.0.0 to 7.0.0. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v6.0.0...v7.0.0) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yaml | 8 ++++---- .github/workflows/ci.yaml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 0eb691e95..0020fae12 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -84,7 +84,7 @@ jobs: chmod -R u=rwX,go=rX assets-dist/ - name: Upload assets - uses: actions/upload-artifact@v6.0.0 + uses: actions/upload-artifact@v7.0.0 with: name: assets path: assets-dist @@ -143,7 +143,7 @@ jobs: -p mas-cli - name: Upload binary artifact - uses: actions/upload-artifact@v6.0.0 + uses: actions/upload-artifact@v7.0.0 with: name: binary-${{ matrix.target }} path: target/${{ matrix.target }}/release/mas-cli @@ -192,13 +192,13 @@ jobs: done - name: Upload aarch64 archive - uses: actions/upload-artifact@v6.0.0 + uses: actions/upload-artifact@v7.0.0 with: name: mas-cli-aarch64-linux path: mas-cli-aarch64-linux.tar.gz - name: Upload x86_64 archive - uses: actions/upload-artifact@v6.0.0 + uses: actions/upload-artifact@v7.0.0 with: name: mas-cli-x86_64-linux path: mas-cli-x86_64-linux.tar.gz diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ba90f2be1..e9a7dae05 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -257,7 +257,7 @@ jobs: SQLX_OFFLINE: "1" - name: Upload archive to workflow - uses: actions/upload-artifact@v6.0.0 + uses: actions/upload-artifact@v7.0.0 with: name: nextest-archive path: nextest-archive.tar.zst From 4f263ab0c772babe0c5ffe300008bb8629a67701 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 14:14:43 +0000 Subject: [PATCH 071/104] build(deps-dev): bump i18next-cli in /frontend in the i18next group Bumps the i18next group in /frontend with 1 update: [i18next-cli](https://github.com/i18next/i18next-cli). Updates `i18next-cli` from 1.44.0 to 1.47.9 - [Changelog](https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next-cli/compare/v1.44.0...v1.47.9) --- updated-dependencies: - dependency-name: i18next-cli dependency-version: 1.47.9 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: i18next ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 127 ++++++++++++++++++++----------------- frontend/package.json | 2 +- 2 files changed, 70 insertions(+), 59 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 7d631f42f..6f8c52540 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -54,7 +54,7 @@ "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", "happy-dom": "^20.5.0", - "i18next-cli": "^1.44.0", + "i18next-cli": "^1.47.9", "knip": "^5.81.0", "msw": "^2.12.8", "msw-storybook-addon": "^2.0.6", @@ -5167,9 +5167,9 @@ } }, "node_modules/@swc/core": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.11.tgz", - "integrity": "sha512-iLmLTodbYxU39HhMPaMUooPwO/zqJWvsqkrXv1ZI38rMb048p6N7qtAtTp37sw9NzSrvH6oli8EdDygo09IZ/w==", + "version": "1.15.17", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.17.tgz", + "integrity": "sha512-Mu3eOrYlkdQPl7yqotNckitTr6FZ0yd7mlWIBEzK+EGIyybgMENJHmbS2DeA7BMleJiBElP6ke+Nz93pkKmKJw==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -5185,16 +5185,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.15.11", - "@swc/core-darwin-x64": "1.15.11", - "@swc/core-linux-arm-gnueabihf": "1.15.11", - "@swc/core-linux-arm64-gnu": "1.15.11", - "@swc/core-linux-arm64-musl": "1.15.11", - "@swc/core-linux-x64-gnu": "1.15.11", - "@swc/core-linux-x64-musl": "1.15.11", - "@swc/core-win32-arm64-msvc": "1.15.11", - "@swc/core-win32-ia32-msvc": "1.15.11", - "@swc/core-win32-x64-msvc": "1.15.11" + "@swc/core-darwin-arm64": "1.15.17", + "@swc/core-darwin-x64": "1.15.17", + "@swc/core-linux-arm-gnueabihf": "1.15.17", + "@swc/core-linux-arm64-gnu": "1.15.17", + "@swc/core-linux-arm64-musl": "1.15.17", + "@swc/core-linux-x64-gnu": "1.15.17", + "@swc/core-linux-x64-musl": "1.15.17", + "@swc/core-win32-arm64-msvc": "1.15.17", + "@swc/core-win32-ia32-msvc": "1.15.17", + "@swc/core-win32-x64-msvc": "1.15.17" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" @@ -5206,9 +5206,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.11.tgz", - "integrity": "sha512-QoIupRWVH8AF1TgxYyeA5nS18dtqMuxNwchjBIwJo3RdwLEFiJq6onOx9JAxHtuPwUkIVuU2Xbp+jCJ7Vzmgtg==", + "version": "1.15.17", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.17.tgz", + "integrity": "sha512-eB9qdyt4E60323IS0rgV/rd79DJ+YWSyIKi+sT1dlIgR3ns4xlBiunREM3lVH0FKcUbhttiBvdVubT4QoOuZ+w==", "cpu": [ "arm64" ], @@ -5223,9 +5223,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.11.tgz", - "integrity": "sha512-S52Gu1QtPSfBYDiejlcfp9GlN+NjTZBRRNsz8PNwBgSE626/FUf2PcllVUix7jqkoMC+t0rS8t+2/aSWlMuQtA==", + "version": "1.15.17", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.17.tgz", + "integrity": "sha512-k1TZARYs8947jJpSioqcPrusz+wEeABF4iiSdwcSyQh2rIUdIEk5FOyaqJASFPJ6dZfx7ZVOyjtDATVAegs2/Q==", "cpu": [ "x64" ], @@ -5240,9 +5240,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.11.tgz", - "integrity": "sha512-lXJs8oXo6Z4yCpimpQ8vPeCjkgoHu5NoMvmJZ8qxDyU99KVdg6KwU9H79vzrmB+HfH+dCZ7JGMqMF//f8Cfvdg==", + "version": "1.15.17", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.17.tgz", + "integrity": "sha512-p6282NQZo5bzx0wphz1ETGjhcRB9CN+/XUAjQwApyoyX9iCloI5IT/RC3vjbflo42g8RPTxUTaItAO0hlLSesQ==", "cpu": [ "arm" ], @@ -5257,9 +5257,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.11.tgz", - "integrity": "sha512-chRsz1K52/vj8Mfq/QOugVphlKPWlMh10V99qfH41hbGvwAU6xSPd681upO4bKiOr9+mRIZZW+EfJqY42ZzRyA==", + "version": "1.15.17", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.17.tgz", + "integrity": "sha512-TGnDS4ejy8y9jqxXqZCyA+DvFc64nXUHS9rxdyeJ9B9uyIdtKVhBrA2xfghYRS/sSPSyHZ0yu89NxBICvONH+A==", "cpu": [ "arm64" ], @@ -5274,9 +5274,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.11.tgz", - "integrity": "sha512-PYftgsTaGnfDK4m6/dty9ryK1FbLk+LosDJ/RJR2nkXGc8rd+WenXIlvHjWULiBVnS1RsjHHOXmTS4nDhe0v0w==", + "version": "1.15.17", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.17.tgz", + "integrity": "sha512-D0/6Hj4CkgSTTahtlGxv9IDsLTuvQz30mkZEMDp8TqwYhCL8AomznkibwlQU8HtY4q/dqd1OGRPH+FmNb4BBEA==", "cpu": [ "arm64" ], @@ -5291,9 +5291,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.11.tgz", - "integrity": "sha512-DKtnJKIHiZdARyTKiX7zdRjiDS1KihkQWatQiCHMv+zc2sfwb4Glrodx2VLOX4rsa92NLR0Sw8WLcPEMFY1szQ==", + "version": "1.15.17", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.17.tgz", + "integrity": "sha512-1s2OFsg6DeRkWU7c+PIfIHZsFCbiZ34akXFHrg7KjpF8zIvpHZNoUUZimoWEwcB6GquXSkAO+1b5KpG5nusTeQ==", "cpu": [ "x64" ], @@ -5308,9 +5308,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.11.tgz", - "integrity": "sha512-mUjjntHj4+8WBaiDe5UwRNHuEzLjIWBTSGTw0JT9+C9/Yyuh4KQqlcEQ3ro6GkHmBGXBFpGIj/o5VMyRWfVfWw==", + "version": "1.15.17", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.17.tgz", + "integrity": "sha512-gtxGMGYtRWWmCcgx6xM2Yos43uiE/j8kZwkeL/LNGG9zM0tatd23NsfL9PnQJ45hY7QZ+dx2rM68e4ArgG4kJg==", "cpu": [ "x64" ], @@ -5325,9 +5325,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.11.tgz", - "integrity": "sha512-ZkNNG5zL49YpaFzfl6fskNOSxtcZ5uOYmWBkY4wVAvgbSAQzLRVBp+xArGWh2oXlY/WgL99zQSGTv7RI5E6nzA==", + "version": "1.15.17", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.17.tgz", + "integrity": "sha512-gxi+/Miytez/O9vJ/QiheIivA3oWZjPp9nJu3VmAfLMWUzcZORMwgaI1ygtDTLjz7CzcwlGMJz/Ab66Y5DfNpg==", "cpu": [ "arm64" ], @@ -5342,9 +5342,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.11.tgz", - "integrity": "sha512-6XnzORkZCQzvTQ6cPrU7iaT9+i145oLwnin8JrfsLG41wl26+5cNQ2XV3zcbrnFEV6esjOceom9YO1w9mGJByw==", + "version": "1.15.17", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.17.tgz", + "integrity": "sha512-KUsRqNbTp7SpNK0T9m4+i8GlngzNjwb69a3ttKA6XJ5r6Pewm+NSYji93pNkawXIivbWY2jhvceGMAyd+4hWaQ==", "cpu": [ "ia32" ], @@ -5359,9 +5359,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.11.tgz", - "integrity": "sha512-IQ2n6af7XKLL6P1gIeZACskSxK8jWtoKpJWLZmdXTDj1MGzktUy4i+FvpdtxFmJWNavRWH1VmTr6kAubRDHeKw==", + "version": "1.15.17", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.17.tgz", + "integrity": "sha512-zqtEGE0/rTKvEC5sOtpANLHeWEPjsTD4/rwpUxo6ymztcLI/Z+L9Wi9xQvIGmLTUih1gvNZcAwROqdfRP3oAWQ==", "cpu": [ "x64" ], @@ -8541,23 +8541,24 @@ } }, "node_modules/i18next-cli": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/i18next-cli/-/i18next-cli-1.44.0.tgz", - "integrity": "sha512-QQa6Z+HwaGfdW3AoudhCdOoXQzSw+ELLjDon46589wpbUP7uylzPHgEXmvrHaVD2f/llMiEDChJZ0iMdnDHF+A==", + "version": "1.47.9", + "resolved": "https://registry.npmjs.org/i18next-cli/-/i18next-cli-1.47.9.tgz", + "integrity": "sha512-ZdiV1BOufpw0SEuCkzHFSadW6Ldn0qXiEdOX1o/C4NbjNjSxSXKmXFxAQFLc1EMUyR0wAQTTFCjKYzBASlo+Ig==", "dev": true, "license": "MIT", "dependencies": { "@croct/json5-parser": "0.2.2", - "@swc/core": "1.15.11", + "@swc/core": "1.15.17", "chokidar": "5.0.0", "commander": "14.0.3", "execa": "9.6.1", "glob": "13.0.6", "i18next-resources-for-ts": "2.0.0", - "inquirer": "13.2.5", + "inquirer": "13.3.0", "jiti": "2.6.1", "jsonc-parser": "3.3.1", - "minimatch": "10.2.2", + "magic-string": "0.30.12", + "minimatch": "10.2.4", "ora": "9.3.0", "react": "^19.2.4", "react-i18next": "^16.5.4", @@ -8586,6 +8587,16 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/i18next-cli/node_modules/magic-string": { + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, "node_modules/i18next-cli/node_modules/readdirp": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", @@ -8753,15 +8764,15 @@ "license": "ISC" }, "node_modules/inquirer": { - "version": "13.2.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.2.5.tgz", - "integrity": "sha512-JHvVPgOIre0NrA9o8BGHUBh9rNuKkN1gS1ffbYgy3BuuJmJZhnFy9IHz3pcNbZm9zK6qTYvQ6LN5wl3Xcg4Jkw==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.3.0.tgz", + "integrity": "sha512-APTrZe9IhrsshL0u2PgmEMLP3CXDBjZ99xh5dR2+sryOt5R+JGL0KNuaTTT2lW54B9eNQDMutPR05UYTL7Xb1Q==", "dev": true, "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.3", - "@inquirer/core": "^11.1.4", - "@inquirer/prompts": "^8.2.1", + "@inquirer/core": "^11.1.5", + "@inquirer/prompts": "^8.3.0", "@inquirer/type": "^4.0.3", "mute-stream": "^3.0.0", "run-async": "^4.0.6", @@ -10066,9 +10077,9 @@ } }, "node_modules/minimatch": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz", - "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index 1030cc7f9..af07e2968 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -64,7 +64,7 @@ "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", "happy-dom": "^20.5.0", - "i18next-cli": "^1.44.0", + "i18next-cli": "^1.47.9", "knip": "^5.81.0", "msw": "^2.12.8", "msw-storybook-addon": "^2.0.6", From ec8f20e9f6d2948111a4c994b4f7b14c5b09890f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 14:50:46 +0000 Subject: [PATCH 072/104] build(deps-dev): bump the storybook group in /frontend with 3 updates Bumps the storybook group in /frontend with 3 updates: [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/docs), [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) and [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/core). Updates `@storybook/addon-docs` from 10.2.12 to 10.2.14 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.14/code/addons/docs) Updates `@storybook/react-vite` from 10.2.12 to 10.2.14 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.14/code/frameworks/react-vite) Updates `storybook` from 10.2.12 to 10.2.14 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.14/code/core) --- updated-dependencies: - dependency-name: "@storybook/addon-docs" dependency-version: 10.2.14 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: "@storybook/react-vite" dependency-version: 10.2.14 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: storybook dependency-version: 10.2.14 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 70 +++++++++++++++++++------------------- frontend/package.json | 4 +-- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 6f8c52540..9aa702e28 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -36,8 +36,8 @@ "@graphql-codegen/cli": "^6.1.2", "@graphql-codegen/client-preset": "^5.2.3", "@graphql-codegen/typescript-msw": "^3.0.1", - "@storybook/addon-docs": "^10.2.12", - "@storybook/react-vite": "^10.2.12", + "@storybook/addon-docs": "^10.2.14", + "@storybook/react-vite": "^10.2.14", "@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-router-devtools": "^1.150.0", "@tanstack/router-plugin": "^1.150.0", @@ -5001,16 +5001,16 @@ "license": "MIT" }, "node_modules/@storybook/addon-docs": { - "version": "10.2.12", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.12.tgz", - "integrity": "sha512-LlLQSYxISugG2mEVVV/rNMyZaF1wIvIhaq5kGKbBuAz18GOtQmvaa/o3fJjlebmvTn/AOmipNlQ4ChOXSAwmdg==", + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.14.tgz", + "integrity": "sha512-vUGw+zoodb91GIcDECZetXL8Bo0AJ/lYudcRBqtdw8taLXucss28Ev6u36dXggARYHPT8V0FhBkipzzJxssjUQ==", "dev": true, "license": "MIT", "dependencies": { "@mdx-js/react": "^3.0.0", - "@storybook/csf-plugin": "10.2.12", + "@storybook/csf-plugin": "10.2.14", "@storybook/icons": "^2.0.1", - "@storybook/react-dom-shim": "10.2.12", + "@storybook/react-dom-shim": "10.2.14", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "ts-dedent": "^2.0.0" @@ -5020,17 +5020,17 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.12" + "storybook": "^10.2.14" } }, "node_modules/@storybook/builder-vite": { - "version": "10.2.12", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.12.tgz", - "integrity": "sha512-QaOwhNpoBs4Af8xYG1NOoyOvbapcN7EpwYq53ERpMz2uU+yOeApqy4XeJ5xM7doCvkJKZqidwLMXZQeN/j/mUw==", + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.14.tgz", + "integrity": "sha512-4b/opKbbTg+npeFXzj4GwZ7SDJdqsJbcJYxFpAznpl9FqMhP+ktH/7QSDs1DtOXpCanKcrmj6UQQgKR8OGypUQ==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf-plugin": "10.2.12", + "@storybook/csf-plugin": "10.2.14", "ts-dedent": "^2.0.0" }, "funding": { @@ -5038,14 +5038,14 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.12", + "storybook": "^10.2.14", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "node_modules/@storybook/csf-plugin": { - "version": "10.2.12", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.12.tgz", - "integrity": "sha512-+6nv7oX21K+BRmMUCfeaFeS3UFgDu5/2M4YsLYzXnx/YmAP3yg0bb09falzvCKTCncHCJUWaO8GDvavj32anaA==", + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.14.tgz", + "integrity": "sha512-N4frSzhig3pkhaWdN0kAnhgEi9IGEy6rJnpuNAocS6d70fSahGQk958TMml2JCG3LLiVamuXySyUrVtFiHrxvg==", "dev": true, "license": "MIT", "dependencies": { @@ -5058,7 +5058,7 @@ "peerDependencies": { "esbuild": "*", "rollup": "*", - "storybook": "^10.2.12", + "storybook": "^10.2.14", "vite": "*", "webpack": "*" }, @@ -5096,14 +5096,14 @@ } }, "node_modules/@storybook/react": { - "version": "10.2.12", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.2.12.tgz", - "integrity": "sha512-7HV/qwEmrDK27FzVHt0/yr8Wu3UTVR9jez3p07M+l/+deIpYrlPiSWm/aoD60gN6kUKzxbeLJFJruS/OM9xnPA==", + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.2.14.tgz", + "integrity": "sha512-GzbbsfyOeGpTqLoss6yyb9m7eYO7oXSV8cey+y0gxVplOmK8XISA8q0AtH7gWzw6pDUOaBpEfnrE/jgOOKwQlw==", "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/react-dom-shim": "10.2.12", + "@storybook/react-dom-shim": "10.2.14", "react-docgen": "^8.0.2" }, "funding": { @@ -5113,7 +5113,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.12", + "storybook": "^10.2.14", "typescript": ">= 4.9.x" }, "peerDependenciesMeta": { @@ -5123,9 +5123,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "10.2.12", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.12.tgz", - "integrity": "sha512-T4uHPAgtEbroRazubGDIByopvNw1WKAp1kOlNqKWR8LZPDaVyEr8X7J6zaJo1y+vE8j6fUXvk6jZVMwhi/Jeig==", + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.14.tgz", + "integrity": "sha512-hO/Yzhf3fX/HhB5MDc/ERM5QLA1+yLgnyt0a4NGDqeWeXQ90YSjEski1RppdAI9oNGyhNwWllZPUrozrL7ECyg==", "dev": true, "license": "MIT", "funding": { @@ -5135,20 +5135,20 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.12" + "storybook": "^10.2.14" } }, "node_modules/@storybook/react-vite": { - "version": "10.2.12", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.2.12.tgz", - "integrity": "sha512-y5326n/fJBSUzBtSmVigu1W/NKAqvEQ23DEBNO3sK29TAxQyTM5oaYket9zHqPT3Eb3M1t9+TNCFUZSQ6yOTvQ==", + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.2.14.tgz", + "integrity": "sha512-qfHkDjv0ElJFqhXN/uD+fuuMBVOI7xzJbMqLi9I4TKt4645B0P6X7s83oyLgU9y9xQEi4Dr2zSJq0VtNBe+VBg==", "dev": true, "license": "MIT", "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "^0.6.4", "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "10.2.12", - "@storybook/react": "10.2.12", + "@storybook/builder-vite": "10.2.14", + "@storybook/react": "10.2.14", "empathic": "^2.0.0", "magic-string": "^0.30.0", "react-docgen": "^8.0.0", @@ -5162,7 +5162,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.12", + "storybook": "^10.2.14", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, @@ -11931,9 +11931,9 @@ } }, "node_modules/storybook": { - "version": "10.2.12", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.12.tgz", - "integrity": "sha512-eT4266OqLdRE3J/pxl2dk36Rnj9vv17Y6rNMpzxohOMjRVONyKkozUd6gaZ2C4WUcwYdIw6VE+ft4LwrJXt/4Q==", + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.14.tgz", + "integrity": "sha512-HGAgLbDAAbLOgjERsBXPpHUMxynHumYgoCRNBnAH57HfKuHL9LA3nKvKpbhFbYb/8PSG5X3hiKukki0R6Op7Aw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index af07e2968..dbd8f1d42 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -46,8 +46,8 @@ "@graphql-codegen/cli": "^6.1.2", "@graphql-codegen/client-preset": "^5.2.3", "@graphql-codegen/typescript-msw": "^3.0.1", - "@storybook/addon-docs": "^10.2.12", - "@storybook/react-vite": "^10.2.12", + "@storybook/addon-docs": "^10.2.14", + "@storybook/react-vite": "^10.2.14", "@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-router-devtools": "^1.150.0", "@tanstack/router-plugin": "^1.150.0", From 77cd205026ec10c2006d11ab98de8a941cfec37d Mon Sep 17 00:00:00 2001 From: Tonkku Date: Tue, 3 Mar 2026 17:11:22 +0200 Subject: [PATCH 073/104] Apply suggestion from @sandhose Co-authored-by: Quentin Gliech --- crates/handlers/src/views/app.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/crates/handlers/src/views/app.rs b/crates/handlers/src/views/app.rs index cc09c0d03..36c9cd4f9 100644 --- a/crates/handlers/src/views/app.rs +++ b/crates/handlers/src/views/app.rs @@ -62,11 +62,9 @@ pub async fn get( let Some(session) = maybe_session else { let mut url = mas_router::Login::and_then(PostAuthAction::manage_account(action)); - url = if let Some(login_hint) = unstable_login_hint { - url.with_login_hint(login_hint) - } else { - url - }; + if let Some(login_hint) = unstable_login_hint { + url = url.with_login_hint(login_hint); + } return Ok((cookie_jar, url_builder.redirect(&url)).into_response()); }; From 99c79c2806e250df7e4f9a8f6e0a6f7c392b5492 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 16:24:29 +0000 Subject: [PATCH 074/104] Translations updates --- frontend/.storybook/locales.ts | 33 +++ frontend/locales/pt-BR.json | 401 +++++++++++++++++++++++++++++++++ frontend/locales/sk.json | 401 +++++++++++++++++++++++++++++++++ frontend/locales/uz.json | 401 +++++++++++++++++++++++++++++++++ frontend/locales/zh-Hans.json | 8 +- translations/pt-BR.json | 102 +++++++++ translations/sk.json | 122 ++++++++++ translations/uz.json | 132 +++++++++++ translations/zh-Hans.json | 8 +- 9 files changed, 1603 insertions(+), 5 deletions(-) create mode 100644 frontend/locales/pt-BR.json create mode 100644 frontend/locales/sk.json create mode 100644 frontend/locales/uz.json create mode 100644 translations/pt-BR.json create mode 100644 translations/sk.json create mode 100644 translations/uz.json diff --git a/frontend/.storybook/locales.ts b/frontend/.storybook/locales.ts index 9a545003e..ffcc627ed 100644 --- a/frontend/.storybook/locales.ts +++ b/frontend/.storybook/locales.ts @@ -138,6 +138,15 @@ const localazyMetadata: LocalazyMetadata = { localizedName: "Português", pluralType: (n) => { return (n>=0 && n<=1) ? "one" : "other"; } }, + { + language: "pt", + region: "BR", + script: "", + isRtl: false, + name: "Brazilian Portuguese", + localizedName: "Português (Brasil)", + pluralType: (n) => { return (n>=0 && n<=1) ? "one" : "other"; } + }, { language: "ru", region: "", @@ -147,6 +156,15 @@ const localazyMetadata: LocalazyMetadata = { localizedName: "Русский", pluralType: (n) => { return ((n%10===1) && (n%100!==11)) ? "one" : ((n%10>=2 && n%10<=4) && ((n%100<12 || n%100>14))) ? "few" : "many"; } }, + { + language: "sk", + region: "", + script: "", + isRtl: false, + name: "Slovak", + localizedName: "Slovenčina", + pluralType: (n) => { return (n===1) ? "one" : (n>=2 && n<=4) ? "few" : "other"; } + }, { language: "sv", region: "", @@ -165,6 +183,15 @@ const localazyMetadata: LocalazyMetadata = { localizedName: "Українська", pluralType: (n) => { return ((n%10===1) && (n%100!==11)) ? "one" : ((n%10>=2 && n%10<=4) && ((n%100<12 || n%100>14))) ? "few" : "many"; } }, + { + language: "uz", + region: "", + script: "", + isRtl: false, + name: "Uzbek", + localizedName: "O‘zbek", + pluralType: (n) => { return (n===1) ? "one" : "other"; } + }, { language: "zh", region: "", @@ -193,9 +220,12 @@ const localazyMetadata: LocalazyMetadata = { "nl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nl/frontend.json", "pl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pl/frontend.json", "pt": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt/frontend.json", + "pt_BR": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt-BR/frontend.json", "ru": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/ru/frontend.json", + "sk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sk/frontend.json", "sv": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sv/frontend.json", "uk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uk/frontend.json", + "uz": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uz/frontend.json", "zh#Hans": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/zh-Hans/frontend.json" } }, @@ -216,9 +246,12 @@ const localazyMetadata: LocalazyMetadata = { "nl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nl/file.json", "pl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pl/file.json", "pt": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt/file.json", + "pt_BR": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt-BR/file.json", "ru": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/ru/file.json", + "sk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sk/file.json", "sv": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sv/file.json", "uk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uk/file.json", + "uz": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uz/file.json", "zh#Hans": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/zh-Hans/file.json" } } diff --git a/frontend/locales/pt-BR.json b/frontend/locales/pt-BR.json new file mode 100644 index 000000000..87f9a77ea --- /dev/null +++ b/frontend/locales/pt-BR.json @@ -0,0 +1,401 @@ +{ + "action": { + "back": "Voltar", + "cancel": "Cancelar", + "clear": "Clear", + "close": "Close", + "collapse": "Collapse", + "confirm": "Confirm", + "continue": "Continuar", + "edit": "Edit", + "expand": "Expand", + "save": "Salvar", + "save_and_continue": "Save and continue", + "sign_out": "Sair", + "start_over": "Start over" + }, + "branding": { + "privacy_policy": { + "alt": "Link to the service privacy policy", + "link": "Privacy Policy" + }, + "terms_and_conditions": { + "alt": "Link to the service terms and conditions", + "link": "Terms & Conditions" + } + }, + "common": { + "add": "Adicionar", + "e2ee": "End-to-end encryption", + "error": "Erro", + "loading": "Carregando…", + "next": "Próximo", + "password": "Senha", + "previous": "Anterior", + "saved": "Saved", + "saving": "Saving…" + }, + "frontend": { + "account": { + "account_password": "Account password", + "contact_info": "Contact info", + "delete_account": { + "alert_description": "This account will be permanently erased and you’ll no longer have access to any of your messages.", + "alert_title": "You’re about to lose all of your data", + "button": "Delete account", + "dialog_description": "Confirm that you would like to delete your account:\n\n\nYou will not be able to reactivate your account\nYou will no longer be able to sign in\nNo one will be able to reuse your username (MXID), including you\nYou will leave all rooms and direct messages you are in\nYou will be removed from the identity server, and no one will be able to find you with your email or phone number\n\nYour old messages will still be visible to people who received them. Would you like to hide your sent messages from people who join rooms in the future?", + "dialog_title": "Delete this account?", + "erase_checkbox_label": "Yes, hide all my messages from new joiners", + "incorrect_password": "Incorrect password, please try again", + "mxid_label": "Confirm your Matrix ID ({{ mxid }})", + "mxid_mismatch": "This value does not match your Matrix ID", + "password_label": "Enter your password to continue" + }, + "edit_profile": { + "display_name_help": "This is what others will see wherever you’re signed in.", + "display_name_label": "Display name", + "title": "Edit profile", + "username_label": "Nome de usuário" + }, + "password": { + "change": "Alterar a senha", + "change_disabled": "Password changes are disabled by the administrator.", + "label": "Senha" + }, + "sign_out": { + "button": "Sign out of account", + "dialog": "Sign out of this account?" + }, + "title": "Your account" + }, + "add_email_form": { + "email_denied_alert": { + "text": "O endereço de e-mail inserido não é permitido pela política do servidor.", + "title": "Email denied by policy" + }, + "email_denied_error": "The entered email is not allowed by the server policy", + "email_exists_alert": { + "text": "O endereço de e-mail inserido já foi adicionado a esta conta.", + "title": "Email already exists" + }, + "email_exists_error": "O endereço de e-mail inserido já foi adicionado a esta conta.", + "email_field_help": "Add an alternative email you can use to access this account.", + "email_field_label": "Adicionar e-mail", + "email_in_use_error": "The entered email is already in use", + "email_invalid_alert": { + "text": "O endereço de e-mail inserido é inválido.", + "title": "E-mail inválido" + }, + "email_invalid_error": "O endereço de e-mail inserido é inválido.", + "incorrect_password_error": "Incorrect password, please try again", + "password_confirmation": "Confirm your account password to add this email address" + }, + "app_sessions_list": { + "error": "Failed to load app sessions", + "heading": "Apps" + }, + "browser_session_details": { + "current_badge": "Current", + "session_details_title": "Session" + }, + "browser_sessions_overview": { + "body:one": "{{count}} active session", + "body:other": "{{count}} active sessions", + "heading": "Browsers", + "no_active_sessions": { + "default": "You are not signed in to any web browsers.", + "inactive_90_days": "All your sessions have been active in the last 90 days." + }, + "view_all_button": "View all" + }, + "compat_session_detail": { + "client_details_title": "Client info", + "name": "Nome", + "session_details_title": "Session" + }, + "device_type_icon_label": { + "desktop": "Desktop", + "mobile": "Mobile", + "pc": "Computer", + "tablet": "Tablet", + "unknown": "Unknown device type", + "web": "Web" + }, + "email_in_use": { + "heading": "The email address {{email}} is already in use." + }, + "end_session_button": { + "confirmation_modal_title": "Are you sure you want to end this session?", + "text": "Remove device" + }, + "error": { + "hideDetails": "Hide details", + "showDetails": "Show details", + "subtitle": "An unexpected error occurred. Please try again.", + "title": "Something went wrong" + }, + "error_boundary_title": "Something went wrong", + "errors": { + "field_required": "Este campo é obrigatório", + "rate_limit_exceeded": "You've made too many requests in a short period. Please wait a few minutes and try again." + }, + "last_active": { + "active_date": "Active {{relativeDate}}", + "active_now": "Active now", + "inactive_90_days": "Inactive for 90+ days" + }, + "nav": { + "devices": "Devices", + "plan": "Plan", + "profile": "Perfil", + "sessions": "Sessões", + "settings": "Settings" + }, + "not_found_alert_title": "Not found.", + "not_logged_in_alert": "You're not logged in.", + "oauth2_client_detail": { + "details_title": "Client info", + "id": "Client ID", + "name": "Nome", + "policy": "Policy", + "terms": "Terms of service" + }, + "oauth2_session_detail": { + "client_details_name": "Nome", + "client_title": "Client info", + "session_details_title": "Session" + }, + "pagination_controls": { + "total": "Total: {{totalCount}}" + }, + "password_change": { + "current_password_label": "Senha atual", + "failure": { + "description": { + "account_locked": "Your account is locked and can not be recovered at this time. If this is not expected, please contact your server administrator.", + "expired_recovery_ticket": "The recovery link has expired. Please start the account recovery process again from the start.", + "invalid_new_password": "The new password you chose is invalid; it may not meet the configured security policy.", + "no_current_password": "You don't have a current password.", + "no_such_recovery_ticket": "The recovery link is invalid. If you copied the link from the recovery e-mail, please check the full link was copied.", + "password_changes_disabled": "Password changes are disabled.", + "recovery_ticket_already_used": "The recovery link has already been used. It cannot be used again.", + "unspecified": "This might be a temporary problem, so please try again later. If the problem persists, please contact your server administrator.", + "wrong_password": "The password you supplied as your current password is incorrect. Please try again." + }, + "title": "Failed to update password" + }, + "new_password_again_label": "Enter new password again", + "new_password_label": "Nova senha", + "passwords_match": "Passwords match!", + "passwords_no_match": "Passwords don't match", + "subtitle": "Choose a new password for your account.", + "success": { + "description": "Your password has been updated successfully.", + "title": "Password updated" + }, + "title": "Change your password" + }, + "password_reset": { + "consumed": { + "subtitle": "To create a new password, start over and select ”Forgot password“.", + "title": "The link to reset your password has already been used" + }, + "expired": { + "resend_email": "Resend email", + "subtitle": "Request a new email that will be sent to: {{email}}", + "title": "The link to reset your password has expired" + }, + "subtitle": "Choose a new password for your account.", + "title": "Reset your password" + }, + "password_strength": { + "placeholder": "Password strength", + "score": { + "0": "Extremely weak password", + "1": "Very weak password", + "2": "Weak password", + "3": "Strong password", + "4": "Very strong password" + }, + "suggestion": { + "all_uppercase": "Capitalise some, but not all letters.", + "another_word": "Add more words that are less common.", + "associated_years": "Avoid years that are associated with you.", + "capitalization": "Capitalise more than the first letter.", + "dates": "Avoid dates and years that are associated with you.", + "l33t": "Avoid predictable letter substitutions like '@' for 'a'.", + "longer_keyboard_pattern": "Use longer keyboard patterns and change typing direction multiple times.", + "no_need": "You can create strong passwords without using symbols, numbers, or uppercase letters.", + "pwned": "If you use this password elsewhere, you should change it.", + "recent_years": "Avoid recent years.", + "repeated": "Avoid repeated words and characters.", + "reverse_words": "Avoid reversed spellings of common words.", + "sequences": "Avoid common character sequences.", + "use_words": "Use multiple words, but avoid common phrases." + }, + "too_weak": "This password is too weak", + "warning": { + "common": "This is a commonly used password.", + "common_names": "Common names and surnames are easy to guess.", + "dates": "Dates are easy to guess.", + "extended_repeat": "Repeated character patterns like \"abcabcabc\" are easy to guess.", + "key_pattern": "Short keyboard patterns are easy to guess.", + "names_by_themselves": "Single names or surnames are easy to guess.", + "pwned": "Your password was exposed by a data breach on the Internet.", + "recent_years": "Recent years are easy to guess.", + "sequences": "Common character sequences like \"abc\" are easy to guess.", + "similar_to_common": "This is similar to a commonly used password.", + "simple_repeat": "Repeated characters like \"aaa\" are easy to guess.", + "straight_row": "Straight rows of keys on your keyboard are easy to guess.", + "top_hundred": "This is a frequently used password.", + "top_ten": "This is a heavily used password.", + "user_inputs": "There should not be any personal or page related data.", + "word_by_itself": "Single words are easy to guess." + } + }, + "reset_cross_signing": { + "button": "Reset identity", + "cancelled": { + "description_1": "You can close this window and go back to the app to continue.", + "description_2": "If you're signed out everywhere and don't remember your recovery code, you'll still need to reset your identity.", + "heading": "Identity reset cancelled." + }, + "description": "If you're not signed in to any other devices and you've lost your recovery key, then you'll need to reset your identity to continue using the app.", + "effect_list": { + "negative_1": "You will lose your existing message history", + "negative_2": "You will need to verify all your existing devices and contacts again", + "neutral_1": "You will lose any message history that's stored only on the server", + "neutral_2": "You will need to verify all your existing devices and contacts again", + "positive_1": "Your account details, contacts, preferences, and chat list will be kept" + }, + "failure": { + "description": "This might be a temporary problem, so please try again later. If the problem persists, please contact your server administrator.", + "heading": "Failed to allow crypto identity reset", + "title": "Failed to allow crypto identity" + }, + "finish_reset": "Finish reset", + "heading": "Reset your identity in case you can't confirm another way", + "start_reset": "Start reset", + "success": { + "description": "The identity reset has been approved for the next {{minutes}} minutes. You can close this window and go back to the app to continue.", + "heading": "Identity reset successfully. Go back to the app to finish the process.", + "title": "Crypto identity reset temporarily allowed" + }, + "warning": "Only reset your identity if you don't have access to another signed-in device and you've lost your recovery key." + }, + "selectable_session": { + "label": "Select session" + }, + "session": { + "client_id_label": "Client ID", + "current": "Current", + "current_badge": "Current", + "device_id_label": "Device ID", + "finished_date": "Finished ", + "finished_label": "Finished", + "generic_browser_session": "Browser session", + "id_label": "ID", + "ip_label": "IP Address", + "last_active_label": "Last Active", + "last_auth_label": "Last Authentication", + "name_for_platform": "{{name}} for {{platform}}", + "scopes_label": "Scopes", + "set_device_name": { + "help": "Set a name that will help you identify this device.", + "label": "Device name", + "title": "Edit device name" + }, + "signed_in_date": "Signed in ", + "signed_in_label": "Signed in", + "title": "Device details", + "unknown_browser": "Unknown browser", + "unknown_device": "Unknown device", + "uri_label": "Uri", + "user_id_label": "User ID", + "username_label": "User name" + }, + "session_detail": { + "alert": { + "button": "Voltar", + "text": "This session does not exist, or is no longer active.", + "title": "Cannot find session: {{deviceId}}" + } + }, + "unknown_route": "Unknown route {{route}}", + "unverified_email_alert": { + "button": "Review and verify", + "text:one": "You have {{count}} unverified email address.", + "text:other": "You have {{count}} unverified email addresses.", + "title": "Unverified email" + }, + "user_email": { + "cant_delete_primary": "Choose a different primary email to delete this one.", + "delete_button_confirmation_modal": { + "action": "Delete email", + "body": "Delete this email?", + "incorrect_password": "Incorrect password, please try again", + "password_confirmation": "Confirm your account password to delete this email address" + }, + "delete_button_title": "Remove email address", + "email": "E-mail", + "make_primary_button": "Make primary", + "not_verified": "Not verified", + "primary_email": "Primary email", + "retry_button": "Resend code", + "unverified": "Não verificado" + }, + "user_email_list": { + "heading": "Emails", + "no_primary_email_alert": "No primary email address" + }, + "user_greeting": { + "error": "Failed to load user" + }, + "user_name": { + "display_name_field_label": "Nome e sobrenome" + }, + "user_sessions_overview": { + "active_sessions:one": "{{count}} active session", + "active_sessions:other": "{{count}} active sessions", + "heading": "Where you're signed in", + "no_active_sessions": { + "default": "You are not signed in to any application.", + "inactive_90_days": "All your sessions have been active in the last 90 days." + } + }, + "verify_email": { + "code_expired_alert": { + "description": "The code has expired. Please request a new code.", + "title": "Code expired" + }, + "code_field_error": "Code not recognised", + "code_field_label": "6-digit code", + "code_field_wrong_shape": "Code must be 6 digits", + "email_sent_alert": { + "description": "Enter the new code below.", + "title": "New code sent" + }, + "enter_code_prompt": "Enter the 6-digit code sent to: {{email}}", + "heading": "Verifique seu e-mail", + "invalid_code_alert": { + "description": "Check the code sent to your email and update the fields below to continue.", + "title": "You entered the wrong code" + }, + "resend_code": "Resend code", + "resend_email": "Resend email", + "sent": "Sent!", + "unknown_email": "Unknown email" + } + }, + "mas": { + "scope": { + "edit_profile": "Edite seu perfil e seus dados de contato.", + "manage_sessions": "Gerencie seus dispositivos e sessões", + "mas_admin": "Manage users (urn:mas:admin)", + "send_messages": "Send new messages on your behalf", + "synapse_admin": "Administer the server (urn:synapse:admin:*)", + "view_messages": "View your existing messages and data", + "view_profile": "Veja as informações do seu perfil e os seus dados de contato." + } + } +} \ No newline at end of file diff --git a/frontend/locales/sk.json b/frontend/locales/sk.json new file mode 100644 index 000000000..12c112421 --- /dev/null +++ b/frontend/locales/sk.json @@ -0,0 +1,401 @@ +{ + "action": { + "back": "Naspäť", + "cancel": "Zrušiť", + "clear": "Clear", + "close": "Close", + "collapse": "Collapse", + "confirm": "Confirm", + "continue": "Pokračovať", + "edit": "Edit", + "expand": "Expand", + "save": "Uložiť", + "save_and_continue": "Save and continue", + "sign_out": "Odhlásiť sa", + "start_over": "Start over" + }, + "branding": { + "privacy_policy": { + "alt": "Link to the service privacy policy", + "link": "Privacy Policy" + }, + "terms_and_conditions": { + "alt": "Link to the service terms and conditions", + "link": "Terms & Conditions" + } + }, + "common": { + "add": "Pridať", + "e2ee": "End-to-end encryption", + "error": "Chyba", + "loading": "Načítavanie…", + "next": "Ďalej", + "password": "Heslo", + "previous": "Previous", + "saved": "Saved", + "saving": "Saving…" + }, + "frontend": { + "account": { + "account_password": "Account password", + "contact_info": "Contact info", + "delete_account": { + "alert_description": "This account will be permanently erased and you’ll no longer have access to any of your messages.", + "alert_title": "You’re about to lose all of your data", + "button": "Delete account", + "dialog_description": "Confirm that you would like to delete your account:\n\n\nYou will not be able to reactivate your account\nYou will no longer be able to sign in\nNo one will be able to reuse your username (MXID), including you\nYou will leave all rooms and direct messages you are in\nYou will be removed from the identity server, and no one will be able to find you with your email or phone number\n\nYour old messages will still be visible to people who received them. Would you like to hide your sent messages from people who join rooms in the future?", + "dialog_title": "Delete this account?", + "erase_checkbox_label": "Yes, hide all my messages from new joiners", + "incorrect_password": "Incorrect password, please try again", + "mxid_label": "Confirm your Matrix ID ({{ mxid }})", + "mxid_mismatch": "This value does not match your Matrix ID", + "password_label": "Enter your password to continue" + }, + "edit_profile": { + "display_name_help": "This is what others will see wherever you’re signed in.", + "display_name_label": "Display name", + "title": "Edit profile", + "username_label": "Meno používateľa" + }, + "password": { + "change": "Zmeniť heslo", + "change_disabled": "Password changes are disabled by the administrator.", + "label": "Heslo" + }, + "sign_out": { + "button": "Sign out of account", + "dialog": "Sign out of this account?" + }, + "title": "Your account" + }, + "add_email_form": { + "email_denied_alert": { + "text": "The entered email is not allowed by the server policy.", + "title": "Email denied by policy" + }, + "email_denied_error": "The entered email is not allowed by the server policy", + "email_exists_alert": { + "text": "The entered email is already added to this account", + "title": "Email already exists" + }, + "email_exists_error": "The entered email is already added to this account", + "email_field_help": "Add an alternative email you can use to access this account.", + "email_field_label": "Add email", + "email_in_use_error": "The entered email is already in use", + "email_invalid_alert": { + "text": "The entered email is invalid", + "title": "Invalid email" + }, + "email_invalid_error": "The entered email is invalid", + "incorrect_password_error": "Incorrect password, please try again", + "password_confirmation": "Confirm your account password to add this email address" + }, + "app_sessions_list": { + "error": "Failed to load app sessions", + "heading": "Apps" + }, + "browser_session_details": { + "current_badge": "Current", + "session_details_title": "Session" + }, + "browser_sessions_overview": { + "body:one": "{{count}} active session", + "body:other": "{{count}} active sessions", + "heading": "Browsers", + "no_active_sessions": { + "default": "You are not signed in to any web browsers.", + "inactive_90_days": "All your sessions have been active in the last 90 days." + }, + "view_all_button": "Zobraziť všetky" + }, + "compat_session_detail": { + "client_details_title": "Client info", + "name": "Názov", + "session_details_title": "Session" + }, + "device_type_icon_label": { + "desktop": "Desktop", + "mobile": "Mobile", + "pc": "Computer", + "tablet": "Tablet", + "unknown": "Unknown device type", + "web": "Web" + }, + "email_in_use": { + "heading": "The email address {{email}} is already in use." + }, + "end_session_button": { + "confirmation_modal_title": "Are you sure you want to end this session?", + "text": "Remove device" + }, + "error": { + "hideDetails": "Skryť podrobnosti", + "showDetails": "Zobraziť podrobnosti", + "subtitle": "An unexpected error occurred. Please try again.", + "title": "Something went wrong" + }, + "error_boundary_title": "Something went wrong", + "errors": { + "field_required": "Toto pole je povinné", + "rate_limit_exceeded": "You've made too many requests in a short period. Please wait a few minutes and try again." + }, + "last_active": { + "active_date": "Active {{relativeDate}}", + "active_now": "Active now", + "inactive_90_days": "Inactive for 90+ days" + }, + "nav": { + "devices": "Devices", + "plan": "Plan", + "profile": "Profil", + "sessions": "Relácie", + "settings": "Settings" + }, + "not_found_alert_title": "Not found.", + "not_logged_in_alert": "You're not logged in.", + "oauth2_client_detail": { + "details_title": "Client info", + "id": "Client ID", + "name": "Názov", + "policy": "Policy", + "terms": "Terms of service" + }, + "oauth2_session_detail": { + "client_details_name": "Názov", + "client_title": "Client info", + "session_details_title": "Session" + }, + "pagination_controls": { + "total": "Total: {{totalCount}}" + }, + "password_change": { + "current_password_label": "Súčasné heslo", + "failure": { + "description": { + "account_locked": "Your account is locked and can not be recovered at this time. If this is not expected, please contact your server administrator.", + "expired_recovery_ticket": "The recovery link has expired. Please start the account recovery process again from the start.", + "invalid_new_password": "The new password you chose is invalid; it may not meet the configured security policy.", + "no_current_password": "You don't have a current password.", + "no_such_recovery_ticket": "The recovery link is invalid. If you copied the link from the recovery e-mail, please check the full link was copied.", + "password_changes_disabled": "Password changes are disabled.", + "recovery_ticket_already_used": "The recovery link has already been used. It cannot be used again.", + "unspecified": "This might be a temporary problem, so please try again later. If the problem persists, please contact your server administrator.", + "wrong_password": "The password you supplied as your current password is incorrect. Please try again." + }, + "title": "Failed to update password" + }, + "new_password_again_label": "Enter new password again", + "new_password_label": "Nové heslo", + "passwords_match": "Passwords match!", + "passwords_no_match": "Passwords don't match", + "subtitle": "Choose a new password for your account.", + "success": { + "description": "Your password has been updated successfully.", + "title": "Password updated" + }, + "title": "Change your password" + }, + "password_reset": { + "consumed": { + "subtitle": "To create a new password, start over and select ”Forgot password“.", + "title": "The link to reset your password has already been used" + }, + "expired": { + "resend_email": "Resend email", + "subtitle": "Request a new email that will be sent to: {{email}}", + "title": "The link to reset your password has expired" + }, + "subtitle": "Choose a new password for your account.", + "title": "Reset your password" + }, + "password_strength": { + "placeholder": "Password strength", + "score": { + "0": "Extremely weak password", + "1": "Very weak password", + "2": "Weak password", + "3": "Strong password", + "4": "Very strong password" + }, + "suggestion": { + "all_uppercase": "Capitalise some, but not all letters.", + "another_word": "Add more words that are less common.", + "associated_years": "Avoid years that are associated with you.", + "capitalization": "Capitalise more than the first letter.", + "dates": "Avoid dates and years that are associated with you.", + "l33t": "Avoid predictable letter substitutions like '@' for 'a'.", + "longer_keyboard_pattern": "Use longer keyboard patterns and change typing direction multiple times.", + "no_need": "You can create strong passwords without using symbols, numbers, or uppercase letters.", + "pwned": "If you use this password elsewhere, you should change it.", + "recent_years": "Avoid recent years.", + "repeated": "Avoid repeated words and characters.", + "reverse_words": "Avoid reversed spellings of common words.", + "sequences": "Avoid common character sequences.", + "use_words": "Use multiple words, but avoid common phrases." + }, + "too_weak": "This password is too weak", + "warning": { + "common": "This is a commonly used password.", + "common_names": "Common names and surnames are easy to guess.", + "dates": "Dates are easy to guess.", + "extended_repeat": "Repeated character patterns like \"abcabcabc\" are easy to guess.", + "key_pattern": "Short keyboard patterns are easy to guess.", + "names_by_themselves": "Single names or surnames are easy to guess.", + "pwned": "Your password was exposed by a data breach on the Internet.", + "recent_years": "Recent years are easy to guess.", + "sequences": "Common character sequences like \"abc\" are easy to guess.", + "similar_to_common": "This is similar to a commonly used password.", + "simple_repeat": "Repeated characters like \"aaa\" are easy to guess.", + "straight_row": "Straight rows of keys on your keyboard are easy to guess.", + "top_hundred": "This is a frequently used password.", + "top_ten": "This is a heavily used password.", + "user_inputs": "There should not be any personal or page related data.", + "word_by_itself": "Single words are easy to guess." + } + }, + "reset_cross_signing": { + "button": "Reset identity", + "cancelled": { + "description_1": "You can close this window and go back to the app to continue.", + "description_2": "If you're signed out everywhere and don't remember your recovery code, you'll still need to reset your identity.", + "heading": "Identity reset cancelled." + }, + "description": "If you're not signed in to any other devices and you've lost your recovery key, then you'll need to reset your identity to continue using the app.", + "effect_list": { + "negative_1": "You will lose your existing message history", + "negative_2": "You will need to verify all your existing devices and contacts again", + "neutral_1": "You will lose any message history that's stored only on the server", + "neutral_2": "You will need to verify all your existing devices and contacts again", + "positive_1": "Your account details, contacts, preferences, and chat list will be kept" + }, + "failure": { + "description": "This might be a temporary problem, so please try again later. If the problem persists, please contact your server administrator.", + "heading": "Failed to allow crypto identity reset", + "title": "Failed to allow crypto identity" + }, + "finish_reset": "Finish reset", + "heading": "Reset your identity in case you can't confirm another way", + "start_reset": "Start reset", + "success": { + "description": "The identity reset has been approved for the next {{minutes}} minutes. You can close this window and go back to the app to continue.", + "heading": "Identity reset successfully. Go back to the app to finish the process.", + "title": "Crypto identity reset temporarily allowed" + }, + "warning": "Only reset your identity if you don't have access to another signed-in device and you've lost your recovery key." + }, + "selectable_session": { + "label": "Select session" + }, + "session": { + "client_id_label": "Client ID", + "current": "Current", + "current_badge": "Current", + "device_id_label": "Device ID", + "finished_date": "Finished ", + "finished_label": "Finished", + "generic_browser_session": "Browser session", + "id_label": "ID", + "ip_label": "IP Address", + "last_active_label": "Last Active", + "last_auth_label": "Last Authentication", + "name_for_platform": "{{name}} for {{platform}}", + "scopes_label": "Scopes", + "set_device_name": { + "help": "Set a name that will help you identify this device.", + "label": "Device name", + "title": "Edit device name" + }, + "signed_in_date": "Signed in ", + "signed_in_label": "Signed in", + "title": "Device details", + "unknown_browser": "Unknown browser", + "unknown_device": "Unknown device", + "uri_label": "Uri", + "user_id_label": "User ID", + "username_label": "User name" + }, + "session_detail": { + "alert": { + "button": "Naspäť", + "text": "This session does not exist, or is no longer active.", + "title": "Cannot find session: {{deviceId}}" + } + }, + "unknown_route": "Unknown route {{route}}", + "unverified_email_alert": { + "button": "Review and verify", + "text:one": "You have {{count}} unverified email address.", + "text:other": "You have {{count}} unverified email addresses.", + "title": "Unverified email" + }, + "user_email": { + "cant_delete_primary": "Choose a different primary email to delete this one.", + "delete_button_confirmation_modal": { + "action": "Delete email", + "body": "Delete this email?", + "incorrect_password": "Incorrect password, please try again", + "password_confirmation": "Confirm your account password to delete this email address" + }, + "delete_button_title": "Remove email address", + "email": "Email", + "make_primary_button": "Make primary", + "not_verified": "Not verified", + "primary_email": "Primary email", + "retry_button": "Resend code", + "unverified": "Neoverené" + }, + "user_email_list": { + "heading": "Emails", + "no_primary_email_alert": "No primary email address" + }, + "user_greeting": { + "error": "Failed to load user" + }, + "user_name": { + "display_name_field_label": "Zobrazované meno" + }, + "user_sessions_overview": { + "active_sessions:one": "{{count}} active session", + "active_sessions:other": "{{count}} active sessions", + "heading": "Where you're signed in", + "no_active_sessions": { + "default": "You are not signed in to any application.", + "inactive_90_days": "All your sessions have been active in the last 90 days." + } + }, + "verify_email": { + "code_expired_alert": { + "description": "The code has expired. Please request a new code.", + "title": "Code expired" + }, + "code_field_error": "Code not recognised", + "code_field_label": "6-digit code", + "code_field_wrong_shape": "Code must be 6 digits", + "email_sent_alert": { + "description": "Enter the new code below.", + "title": "New code sent" + }, + "enter_code_prompt": "Enter the 6-digit code sent to: {{email}}", + "heading": "Overte svoj e-mail", + "invalid_code_alert": { + "description": "Check the code sent to your email and update the fields below to continue.", + "title": "You entered the wrong code" + }, + "resend_code": "Resend code", + "resend_email": "Resend email", + "sent": "Sent!", + "unknown_email": "Unknown email" + } + }, + "mas": { + "scope": { + "edit_profile": "Upravte si profil a kontaktné údaje", + "manage_sessions": "Spravujte svoje zariadenia a prihlásenia.", + "mas_admin": "Spravovať ľubovoľného používateľa v matrix-authentication-service", + "send_messages": "Odosielať nové správy vo vašom mene", + "synapse_admin": "Spravovať domovský server", + "view_messages": "Zobraziť existujúce správy a údaje", + "view_profile": "Zobraziť informácie o vašom profile a kontaktné údaje" + } + } +} \ No newline at end of file diff --git a/frontend/locales/uz.json b/frontend/locales/uz.json new file mode 100644 index 000000000..d66d54f2f --- /dev/null +++ b/frontend/locales/uz.json @@ -0,0 +1,401 @@ +{ + "action": { + "back": "Back", + "cancel": "Bekor qilish", + "clear": "Clear", + "close": "Close", + "collapse": "Collapse", + "confirm": "Confirm", + "continue": "Davom etish", + "edit": "Edit", + "expand": "Expand", + "save": "Saqlash", + "save_and_continue": "Save and continue", + "sign_out": "Chiqish", + "start_over": "Start over" + }, + "branding": { + "privacy_policy": { + "alt": "Link to the service privacy policy", + "link": "Privacy Policy" + }, + "terms_and_conditions": { + "alt": "Link to the service terms and conditions", + "link": "Terms & Conditions" + } + }, + "common": { + "add": "Qo‘shish", + "e2ee": "End-to-end encryption", + "error": "Xatolik", + "loading": "Yuklanmoqda…", + "next": "Keyingisi", + "password": "Parol", + "previous": "Oldingi", + "saved": "Saved", + "saving": "Saving…" + }, + "frontend": { + "account": { + "account_password": "Account password", + "contact_info": "Contact info", + "delete_account": { + "alert_description": "This account will be permanently erased and you’ll no longer have access to any of your messages.", + "alert_title": "You’re about to lose all of your data", + "button": "Delete account", + "dialog_description": "Confirm that you would like to delete your account:\n\n\nYou will not be able to reactivate your account\nYou will no longer be able to sign in\nNo one will be able to reuse your username (MXID), including you\nYou will leave all rooms and direct messages you are in\nYou will be removed from the identity server, and no one will be able to find you with your email or phone number\n\nYour old messages will still be visible to people who received them. Would you like to hide your sent messages from people who join rooms in the future?", + "dialog_title": "Delete this account?", + "erase_checkbox_label": "Yes, hide all my messages from new joiners", + "incorrect_password": "Incorrect password, please try again", + "mxid_label": "Confirm your Matrix ID ({{ mxid }})", + "mxid_mismatch": "This value does not match your Matrix ID", + "password_label": "Enter your password to continue" + }, + "edit_profile": { + "display_name_help": "This is what others will see wherever you’re signed in.", + "display_name_label": "Display name", + "title": "Edit profile", + "username_label": "Foydalanuvchi nomi" + }, + "password": { + "change": "Parolni o‘zgartirish", + "change_disabled": "Password changes are disabled by the administrator.", + "label": "Parol" + }, + "sign_out": { + "button": "Sign out of account", + "dialog": "Sign out of this account?" + }, + "title": "Your account" + }, + "add_email_form": { + "email_denied_alert": { + "text": "Kiritilgan elektron pochta manzili server siyosati tomonidan ruxsat etilmagan.", + "title": "Elektron pochta siyosat tomonidan rad etildi" + }, + "email_denied_error": "The entered email is not allowed by the server policy", + "email_exists_alert": { + "text": "Kiritilgan elektron pochta manzili ushbu hisobga allaqachon qo‘shilgan.", + "title": "Elektron pochta allaqachon mavjud" + }, + "email_exists_error": "Kiritilgan elektron pochta manzili ushbu hisobga allaqachon qo‘shilgan.", + "email_field_help": "Add an alternative email you can use to access this account.", + "email_field_label": "Email manzilini kiritish", + "email_in_use_error": "The entered email is already in use", + "email_invalid_alert": { + "text": "Kiritilgan elektron pochta manzili notogʻri", + "title": "Xato elektron pochta manzili" + }, + "email_invalid_error": "Kiritilgan elektron pochta manzili notogʻri", + "incorrect_password_error": "Incorrect password, please try again", + "password_confirmation": "Confirm your account password to add this email address" + }, + "app_sessions_list": { + "error": "Ilova seanslari yuklanmadi", + "heading": "Ilovalar" + }, + "browser_session_details": { + "current_badge": "Current", + "session_details_title": "Seans" + }, + "browser_sessions_overview": { + "body:one": "{{count}} ta faol seans", + "body:other": "{{count}} ta faol seans", + "heading": "Brauzerlar", + "no_active_sessions": { + "default": "You are not signed in to any web browsers.", + "inactive_90_days": "All your sessions have been active in the last 90 days." + }, + "view_all_button": "Hammasini ko‘rish" + }, + "compat_session_detail": { + "client_details_title": "Mijoz haqidagi axborot", + "name": "Ism", + "session_details_title": "Seans" + }, + "device_type_icon_label": { + "desktop": "Ish stoli", + "mobile": "Mobil", + "pc": "Computer", + "tablet": "Tablet", + "unknown": "Noma’lum qurilma turi", + "web": "Veb" + }, + "email_in_use": { + "heading": "The email address {{email}} is already in use." + }, + "end_session_button": { + "confirmation_modal_title": "Haqiqatan ham bu seansni tugatmoqchimisiz?", + "text": "Qurilmani olib tashlash" + }, + "error": { + "hideDetails": "Hide details", + "showDetails": "Show details", + "subtitle": "An unexpected error occurred. Please try again.", + "title": "Something went wrong" + }, + "error_boundary_title": "Something went wrong", + "errors": { + "field_required": "Ushbu qator toʻldirilishi shart", + "rate_limit_exceeded": "You've made too many requests in a short period. Please wait a few minutes and try again." + }, + "last_active": { + "active_date": "Faol {{relativeDate}}", + "active_now": "Hozir faol", + "inactive_90_days": "90+ kun davomida faol emas" + }, + "nav": { + "devices": "Devices", + "plan": "Plan", + "profile": "Profil", + "sessions": "Seanslar", + "settings": "Settings" + }, + "not_found_alert_title": "Topilmadi.", + "not_logged_in_alert": "Hisobingizga kirmagansiz.", + "oauth2_client_detail": { + "details_title": "Mijoz haqidagi axborot", + "id": "Mijoz ID raqami", + "name": "Ism", + "policy": "Siyosat", + "terms": "Xizmat shartlari" + }, + "oauth2_session_detail": { + "client_details_name": "Ism", + "client_title": "Mijoz haqidagi axborot", + "session_details_title": "Seans" + }, + "pagination_controls": { + "total": "Jami: {{totalCount}}" + }, + "password_change": { + "current_password_label": "Joriy parol", + "failure": { + "description": { + "account_locked": "Your account is locked and can not be recovered at this time. If this is not expected, please contact your server administrator.", + "expired_recovery_ticket": "The recovery link has expired. Please start the account recovery process again from the start.", + "invalid_new_password": "The new password you chose is invalid; it may not meet the configured security policy.", + "no_current_password": "You don't have a current password.", + "no_such_recovery_ticket": "The recovery link is invalid. If you copied the link from the recovery e-mail, please check the full link was copied.", + "password_changes_disabled": "Password changes are disabled.", + "recovery_ticket_already_used": "The recovery link has already been used. It cannot be used again.", + "unspecified": "This might be a temporary problem, so please try again later. If the problem persists, please contact your server administrator.", + "wrong_password": "The password you supplied as your current password is incorrect. Please try again." + }, + "title": "Failed to update password" + }, + "new_password_again_label": "Enter new password again", + "new_password_label": "Yangi parol", + "passwords_match": "Passwords match!", + "passwords_no_match": "Passwords don't match", + "subtitle": "Choose a new password for your account.", + "success": { + "description": "Your password has been updated successfully.", + "title": "Password updated" + }, + "title": "Change your password" + }, + "password_reset": { + "consumed": { + "subtitle": "To create a new password, start over and select ”Forgot password“.", + "title": "The link to reset your password has already been used" + }, + "expired": { + "resend_email": "Resend email", + "subtitle": "Request a new email that will be sent to: {{email}}", + "title": "The link to reset your password has expired" + }, + "subtitle": "Choose a new password for your account.", + "title": "Reset your password" + }, + "password_strength": { + "placeholder": "Password strength", + "score": { + "0": "Extremely weak password", + "1": "Very weak password", + "2": "Weak password", + "3": "Strong password", + "4": "Very strong password" + }, + "suggestion": { + "all_uppercase": "Capitalise some, but not all letters.", + "another_word": "Add more words that are less common.", + "associated_years": "Avoid years that are associated with you.", + "capitalization": "Capitalise more than the first letter.", + "dates": "Avoid dates and years that are associated with you.", + "l33t": "Avoid predictable letter substitutions like '@' for 'a'.", + "longer_keyboard_pattern": "Use longer keyboard patterns and change typing direction multiple times.", + "no_need": "You can create strong passwords without using symbols, numbers, or uppercase letters.", + "pwned": "If you use this password elsewhere, you should change it.", + "recent_years": "Avoid recent years.", + "repeated": "Avoid repeated words and characters.", + "reverse_words": "Avoid reversed spellings of common words.", + "sequences": "Avoid common character sequences.", + "use_words": "Use multiple words, but avoid common phrases." + }, + "too_weak": "This password is too weak", + "warning": { + "common": "This is a commonly used password.", + "common_names": "Common names and surnames are easy to guess.", + "dates": "Dates are easy to guess.", + "extended_repeat": "Repeated character patterns like \"abcabcabc\" are easy to guess.", + "key_pattern": "Short keyboard patterns are easy to guess.", + "names_by_themselves": "Single names or surnames are easy to guess.", + "pwned": "Your password was exposed by a data breach on the Internet.", + "recent_years": "Recent years are easy to guess.", + "sequences": "Common character sequences like \"abc\" are easy to guess.", + "similar_to_common": "This is similar to a commonly used password.", + "simple_repeat": "Repeated characters like \"aaa\" are easy to guess.", + "straight_row": "Straight rows of keys on your keyboard are easy to guess.", + "top_hundred": "This is a frequently used password.", + "top_ten": "This is a heavily used password.", + "user_inputs": "There should not be any personal or page related data.", + "word_by_itself": "Single words are easy to guess." + } + }, + "reset_cross_signing": { + "button": "Reset identity", + "cancelled": { + "description_1": "You can close this window and go back to the app to continue.", + "description_2": "If you're signed out everywhere and don't remember your recovery code, you'll still need to reset your identity.", + "heading": "Identity reset cancelled." + }, + "description": "If you're not signed in to any other devices and you've lost your recovery key, then you'll need to reset your identity to continue using the app.", + "effect_list": { + "negative_1": "You will lose your existing message history", + "negative_2": "You will need to verify all your existing devices and contacts again", + "neutral_1": "You will lose any message history that's stored only on the server", + "neutral_2": "You will need to verify all your existing devices and contacts again", + "positive_1": "Your account details, contacts, preferences, and chat list will be kept" + }, + "failure": { + "description": "This might be a temporary problem, so please try again later. If the problem persists, please contact your server administrator.", + "heading": "Failed to allow crypto identity reset", + "title": "Failed to allow crypto identity" + }, + "finish_reset": "Finish reset", + "heading": "Reset your identity in case you can't confirm another way", + "start_reset": "Start reset", + "success": { + "description": "The identity reset has been approved for the next {{minutes}} minutes. You can close this window and go back to the app to continue.", + "heading": "Identity reset successfully. Go back to the app to finish the process.", + "title": "Crypto identity reset temporarily allowed" + }, + "warning": "Only reset your identity if you don't have access to another signed-in device and you've lost your recovery key." + }, + "selectable_session": { + "label": "Sessiyani tanlang" + }, + "session": { + "client_id_label": "Mijoz ID raqami", + "current": "Current", + "current_badge": "Current", + "device_id_label": "Device ID", + "finished_date": "Tugadi ", + "finished_label": "Finished", + "generic_browser_session": "Browser session", + "id_label": "ID", + "ip_label": "IP Address", + "last_active_label": "Last Active", + "last_auth_label": "Last Authentication", + "name_for_platform": "{{name}} for {{platform}}", + "scopes_label": "Scopes", + "set_device_name": { + "help": "Set a name that will help you identify this device.", + "label": "Device name", + "title": "Edit device name" + }, + "signed_in_date": " kirildi", + "signed_in_label": "Signed in", + "title": "Device details", + "unknown_browser": "Unknown browser", + "unknown_device": "Unknown device", + "uri_label": "Uri", + "user_id_label": "User ID", + "username_label": "User name" + }, + "session_detail": { + "alert": { + "button": "Ortga qaytish", + "text": "Bu sessiya mavjud emas yoki endi faol emas.", + "title": "Sessiya topilmadi:{{deviceId}}" + } + }, + "unknown_route": "Nomaʼlum yoʻnalish {{route}}", + "unverified_email_alert": { + "button": "Koʻrib chiqing va tasdiqlang", + "text:one": "You have {{count}} unverified email address.", + "text:other": "You have {{count}} unverified email addresses.", + "title": "Tasdiqlanmagan elektron pochta" + }, + "user_email": { + "cant_delete_primary": "Choose a different primary email to delete this one.", + "delete_button_confirmation_modal": { + "action": "Delete email", + "body": "Delete this email?", + "incorrect_password": "Incorrect password, please try again", + "password_confirmation": "Confirm your account password to delete this email address" + }, + "delete_button_title": "Remove email address", + "email": "Email", + "make_primary_button": "Make primary", + "not_verified": "Not verified", + "primary_email": "Primary email", + "retry_button": "Resend code", + "unverified": "Unverified" + }, + "user_email_list": { + "heading": "Emails", + "no_primary_email_alert": "No primary email address" + }, + "user_greeting": { + "error": "Failed to load user" + }, + "user_name": { + "display_name_field_label": "Display Name" + }, + "user_sessions_overview": { + "active_sessions:one": "{{count}} ta faol seans", + "active_sessions:other": "{{count}} ta faol seans", + "heading": "Where you're signed in", + "no_active_sessions": { + "default": "You are not signed in to any application.", + "inactive_90_days": "All your sessions have been active in the last 90 days." + } + }, + "verify_email": { + "code_expired_alert": { + "description": "The code has expired. Please request a new code.", + "title": "Code expired" + }, + "code_field_error": "Code not recognised", + "code_field_label": "6-digit code", + "code_field_wrong_shape": "Code must be 6 digits", + "email_sent_alert": { + "description": "Enter the new code below.", + "title": "New code sent" + }, + "enter_code_prompt": "Enter the 6-digit code sent to: {{email}}", + "heading": "Elektron pochtangizni tasdiqlang", + "invalid_code_alert": { + "description": "Check the code sent to your email and update the fields below to continue.", + "title": "You entered the wrong code" + }, + "resend_code": "Resend code", + "resend_email": "Resend email", + "sent": "Sent!", + "unknown_email": "Unknown email" + } + }, + "mas": { + "scope": { + "edit_profile": "Profilingiz va aloqa maʼlumotlaringizni tahrirlang", + "manage_sessions": "Qurilmalaringiz va sessiyalaringizni boshqaring", + "mas_admin": "Foydalanuvchilarni boshqarish (urn:mas:admin)", + "send_messages": "Sizning nomingizdan yangi xabarlar yuborish", + "synapse_admin": "Serverni boshqarish (urn:synapse:admin:*)", + "view_messages": "Mavjud xabar va ma’lumotlaringizni ko‘rish", + "view_profile": "Profilingiz ma’lumotlari va kontakt tafsilotlarini ko‘rish" + } + } +} \ No newline at end of file diff --git a/frontend/locales/zh-Hans.json b/frontend/locales/zh-Hans.json index ec5b8534f..9335c994e 100644 --- a/frontend/locales/zh-Hans.json +++ b/frontend/locales/zh-Hans.json @@ -99,7 +99,7 @@ "session_details_title": "会话" }, "browser_sessions_overview": { - "body:other": "{{count}}活跃会话", + "body:other": "{{count}} 个活跃会话", "heading": "浏览器", "no_active_sessions": { "default": "你尚未登录任何 Web 浏览器。", @@ -145,7 +145,7 @@ }, "nav": { "devices": "设备", - "plan": "Plan", + "plan": "配额", "profile": "个人资料", "sessions": "会话", "settings": "设置" @@ -353,7 +353,7 @@ "display_name_field_label": "显示名称" }, "user_sessions_overview": { - "active_sessions:other": "{{count}}活跃会话", + "active_sessions:other": "{{count}} 个活跃会话", "heading": "你已登录的位置", "no_active_sessions": { "default": "你尚未登录任何 app。", @@ -373,7 +373,7 @@ "title": "新代码已发送" }, "enter_code_prompt": "输入发送至以下地址的6位数代码:{{email}}", - "heading": "验证邮箱", + "heading": "验证邮件地址", "invalid_code_alert": { "description": "检查发送到你的邮件地址中的代码,并更新以下字段以继续。", "title": "你输入的代码错误" diff --git a/translations/pt-BR.json b/translations/pt-BR.json new file mode 100644 index 000000000..8d7b67480 --- /dev/null +++ b/translations/pt-BR.json @@ -0,0 +1,102 @@ +{ + "action": { + "back": "Voltar", + "cancel": "Cancelar", + "continue": "Continuar", + "create_account": "Criar Conta", + "sign_out": "Sair", + "submit": "Enviar" + }, + "common": { + "display_name": "Nome e sobrenome", + "email_address": "Endereço de e-mail", + "loading": "Carregando…", + "password": "Senha", + "password_confirm": "Confirme a nova senha", + "username": "Nome de usuário" + }, + "error": { + "unexpected": "Erro inesperado" + }, + "mas": { + "back_to_homepage": "Voltar à página inicial", + "change_password": { + "change": "Alterar a senha", + "confirm": "Confirme a nova senha", + "current": "Senha atual", + "heading": "Alterar minha senha", + "new": "Nova senha" + }, + "emails": { + "greeting": "Olá, %(username)s,", + "verify": { + "body_html": "Seu código de verificação para este endereço de e-mail é: %(code)s", + "body_text": "Seu código de verificação para este endereço de e-mail é: %(code)s", + "subject": "Seu código de verificação de e-mail é: %(code)s" + } + }, + "errors": { + "denied_policy": "Negado de acordo com a norma: %(policy)s", + "field_required": "Este campo é obrigatório", + "invalid_credentials": "Credenciais inválidas", + "password_mismatch": "As senhas digitadas não são iguais", + "username_taken": "Este nome de usuário já está em uso" + }, + "login": { + "call_to_register": "Ainda não tem uma conta?", + "continue_with_provider": "Continuar com %(provider)s", + "description": "Faça login para continuar:", + "no_login_methods": "Não há métodos de login disponíveis.", + "separator": "Ou" + }, + "navbar": { + "my_account": "Minha conta", + "register": "Criar uma conta", + "signed_in_as": "Entrou como %(username)s." + }, + "not_found": { + "description": "A página que você estava procurando não existe ou foi removida.", + "heading": "Página não encontrada" + }, + "not_you": "Não é %(username)s?", + "or_separator": "Ou", + "recovery": { + "finish": { + "new": "Nova senha" + } + }, + "register": { + "call_to_login": "Já tem uma conta?", + "create_account": { + "description": "Escolha um nome de usuário para continuar.", + "heading": "Criar uma conta" + }, + "sign_in_instead": "Em vez disso, faça login" + }, + "scope": { + "edit_profile": "Edite seu perfil e seus dados de contato.", + "manage_sessions": "Gerencie seus dispositivos e sessões", + "view_profile": "Veja as informações do seu perfil e os seus dados de contato." + }, + "upstream_oauth2": { + "login_link": { + "action": "Continuar" + }, + "register": { + "choose_username": { + "heading": "Escolha seu nome de usuário" + }, + "create_account": "Criar uma nova conta", + "suggested_display_name": "Importar nome de exibição", + "suggested_email": "Importar endereço de e-mail" + }, + "suggest_link": { + "action": "Ligação" + } + }, + "verify_email": { + "description": "Digite o código de 6 dígitos enviado para %(email)s", + "headline": "Verifique seu e-mail" + } + } +} \ No newline at end of file diff --git a/translations/sk.json b/translations/sk.json new file mode 100644 index 000000000..8cf921aa0 --- /dev/null +++ b/translations/sk.json @@ -0,0 +1,122 @@ +{ + "action": { + "back": "Naspäť", + "cancel": "Zrušiť", + "continue": "Pokračovať", + "create_account": "Vytvoriť účet", + "sign_in": "Prihlásiť sa", + "sign_out": "Odhlásiť sa", + "submit": "Odoslať" + }, + "app": { + "human_name": "Matrix Authentication Service", + "name": "matrix-authentication-service", + "technical_description": "Dokument zisťovania OpenID Connect: %(discovery_url)s" + }, + "common": { + "display_name": "Zobrazované meno", + "email_address": "Emailová adresa", + "loading": "Načítavanie…", + "password": "Heslo", + "password_confirm": "Potvrdiť heslo", + "username": "Meno používateľa" + }, + "error": { + "unexpected": "Neočakávaná chyba" + }, + "mas": { + "add_email": { + "heading": "Pridať email" + }, + "back_to_homepage": "Späť na domovskú stránku", + "change_password": { + "change": "Zmeniť heslo", + "confirm": "Potvrdiť heslo", + "current": "Súčasné heslo", + "heading": "Zmena hesla", + "new": "Nové heslo" + }, + "emails": { + "greeting": "Ahoj %(username)s,", + "verify": { + "body_html": "Váš overovací kód na potvrdenie tejto e-mailovej adresy je: %(code)s", + "body_text": "Váš kód na potvrdenie tejto e-mailovej adresy je: %(code)s", + "subject": "Váš kód e-mailu je: %(code)s" + } + }, + "errors": { + "denied_policy": "Zamietnuté pravidlami:%(policy)s", + "field_required": "Toto pole je povinné", + "invalid_credentials": "Neplatné poverenia", + "password_mismatch": "Heslá sa nezhodujú.", + "username_taken": "Toto používateľské meno je už obsadené" + }, + "login": { + "call_to_register": "Ešte nemáte účet?", + "continue_with_provider": "Pokračovať s %(provider)s", + "description": "Ak chcete pokračovať, prihláste sa:", + "headline": "Prihlásiť sa", + "link": { + "description": "Prepojenie vášho %(provider)s účtu" + }, + "no_login_methods": "Nie sú k dispozícii žiadne metódy prihlásenia.", + "separator": "Alebo" + }, + "navbar": { + "my_account": "Môj účet", + "register": "Vytvoriť účet", + "signed_in_as": "Prihlásený ako %(username)s." + }, + "not_found": { + "description": "Stránka, ktorú hľadáte, neexistuje alebo bola presunutá.", + "heading": "Stránka nenájdená" + }, + "not_you": "Nie ste prihlásený ako %(username)s?", + "or_separator": "Alebo", + "policy_violation": { + "description": "Môže to byť spôsobené klientom, ktorý požiadavku vytvoril, aktuálne prihláseným používateľom alebo samotnou požiadavkou.", + "heading": "Žiadosť o autorizáciu bola zamietnutá na základe pravidiel uplatňovaných touto službou.", + "logged_as": "Prihlásený ako %(username)s" + }, + "recovery": { + "finish": { + "new": "Nové heslo" + } + }, + "register": { + "call_to_login": "Už máte účet?", + "create_account": { + "description": "Pre pokračovanie vyberte používateľské meno.", + "heading": "Vytvoriť účet" + }, + "sign_in_instead": "Radšej sa prihlásiť" + }, + "scope": { + "edit_profile": "Upravte si profil a kontaktné údaje", + "manage_sessions": "Spravujte svoje zariadenia a prihlásenia.", + "mas_admin": "Spravovať ľubovoľného používateľa v matrix-authentication-service", + "send_messages": "Odosielať nové správy vo vašom mene", + "synapse_admin": "Spravovať domovský server", + "view_messages": "Zobraziť existujúce správy a údaje", + "view_profile": "Zobraziť informácie o vašom profile a kontaktné údaje" + }, + "upstream_oauth2": { + "login_link": { + "action": "Pokračovať" + }, + "register": { + "choose_username": { + "heading": "Vyberte si svoje používateľské meno" + }, + "create_account": "Vytvoriť nový účet" + }, + "suggest_link": { + "action": "Odkaz" + } + }, + "verify_email": { + "description": "Zadajte 6-ciferný kód, ktorý bol odoslaný na: %(email)s", + "headline": "Overte svoj e-mail" + } + } +} \ No newline at end of file diff --git a/translations/uz.json b/translations/uz.json new file mode 100644 index 000000000..64a281789 --- /dev/null +++ b/translations/uz.json @@ -0,0 +1,132 @@ +{ + "action": { + "cancel": "Bekor qilish", + "continue": "Davom etish", + "create_account": "Ro'yxatdan o'tish", + "sign_in": "Kirish", + "sign_out": "Chiqish", + "submit": "Yuborish" + }, + "app": { + "human_name": "Matrix Authentication Service", + "name": "matritsa-autentifikatsiya-xizmati", + "technical_description": "OpenID Connect kashfiyot hujjati:%(discovery_url)s" + }, + "common": { + "email_address": "Email manzili", + "loading": "Yuklanmoqda…", + "password": "Parol", + "password_confirm": "Parolni tasdiqlash", + "username": "Foydalanuvchi nomi" + }, + "error": { + "unexpected": "Kutilmagan xato" + }, + "mas": { + "add_email": { + "heading": "Email manzilini qo‘shish" + }, + "back_to_homepage": "Bosh sahifaga qaytish", + "change_password": { + "change": "Parolni o‘zgartirish", + "confirm": "Parolni tasdiqlash", + "current": "Joriy parol", + "heading": "Parolni o‘zgartirish", + "new": "Yangi parol" + }, + "emails": { + "greeting": "Salom %(username)s ,", + "verify": { + "body_html": "Ushbu elektron pochta manzilini tasdiqlash uchun tasdiqlash kodingiz: %(code)s", + "body_text": "Ushbu elektron pochta manzilini tasdiqlash uchun tasdiqlash kodingiz: %(code)s", + "subject": "Elektron pochtangizni tasdiqlash kodingiz: %(code)s" + } + }, + "errors": { + "denied_policy": "Siyosat tomonidan rad etilgan: %(policy)s", + "field_required": "Ushbu qator toʻldirilishi shart", + "invalid_credentials": "Hisob ma’lumotlari yaroqsiz", + "password_mismatch": "Parol maydonlari mos kelmayapti", + "username_taken": "Bu foydalanuvchi nomi allaqachon band" + }, + "login": { + "call_to_register": "Hali hisobingiz yo‘qmi?", + "continue_with_provider": "%(provider)s bilan davom etish", + "description": "Davom etish uchun tizimga kiring:", + "headline": "Kirish", + "link": { + "description": "%(provider)s hisobingiz ulanmoqda", + "headline": "Havola uchun tizimga kiring" + }, + "no_login_methods": "Kirish usullari mavjud emas.", + "separator": "Yoki" + }, + "navbar": { + "my_account": "Mening hisobim", + "register": "Hisob yaratish", + "signed_in_as": "Tizimga kirgan:%(username)s ." + }, + "not_found": { + "description": "Siz qidirayotgan sahifa mavjud emas yoki boshqa joyga ko‘chirilgan.", + "heading": "Sahifa topilmadi" + }, + "not_you": "%(username)s emasmi ?", + "or_separator": "Yoki", + "policy_violation": { + "description": "Bu so‘rovni yaratgan mijoz, hozirda tizimga kirgan foydalanuvchi yoki so‘rovning o‘zi bilan bog‘liq bo‘lishi mumkin.", + "heading": "Avtorizatsiya so‘rovi ushbu xizmatda amalda bo‘lgan siyosat tufayli rad etildi.", + "logged_as": "%(username)s sifatida kirildi" + }, + "recovery": { + "finish": { + "new": "Yangi parol" + } + }, + "register": { + "call_to_login": "Hisobingiz allaqachon bormi?", + "create_account": { + "description": "Davom etish uchun foydalanuvchi nomini tanlang.", + "heading": "Hisob yaratish" + }, + "sign_in_instead": "Buning o‘rniga tizimga kiring" + }, + "scope": { + "edit_profile": "Profilingiz va aloqa maʼlumotlaringizni tahrirlang", + "manage_sessions": "Qurilmalaringiz va sessiyalaringizni boshqaring", + "mas_admin": "Foydalanuvchilarni boshqarish (urn:mas:admin)", + "send_messages": "Sizning nomingizdan yangi xabarlar yuborish", + "synapse_admin": "Serverni boshqarish (urn:synapse:admin:*)", + "view_messages": "Mavjud xabar va ma’lumotlaringizni ko‘rish", + "view_profile": "Profilingiz ma’lumotlari va kontakt tafsilotlarini ko‘rish" + }, + "upstream_oauth2": { + "link_mismatch": { + "heading": "Bu yuqori oqim hisobi allaqachon boshqa hisobga ulangan." + }, + "login_link": { + "action": "Davom etish", + "heading": "Mavjud hisobingizga havola" + }, + "register": { + "choose_username": { + "heading": "Foydalanuvchi nomingizni tanlang" + }, + "create_account": "Yangi hisob yaratish", + "forced_display_name": "Quyidagi ko‘rsatish nomidan foydalanadi", + "forced_email": "Quyidagi elektron pochta manzilidan foydalaniladi", + "forced_localpart": "Quyidagi foydalanuvchi nomidan foydalaniladi", + "link_existing": "Mavjud hisobga havola", + "suggested_display_name": "Ko‘rsatish nomini import qilish", + "suggested_email": "Elektron pochta manzilini import qilish" + }, + "suggest_link": { + "action": "Havola", + "heading": "Mavjud hisobingizga havola" + } + }, + "verify_email": { + "description": "Yuborilgan 6 xonali kodni kiriting: %(email)s", + "headline": "Elektron pochtangizni tasdiqlang" + } + } +} \ No newline at end of file diff --git a/translations/zh-Hans.json b/translations/zh-Hans.json index 9aec3c264..e355a8c99 100644 --- a/translations/zh-Hans.json +++ b/translations/zh-Hans.json @@ -74,9 +74,12 @@ }, "consent": { "client_wants_access": "%(client_name)s 位于 %(redirect_uri)s,请求访问您的账户。", + "continue_to": "继续前往 %(client_name)s?", "heading": "允许访问你的账户?", "make_sure_you_trust": "请确保你信任 %(client_name)s 。", + "scope_list_preface": "一旦继续你将允许 %(client_name)s:", "this_will_allow": "这将允许 %(client_name)s :", + "use_another_account": "使用另一账户", "you_may_be_sharing": "你可能正在与本网站或 app 分享敏感信息。" }, "device_card": { @@ -145,6 +148,9 @@ "username_too_long": "用户名太长", "username_too_short": "用户名太短" }, + "legacy_consent": { + "this_will_setup": "这将设置你位于 %(server_name)s 上的账户:%(client_name)s。" + }, "login": { "call_to_register": "还没有账户?", "continue_with_provider": "以 %(provider)s 继续", @@ -275,7 +281,7 @@ "6_digit_code": "6位数代码", "code": "代码", "description": "输入发送至以下邮箱的6位数代码:%(email)s", - "headline": "验证邮箱" + "headline": "验证邮件地址" } } } \ No newline at end of file From fef14b541dfb0ee5c6fabbed042c7110c4a48859 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 16:46:52 +0000 Subject: [PATCH 075/104] 1.13.0-rc.0 --- Cargo.lock | 56 +++++++++++++++++++++++++------------------------- Cargo.toml | 60 +++++++++++++++++++++++++++--------------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 83b9fd35a..1868294f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3107,7 +3107,7 @@ dependencies = [ [[package]] name = "mas-axum-utils" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "anyhow", "axum", @@ -3141,7 +3141,7 @@ dependencies = [ [[package]] name = "mas-cli" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "anyhow", "axum", @@ -3216,7 +3216,7 @@ dependencies = [ [[package]] name = "mas-config" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "anyhow", "camino", @@ -3247,7 +3247,7 @@ dependencies = [ [[package]] name = "mas-context" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "console", "opentelemetry", @@ -3263,7 +3263,7 @@ dependencies = [ [[package]] name = "mas-data-model" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "base64ct", "chrono", @@ -3284,7 +3284,7 @@ dependencies = [ [[package]] name = "mas-email" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "async-trait", "lettre", @@ -3295,7 +3295,7 @@ dependencies = [ [[package]] name = "mas-handlers" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "aide", "anyhow", @@ -3376,7 +3376,7 @@ dependencies = [ [[package]] name = "mas-http" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "futures-util", "headers", @@ -3397,7 +3397,7 @@ dependencies = [ [[package]] name = "mas-i18n" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "camino", "icu_calendar", @@ -3419,7 +3419,7 @@ dependencies = [ [[package]] name = "mas-i18n-scan" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "camino", "clap", @@ -3433,7 +3433,7 @@ dependencies = [ [[package]] name = "mas-iana" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "schemars 0.9.0", "serde", @@ -3441,7 +3441,7 @@ dependencies = [ [[package]] name = "mas-iana-codegen" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "anyhow", "async-trait", @@ -3458,7 +3458,7 @@ dependencies = [ [[package]] name = "mas-jose" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "base64ct", "chrono", @@ -3488,7 +3488,7 @@ dependencies = [ [[package]] name = "mas-keystore" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "aead", "base64ct", @@ -3516,7 +3516,7 @@ dependencies = [ [[package]] name = "mas-listener" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "anyhow", "bytes", @@ -3540,7 +3540,7 @@ dependencies = [ [[package]] name = "mas-matrix" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "anyhow", "async-trait", @@ -3550,7 +3550,7 @@ dependencies = [ [[package]] name = "mas-matrix-synapse" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "anyhow", "async-trait", @@ -3567,7 +3567,7 @@ dependencies = [ [[package]] name = "mas-oidc-client" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "assert_matches", "async-trait", @@ -3603,7 +3603,7 @@ dependencies = [ [[package]] name = "mas-policy" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "anyhow", "arc-swap", @@ -3620,7 +3620,7 @@ dependencies = [ [[package]] name = "mas-router" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "axum", "serde", @@ -3631,7 +3631,7 @@ dependencies = [ [[package]] name = "mas-spa" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "camino", "serde", @@ -3640,7 +3640,7 @@ dependencies = [ [[package]] name = "mas-storage" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "async-trait", "chrono", @@ -3662,7 +3662,7 @@ dependencies = [ [[package]] name = "mas-storage-pg" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "async-trait", "chrono", @@ -3692,7 +3692,7 @@ dependencies = [ [[package]] name = "mas-tasks" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "anyhow", "async-trait", @@ -3724,7 +3724,7 @@ dependencies = [ [[package]] name = "mas-templates" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "anyhow", "arc-swap", @@ -3756,7 +3756,7 @@ dependencies = [ [[package]] name = "mas-tower" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "http", "opentelemetry", @@ -4025,7 +4025,7 @@ dependencies = [ [[package]] name = "oauth2-types" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "assert_matches", "base64ct", @@ -6130,7 +6130,7 @@ dependencies = [ [[package]] name = "syn2mas" -version = "1.12.0" +version = "1.13.0-rc.0" dependencies = [ "anyhow", "arc-swap", diff --git a/Cargo.toml b/Cargo.toml index b4ec5e50d..eb4c7b4db 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ members = ["crates/*"] resolver = "2" # Updated in the CI with a `sed` command -package.version = "1.12.0" +package.version = "1.13.0-rc.0" package.license = "AGPL-3.0-only OR LicenseRef-Element-Commercial" package.authors = ["Element Backend Team"] package.edition = "2024" @@ -34,35 +34,35 @@ broken_intra_doc_links = "deny" [workspace.dependencies] # Workspace crates -mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.12.0" } -mas-cli = { path = "./crates/cli/", version = "=1.12.0" } -mas-config = { path = "./crates/config/", version = "=1.12.0" } -mas-context = { path = "./crates/context/", version = "=1.12.0" } -mas-data-model = { path = "./crates/data-model/", version = "=1.12.0" } -mas-email = { path = "./crates/email/", version = "=1.12.0" } -mas-graphql = { path = "./crates/graphql/", version = "=1.12.0" } -mas-handlers = { path = "./crates/handlers/", version = "=1.12.0" } -mas-http = { path = "./crates/http/", version = "=1.12.0" } -mas-i18n = { path = "./crates/i18n/", version = "=1.12.0" } -mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.12.0" } -mas-iana = { path = "./crates/iana/", version = "=1.12.0" } -mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.12.0" } -mas-jose = { path = "./crates/jose/", version = "=1.12.0" } -mas-keystore = { path = "./crates/keystore/", version = "=1.12.0" } -mas-listener = { path = "./crates/listener/", version = "=1.12.0" } -mas-matrix = { path = "./crates/matrix/", version = "=1.12.0" } -mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.12.0" } -mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.12.0" } -mas-policy = { path = "./crates/policy/", version = "=1.12.0" } -mas-router = { path = "./crates/router/", version = "=1.12.0" } -mas-spa = { path = "./crates/spa/", version = "=1.12.0" } -mas-storage = { path = "./crates/storage/", version = "=1.12.0" } -mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.12.0" } -mas-tasks = { path = "./crates/tasks/", version = "=1.12.0" } -mas-templates = { path = "./crates/templates/", version = "=1.12.0" } -mas-tower = { path = "./crates/tower/", version = "=1.12.0" } -oauth2-types = { path = "./crates/oauth2-types/", version = "=1.12.0" } -syn2mas = { path = "./crates/syn2mas", version = "=1.12.0" } +mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.13.0-rc.0" } +mas-cli = { path = "./crates/cli/", version = "=1.13.0-rc.0" } +mas-config = { path = "./crates/config/", version = "=1.13.0-rc.0" } +mas-context = { path = "./crates/context/", version = "=1.13.0-rc.0" } +mas-data-model = { path = "./crates/data-model/", version = "=1.13.0-rc.0" } +mas-email = { path = "./crates/email/", version = "=1.13.0-rc.0" } +mas-graphql = { path = "./crates/graphql/", version = "=1.13.0-rc.0" } +mas-handlers = { path = "./crates/handlers/", version = "=1.13.0-rc.0" } +mas-http = { path = "./crates/http/", version = "=1.13.0-rc.0" } +mas-i18n = { path = "./crates/i18n/", version = "=1.13.0-rc.0" } +mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.13.0-rc.0" } +mas-iana = { path = "./crates/iana/", version = "=1.13.0-rc.0" } +mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.13.0-rc.0" } +mas-jose = { path = "./crates/jose/", version = "=1.13.0-rc.0" } +mas-keystore = { path = "./crates/keystore/", version = "=1.13.0-rc.0" } +mas-listener = { path = "./crates/listener/", version = "=1.13.0-rc.0" } +mas-matrix = { path = "./crates/matrix/", version = "=1.13.0-rc.0" } +mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.13.0-rc.0" } +mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.13.0-rc.0" } +mas-policy = { path = "./crates/policy/", version = "=1.13.0-rc.0" } +mas-router = { path = "./crates/router/", version = "=1.13.0-rc.0" } +mas-spa = { path = "./crates/spa/", version = "=1.13.0-rc.0" } +mas-storage = { path = "./crates/storage/", version = "=1.13.0-rc.0" } +mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.13.0-rc.0" } +mas-tasks = { path = "./crates/tasks/", version = "=1.13.0-rc.0" } +mas-templates = { path = "./crates/templates/", version = "=1.13.0-rc.0" } +mas-tower = { path = "./crates/tower/", version = "=1.13.0-rc.0" } +oauth2-types = { path = "./crates/oauth2-types/", version = "=1.13.0-rc.0" } +syn2mas = { path = "./crates/syn2mas", version = "=1.13.0-rc.0" } # OpenAPI schema generation and validation [workspace.dependencies.aide] From a9276cd35cdd2b38a23f3ddc96f475a105a2d5ea Mon Sep 17 00:00:00 2001 From: Jason Robinson Date: Tue, 3 Mar 2026 17:05:27 +0200 Subject: [PATCH 076/104] Move upstream OAuth2 link policy check This moves the username policy check lower in the flow to fix linking of locally existing user accounts with upstream accounts, when on_conflict allows this, even if the registration policy would disallow the user. --- crates/handlers/src/upstream_oauth2/link.rs | 94 ++++++++++----------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/crates/handlers/src/upstream_oauth2/link.rs b/crates/handlers/src/upstream_oauth2/link.rs index 357a7a72f..e2c3e9fb9 100644 --- a/crates/handlers/src/upstream_oauth2/link.rs +++ b/crates/handlers/src/upstream_oauth2/link.rs @@ -476,53 +476,6 @@ pub(crate) async fn get( let forced_or_required = provider.claims_imports.localpart.is_forced_or_required(); - // We've got a localpart from the template. Let's run the policy - // engine on this registration and react early to a problem on - // the username - let res = policy - .evaluate_register(mas_policy::RegisterInput { - registration_method: mas_policy::RegistrationMethod::UpstreamOAuth2, - username: &localpart, - email: email.as_deref(), - requester: mas_policy::Requester { - ip_address: activity_tracker.ip(), - user_agent: user_agent.clone(), - }, - }) - .await?; - - // We don't do a full policy check at this point, only look for violations on - // the username - if res - .violations - .iter() - .any(|violation| violation.field.as_deref() == Some("username")) - { - if !forced_or_required { - tracing::warn!( - upstream_oauth_provider.id = %provider.id, - upstream_oauth_link.id = %link.id, - "Upstream provider returned a localpart {localpart:?} which was denied by the policy ({res}). As the username is just a suggestion, it was ignored." - ); - break 'localpart None; - } - - // If the username policy check fails, we display an error message. - // TODO: translate - let ctx = ErrorContext::new() - .with_code("Policy error") - .with_description(format!( - r"Upstream account provider returned {localpart:?} as username, - which does not pass the policy check: {res}" - )) - .with_language(&locale); - - return Ok(( - cookie_jar, - Html(templates.render_error(&ctx)?).into_response(), - )); - } - // We got a localpart from the template. We need to check if it's // available, and if it's not apply the conflict resolution setup in // the config @@ -730,6 +683,53 @@ pub(crate) async fn get( )); } + // We've got a localpart from the template. Let's run the policy + // engine on this registration and react early to a problem on + // the username + let res = policy + .evaluate_register(mas_policy::RegisterInput { + registration_method: mas_policy::RegistrationMethod::UpstreamOAuth2, + username: &localpart, + email: email.as_deref(), + requester: mas_policy::Requester { + ip_address: activity_tracker.ip(), + user_agent: user_agent.clone(), + }, + }) + .await?; + + // We don't do a full policy check at this point, only look for violations on + // the username + if res + .violations + .iter() + .any(|violation| violation.field.as_deref() == Some("username")) + { + if !forced_or_required { + tracing::warn!( + upstream_oauth_provider.id = %provider.id, + upstream_oauth_link.id = %link.id, + "Upstream provider returned a localpart {localpart:?} which was denied by the policy ({res}). As the username is just a suggestion, it was ignored." + ); + break 'localpart None; + } + + // If the username policy check fails, we display an error message. + // TODO: translate + let ctx = ErrorContext::new() + .with_code("Policy error") + .with_description(format!( + r"Upstream account provider returned {localpart:?} as username, + which does not pass the policy check: {res}" + )) + .with_language(&locale); + + return Ok(( + cookie_jar, + Html(templates.render_error(&ctx)?).into_response(), + )); + } + // Now let's check if the localpart is allowed by the homeserver. It's possible // that it's plain invalid (although that should have been caught by the // policy), or just reserved by an application service From 6612e8322ec0cd5f2d7b6165e915caa6301e2791 Mon Sep 17 00:00:00 2001 From: Wang Shenwei Date: Wed, 4 Mar 2026 13:15:26 +0800 Subject: [PATCH 077/104] feat: add system-proxy feature for reqwest to Cargo.toml --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index eb4c7b4db..a7ad66c6d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -508,6 +508,7 @@ features = [ "charset", "json", "socks", + "system-proxy", ] # RSA cryptography From 3d6a993bd17a3f132a6d1b96eef3688d8b449ddf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Mar 2026 13:54:38 +0000 Subject: [PATCH 078/104] build(deps): bump docker/login-action from 3.7.0 to 4.0.0 Bumps [docker/login-action](https://github.com/docker/login-action) from 3.7.0 to 4.0.0. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v3.7.0...v4.0.0) --- updated-dependencies: - dependency-name: docker/login-action dependency-version: 4.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 0eb691e95..9d7e560e0 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -268,7 +268,7 @@ jobs: mirrors = ["mirror.gcr.io"] - name: Login to GitHub Container Registry - uses: docker/login-action@v3.7.0 + uses: docker/login-action@v4.0.0 with: registry: ghcr.io username: ${{ github.repository_owner }} From 16a1790e1aa5c8d5938568b05d4c183f3146e677 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Mar 2026 13:54:46 +0000 Subject: [PATCH 079/104] build(deps): bump actions/setup-node from 6.2.0 to 6.3.0 Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6.2.0 to 6.3.0. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/v6.2.0...v6.3.0) --- updated-dependencies: - dependency-name: actions/setup-node dependency-version: 6.3.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yaml | 6 +++--- .github/workflows/docs.yaml | 2 +- .github/workflows/release-branch.yaml | 2 +- .github/workflows/translations-download.yaml | 2 +- .github/workflows/translations-upload.yaml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ba90f2be1..d6eef04ed 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -64,7 +64,7 @@ jobs: uses: actions/checkout@v6 - name: Install Node - uses: actions/setup-node@v6.2.0 + uses: actions/setup-node@v6.3.0 with: node-version: 24 @@ -88,7 +88,7 @@ jobs: uses: actions/checkout@v6 - name: Install Node - uses: actions/setup-node@v6.2.0 + uses: actions/setup-node@v6.3.0 with: node-version: 24 @@ -112,7 +112,7 @@ jobs: uses: actions/checkout@v6 - name: Install Node - uses: actions/setup-node@v6.2.0 + uses: actions/setup-node@v6.3.0 with: node-version: 24 diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 6b0ec68b9..1b950fe4e 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -39,7 +39,7 @@ jobs: tool: mdbook - name: Install Node - uses: actions/setup-node@v6.2.0 + uses: actions/setup-node@v6.3.0 with: node-version: 24 diff --git a/.github/workflows/release-branch.yaml b/.github/workflows/release-branch.yaml index 0b46539be..f0843f717 100644 --- a/.github/workflows/release-branch.yaml +++ b/.github/workflows/release-branch.yaml @@ -64,7 +64,7 @@ jobs: uses: actions/checkout@v6 - name: Install Node - uses: actions/setup-node@v6.2.0 + uses: actions/setup-node@v6.3.0 with: node-version: 24 diff --git a/.github/workflows/translations-download.yaml b/.github/workflows/translations-download.yaml index e964bf371..586d833da 100644 --- a/.github/workflows/translations-download.yaml +++ b/.github/workflows/translations-download.yaml @@ -22,7 +22,7 @@ jobs: uses: actions/checkout@v6 - name: Install Node - uses: actions/setup-node@v6.2.0 + uses: actions/setup-node@v6.3.0 with: node-version: 24 diff --git a/.github/workflows/translations-upload.yaml b/.github/workflows/translations-upload.yaml index 453a0d46d..392cec1ef 100644 --- a/.github/workflows/translations-upload.yaml +++ b/.github/workflows/translations-upload.yaml @@ -21,7 +21,7 @@ jobs: uses: actions/checkout@v6 - name: Install Node - uses: actions/setup-node@v6.2.0 + uses: actions/setup-node@v6.3.0 with: node-version: 24 From 7ae3b0f0e21c57e100f2da6de680bee5517d7dae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Mar 2026 13:54:20 +0000 Subject: [PATCH 080/104] build(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3.12.0 to 4.0.0. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v3.12.0...v4.0.0) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-version: 4.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 0eb691e95..e7b9d7775 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -261,7 +261,7 @@ jobs: uses: sigstore/cosign-installer@v4.0.0 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3.12.0 + uses: docker/setup-buildx-action@v4.0.0 with: buildkitd-config-inline: | [registry."docker.io"] From 605bfebfa688f561d978e4f2cf7514731fbb8e47 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 10:55:41 +0000 Subject: [PATCH 081/104] Translations updates --- frontend/.storybook/locales.ts | 78 +++++++++++++++++----------------- translations/pt-BR.json | 2 + 2 files changed, 41 insertions(+), 39 deletions(-) diff --git a/frontend/.storybook/locales.ts b/frontend/.storybook/locales.ts index ffcc627ed..0cfe7eae0 100644 --- a/frontend/.storybook/locales.ts +++ b/frontend/.storybook/locales.ts @@ -27,7 +27,7 @@ export type LocalazyMetadata = { }; const localazyMetadata: LocalazyMetadata = { - projectUrl: "https://localazy.com/p/matrix-authentication-service", + projectUrl: "https://localazy.com/p/matrix-authentication-service!v1.13", baseLocale: "en", languages: [ { @@ -208,25 +208,25 @@ const localazyMetadata: LocalazyMetadata = { file: "frontend.json", path: "", cdnFiles: { - "cs": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/cs/frontend.json", - "da": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/da/frontend.json", - "de": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/de/frontend.json", - "en": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/en/frontend.json", - "et": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/et/frontend.json", - "fi": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fi/frontend.json", - "fr": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fr/frontend.json", - "hu": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/hu/frontend.json", - "nb_NO": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nb-NO/frontend.json", - "nl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nl/frontend.json", - "pl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pl/frontend.json", - "pt": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt/frontend.json", - "pt_BR": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt-BR/frontend.json", - "ru": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/ru/frontend.json", - "sk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sk/frontend.json", - "sv": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sv/frontend.json", - "uk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uk/frontend.json", - "uz": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uz/frontend.json", - "zh#Hans": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/zh-Hans/frontend.json" + "cs": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/cs/frontend.json", + "da": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/da/frontend.json", + "de": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/de/frontend.json", + "en": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/en/frontend.json", + "et": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/et/frontend.json", + "fi": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fi/frontend.json", + "fr": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fr/frontend.json", + "hu": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/hu/frontend.json", + "nb_NO": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nb-NO/frontend.json", + "nl": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nl/frontend.json", + "pl": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pl/frontend.json", + "pt": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt/frontend.json", + "pt_BR": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt-BR/frontend.json", + "ru": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/ru/frontend.json", + "sk": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sk/frontend.json", + "sv": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sv/frontend.json", + "uk": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uk/frontend.json", + "uz": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uz/frontend.json", + "zh#Hans": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/zh-Hans/frontend.json" } }, { @@ -234,25 +234,25 @@ const localazyMetadata: LocalazyMetadata = { file: "file.json", path: "", cdnFiles: { - "cs": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/cs/file.json", - "da": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/da/file.json", - "de": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/de/file.json", - "en": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/en/file.json", - "et": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/et/file.json", - "fi": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fi/file.json", - "fr": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fr/file.json", - "hu": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/hu/file.json", - "nb_NO": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nb-NO/file.json", - "nl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nl/file.json", - "pl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pl/file.json", - "pt": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt/file.json", - "pt_BR": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt-BR/file.json", - "ru": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/ru/file.json", - "sk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sk/file.json", - "sv": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sv/file.json", - "uk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uk/file.json", - "uz": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uz/file.json", - "zh#Hans": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/zh-Hans/file.json" + "cs": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/cs/file.json", + "da": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/da/file.json", + "de": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/de/file.json", + "en": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/en/file.json", + "et": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/et/file.json", + "fi": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fi/file.json", + "fr": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fr/file.json", + "hu": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/hu/file.json", + "nb_NO": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nb-NO/file.json", + "nl": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nl/file.json", + "pl": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pl/file.json", + "pt": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt/file.json", + "pt_BR": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt-BR/file.json", + "ru": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/ru/file.json", + "sk": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sk/file.json", + "sv": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sv/file.json", + "uk": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uk/file.json", + "uz": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uz/file.json", + "zh#Hans": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/zh-Hans/file.json" } } ] diff --git a/translations/pt-BR.json b/translations/pt-BR.json index 8d7b67480..16e725081 100644 --- a/translations/pt-BR.json +++ b/translations/pt-BR.json @@ -4,6 +4,7 @@ "cancel": "Cancelar", "continue": "Continuar", "create_account": "Criar Conta", + "sign_in": "Entrar", "sign_out": "Sair", "submit": "Enviar" }, @@ -46,6 +47,7 @@ "call_to_register": "Ainda não tem uma conta?", "continue_with_provider": "Continuar com %(provider)s", "description": "Faça login para continuar:", + "headline": "Entrar", "no_login_methods": "Não há métodos de login disponíveis.", "separator": "Ou" }, From cb0c3378fd91f9066a208b999e46dfaf54cb642c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 11:22:12 +0000 Subject: [PATCH 082/104] 1.13.0 --- Cargo.lock | 56 +++++++++++++++++++++++++------------------------- Cargo.toml | 60 +++++++++++++++++++++++++++--------------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1868294f8..7169b0705 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3107,7 +3107,7 @@ dependencies = [ [[package]] name = "mas-axum-utils" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "anyhow", "axum", @@ -3141,7 +3141,7 @@ dependencies = [ [[package]] name = "mas-cli" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "anyhow", "axum", @@ -3216,7 +3216,7 @@ dependencies = [ [[package]] name = "mas-config" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "anyhow", "camino", @@ -3247,7 +3247,7 @@ dependencies = [ [[package]] name = "mas-context" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "console", "opentelemetry", @@ -3263,7 +3263,7 @@ dependencies = [ [[package]] name = "mas-data-model" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "base64ct", "chrono", @@ -3284,7 +3284,7 @@ dependencies = [ [[package]] name = "mas-email" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "async-trait", "lettre", @@ -3295,7 +3295,7 @@ dependencies = [ [[package]] name = "mas-handlers" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "aide", "anyhow", @@ -3376,7 +3376,7 @@ dependencies = [ [[package]] name = "mas-http" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "futures-util", "headers", @@ -3397,7 +3397,7 @@ dependencies = [ [[package]] name = "mas-i18n" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "camino", "icu_calendar", @@ -3419,7 +3419,7 @@ dependencies = [ [[package]] name = "mas-i18n-scan" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "camino", "clap", @@ -3433,7 +3433,7 @@ dependencies = [ [[package]] name = "mas-iana" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "schemars 0.9.0", "serde", @@ -3441,7 +3441,7 @@ dependencies = [ [[package]] name = "mas-iana-codegen" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "anyhow", "async-trait", @@ -3458,7 +3458,7 @@ dependencies = [ [[package]] name = "mas-jose" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "base64ct", "chrono", @@ -3488,7 +3488,7 @@ dependencies = [ [[package]] name = "mas-keystore" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "aead", "base64ct", @@ -3516,7 +3516,7 @@ dependencies = [ [[package]] name = "mas-listener" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "anyhow", "bytes", @@ -3540,7 +3540,7 @@ dependencies = [ [[package]] name = "mas-matrix" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "anyhow", "async-trait", @@ -3550,7 +3550,7 @@ dependencies = [ [[package]] name = "mas-matrix-synapse" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "anyhow", "async-trait", @@ -3567,7 +3567,7 @@ dependencies = [ [[package]] name = "mas-oidc-client" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "assert_matches", "async-trait", @@ -3603,7 +3603,7 @@ dependencies = [ [[package]] name = "mas-policy" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "anyhow", "arc-swap", @@ -3620,7 +3620,7 @@ dependencies = [ [[package]] name = "mas-router" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "axum", "serde", @@ -3631,7 +3631,7 @@ dependencies = [ [[package]] name = "mas-spa" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "camino", "serde", @@ -3640,7 +3640,7 @@ dependencies = [ [[package]] name = "mas-storage" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "async-trait", "chrono", @@ -3662,7 +3662,7 @@ dependencies = [ [[package]] name = "mas-storage-pg" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "async-trait", "chrono", @@ -3692,7 +3692,7 @@ dependencies = [ [[package]] name = "mas-tasks" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "anyhow", "async-trait", @@ -3724,7 +3724,7 @@ dependencies = [ [[package]] name = "mas-templates" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "anyhow", "arc-swap", @@ -3756,7 +3756,7 @@ dependencies = [ [[package]] name = "mas-tower" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "http", "opentelemetry", @@ -4025,7 +4025,7 @@ dependencies = [ [[package]] name = "oauth2-types" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "assert_matches", "base64ct", @@ -6130,7 +6130,7 @@ dependencies = [ [[package]] name = "syn2mas" -version = "1.13.0-rc.0" +version = "1.13.0" dependencies = [ "anyhow", "arc-swap", diff --git a/Cargo.toml b/Cargo.toml index eb4c7b4db..35c3eb454 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ members = ["crates/*"] resolver = "2" # Updated in the CI with a `sed` command -package.version = "1.13.0-rc.0" +package.version = "1.13.0" package.license = "AGPL-3.0-only OR LicenseRef-Element-Commercial" package.authors = ["Element Backend Team"] package.edition = "2024" @@ -34,35 +34,35 @@ broken_intra_doc_links = "deny" [workspace.dependencies] # Workspace crates -mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.13.0-rc.0" } -mas-cli = { path = "./crates/cli/", version = "=1.13.0-rc.0" } -mas-config = { path = "./crates/config/", version = "=1.13.0-rc.0" } -mas-context = { path = "./crates/context/", version = "=1.13.0-rc.0" } -mas-data-model = { path = "./crates/data-model/", version = "=1.13.0-rc.0" } -mas-email = { path = "./crates/email/", version = "=1.13.0-rc.0" } -mas-graphql = { path = "./crates/graphql/", version = "=1.13.0-rc.0" } -mas-handlers = { path = "./crates/handlers/", version = "=1.13.0-rc.0" } -mas-http = { path = "./crates/http/", version = "=1.13.0-rc.0" } -mas-i18n = { path = "./crates/i18n/", version = "=1.13.0-rc.0" } -mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.13.0-rc.0" } -mas-iana = { path = "./crates/iana/", version = "=1.13.0-rc.0" } -mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.13.0-rc.0" } -mas-jose = { path = "./crates/jose/", version = "=1.13.0-rc.0" } -mas-keystore = { path = "./crates/keystore/", version = "=1.13.0-rc.0" } -mas-listener = { path = "./crates/listener/", version = "=1.13.0-rc.0" } -mas-matrix = { path = "./crates/matrix/", version = "=1.13.0-rc.0" } -mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.13.0-rc.0" } -mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.13.0-rc.0" } -mas-policy = { path = "./crates/policy/", version = "=1.13.0-rc.0" } -mas-router = { path = "./crates/router/", version = "=1.13.0-rc.0" } -mas-spa = { path = "./crates/spa/", version = "=1.13.0-rc.0" } -mas-storage = { path = "./crates/storage/", version = "=1.13.0-rc.0" } -mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.13.0-rc.0" } -mas-tasks = { path = "./crates/tasks/", version = "=1.13.0-rc.0" } -mas-templates = { path = "./crates/templates/", version = "=1.13.0-rc.0" } -mas-tower = { path = "./crates/tower/", version = "=1.13.0-rc.0" } -oauth2-types = { path = "./crates/oauth2-types/", version = "=1.13.0-rc.0" } -syn2mas = { path = "./crates/syn2mas", version = "=1.13.0-rc.0" } +mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.13.0" } +mas-cli = { path = "./crates/cli/", version = "=1.13.0" } +mas-config = { path = "./crates/config/", version = "=1.13.0" } +mas-context = { path = "./crates/context/", version = "=1.13.0" } +mas-data-model = { path = "./crates/data-model/", version = "=1.13.0" } +mas-email = { path = "./crates/email/", version = "=1.13.0" } +mas-graphql = { path = "./crates/graphql/", version = "=1.13.0" } +mas-handlers = { path = "./crates/handlers/", version = "=1.13.0" } +mas-http = { path = "./crates/http/", version = "=1.13.0" } +mas-i18n = { path = "./crates/i18n/", version = "=1.13.0" } +mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.13.0" } +mas-iana = { path = "./crates/iana/", version = "=1.13.0" } +mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.13.0" } +mas-jose = { path = "./crates/jose/", version = "=1.13.0" } +mas-keystore = { path = "./crates/keystore/", version = "=1.13.0" } +mas-listener = { path = "./crates/listener/", version = "=1.13.0" } +mas-matrix = { path = "./crates/matrix/", version = "=1.13.0" } +mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.13.0" } +mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.13.0" } +mas-policy = { path = "./crates/policy/", version = "=1.13.0" } +mas-router = { path = "./crates/router/", version = "=1.13.0" } +mas-spa = { path = "./crates/spa/", version = "=1.13.0" } +mas-storage = { path = "./crates/storage/", version = "=1.13.0" } +mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.13.0" } +mas-tasks = { path = "./crates/tasks/", version = "=1.13.0" } +mas-templates = { path = "./crates/templates/", version = "=1.13.0" } +mas-tower = { path = "./crates/tower/", version = "=1.13.0" } +oauth2-types = { path = "./crates/oauth2-types/", version = "=1.13.0" } +syn2mas = { path = "./crates/syn2mas", version = "=1.13.0" } # OpenAPI schema generation and validation [workspace.dependencies.aide] From c02d001a628328b27f92adea139c1d56e7200f6b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 13:55:44 +0000 Subject: [PATCH 083/104] build(deps-dev): bump the storybook group in /frontend with 3 updates Bumps the storybook group in /frontend with 3 updates: [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/docs), [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) and [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/core). Updates `@storybook/addon-docs` from 10.2.14 to 10.2.15 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.15/code/addons/docs) Updates `@storybook/react-vite` from 10.2.14 to 10.2.15 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.15/code/frameworks/react-vite) Updates `storybook` from 10.2.14 to 10.2.15 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.15/code/core) --- updated-dependencies: - dependency-name: "@storybook/addon-docs" dependency-version: 10.2.15 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: "@storybook/react-vite" dependency-version: 10.2.15 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: storybook dependency-version: 10.2.15 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 70 +++++++++++++++++++------------------- frontend/package.json | 4 +-- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 9aa702e28..7aae400de 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -36,8 +36,8 @@ "@graphql-codegen/cli": "^6.1.2", "@graphql-codegen/client-preset": "^5.2.3", "@graphql-codegen/typescript-msw": "^3.0.1", - "@storybook/addon-docs": "^10.2.14", - "@storybook/react-vite": "^10.2.14", + "@storybook/addon-docs": "^10.2.17", + "@storybook/react-vite": "^10.2.17", "@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-router-devtools": "^1.150.0", "@tanstack/router-plugin": "^1.150.0", @@ -5001,16 +5001,16 @@ "license": "MIT" }, "node_modules/@storybook/addon-docs": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.14.tgz", - "integrity": "sha512-vUGw+zoodb91GIcDECZetXL8Bo0AJ/lYudcRBqtdw8taLXucss28Ev6u36dXggARYHPT8V0FhBkipzzJxssjUQ==", + "version": "10.2.17", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.17.tgz", + "integrity": "sha512-c414xi7rxlaHn92qWOxtEkcOMm0/+cvBui0gUsgiWOZOM8dHChGZ/RjMuf1pPDyOrSsybLsPjZhP0WthsMDkdQ==", "dev": true, "license": "MIT", "dependencies": { "@mdx-js/react": "^3.0.0", - "@storybook/csf-plugin": "10.2.14", + "@storybook/csf-plugin": "10.2.17", "@storybook/icons": "^2.0.1", - "@storybook/react-dom-shim": "10.2.14", + "@storybook/react-dom-shim": "10.2.17", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "ts-dedent": "^2.0.0" @@ -5020,17 +5020,17 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.14" + "storybook": "^10.2.17" } }, "node_modules/@storybook/builder-vite": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.14.tgz", - "integrity": "sha512-4b/opKbbTg+npeFXzj4GwZ7SDJdqsJbcJYxFpAznpl9FqMhP+ktH/7QSDs1DtOXpCanKcrmj6UQQgKR8OGypUQ==", + "version": "10.2.17", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.17.tgz", + "integrity": "sha512-m/OBveTLm5ds/tUgHmmbKzgSi/oeCpQwm5rZa49vP2BpAd41Q7ER6TzkOoISzPoNNMAcbVmVc5vn7k6hdbPSHw==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf-plugin": "10.2.14", + "@storybook/csf-plugin": "10.2.17", "ts-dedent": "^2.0.0" }, "funding": { @@ -5038,14 +5038,14 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.14", + "storybook": "^10.2.17", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "node_modules/@storybook/csf-plugin": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.14.tgz", - "integrity": "sha512-N4frSzhig3pkhaWdN0kAnhgEi9IGEy6rJnpuNAocS6d70fSahGQk958TMml2JCG3LLiVamuXySyUrVtFiHrxvg==", + "version": "10.2.17", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.17.tgz", + "integrity": "sha512-crHH8i/4mwzeXpWRPgwvwX2vjytW42zyzTRySUax5dTU8o9sjk4y+Z9hkGx3Nmu1TvqseS8v1Z20saZr/tQcWw==", "dev": true, "license": "MIT", "dependencies": { @@ -5058,7 +5058,7 @@ "peerDependencies": { "esbuild": "*", "rollup": "*", - "storybook": "^10.2.14", + "storybook": "^10.2.17", "vite": "*", "webpack": "*" }, @@ -5096,14 +5096,14 @@ } }, "node_modules/@storybook/react": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.2.14.tgz", - "integrity": "sha512-GzbbsfyOeGpTqLoss6yyb9m7eYO7oXSV8cey+y0gxVplOmK8XISA8q0AtH7gWzw6pDUOaBpEfnrE/jgOOKwQlw==", + "version": "10.2.17", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.2.17.tgz", + "integrity": "sha512-875AVMYil2X9Civil6GFZ8koIzlKxcXbl2eJ7+/GPbhIonTNmwx0qbWPHttjZXUvFuQ4RRtb9KkBwy4TCb/LeA==", "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/react-dom-shim": "10.2.14", + "@storybook/react-dom-shim": "10.2.17", "react-docgen": "^8.0.2" }, "funding": { @@ -5113,7 +5113,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.14", + "storybook": "^10.2.17", "typescript": ">= 4.9.x" }, "peerDependenciesMeta": { @@ -5123,9 +5123,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.14.tgz", - "integrity": "sha512-hO/Yzhf3fX/HhB5MDc/ERM5QLA1+yLgnyt0a4NGDqeWeXQ90YSjEski1RppdAI9oNGyhNwWllZPUrozrL7ECyg==", + "version": "10.2.17", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.17.tgz", + "integrity": "sha512-x9Kb7eUSZ1zGsEw/TtWrvs1LwWIdNp8qoOQCgPEjdB07reSJcE8R3+ASWHJThmd4eZf66ZALPJyerejake4Osw==", "dev": true, "license": "MIT", "funding": { @@ -5135,20 +5135,20 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.14" + "storybook": "^10.2.17" } }, "node_modules/@storybook/react-vite": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.2.14.tgz", - "integrity": "sha512-qfHkDjv0ElJFqhXN/uD+fuuMBVOI7xzJbMqLi9I4TKt4645B0P6X7s83oyLgU9y9xQEi4Dr2zSJq0VtNBe+VBg==", + "version": "10.2.17", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.2.17.tgz", + "integrity": "sha512-E/1hNmxVsjy9l3TuaNufSqkdz8saTJUGEs8GRCjKlF7be2wljIwewUxjAT3efk+bxOCw76ZmqGHk6MnRa3y7Gw==", "dev": true, "license": "MIT", "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "^0.6.4", "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "10.2.14", - "@storybook/react": "10.2.14", + "@storybook/builder-vite": "10.2.17", + "@storybook/react": "10.2.17", "empathic": "^2.0.0", "magic-string": "^0.30.0", "react-docgen": "^8.0.0", @@ -5162,7 +5162,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.14", + "storybook": "^10.2.17", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, @@ -11931,9 +11931,9 @@ } }, "node_modules/storybook": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.14.tgz", - "integrity": "sha512-HGAgLbDAAbLOgjERsBXPpHUMxynHumYgoCRNBnAH57HfKuHL9LA3nKvKpbhFbYb/8PSG5X3hiKukki0R6Op7Aw==", + "version": "10.2.17", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.17.tgz", + "integrity": "sha512-yueTpl5YJqLzQqs3CanxNdAAfFU23iP0j+JVJURE4ghfEtRmWfWoZWLGkVcyjmgum7UmjwAlqRuOjQDNvH89kw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index dbd8f1d42..a09ff9baa 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -46,8 +46,8 @@ "@graphql-codegen/cli": "^6.1.2", "@graphql-codegen/client-preset": "^5.2.3", "@graphql-codegen/typescript-msw": "^3.0.1", - "@storybook/addon-docs": "^10.2.14", - "@storybook/react-vite": "^10.2.14", + "@storybook/addon-docs": "^10.2.17", + "@storybook/react-vite": "^10.2.17", "@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-router-devtools": "^1.150.0", "@tanstack/router-plugin": "^1.150.0", From 6bcd4a6518bbbd95ab4857cde9e65e869a2dcfcc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 15:19:57 +0000 Subject: [PATCH 084/104] build(deps): bump rollup from 4.53.5 to 4.59.0 in /frontend Bumps [rollup](https://github.com/rollup/rollup) from 4.53.5 to 4.59.0. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v4.53.5...v4.59.0) --- updated-dependencies: - dependency-name: rollup dependency-version: 4.59.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 227 ++++++++++++++++++++++--------------- 1 file changed, 136 insertions(+), 91 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 7aae400de..03cb9374a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -4659,9 +4659,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.5.tgz", - "integrity": "sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", "cpu": [ "arm" ], @@ -4673,9 +4673,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.5.tgz", - "integrity": "sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", "cpu": [ "arm64" ], @@ -4687,9 +4687,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.5.tgz", - "integrity": "sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", "cpu": [ "arm64" ], @@ -4701,9 +4701,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.5.tgz", - "integrity": "sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", "cpu": [ "x64" ], @@ -4715,9 +4715,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.5.tgz", - "integrity": "sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", "cpu": [ "arm64" ], @@ -4729,9 +4729,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.5.tgz", - "integrity": "sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", "cpu": [ "x64" ], @@ -4743,9 +4743,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.5.tgz", - "integrity": "sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", "cpu": [ "arm" ], @@ -4757,9 +4757,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.5.tgz", - "integrity": "sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", "cpu": [ "arm" ], @@ -4771,9 +4771,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.5.tgz", - "integrity": "sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", "cpu": [ "arm64" ], @@ -4785,9 +4785,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.5.tgz", - "integrity": "sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", "cpu": [ "arm64" ], @@ -4799,9 +4799,23 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.5.tgz", - "integrity": "sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", "cpu": [ "loong64" ], @@ -4813,9 +4827,23 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.5.tgz", - "integrity": "sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", "cpu": [ "ppc64" ], @@ -4827,9 +4855,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.5.tgz", - "integrity": "sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", "cpu": [ "riscv64" ], @@ -4841,9 +4869,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.5.tgz", - "integrity": "sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", "cpu": [ "riscv64" ], @@ -4855,9 +4883,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.5.tgz", - "integrity": "sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", "cpu": [ "s390x" ], @@ -4869,9 +4897,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.5.tgz", - "integrity": "sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", "cpu": [ "x64" ], @@ -4883,9 +4911,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.5.tgz", - "integrity": "sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", "cpu": [ "x64" ], @@ -4896,10 +4924,24 @@ "linux" ] }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.5.tgz", - "integrity": "sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", "cpu": [ "arm64" ], @@ -4911,9 +4953,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.5.tgz", - "integrity": "sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", "cpu": [ "arm64" ], @@ -4925,9 +4967,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.5.tgz", - "integrity": "sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", "cpu": [ "ia32" ], @@ -4939,9 +4981,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.5.tgz", - "integrity": "sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", "cpu": [ "x64" ], @@ -4953,9 +4995,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.5.tgz", - "integrity": "sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", "cpu": [ "x64" ], @@ -11568,9 +11610,9 @@ } }, "node_modules/rollup": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.5.tgz", - "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "dev": true, "license": "MIT", "dependencies": { @@ -11584,28 +11626,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.53.5", - "@rollup/rollup-android-arm64": "4.53.5", - "@rollup/rollup-darwin-arm64": "4.53.5", - "@rollup/rollup-darwin-x64": "4.53.5", - "@rollup/rollup-freebsd-arm64": "4.53.5", - "@rollup/rollup-freebsd-x64": "4.53.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.53.5", - "@rollup/rollup-linux-arm-musleabihf": "4.53.5", - "@rollup/rollup-linux-arm64-gnu": "4.53.5", - "@rollup/rollup-linux-arm64-musl": "4.53.5", - "@rollup/rollup-linux-loong64-gnu": "4.53.5", - "@rollup/rollup-linux-ppc64-gnu": "4.53.5", - "@rollup/rollup-linux-riscv64-gnu": "4.53.5", - "@rollup/rollup-linux-riscv64-musl": "4.53.5", - "@rollup/rollup-linux-s390x-gnu": "4.53.5", - "@rollup/rollup-linux-x64-gnu": "4.53.5", - "@rollup/rollup-linux-x64-musl": "4.53.5", - "@rollup/rollup-openharmony-arm64": "4.53.5", - "@rollup/rollup-win32-arm64-msvc": "4.53.5", - "@rollup/rollup-win32-ia32-msvc": "4.53.5", - "@rollup/rollup-win32-x64-gnu": "4.53.5", - "@rollup/rollup-win32-x64-msvc": "4.53.5", + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" } }, From 66c78727acaf70d19c34a00f5f4ea2ab1512469e Mon Sep 17 00:00:00 2001 From: shingyu Date: Sun, 15 Mar 2026 18:18:14 +0800 Subject: [PATCH 085/104] feat(recaptcha): change recaptcha endpoint --- crates/handlers/src/captcha.rs | 2 +- templates/components/captcha.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/handlers/src/captcha.rs b/crates/handlers/src/captcha.rs index c206df5cf..1624edd69 100644 --- a/crates/handlers/src/captcha.rs +++ b/crates/handlers/src/captcha.rs @@ -14,7 +14,7 @@ use thiserror::Error; use crate::BoundActivityTracker; // https://developers.google.com/recaptcha/docs/verify#api_request -const RECAPTCHA_VERIFY_URL: &str = "https://www.google.com/recaptcha/api/siteverify"; +const RECAPTCHA_VERIFY_URL: &str = "https://www.recaptcha.net/recaptcha/api/siteverify"; // https://docs.hcaptcha.com/#verify-the-user-response-server-side const HCAPTCHA_VERIFY_URL: &str = "https://api.hcaptcha.com/siteverify"; diff --git a/templates/components/captcha.html b/templates/components/captcha.html index b21fa5f67..42b5e12b2 100644 --- a/templates/components/captcha.html +++ b/templates/components/captcha.html @@ -29,7 +29,7 @@ Please see LICENSE files in the repository root for full details. {% macro head() -%} {%- if captcha|default(False) -%} {%- if captcha.service == "recaptcha_v2" -%} - + {%- elif captcha.service == "cloudflare_turnstile" -%} {%- elif captcha.service == "hcaptcha" -%} From c2f72eccd18aaa6736840363932973275c3419df Mon Sep 17 00:00:00 2001 From: Olivier 'reivilibre Date: Fri, 13 Mar 2026 15:46:44 +0000 Subject: [PATCH 086/104] Update ProvisionRequest with locked flag --- crates/handlers/src/admin/v1/users/add.rs | 2 +- crates/handlers/src/admin/v1/users/reactivate.rs | 4 ++-- crates/handlers/src/compat/login.rs | 6 +++--- crates/handlers/src/compat/tests.rs | 2 +- crates/handlers/src/graphql/tests.rs | 2 +- crates/handlers/src/oauth2/introspection.rs | 4 ++-- crates/matrix-synapse/src/modern.rs | 3 +++ crates/matrix/src/lib.rs | 11 ++++++++++- crates/matrix/src/mock.rs | 2 +- crates/tasks/src/matrix.rs | 8 ++++++-- 10 files changed, 30 insertions(+), 14 deletions(-) diff --git a/crates/handlers/src/admin/v1/users/add.rs b/crates/handlers/src/admin/v1/users/add.rs index 07e87fb40..9b3307e8d 100644 --- a/crates/handlers/src/admin/v1/users/add.rs +++ b/crates/handlers/src/admin/v1/users/add.rs @@ -166,7 +166,7 @@ pub async fn handler( let user = repo.user().add(&mut rng, &clock, params.username).await?; homeserver - .provision_user(&ProvisionRequest::new(&user.username, &user.sub)) + .provision_user(&ProvisionRequest::new(&user.username, &user.sub, false)) .await .map_err(RouteError::Homeserver)?; diff --git a/crates/handlers/src/admin/v1/users/reactivate.rs b/crates/handlers/src/admin/v1/users/reactivate.rs index 835ef0b40..01f83888a 100644 --- a/crates/handlers/src/admin/v1/users/reactivate.rs +++ b/crates/handlers/src/admin/v1/users/reactivate.rs @@ -129,7 +129,7 @@ mod tests { // because this endpoint will try to reactivate it state .homeserver_connection - .provision_user(&ProvisionRequest::new(&user.username, &user.sub)) + .provision_user(&ProvisionRequest::new(&user.username, &user.sub, false)) .await .unwrap(); state @@ -181,7 +181,7 @@ mod tests { // Provision the user on the homeserver state .homeserver_connection - .provision_user(&ProvisionRequest::new(&user.username, &user.sub)) + .provision_user(&ProvisionRequest::new(&user.username, &user.sub, false)) .await .unwrap(); diff --git a/crates/handlers/src/compat/login.rs b/crates/handlers/src/compat/login.rs index ebb5d32c1..6aa0fb53d 100644 --- a/crates/handlers/src/compat/login.rs +++ b/crates/handlers/src/compat/login.rs @@ -935,7 +935,7 @@ mod tests { .unwrap(); state .homeserver_connection - .provision_user(&ProvisionRequest::new(&user.username, &user.sub)) + .provision_user(&ProvisionRequest::new(&user.username, &user.sub, locked)) .await .unwrap(); @@ -1238,7 +1238,7 @@ mod tests { state .homeserver_connection - .provision_user(&ProvisionRequest::new(&user.username, &user.sub)) + .provision_user(&ProvisionRequest::new(&user.username, &user.sub, false)) .await .unwrap(); @@ -1343,7 +1343,7 @@ mod tests { state .homeserver_connection - .provision_user(&ProvisionRequest::new(&user.username, &user.sub)) + .provision_user(&ProvisionRequest::new(&user.username, &user.sub, false)) .await .unwrap(); diff --git a/crates/handlers/src/compat/tests.rs b/crates/handlers/src/compat/tests.rs index cb6b76aba..da1e8e501 100644 --- a/crates/handlers/src/compat/tests.rs +++ b/crates/handlers/src/compat/tests.rs @@ -223,7 +223,7 @@ async fn create_test_user(state: &TestState, username: &str) -> mas_data_model:: // Provision the user on the homeserver state .homeserver_connection - .provision_user(&ProvisionRequest::new(&user.username, &user.sub)) + .provision_user(&ProvisionRequest::new(&user.username, &user.sub, false)) .await .unwrap(); diff --git a/crates/handlers/src/graphql/tests.rs b/crates/handlers/src/graphql/tests.rs index 888d477d0..7fed79c09 100644 --- a/crates/handlers/src/graphql/tests.rs +++ b/crates/handlers/src/graphql/tests.rs @@ -530,7 +530,7 @@ async fn test_oauth2_client_credentials(pool: PgPool) { // so we need to do it manually state .homeserver_connection - .provision_user(&ProvisionRequest::new("alice", user_id)) + .provision_user(&ProvisionRequest::new("alice", user_id, false)) .await .unwrap(); diff --git a/crates/handlers/src/oauth2/introspection.rs b/crates/handlers/src/oauth2/introspection.rs index 17f508921..c093ed7bc 100644 --- a/crates/handlers/src/oauth2/introspection.rs +++ b/crates/handlers/src/oauth2/introspection.rs @@ -805,7 +805,7 @@ mod tests { state .homeserver_connection - .provision_user(&ProvisionRequest::new(&user.username, &user.sub)) + .provision_user(&ProvisionRequest::new(&user.username, &user.sub, false)) .await .unwrap(); @@ -1005,7 +1005,7 @@ mod tests { state .homeserver_connection - .provision_user(&ProvisionRequest::new(&user.username, &user.sub)) + .provision_user(&ProvisionRequest::new(&user.username, &user.sub, false)) .await .unwrap(); diff --git a/crates/matrix-synapse/src/modern.rs b/crates/matrix-synapse/src/modern.rs index 3d70f52de..198072b31 100644 --- a/crates/matrix-synapse/src/modern.rs +++ b/crates/matrix-synapse/src/modern.rs @@ -141,6 +141,8 @@ impl HomeserverConnection for SynapseConnection { set_emails: Option>, #[serde(skip_serializing_if = "std::ops::Not::not")] unset_emails: bool, + #[serde(skip_serializing_if = "Option::is_none")] + locked: Option, } let mut body = Request { @@ -151,6 +153,7 @@ impl HomeserverConnection for SynapseConnection { unset_avatar_url: false, set_emails: None, unset_emails: false, + locked: Some(request.locked()), }; request.on_displayname(|displayname| match displayname { diff --git a/crates/matrix/src/lib.rs b/crates/matrix/src/lib.rs index f1fbe9c83..cb8534eb7 100644 --- a/crates/matrix/src/lib.rs +++ b/crates/matrix/src/lib.rs @@ -33,6 +33,7 @@ enum FieldAction { pub struct ProvisionRequest { localpart: String, sub: String, + locked: bool, displayname: FieldAction, avatar_url: FieldAction, emails: FieldAction>, @@ -45,11 +46,13 @@ impl ProvisionRequest { /// /// * `localpart` - The localpart of the user to provision. /// * `sub` - The `sub` of the user, aka the internal ID. + /// * `locked` - Whether the user is locked. #[must_use] - pub fn new(localpart: impl Into, sub: impl Into) -> Self { + pub fn new(localpart: impl Into, sub: impl Into, locked: bool) -> Self { Self { localpart: localpart.into(), sub: sub.into(), + locked, displayname: FieldAction::DoNothing, avatar_url: FieldAction::DoNothing, emails: FieldAction::DoNothing, @@ -68,6 +71,12 @@ impl ProvisionRequest { &self.localpart } + /// Get the locked flag of the user to provision + #[must_use] + pub fn locked(&self) -> bool { + self.locked + } + /// Ask to set the displayname of the user. /// /// # Parameters diff --git a/crates/matrix/src/mock.rs b/crates/matrix/src/mock.rs index 4180597e2..1334d7e4f 100644 --- a/crates/matrix/src/mock.rs +++ b/crates/matrix/src/mock.rs @@ -234,7 +234,7 @@ mod tests { assert!(conn.upsert_device("test", device, None).await.is_err()); assert!(conn.delete_device("test", device).await.is_err()); - let request = ProvisionRequest::new("test", "test") + let request = ProvisionRequest::new("test", "test", false) .set_displayname("Test User".into()) .set_avatar_url("mxc://example.org/1234567890".into()) .set_emails(vec!["test@example.org".to_owned()]); diff --git a/crates/tasks/src/matrix.rs b/crates/tasks/src/matrix.rs index 68905fe53..2f12ce6da 100644 --- a/crates/tasks/src/matrix.rs +++ b/crates/tasks/src/matrix.rs @@ -60,8 +60,12 @@ impl RunnableJob for ProvisionUserJob { .into_iter() .map(|email| email.email) .collect(); - let mut request = - ProvisionRequest::new(user.username.clone(), user.sub.clone()).set_emails(emails); + let mut request = ProvisionRequest::new( + user.username.clone(), + user.sub.clone(), + user.locked_at.is_some(), + ) + .set_emails(emails); if let Some(display_name) = self.display_name_to_set() { request = request.set_displayname(display_name.to_owned()); From 5b7b4d61ec7d22572165dc98f7081d3a89309075 Mon Sep 17 00:00:00 2001 From: Olivier 'reivilibre Date: Fri, 13 Mar 2026 17:37:21 +0000 Subject: [PATCH 087/104] Schedule ProvisionUserJob after locking/unlocking user --- crates/cli/src/commands/manage.rs | 12 ++++++++++++ crates/handlers/src/admin/v1/users/lock.rs | 11 ++++++++++- crates/handlers/src/admin/v1/users/unlock.rs | 19 +++++++++++++++---- crates/handlers/src/graphql/mutations/user.rs | 14 ++++++++++++++ 4 files changed, 51 insertions(+), 5 deletions(-) diff --git a/crates/cli/src/commands/manage.rs b/crates/cli/src/commands/manage.rs index 5bbd870ea..65aceda4d 100644 --- a/crates/cli/src/commands/manage.rs +++ b/crates/cli/src/commands/manage.rs @@ -638,6 +638,12 @@ impl Options { // synchronously yet. let user = repo.user().lock(&clock, user).await?; + // Schedule a job to provision the user so that the lock flag is propagated + // to Synapse + repo.queue_job() + .schedule_job(&mut rng, &clock, ProvisionUserJob::new(&user)) + .await?; + if deactivate { warn!(%user.id, "Scheduling user deactivation"); repo.queue_job() @@ -668,6 +674,12 @@ impl Options { .await? .context("User not found")?; + // Schedule a job to provision the user so that the lock flag is propagated + // to Synapse + repo.queue_job() + .schedule_job(&mut rng, &clock, ProvisionUserJob::new(&user)) + .await?; + if reactivate { warn!(%user.id, "Scheduling user reactivation"); repo.queue_job() diff --git a/crates/handlers/src/admin/v1/users/lock.rs b/crates/handlers/src/admin/v1/users/lock.rs index 6d6ccfcf9..e2ebfa574 100644 --- a/crates/handlers/src/admin/v1/users/lock.rs +++ b/crates/handlers/src/admin/v1/users/lock.rs @@ -4,10 +4,12 @@ // SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial // Please see LICENSE files in the repository root for full details. -use aide::{OperationIo, transform::TransformOperation}; +use aide::{NoApi, OperationIo, transform::TransformOperation}; use axum::{Json, response::IntoResponse}; use hyper::StatusCode; use mas_axum_utils::record_error; +use mas_data_model::BoxRng; +use mas_storage::queue::{ProvisionUserJob, QueueJobRepositoryExt}; use ulid::Ulid; use crate::{ @@ -69,6 +71,7 @@ pub async fn handler( CallContext { mut repo, clock, .. }: CallContext, + NoApi(mut rng): NoApi, id: UlidPathParam, ) -> Result>, RouteError> { let id = *id; @@ -80,6 +83,12 @@ pub async fn handler( let user = repo.user().lock(&clock, user).await?; + // Schedule a job to provision the user so that the lock flag is propagated + // to Synapse + repo.queue_job() + .schedule_job(&mut rng, &clock, ProvisionUserJob::new(&user)) + .await?; + repo.save().await?; Ok(Json(SingleResponse::new( diff --git a/crates/handlers/src/admin/v1/users/unlock.rs b/crates/handlers/src/admin/v1/users/unlock.rs index 72987a9ff..c14d0b5d3 100644 --- a/crates/handlers/src/admin/v1/users/unlock.rs +++ b/crates/handlers/src/admin/v1/users/unlock.rs @@ -4,10 +4,12 @@ // SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial // Please see LICENSE files in the repository root for full details. -use aide::{OperationIo, transform::TransformOperation}; +use aide::{NoApi, OperationIo, transform::TransformOperation}; use axum::{Json, response::IntoResponse}; use hyper::StatusCode; use mas_axum_utils::record_error; +use mas_data_model::BoxRng; +use mas_storage::queue::{ProvisionUserJob, QueueJobRepositoryExt}; use ulid::Ulid; use crate::{ @@ -66,7 +68,10 @@ This DOES NOT reactivate a deactivated user, which will remain unavailable until #[tracing::instrument(name = "handler.admin.v1.users.unlock", skip_all)] pub async fn handler( - CallContext { mut repo, .. }: CallContext, + CallContext { + mut repo, clock, .. + }: CallContext, + NoApi(mut rng): NoApi, id: UlidPathParam, ) -> Result>, RouteError> { let id = *id; @@ -78,6 +83,12 @@ pub async fn handler( let user = repo.user().unlock(user).await?; + // Schedule a job to provision the user so that the lock flag is propagated + // to Synapse + repo.queue_job() + .schedule_job(&mut rng, &clock, ProvisionUserJob::new(&user)) + .await?; + repo.save().await?; Ok(Json(SingleResponse::new( @@ -115,7 +126,7 @@ mod tests { // reactivate it state .homeserver_connection - .provision_user(&ProvisionRequest::new(&user.username, &user.sub)) + .provision_user(&ProvisionRequest::new(&user.username, &user.sub, false)) .await .unwrap(); @@ -151,7 +162,7 @@ mod tests { // Provision the user on the homeserver state .homeserver_connection - .provision_user(&ProvisionRequest::new(&user.username, &user.sub)) + .provision_user(&ProvisionRequest::new(&user.username, &user.sub, false)) .await .unwrap(); // but then deactivate it diff --git a/crates/handlers/src/graphql/mutations/user.rs b/crates/handlers/src/graphql/mutations/user.rs index 355c7d0ac..376652a46 100644 --- a/crates/handlers/src/graphql/mutations/user.rs +++ b/crates/handlers/src/graphql/mutations/user.rs @@ -551,6 +551,12 @@ impl UserMutations { let user = repo.user().lock(&state.clock(), user).await?; + // Schedule a job to provision the user so that the lock flag is propagated + // to Synapse + repo.queue_job() + .schedule_job(&mut rng, &clock, ProvisionUserJob::new(&user)) + .await?; + if deactivate { info!(%user.id, "Scheduling deactivation of user"); repo.queue_job() @@ -570,6 +576,8 @@ impl UserMutations { input: UnlockUserInput, ) -> Result { let state = ctx.state(); + let clock = state.clock(); + let mut rng = state.rng(); let requester = ctx.requester(); let matrix = state.homeserver_connection(); @@ -592,6 +600,12 @@ impl UserMutations { let user = repo.user().reactivate(user).await?; let user = repo.user().unlock(user).await?; + // Schedule a job to provision the user so that the lock flag is propagated + // to Synapse + repo.queue_job() + .schedule_job(&mut rng, &clock, ProvisionUserJob::new(&user)) + .await?; + repo.save().await?; Ok(UnlockUserPayload::Unlocked(user)) From ef763ace8d401aecae3a681938a8569d51d92062 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 13:54:53 +0000 Subject: [PATCH 088/104] build(deps): bump the tanstack-router group in /frontend with 3 updates Bumps the tanstack-router group in /frontend with 3 updates: [@tanstack/react-router](https://github.com/TanStack/router/tree/HEAD/packages/react-router), [@tanstack/react-router-devtools](https://github.com/TanStack/router/tree/HEAD/packages/react-router-devtools) and [@tanstack/router-plugin](https://github.com/TanStack/router/tree/HEAD/packages/router-plugin). Updates `@tanstack/react-router` from 1.150.0 to 1.153.1 - [Release notes](https://github.com/TanStack/router/releases) - [Commits](https://github.com/TanStack/router/commits/v1.153.1/packages/react-router) Updates `@tanstack/react-router-devtools` from 1.150.0 to 1.153.1 - [Release notes](https://github.com/TanStack/router/releases) - [Commits](https://github.com/TanStack/router/commits/v1.153.1/packages/react-router-devtools) Updates `@tanstack/router-plugin` from 1.150.0 to 1.153.1 - [Release notes](https://github.com/TanStack/router/releases) - [Commits](https://github.com/TanStack/router/commits/v1.153.1/packages/router-plugin) --- updated-dependencies: - dependency-name: "@tanstack/react-router" dependency-version: 1.153.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: tanstack-router - dependency-name: "@tanstack/react-router-devtools" dependency-version: 1.153.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: tanstack-router - dependency-name: "@tanstack/router-plugin" dependency-version: 1.153.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: tanstack-router ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 197 ++++++++++++++++++++++--------------- frontend/package.json | 6 +- 2 files changed, 118 insertions(+), 85 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 7aae400de..40e240b11 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -13,7 +13,7 @@ "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", "@tanstack/react-query": "^5.90.21", - "@tanstack/react-router": "^1.150.0", + "@tanstack/react-router": "^1.167.4", "@vector-im/compound-design-tokens": "6.10.1", "@vector-im/compound-web": "^8.3.5", "@zxcvbn-ts/core": "^3.0.4", @@ -39,8 +39,8 @@ "@storybook/addon-docs": "^10.2.17", "@storybook/react-vite": "^10.2.17", "@tanstack/react-query-devtools": "^5.91.3", - "@tanstack/react-router-devtools": "^1.150.0", - "@tanstack/router-plugin": "^1.150.0", + "@tanstack/react-router-devtools": "^1.166.9", + "@tanstack/router-plugin": "^1.166.13", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.1", "@testing-library/user-event": "^14.6.1", @@ -147,6 +147,7 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -1807,6 +1808,7 @@ "resolved": "https://registry.npmjs.org/@fontsource/inconsolata/-/inconsolata-5.2.8.tgz", "integrity": "sha512-lIZW+WOZYpUH91g9r6rYYhfTmptF3YPPM54ZOs8IYVeeL4SeiAu4tfj7mdr8llYEq31DLYgi6JtGIJa192gB0Q==", "license": "OFL-1.1", + "peer": true, "funding": { "url": "https://github.com/sponsors/ayuhito" } @@ -1816,6 +1818,7 @@ "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.2.8.tgz", "integrity": "sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==", "license": "OFL-1.1", + "peer": true, "funding": { "url": "https://github.com/sponsors/ayuhito" } @@ -1850,6 +1853,7 @@ "integrity": "sha512-BQ49LF0jnQNL12rU1RucTemoX1bHx8slR4B11nOrp4k5NTojhcc1A1czzU5wXCK/1+ezNHrVGONWg3jxZUy08w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/generator": "^7.18.13", "@babel/template": "^7.18.10", @@ -5393,12 +5397,12 @@ } }, "node_modules/@tanstack/history": { - "version": "1.145.7", - "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.145.7.tgz", - "integrity": "sha512-gMo/ReTUp0a3IOcZoI3hH6PLDC2R/5ELQ7P2yu9F6aEkA0wSQh+Q4qzMrtcKvF2ut0oE+16xWCGDo/TdYd6cEQ==", + "version": "1.161.6", + "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.161.6.tgz", + "integrity": "sha512-NaOGLRrddszbQj9upGat6HG/4TKvXLvu+osAIgfxPYA+eIvYKv8GKDJOrY2D3/U9MRnKfMWD7bU4jeD4xmqyIg==", "license": "MIT", "engines": { - "node": ">=12" + "node": ">=20.19" }, "funding": { "type": "github", @@ -5431,6 +5435,7 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.21.tgz", "integrity": "sha512-0Lu6y5t+tvlTJMTO7oh5NSpJfpg/5D41LlThfepTixPYkJ0sE2Jj0m0f6yYqujBwIXlId87e234+MxG3D3g7kg==", "license": "MIT", + "peer": true, "dependencies": { "@tanstack/query-core": "5.90.20" }, @@ -5461,20 +5466,21 @@ } }, "node_modules/@tanstack/react-router": { - "version": "1.150.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.150.0.tgz", - "integrity": "sha512-k/oycTCpBT2XoEk9dNd/nNYhF0X9fLSB10lT40+NVX1TjOtBq5whksk8MT6oRnSoQ8KWeb7La3G9kFaAeSULkA==", + "version": "1.167.4", + "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.167.4.tgz", + "integrity": "sha512-VpbZh382zX3WF4+X2Z+EUyd8eJhJyjg9C6ByYwrVZiWbhgbMK4+zQQIG2+lCAlIlDi7SV8fDcGL09NA8Z2kpGQ==", "license": "MIT", + "peer": true, "dependencies": { - "@tanstack/history": "1.145.7", - "@tanstack/react-store": "^0.8.0", - "@tanstack/router-core": "1.150.0", + "@tanstack/history": "1.161.6", + "@tanstack/react-store": "^0.9.1", + "@tanstack/router-core": "1.167.4", "isbot": "^5.1.22", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" }, "engines": { - "node": ">=12" + "node": ">=20.19" }, "funding": { "type": "github", @@ -5486,24 +5492,24 @@ } }, "node_modules/@tanstack/react-router-devtools": { - "version": "1.150.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.150.0.tgz", - "integrity": "sha512-TlvTE+XK5XVCfYjazoMWkjyyPKe4kMw2nCA7EuWoYUJKOqRW5oKvBY7auViGWxp51FKDEjV3bbok3wPKBYwZww==", + "version": "1.166.9", + "resolved": "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.166.9.tgz", + "integrity": "sha512-O49eZmaeEKB5YnKH/qd61AbxV/lW8ICm4stfZ4GNQNpzQQ6rhPIB0p3PMZDIgX+6DoMivdNvLRmXAOOpzpIpDg==", "dev": true, "license": "MIT", "dependencies": { - "@tanstack/router-devtools-core": "1.150.0" + "@tanstack/router-devtools-core": "1.166.9" }, "engines": { - "node": ">=12" + "node": ">=20.19" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-router": "^1.150.0", - "@tanstack/router-core": "^1.150.0", + "@tanstack/react-router": "^1.167.2", + "@tanstack/router-core": "^1.167.2", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" }, @@ -5514,12 +5520,12 @@ } }, "node_modules/@tanstack/react-store": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.8.0.tgz", - "integrity": "sha512-1vG9beLIuB7q69skxK9r5xiLN3ztzIPfSQSs0GfeqWGO2tGIyInZx0x1COhpx97RKaONSoAb8C3dxacWksm1ow==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.9.2.tgz", + "integrity": "sha512-Vt5usJE5sHG/cMechQfmwvwne6ktGCELe89Lmvoxe3LKRoFrhPa8OCKWs0NliG8HTJElEIj7PLtaBQIcux5pAQ==", "license": "MIT", "dependencies": { - "@tanstack/store": "0.8.0", + "@tanstack/store": "0.9.2", "use-sync-external-store": "^1.6.0" }, "funding": { @@ -5532,21 +5538,25 @@ } }, "node_modules/@tanstack/router-core": { - "version": "1.150.0", - "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.150.0.tgz", - "integrity": "sha512-cAm44t/tUbfyzaDH+rE/WO4u3AgaZdpJp00xjQ4gNkC2O95ntVHq5fx+4fhtrkKpgdXoKldgk8OK66djiWpuGQ==", + "version": "1.167.4", + "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.167.4.tgz", + "integrity": "sha512-Gk5V9Zr5JFJ4SbLyCheQLJ3MnXddccENPA+DJRz+9g3QxtN8DJB8w8KCUCgDeYlWp4LvmO4nX3fy3tupqVP2Pw==", "license": "MIT", + "peer": true, "dependencies": { - "@tanstack/history": "1.145.7", - "@tanstack/store": "^0.8.0", + "@tanstack/history": "1.161.6", + "@tanstack/store": "^0.9.1", "cookie-es": "^2.0.0", - "seroval": "^1.4.1", - "seroval-plugins": "^1.4.0", + "seroval": "^1.4.2", + "seroval-plugins": "^1.4.2", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" }, + "bin": { + "intent": "bin/intent.js" + }, "engines": { - "node": ">=12" + "node": ">=20.19" }, "funding": { "type": "github", @@ -5554,9 +5564,9 @@ } }, "node_modules/@tanstack/router-devtools-core": { - "version": "1.150.0", - "resolved": "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.150.0.tgz", - "integrity": "sha512-61V+4fq2fOPru/48cuojKvWhQx2h/nuj4nVHwzu9E7O8h391h4Hks6axxRbY98/rIz96mn5TCoc0aYuoga53bg==", + "version": "1.166.9", + "resolved": "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.166.9.tgz", + "integrity": "sha512-PNlA7GmOUX9wY7LUG709Pk3Lg33dfHBztQwzjzrOiOsuf4ggp2R6bwarF8nYGNjG79z/MaB5PN+5yvkCVk8jGw==", "dev": true, "license": "MIT", "dependencies": { @@ -5565,14 +5575,14 @@ "tiny-invariant": "^1.3.3" }, "engines": { - "node": ">=12" + "node": ">=20.19" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/router-core": "^1.150.0", + "@tanstack/router-core": "^1.167.2", "csstype": "^3.0.10" }, "peerDependenciesMeta": { @@ -5582,15 +5592,15 @@ } }, "node_modules/@tanstack/router-generator": { - "version": "1.150.0", - "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.150.0.tgz", - "integrity": "sha512-WsA1bN5/I+cxE6V1DkU5ABIPBQxZLlxszElYgnIhs884tzukv76rYMFOy6Xqd51YIFdYtjDrxZbp4/vfkrVCug==", + "version": "1.166.12", + "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.166.12.tgz", + "integrity": "sha512-2HdxSTbCkbU9JeYogKVigIlXoLtIJE1x5rbEov+ZLTPjGCO9kicNQuljqg9Js+u2/ahtWewNrE5u1QCAyxmpIg==", "dev": true, "license": "MIT", "dependencies": { - "@tanstack/router-core": "1.150.0", - "@tanstack/router-utils": "1.143.11", - "@tanstack/virtual-file-routes": "1.145.4", + "@tanstack/router-core": "1.167.4", + "@tanstack/router-utils": "1.161.6", + "@tanstack/virtual-file-routes": "1.161.7", "prettier": "^3.5.0", "recast": "^0.23.11", "source-map": "^0.7.4", @@ -5598,7 +5608,7 @@ "zod": "^3.24.2" }, "engines": { - "node": ">=12" + "node": ">=20.19" }, "funding": { "type": "github", @@ -5606,9 +5616,9 @@ } }, "node_modules/@tanstack/router-plugin": { - "version": "1.150.0", - "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.150.0.tgz", - "integrity": "sha512-k2NLysBXO4Wpt4Oo0xeBhNtFsMwHOU8ud48/cWNWbV89QAjlk0XU5CGNj2JEaFMT0zlF3H/aM5/h0+vYnDjFFA==", + "version": "1.166.13", + "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.166.13.tgz", + "integrity": "sha512-xG3ND3AlMe6DN9PihJAYUbQJevqJvVdzN1QpZbfU1/jkHurL97ynP2yXfmMTh8Qgi1K+SWRko4bi7iZlYP9SUw==", "dev": true, "license": "MIT", "dependencies": { @@ -5618,17 +5628,19 @@ "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", - "@tanstack/router-core": "1.150.0", - "@tanstack/router-generator": "1.150.0", - "@tanstack/router-utils": "1.143.11", - "@tanstack/virtual-file-routes": "1.145.4", - "babel-dead-code-elimination": "^1.0.11", + "@tanstack/router-core": "1.167.4", + "@tanstack/router-generator": "1.166.12", + "@tanstack/router-utils": "1.161.6", + "@tanstack/virtual-file-routes": "1.161.7", "chokidar": "^3.6.0", "unplugin": "^2.1.2", "zod": "^3.24.2" }, + "bin": { + "intent": "bin/intent.js" + }, "engines": { - "node": ">=12" + "node": ">=20.19" }, "funding": { "type": "github", @@ -5636,7 +5648,7 @@ }, "peerDependencies": { "@rsbuild/core": ">=1.0.2", - "@tanstack/react-router": "^1.150.0", + "@tanstack/react-router": "^1.167.4", "vite": ">=5.0.0 || >=6.0.0 || >=7.0.0", "vite-plugin-solid": "^2.11.10", "webpack": ">=5.92.0" @@ -5660,22 +5672,24 @@ } }, "node_modules/@tanstack/router-utils": { - "version": "1.143.11", - "resolved": "https://registry.npmjs.org/@tanstack/router-utils/-/router-utils-1.143.11.tgz", - "integrity": "sha512-N24G4LpfyK8dOlnP8BvNdkuxg1xQljkyl6PcrdiPSA301pOjatRT1y8wuCCJZKVVD8gkd0MpCZ0VEjRMGILOtA==", + "version": "1.161.6", + "resolved": "https://registry.npmjs.org/@tanstack/router-utils/-/router-utils-1.161.6.tgz", + "integrity": "sha512-nRcYw+w2OEgK6VfjirYvGyPLOK+tZQz1jkYcmH5AjMamQ9PycnlxZF2aEZtPpNoUsaceX2bHptn6Ub5hGXqNvw==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.28.5", "@babel/generator": "^7.28.5", "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", "ansis": "^4.1.0", + "babel-dead-code-elimination": "^1.0.12", "diff": "^8.0.2", "pathe": "^2.0.3", "tinyglobby": "^0.2.15" }, "engines": { - "node": ">=12" + "node": ">=20.19" }, "funding": { "type": "github", @@ -5683,9 +5697,9 @@ } }, "node_modules/@tanstack/store": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@tanstack/store/-/store-0.8.0.tgz", - "integrity": "sha512-Om+BO0YfMZe//X2z0uLF2j+75nQga6TpTJgLJQBiq85aOyZNIhkCgleNcud2KQg4k4v9Y9l+Uhru3qWMPGTOzQ==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@tanstack/store/-/store-0.9.2.tgz", + "integrity": "sha512-K013lUJEFJK2ofFQ/hZKJUmCnpcV00ebLyOyFOWQvyQHUOZp/iYO84BM6aOGiV81JzwbX0APTVmW8YI7yiG5oA==", "license": "MIT", "funding": { "type": "github", @@ -5693,13 +5707,16 @@ } }, "node_modules/@tanstack/virtual-file-routes": { - "version": "1.145.4", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-file-routes/-/virtual-file-routes-1.145.4.tgz", - "integrity": "sha512-CI75JrfqSluhdGwLssgVeQBaCphgfkMQpi8MCY3UJX1hoGzXa8kHYJcUuIFMOLs1q7zqHy++EVVtMK03osR5wQ==", + "version": "1.161.7", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-file-routes/-/virtual-file-routes-1.161.7.tgz", + "integrity": "sha512-olW33+Cn+bsCsZKPwEGhlkqS6w3M2slFv11JIobdnCFKMLG97oAI2kWKdx5/zsywTL8flpnoIgaZZPlQTFYhdQ==", "dev": true, "license": "MIT", + "bin": { + "intent": "bin/intent.js" + }, "engines": { - "node": ">=12" + "node": ">=20.19" }, "funding": { "type": "github", @@ -5831,8 +5848,7 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -5924,6 +5940,7 @@ "integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.18.0" } @@ -5934,6 +5951,7 @@ "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -5944,6 +5962,7 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -5991,6 +6010,7 @@ "resolved": "https://registry.npmjs.org/@vector-im/compound-design-tokens/-/compound-design-tokens-6.10.1.tgz", "integrity": "sha512-rbb+aUQhB6DppZrfZpwg5o2K4Uzil5QGmAoOSBmAdfgFMwQWkhwk1jnZozbH/vbsqwTLtRdX6tztXRZ1W9sJ0A==", "license": "SEE LICENSE IN README.md", + "peer": true, "peerDependencies": { "@types/react": "*", "react": "^17 || ^18 || ^19.0.0" @@ -6536,9 +6556,9 @@ } }, "node_modules/babel-dead-code-elimination": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/babel-dead-code-elimination/-/babel-dead-code-elimination-1.0.11.tgz", - "integrity": "sha512-mwq3W3e/pKSI6TG8lXMiDWvEi1VXYlSBlJlB3l+I0bAb5u1RNUl88udos85eOPNK3m5EXK9uO7d2g08pesTySQ==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/babel-dead-code-elimination/-/babel-dead-code-elimination-1.0.12.tgz", + "integrity": "sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig==", "dev": true, "license": "MIT", "dependencies": { @@ -6668,6 +6688,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -7267,7 +7288,8 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "devOptional": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", @@ -7481,8 +7503,7 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/dot-case": { "version": "3.0.4", @@ -7582,6 +7603,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -8108,6 +8130,7 @@ "integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -8430,6 +8453,7 @@ "integrity": "sha512-VQe+Q5CYiGOgcCERXhcfNsbnrN92FDEKciMH/x6LppU9dd0j4aTjCTlqONFOIMcAm/5JxS3+utowbXV1OoFr+g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", @@ -8528,6 +8552,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.28.4" }, @@ -9919,7 +9944,6 @@ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -10149,6 +10173,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "dependencies": { "@inquirer/confirm": "^5.0.0", "@mswjs/interceptors": "^0.41.0", @@ -10876,6 +10901,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -11046,6 +11072,7 @@ "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -11083,7 +11110,6 @@ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -11099,7 +11125,6 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10" }, @@ -11159,6 +11184,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -11200,6 +11226,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -11239,8 +11266,7 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/react-refresh": { "version": "0.18.0", @@ -11573,6 +11599,7 @@ "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -11706,14 +11733,15 @@ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.4.2.tgz", "integrity": "sha512-N3HEHRCZYn3cQbsC4B5ldj9j+tHdf4JZoYPlcI4rRYu0Xy4qN8MQf1Z08EibzB0WpgRG5BGK08FTrmM66eSzKQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=10" } }, "node_modules/seroval-plugins": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.4.0.tgz", - "integrity": "sha512-zir1aWzoiax6pbBVjoYVd0O1QQXgIL3eVGBMsBsNmM8Ukq90yGaWlfx0AB9dTS8GPqrOrbXn79vmItCUP9U3BQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.5.1.tgz", + "integrity": "sha512-4FbuZ/TMl02sqv0RTFexu0SP6V+ywaIe5bAWCCEik0fk17BhALgwvUDVF7e3Uvf9pxmwCEJsRPmlkUE6HdzLAw==", "license": "MIT", "engines": { "node": ">=10" @@ -11936,6 +11964,7 @@ "integrity": "sha512-yueTpl5YJqLzQqs3CanxNdAAfFU23iP0j+JVJURE4ghfEtRmWfWoZWLGkVcyjmgum7UmjwAlqRuOjQDNvH89kw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@storybook/global": "^5.0.0", "@storybook/icons": "^2.0.1", @@ -12554,6 +12583,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12821,6 +12851,7 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -12908,6 +12939,7 @@ "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", @@ -13232,6 +13264,7 @@ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10.0.0" }, diff --git a/frontend/package.json b/frontend/package.json index a09ff9baa..db83e4e9e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -23,7 +23,7 @@ "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", "@tanstack/react-query": "^5.90.21", - "@tanstack/react-router": "^1.150.0", + "@tanstack/react-router": "^1.167.4", "@vector-im/compound-design-tokens": "6.10.1", "@vector-im/compound-web": "^8.3.5", "@zxcvbn-ts/core": "^3.0.4", @@ -49,8 +49,8 @@ "@storybook/addon-docs": "^10.2.17", "@storybook/react-vite": "^10.2.17", "@tanstack/react-query-devtools": "^5.91.3", - "@tanstack/react-router-devtools": "^1.150.0", - "@tanstack/router-plugin": "^1.150.0", + "@tanstack/react-router-devtools": "^1.166.9", + "@tanstack/router-plugin": "^1.166.13", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.1", "@testing-library/user-event": "^14.6.1", From c302f3e47a86c187f1c559e09123d7c8254ff65e Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Tue, 17 Mar 2026 10:35:03 +0100 Subject: [PATCH 089/104] Regenerate route tree --- frontend/src/routeTree.gen.ts | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/frontend/src/routeTree.gen.ts b/frontend/src/routeTree.gen.ts index 4338a8008..bd0bdbc7f 100644 --- a/frontend/src/routeTree.gen.ts +++ b/frontend/src/routeTree.gen.ts @@ -117,22 +117,22 @@ const AccountSessionsBrowsersRoute = AccountSessionsBrowsersRouteImport.update({ } as any) export interface FileRoutesByFullPath { + '/': typeof AccountIndexRoute '/reset-cross-signing': typeof ResetCrossSigningRouteWithChildren '/clients/$id': typeof ClientsIdRoute '/devices/$': typeof DevicesSplatRoute '/reset-cross-signing/cancelled': typeof ResetCrossSigningCancelledRoute '/reset-cross-signing/success': typeof ResetCrossSigningSuccessRoute '/sessions/$id': typeof SessionsIdRoute - '/': typeof AccountIndexRoute '/reset-cross-signing/': typeof ResetCrossSigningIndexRoute '/sessions/browsers': typeof AccountSessionsBrowsersRoute '/emails/$id/in-use': typeof EmailsIdInUseRoute '/emails/$id/verify': typeof EmailsIdVerifyRoute '/password/change/success': typeof PasswordChangeSuccessRoute - '/plan': typeof AccountPlanIndexRoute - '/sessions': typeof AccountSessionsIndexRoute - '/password/change': typeof PasswordChangeIndexRoute - '/password/recovery': typeof PasswordRecoveryIndexRoute + '/plan/': typeof AccountPlanIndexRoute + '/sessions/': typeof AccountSessionsIndexRoute + '/password/change/': typeof PasswordChangeIndexRoute + '/password/recovery/': typeof PasswordRecoveryIndexRoute } export interface FileRoutesByTo { '/clients/$id': typeof ClientsIdRoute @@ -174,22 +174,22 @@ export interface FileRoutesById { export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath fullPaths: + | '/' | '/reset-cross-signing' | '/clients/$id' | '/devices/$' | '/reset-cross-signing/cancelled' | '/reset-cross-signing/success' | '/sessions/$id' - | '/' | '/reset-cross-signing/' | '/sessions/browsers' | '/emails/$id/in-use' | '/emails/$id/verify' | '/password/change/success' - | '/plan' - | '/sessions' - | '/password/change' - | '/password/recovery' + | '/plan/' + | '/sessions/' + | '/password/change/' + | '/password/recovery/' fileRoutesByTo: FileRoutesByTo to: | '/clients/$id' @@ -253,7 +253,7 @@ declare module '@tanstack/react-router' { '/_account': { id: '/_account' path: '' - fullPath: '' + fullPath: '/' preLoaderRoute: typeof AccountRouteImport parentRoute: typeof rootRouteImport } @@ -309,28 +309,28 @@ declare module '@tanstack/react-router' { '/password/recovery/': { id: '/password/recovery/' path: '/password/recovery' - fullPath: '/password/recovery' + fullPath: '/password/recovery/' preLoaderRoute: typeof PasswordRecoveryIndexRouteImport parentRoute: typeof rootRouteImport } '/password/change/': { id: '/password/change/' path: '/password/change' - fullPath: '/password/change' + fullPath: '/password/change/' preLoaderRoute: typeof PasswordChangeIndexRouteImport parentRoute: typeof rootRouteImport } '/_account/sessions/': { id: '/_account/sessions/' path: '/sessions' - fullPath: '/sessions' + fullPath: '/sessions/' preLoaderRoute: typeof AccountSessionsIndexRouteImport parentRoute: typeof AccountRoute } '/_account/plan/': { id: '/_account/plan/' path: '/plan' - fullPath: '/plan' + fullPath: '/plan/' preLoaderRoute: typeof AccountPlanIndexRouteImport parentRoute: typeof AccountRoute } From 507ae938b4e3941856eb9dbf2ac054aac4a8af47 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Tue, 17 Mar 2026 10:34:40 +0100 Subject: [PATCH 090/104] Fix dummy test router --- frontend/src/test-utils/router.tsx | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/frontend/src/test-utils/router.tsx b/frontend/src/test-utils/router.tsx index 0a312899a..a6faa924b 100644 --- a/frontend/src/test-utils/router.tsx +++ b/frontend/src/test-utils/router.tsx @@ -9,9 +9,7 @@ import { createRootRoute, createRoute, createRouter, - matchContext, RouterContextProvider, - useRouterState, } from "@tanstack/react-router"; const rootRoute = createRootRoute(); @@ -27,22 +25,6 @@ const router = createRouter({ }); router.load(); -const InnerProvider: React.FC = ({ children }) => { - const matchId = useRouterState({ - select: (s) => { - return s.matches[0]?.id; - }, - }); - - return ( - {children} - ); -}; - export const DummyRouter: React.FC = ({ children, -}) => ( - - {children} - -); +}) => {children}; From 2c4308013608b8dbb62885871ec61ab61229ad5b Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Tue, 17 Mar 2026 10:56:53 +0100 Subject: [PATCH 091/104] Update Cargo.lock and cargo-deny skip list --- Cargo.lock | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- deny.toml | 2 ++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1868294f8..7c4dea2a5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1139,6 +1139,16 @@ dependencies = [ "url", ] +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation" version = "0.10.1" @@ -2375,9 +2385,11 @@ dependencies = [ "percent-encoding", "pin-project-lite", "socket2", + "system-configuration", "tokio", "tower-service", "tracing", + "windows-registry", ] [[package]] @@ -5200,7 +5212,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be59af91596cac372a6942530653ad0c3a246cdd491aaa9dcaee47f88d67d5a0" dependencies = [ - "core-foundation", + "core-foundation 0.10.1", "core-foundation-sys", "jni", "log", @@ -5397,7 +5409,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b369d18893388b345804dc0007963c99b7d665ae71d275812d828c6f089640" dependencies = [ "bitflags", - "core-foundation", + "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", @@ -6185,6 +6197,27 @@ dependencies = [ "syn", ] +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "target-lexicon" version = "0.13.3" @@ -7385,6 +7418,17 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-registry" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f91f87ce112ffb7275000ea98eb1940912c21c1567c9312fde20261f3eadd29" +dependencies = [ + "windows-link 0.2.1", + "windows-result", + "windows-strings", +] + [[package]] name = "windows-result" version = "0.4.0" diff --git a/deny.toml b/deny.toml index 1671119ca..d75b25fce 100644 --- a/deny.toml +++ b/deny.toml @@ -71,6 +71,8 @@ skip = [ # cron depends on this old version # https://github.com/zslayton/cron/pull/137 { name = "winnow", version = "0.6.20" }, + # hyper-util -> system-configuration depends on this old version + { name = "core-foundation", version = "0.9.4" }, # We are still mainly using rand 0.8 { name = "rand", version = "0.8.5" }, From 1426ea4b2252f89807aaa3c5d02aeaa786fdca78 Mon Sep 17 00:00:00 2001 From: Olivier 'reivilibre Date: Tue, 17 Mar 2026 11:19:34 +0000 Subject: [PATCH 092/104] Add support for locking to the mock homeserver and use in tests --- crates/handlers/src/admin/v1/users/lock.rs | 34 +++++++++++++++++- crates/handlers/src/admin/v1/users/unlock.rs | 36 +++++++++++++++++--- crates/matrix/src/mock.rs | 22 ++++++++++-- 3 files changed, 83 insertions(+), 9 deletions(-) diff --git a/crates/handlers/src/admin/v1/users/lock.rs b/crates/handlers/src/admin/v1/users/lock.rs index e2ebfa574..d80cc6451 100644 --- a/crates/handlers/src/admin/v1/users/lock.rs +++ b/crates/handlers/src/admin/v1/users/lock.rs @@ -102,7 +102,11 @@ mod tests { use chrono::Duration; use hyper::{Request, StatusCode}; use mas_data_model::Clock; - use mas_storage::{RepositoryAccess, user::UserRepository}; + use mas_storage::{ + RepositoryAccess, + queue::{ProvisionUserJob, QueueJobRepositoryExt}, + user::UserRepository, + }; use sqlx::PgPool; use crate::test_utils::{RequestBuilderExt, ResponseExt, TestState, setup}; @@ -119,8 +123,25 @@ mod tests { .add(&mut state.rng(), &state.clock, "alice".to_owned()) .await .unwrap(); + + repo.queue_job() + .schedule_job(&mut state.rng(), &state.clock, ProvisionUserJob::new(&user)) + .await + .unwrap(); + repo.save().await.unwrap(); + state.run_jobs_in_queue().await; + assert!( + !state + .homeserver_connection + .query_user_raw("alice") + .await + .unwrap() + .locked, + "User should not be locked at start of test" + ); + let request = Request::post(format!("/api/admin/v1/users/{}/lock", user.id)) .bearer(&token) .empty(); @@ -133,6 +154,17 @@ mod tests { body["data"]["attributes"]["locked_at"], serde_json::json!(state.clock.now()) ); + + state.run_jobs_in_queue().await; + assert!( + state + .homeserver_connection + .query_user_raw("alice") + .await + .unwrap() + .locked, + "User should be locked" + ); } #[sqlx::test(migrator = "mas_storage_pg::MIGRATOR")] diff --git a/crates/handlers/src/admin/v1/users/unlock.rs b/crates/handlers/src/admin/v1/users/unlock.rs index c14d0b5d3..d580ab27c 100644 --- a/crates/handlers/src/admin/v1/users/unlock.rs +++ b/crates/handlers/src/admin/v1/users/unlock.rs @@ -102,7 +102,11 @@ mod tests { use hyper::{Request, StatusCode}; use mas_data_model::Clock; use mas_matrix::{HomeserverConnection, ProvisionRequest}; - use mas_storage::{RepositoryAccess, user::UserRepository}; + use mas_storage::{ + RepositoryAccess, + queue::{ProvisionUserJob, QueueJobRepositoryExt}, + user::UserRepository, + }; use sqlx::PgPool; use crate::test_utils::{RequestBuilderExt, ResponseExt, TestState, setup}; @@ -120,16 +124,27 @@ mod tests { .await .unwrap(); let user = repo.user().lock(&state.clock, user).await.unwrap(); - repo.save().await.unwrap(); // Also provision the user on the homeserver, because this endpoint will try to // reactivate it - state - .homeserver_connection - .provision_user(&ProvisionRequest::new(&user.username, &user.sub, false)) + repo.queue_job() + .schedule_job(&mut state.rng(), &state.clock, ProvisionUserJob::new(&user)) .await .unwrap(); + repo.save().await.unwrap(); + + state.run_jobs_in_queue().await; + assert!( + state + .homeserver_connection + .query_user_raw("alice") + .await + .unwrap() + .locked, + "User should be locked at start of test" + ); + let request = Request::post(format!("/api/admin/v1/users/{}/unlock", user.id)) .bearer(&token) .empty(); @@ -141,6 +156,17 @@ mod tests { body["data"]["attributes"]["locked_at"], serde_json::Value::Null ); + + state.run_jobs_in_queue().await; + assert!( + !state + .homeserver_connection + .query_user_raw("alice") + .await + .unwrap() + .locked, + "User should not be locked" + ); } #[sqlx::test(migrator = "mas_storage_pg::MIGRATOR")] diff --git a/crates/matrix/src/mock.rs b/crates/matrix/src/mock.rs index 1334d7e4f..2dbbf4b9a 100644 --- a/crates/matrix/src/mock.rs +++ b/crates/matrix/src/mock.rs @@ -10,9 +10,10 @@ use anyhow::Context; use async_trait::async_trait; use tokio::sync::RwLock; -use crate::{MatrixUser, ProvisionRequest}; +use crate::{HomeserverConnection as _, MatrixUser, ProvisionRequest}; -struct MockUser { +#[derive(Clone)] +pub struct MockUser { sub: String, avatar_url: Option, displayname: Option, @@ -20,6 +21,7 @@ struct MockUser { emails: Option>, cross_signing_reset_allowed: bool, deactivated: bool, + pub locked: bool, } /// A mock implementation of a [`HomeserverConnection`], which never fails and @@ -50,6 +52,18 @@ impl HomeserverConnection { pub async fn reserve_localpart(&self, localpart: &'static str) { self.reserved_localparts.write().await.insert(localpart); } + + /// Like `query_user` but get the raw test state of the user. + /// + /// # Errors + /// + /// Will fail if the user doesn't exist. + pub async fn query_user_raw(&self, localpart: &str) -> Result { + let mxid = self.mxid(localpart); + let users = self.users.read().await; + let user = users.get(&mxid).context("User not found")?; + Ok(user.clone()) + } } #[async_trait] @@ -85,6 +99,7 @@ impl crate::HomeserverConnection for HomeserverConnection { emails: None, cross_signing_reset_allowed: false, deactivated: false, + locked: false, }); anyhow::ensure!( @@ -104,6 +119,8 @@ impl crate::HomeserverConnection for HomeserverConnection { user.avatar_url = avatar_url.map(ToOwned::to_owned); }); + user.locked = request.locked(); + Ok(inserted) } @@ -219,7 +236,6 @@ impl crate::HomeserverConnection for HomeserverConnection { #[cfg(test)] mod tests { use super::*; - use crate::HomeserverConnection as _; #[tokio::test] async fn test_mock_connection() { From 33abb755fba469de37ef79684541da8b554b756b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Mar 2026 13:54:11 +0000 Subject: [PATCH 093/104] build(deps): bump docker/bake-action from 6.10.0 to 7.0.0 Bumps [docker/bake-action](https://github.com/docker/bake-action) from 6.10.0 to 7.0.0. - [Release notes](https://github.com/docker/bake-action/releases) - [Commits](https://github.com/docker/bake-action/compare/v6.10.0...v7.0.0) --- updated-dependencies: - dependency-name: docker/bake-action dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index e7b9d7775..7acb4187b 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -276,7 +276,7 @@ jobs: - name: Build and push id: bake - uses: docker/bake-action@v6.10.0 + uses: docker/bake-action@v7.0.0 with: files: | ./docker-bake.hcl From 318a27f5cacd5906587620ee79b629d1582802ff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Mar 2026 13:54:53 +0000 Subject: [PATCH 094/104] build(deps-dev): bump the storybook group in /frontend with 3 updates Bumps the storybook group in /frontend with 3 updates: [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/docs), [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) and [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/core). Updates `@storybook/addon-docs` from 10.2.17 to 10.2.19 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.19/code/addons/docs) Updates `@storybook/react-vite` from 10.2.17 to 10.2.19 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.19/code/frameworks/react-vite) Updates `storybook` from 10.2.17 to 10.2.19 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.2.19/code/core) --- updated-dependencies: - dependency-name: "@storybook/addon-docs" dependency-version: 10.2.19 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: "@storybook/react-vite" dependency-version: 10.2.19 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: storybook dependency-version: 10.2.19 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 123 +++++++++++++++---------------------- frontend/package.json | 4 +- 2 files changed, 52 insertions(+), 75 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 40e240b11..8253c6704 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -36,8 +36,8 @@ "@graphql-codegen/cli": "^6.1.2", "@graphql-codegen/client-preset": "^5.2.3", "@graphql-codegen/typescript-msw": "^3.0.1", - "@storybook/addon-docs": "^10.2.17", - "@storybook/react-vite": "^10.2.17", + "@storybook/addon-docs": "^10.2.19", + "@storybook/react-vite": "^10.2.19", "@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-router-devtools": "^1.166.9", "@tanstack/router-plugin": "^1.166.13", @@ -147,7 +147,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -1808,7 +1807,6 @@ "resolved": "https://registry.npmjs.org/@fontsource/inconsolata/-/inconsolata-5.2.8.tgz", "integrity": "sha512-lIZW+WOZYpUH91g9r6rYYhfTmptF3YPPM54ZOs8IYVeeL4SeiAu4tfj7mdr8llYEq31DLYgi6JtGIJa192gB0Q==", "license": "OFL-1.1", - "peer": true, "funding": { "url": "https://github.com/sponsors/ayuhito" } @@ -1818,7 +1816,6 @@ "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.2.8.tgz", "integrity": "sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==", "license": "OFL-1.1", - "peer": true, "funding": { "url": "https://github.com/sponsors/ayuhito" } @@ -1853,7 +1850,6 @@ "integrity": "sha512-BQ49LF0jnQNL12rU1RucTemoX1bHx8slR4B11nOrp4k5NTojhcc1A1czzU5wXCK/1+ezNHrVGONWg3jxZUy08w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/generator": "^7.18.13", "@babel/template": "^7.18.10", @@ -5005,16 +5001,16 @@ "license": "MIT" }, "node_modules/@storybook/addon-docs": { - "version": "10.2.17", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.17.tgz", - "integrity": "sha512-c414xi7rxlaHn92qWOxtEkcOMm0/+cvBui0gUsgiWOZOM8dHChGZ/RjMuf1pPDyOrSsybLsPjZhP0WthsMDkdQ==", + "version": "10.2.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.19.tgz", + "integrity": "sha512-tXugthdzjX5AkGWDSP4pnRgA/CWlOaEKp/+y9JOGXHLQmm1GHjW+4brNvNkKbjBl06LALXwlcTOyU4lyVRDLAw==", "dev": true, "license": "MIT", "dependencies": { "@mdx-js/react": "^3.0.0", - "@storybook/csf-plugin": "10.2.17", + "@storybook/csf-plugin": "10.2.19", "@storybook/icons": "^2.0.1", - "@storybook/react-dom-shim": "10.2.17", + "@storybook/react-dom-shim": "10.2.19", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "ts-dedent": "^2.0.0" @@ -5024,17 +5020,17 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.17" + "storybook": "^10.2.19" } }, "node_modules/@storybook/builder-vite": { - "version": "10.2.17", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.17.tgz", - "integrity": "sha512-m/OBveTLm5ds/tUgHmmbKzgSi/oeCpQwm5rZa49vP2BpAd41Q7ER6TzkOoISzPoNNMAcbVmVc5vn7k6hdbPSHw==", + "version": "10.2.19", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.19.tgz", + "integrity": "sha512-a59xALzM9GeYh6p+wzAeBbDyIe+qyrC4nxS3QNzb5i2ZOhrq1iIpvnDaOWe80NC8mV3IlqUEGY8Uawkf//1Rmg==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf-plugin": "10.2.17", + "@storybook/csf-plugin": "10.2.19", "ts-dedent": "^2.0.0" }, "funding": { @@ -5042,14 +5038,14 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.17", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" + "storybook": "^10.2.19", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/@storybook/csf-plugin": { - "version": "10.2.17", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.17.tgz", - "integrity": "sha512-crHH8i/4mwzeXpWRPgwvwX2vjytW42zyzTRySUax5dTU8o9sjk4y+Z9hkGx3Nmu1TvqseS8v1Z20saZr/tQcWw==", + "version": "10.2.19", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.19.tgz", + "integrity": "sha512-BpjYIOdyQn/Rm6MjUAc5Gl8HlARZrskD/OhUNShiOh2fznb523dHjiE5mbU1kKM/+L1uvRlEqqih40rTx+xCrg==", "dev": true, "license": "MIT", "dependencies": { @@ -5062,7 +5058,7 @@ "peerDependencies": { "esbuild": "*", "rollup": "*", - "storybook": "^10.2.17", + "storybook": "^10.2.19", "vite": "*", "webpack": "*" }, @@ -5100,14 +5096,14 @@ } }, "node_modules/@storybook/react": { - "version": "10.2.17", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.2.17.tgz", - "integrity": "sha512-875AVMYil2X9Civil6GFZ8koIzlKxcXbl2eJ7+/GPbhIonTNmwx0qbWPHttjZXUvFuQ4RRtb9KkBwy4TCb/LeA==", + "version": "10.2.19", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.2.19.tgz", + "integrity": "sha512-gm2qxLyYSsGp7fee5i+d8jSVUKMla8yRaTJ1wxPEnyaJMd0QUu6U2v3p2rW7PH1DWop3D6NqWOY8kmZjmSZKlA==", "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/react-dom-shim": "10.2.17", + "@storybook/react-dom-shim": "10.2.19", "react-docgen": "^8.0.2" }, "funding": { @@ -5117,7 +5113,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.17", + "storybook": "^10.2.19", "typescript": ">= 4.9.x" }, "peerDependenciesMeta": { @@ -5127,9 +5123,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "10.2.17", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.17.tgz", - "integrity": "sha512-x9Kb7eUSZ1zGsEw/TtWrvs1LwWIdNp8qoOQCgPEjdB07reSJcE8R3+ASWHJThmd4eZf66ZALPJyerejake4Osw==", + "version": "10.2.19", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.19.tgz", + "integrity": "sha512-BXCEfBGVBRYBTYeBeH/PJsy0Bq5MERe/HiaylR+ah/XrvIr2Z9bkne1J8yYiXCjiyq5HQa7Bj11roz0+vyUaEw==", "dev": true, "license": "MIT", "funding": { @@ -5139,20 +5135,20 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.17" + "storybook": "^10.2.19" } }, "node_modules/@storybook/react-vite": { - "version": "10.2.17", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.2.17.tgz", - "integrity": "sha512-E/1hNmxVsjy9l3TuaNufSqkdz8saTJUGEs8GRCjKlF7be2wljIwewUxjAT3efk+bxOCw76ZmqGHk6MnRa3y7Gw==", + "version": "10.2.19", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.2.19.tgz", + "integrity": "sha512-2/yMKrK4IqMIZicRpPMoIg+foBuWnkaEWt0R4V4hjErDj/SC3D9ov+GUqhjKJ81TegijhKzNpwnSD7Nf87haKw==", "dev": true, "license": "MIT", "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "^0.6.4", "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "10.2.17", - "@storybook/react": "10.2.17", + "@storybook/builder-vite": "10.2.19", + "@storybook/react": "10.2.19", "empathic": "^2.0.0", "magic-string": "^0.30.0", "react-docgen": "^8.0.0", @@ -5166,8 +5162,8 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.17", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" + "storybook": "^10.2.19", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/@swc/core": { @@ -5435,7 +5431,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.21.tgz", "integrity": "sha512-0Lu6y5t+tvlTJMTO7oh5NSpJfpg/5D41LlThfepTixPYkJ0sE2Jj0m0f6yYqujBwIXlId87e234+MxG3D3g7kg==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/query-core": "5.90.20" }, @@ -5470,7 +5465,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.167.4.tgz", "integrity": "sha512-VpbZh382zX3WF4+X2Z+EUyd8eJhJyjg9C6ByYwrVZiWbhgbMK4+zQQIG2+lCAlIlDi7SV8fDcGL09NA8Z2kpGQ==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/history": "1.161.6", "@tanstack/react-store": "^0.9.1", @@ -5542,7 +5536,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.167.4.tgz", "integrity": "sha512-Gk5V9Zr5JFJ4SbLyCheQLJ3MnXddccENPA+DJRz+9g3QxtN8DJB8w8KCUCgDeYlWp4LvmO4nX3fy3tupqVP2Pw==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/history": "1.161.6", "@tanstack/store": "^0.9.1", @@ -5848,7 +5841,8 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -5940,7 +5934,6 @@ "integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.18.0" } @@ -5951,7 +5944,6 @@ "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -5962,7 +5954,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -6010,7 +6001,6 @@ "resolved": "https://registry.npmjs.org/@vector-im/compound-design-tokens/-/compound-design-tokens-6.10.1.tgz", "integrity": "sha512-rbb+aUQhB6DppZrfZpwg5o2K4Uzil5QGmAoOSBmAdfgFMwQWkhwk1jnZozbH/vbsqwTLtRdX6tztXRZ1W9sJ0A==", "license": "SEE LICENSE IN README.md", - "peer": true, "peerDependencies": { "@types/react": "*", "react": "^17 || ^18 || ^19.0.0" @@ -6688,7 +6678,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -7288,8 +7277,7 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", @@ -7503,7 +7491,8 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/dot-case": { "version": "3.0.4", @@ -7603,7 +7592,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -8130,7 +8118,6 @@ "integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -8453,7 +8440,6 @@ "integrity": "sha512-VQe+Q5CYiGOgcCERXhcfNsbnrN92FDEKciMH/x6LppU9dd0j4aTjCTlqONFOIMcAm/5JxS3+utowbXV1OoFr+g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", @@ -8552,7 +8538,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.28.4" }, @@ -9944,6 +9929,7 @@ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -10173,7 +10159,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "@inquirer/confirm": "^5.0.0", "@mswjs/interceptors": "^0.41.0", @@ -10901,7 +10886,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -11072,7 +11056,6 @@ "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -11110,6 +11093,7 @@ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -11125,6 +11109,7 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -11184,15 +11169,14 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/react-docgen": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-8.0.2.tgz", - "integrity": "sha512-+NRMYs2DyTP4/tqWz371Oo50JqmWltR1h2gcdgUMAWZJIAvrd0/SqlCfx7tpzpl/s36rzw6qH2MjoNrxtRNYhA==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-8.0.3.tgz", + "integrity": "sha512-aEZ9qP+/M+58x2qgfSFEWH1BxLyHe5+qkLNJOZQb5iGS017jpbRnoKhNRrXPeA6RfBrZO5wZrT9DMC1UqE1f1w==", "dev": true, "license": "MIT", "dependencies": { @@ -11226,7 +11210,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -11266,7 +11249,8 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/react-refresh": { "version": "0.18.0", @@ -11599,7 +11583,6 @@ "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -11733,7 +11716,6 @@ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.4.2.tgz", "integrity": "sha512-N3HEHRCZYn3cQbsC4B5ldj9j+tHdf4JZoYPlcI4rRYu0Xy4qN8MQf1Z08EibzB0WpgRG5BGK08FTrmM66eSzKQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=10" } @@ -11959,12 +11941,11 @@ } }, "node_modules/storybook": { - "version": "10.2.17", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.17.tgz", - "integrity": "sha512-yueTpl5YJqLzQqs3CanxNdAAfFU23iP0j+JVJURE4ghfEtRmWfWoZWLGkVcyjmgum7UmjwAlqRuOjQDNvH89kw==", + "version": "10.2.19", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.19.tgz", + "integrity": "sha512-UUm5eGSm6BLhkcFP0WbxkmAHJZfVN2ViLpIZOqiIPS++q32VYn+CLFC0lrTYTDqYvaG7i4BK4uowXYujzE4NdQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@storybook/global": "^5.0.0", "@storybook/icons": "^2.0.1", @@ -12583,7 +12564,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12851,7 +12831,6 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -12939,7 +12918,6 @@ "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", @@ -13264,7 +13242,6 @@ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.0.0" }, diff --git a/frontend/package.json b/frontend/package.json index db83e4e9e..34a3b789f 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -46,8 +46,8 @@ "@graphql-codegen/cli": "^6.1.2", "@graphql-codegen/client-preset": "^5.2.3", "@graphql-codegen/typescript-msw": "^3.0.1", - "@storybook/addon-docs": "^10.2.17", - "@storybook/react-vite": "^10.2.17", + "@storybook/addon-docs": "^10.2.19", + "@storybook/react-vite": "^10.2.19", "@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-router-devtools": "^1.166.9", "@tanstack/router-plugin": "^1.166.13", From 90fa2ce7d1b5adaa182a13471cf9ebfeb43a537e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Mar 2026 13:54:56 +0000 Subject: [PATCH 095/104] build(deps): bump the i18next group across 1 directory with 3 updates Bumps the i18next group with 3 updates in the /frontend directory: [i18next](https://github.com/i18next/i18next), [react-i18next](https://github.com/i18next/react-i18next) and [i18next-cli](https://github.com/i18next/i18next-cli). Updates `i18next` from 25.8.13 to 25.8.14 - [Release notes](https://github.com/i18next/i18next/releases) - [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next/compare/v25.8.13...v25.8.14) Updates `react-i18next` from 16.5.4 to 16.5.5 - [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/react-i18next/compare/v16.5.4...v16.5.5) Updates `i18next-cli` from 1.47.9 to 1.49.3 - [Changelog](https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next-cli/compare/v1.47.9...v1.49.3) --- updated-dependencies: - dependency-name: i18next dependency-version: 25.8.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: i18next - dependency-name: react-i18next dependency-version: 16.5.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: i18next - dependency-name: i18next-cli dependency-version: 1.49.3 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: i18next ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 401 +++++++++++++++++-------------------- frontend/package.json | 6 +- 2 files changed, 187 insertions(+), 220 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 40e240b11..eb1e9a4de 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -20,10 +20,10 @@ "@zxcvbn-ts/language-common": "^3.0.4", "classnames": "^2.5.1", "date-fns": "^4.1.0", - "i18next": "^25.8.13", + "i18next": "^25.8.18", "react": "^19.2.4", "react-dom": "^19.2.4", - "react-i18next": "^16.5.4", + "react-i18next": "^16.5.8", "swagger-ui-dist": "^5.31.0", "valibot": "^1.2.0", "vaul": "^1.1.2" @@ -54,7 +54,7 @@ "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", "happy-dom": "^20.5.0", - "i18next-cli": "^1.47.9", + "i18next-cli": "^1.50.3", "knip": "^5.81.0", "msw": "^2.12.8", "msw-storybook-addon": "^2.0.6", @@ -147,7 +147,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -913,9 +912,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1808,7 +1807,6 @@ "resolved": "https://registry.npmjs.org/@fontsource/inconsolata/-/inconsolata-5.2.8.tgz", "integrity": "sha512-lIZW+WOZYpUH91g9r6rYYhfTmptF3YPPM54ZOs8IYVeeL4SeiAu4tfj7mdr8llYEq31DLYgi6JtGIJa192gB0Q==", "license": "OFL-1.1", - "peer": true, "funding": { "url": "https://github.com/sponsors/ayuhito" } @@ -1818,7 +1816,6 @@ "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.2.8.tgz", "integrity": "sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==", "license": "OFL-1.1", - "peer": true, "funding": { "url": "https://github.com/sponsors/ayuhito" } @@ -1853,7 +1850,6 @@ "integrity": "sha512-BQ49LF0jnQNL12rU1RucTemoX1bHx8slR4B11nOrp4k5NTojhcc1A1czzU5wXCK/1+ezNHrVGONWg3jxZUy08w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/generator": "^7.18.13", "@babel/template": "^7.18.10", @@ -5171,9 +5167,9 @@ } }, "node_modules/@swc/core": { - "version": "1.15.17", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.17.tgz", - "integrity": "sha512-Mu3eOrYlkdQPl7yqotNckitTr6FZ0yd7mlWIBEzK+EGIyybgMENJHmbS2DeA7BMleJiBElP6ke+Nz93pkKmKJw==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.18.tgz", + "integrity": "sha512-z87aF9GphWp//fnkRsqvtY+inMVPgYW3zSlXH1kJFvRT5H/wiAn+G32qW5l3oEk63KSF1x3Ov0BfHCObAmT8RA==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -5189,16 +5185,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.15.17", - "@swc/core-darwin-x64": "1.15.17", - "@swc/core-linux-arm-gnueabihf": "1.15.17", - "@swc/core-linux-arm64-gnu": "1.15.17", - "@swc/core-linux-arm64-musl": "1.15.17", - "@swc/core-linux-x64-gnu": "1.15.17", - "@swc/core-linux-x64-musl": "1.15.17", - "@swc/core-win32-arm64-msvc": "1.15.17", - "@swc/core-win32-ia32-msvc": "1.15.17", - "@swc/core-win32-x64-msvc": "1.15.17" + "@swc/core-darwin-arm64": "1.15.18", + "@swc/core-darwin-x64": "1.15.18", + "@swc/core-linux-arm-gnueabihf": "1.15.18", + "@swc/core-linux-arm64-gnu": "1.15.18", + "@swc/core-linux-arm64-musl": "1.15.18", + "@swc/core-linux-x64-gnu": "1.15.18", + "@swc/core-linux-x64-musl": "1.15.18", + "@swc/core-win32-arm64-msvc": "1.15.18", + "@swc/core-win32-ia32-msvc": "1.15.18", + "@swc/core-win32-x64-msvc": "1.15.18" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" @@ -5210,9 +5206,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.15.17", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.17.tgz", - "integrity": "sha512-eB9qdyt4E60323IS0rgV/rd79DJ+YWSyIKi+sT1dlIgR3ns4xlBiunREM3lVH0FKcUbhttiBvdVubT4QoOuZ+w==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.18.tgz", + "integrity": "sha512-+mIv7uBuSaywN3C9LNuWaX1jJJ3SKfiJuE6Lr3bd+/1Iv8oMU7oLBjYMluX1UrEPzwN2qCdY6Io0yVicABoCwQ==", "cpu": [ "arm64" ], @@ -5227,9 +5223,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.15.17", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.17.tgz", - "integrity": "sha512-k1TZARYs8947jJpSioqcPrusz+wEeABF4iiSdwcSyQh2rIUdIEk5FOyaqJASFPJ6dZfx7ZVOyjtDATVAegs2/Q==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.18.tgz", + "integrity": "sha512-wZle0eaQhnzxWX5V/2kEOI6Z9vl/lTFEC6V4EWcn+5pDjhemCpQv9e/TDJ0GIoiClX8EDWRvuZwh+Z3dhL1NAg==", "cpu": [ "x64" ], @@ -5244,9 +5240,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.15.17", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.17.tgz", - "integrity": "sha512-p6282NQZo5bzx0wphz1ETGjhcRB9CN+/XUAjQwApyoyX9iCloI5IT/RC3vjbflo42g8RPTxUTaItAO0hlLSesQ==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.18.tgz", + "integrity": "sha512-ao61HGXVqrJFHAcPtF4/DegmwEkVCo4HApnotLU8ognfmU8x589z7+tcf3hU+qBiU1WOXV5fQX6W9Nzs6hjxDw==", "cpu": [ "arm" ], @@ -5261,9 +5257,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.15.17", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.17.tgz", - "integrity": "sha512-TGnDS4ejy8y9jqxXqZCyA+DvFc64nXUHS9rxdyeJ9B9uyIdtKVhBrA2xfghYRS/sSPSyHZ0yu89NxBICvONH+A==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.18.tgz", + "integrity": "sha512-3xnctOBLIq3kj8PxOCgPrGjBLP/kNOddr6f5gukYt/1IZxsITQaU9TDyjeX6jG+FiCIHjCuWuffsyQDL5Ew1bg==", "cpu": [ "arm64" ], @@ -5278,9 +5274,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.15.17", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.17.tgz", - "integrity": "sha512-D0/6Hj4CkgSTTahtlGxv9IDsLTuvQz30mkZEMDp8TqwYhCL8AomznkibwlQU8HtY4q/dqd1OGRPH+FmNb4BBEA==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.18.tgz", + "integrity": "sha512-0a+Lix+FSSHBSBOA0XznCcHo5/1nA6oLLjcnocvzXeqtdjnPb+SvchItHI+lfeiuj1sClYPDvPMLSLyXFaiIKw==", "cpu": [ "arm64" ], @@ -5295,9 +5291,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.15.17", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.17.tgz", - "integrity": "sha512-1s2OFsg6DeRkWU7c+PIfIHZsFCbiZ34akXFHrg7KjpF8zIvpHZNoUUZimoWEwcB6GquXSkAO+1b5KpG5nusTeQ==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.18.tgz", + "integrity": "sha512-wG9J8vReUlpaHz4KOD/5UE1AUgirimU4UFT9oZmupUDEofxJKYb1mTA/DrMj0s78bkBiNI+7Fo2EgPuvOJfuAA==", "cpu": [ "x64" ], @@ -5312,9 +5308,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.15.17", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.17.tgz", - "integrity": "sha512-gtxGMGYtRWWmCcgx6xM2Yos43uiE/j8kZwkeL/LNGG9zM0tatd23NsfL9PnQJ45hY7QZ+dx2rM68e4ArgG4kJg==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.18.tgz", + "integrity": "sha512-4nwbVvCphKzicwNWRmvD5iBaZj8JYsRGa4xOxJmOyHlMDpsvvJ2OR2cODlvWyGFH6BYL1MfIAK3qph3hp0Az6g==", "cpu": [ "x64" ], @@ -5329,9 +5325,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.15.17", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.17.tgz", - "integrity": "sha512-gxi+/Miytez/O9vJ/QiheIivA3oWZjPp9nJu3VmAfLMWUzcZORMwgaI1ygtDTLjz7CzcwlGMJz/Ab66Y5DfNpg==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.18.tgz", + "integrity": "sha512-zk0RYO+LjiBCat2RTMHzAWaMky0cra9loH4oRrLKLLNuL+jarxKLFDA8xTZWEkCPLjUTwlRN7d28eDLLMgtUcQ==", "cpu": [ "arm64" ], @@ -5346,9 +5342,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.15.17", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.17.tgz", - "integrity": "sha512-KUsRqNbTp7SpNK0T9m4+i8GlngzNjwb69a3ttKA6XJ5r6Pewm+NSYji93pNkawXIivbWY2jhvceGMAyd+4hWaQ==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.18.tgz", + "integrity": "sha512-yVuTrZ0RccD5+PEkpcLOBAuPbYBXS6rslENvIXfvJGXSdX5QGi1ehC4BjAMl5FkKLiam4kJECUI0l7Hq7T1vwg==", "cpu": [ "ia32" ], @@ -5363,9 +5359,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.15.17", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.17.tgz", - "integrity": "sha512-zqtEGE0/rTKvEC5sOtpANLHeWEPjsTD4/rwpUxo6ymztcLI/Z+L9Wi9xQvIGmLTUih1gvNZcAwROqdfRP3oAWQ==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.18.tgz", + "integrity": "sha512-7NRmE4hmUQNCbYU3Hn9Tz57mK9Qq4c97ZS+YlamlK6qG9Fb5g/BB3gPDe0iLlJkns/sYv2VWSkm8c3NmbEGjbg==", "cpu": [ "x64" ], @@ -5435,7 +5431,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.21.tgz", "integrity": "sha512-0Lu6y5t+tvlTJMTO7oh5NSpJfpg/5D41LlThfepTixPYkJ0sE2Jj0m0f6yYqujBwIXlId87e234+MxG3D3g7kg==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/query-core": "5.90.20" }, @@ -5470,7 +5465,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.167.4.tgz", "integrity": "sha512-VpbZh382zX3WF4+X2Z+EUyd8eJhJyjg9C6ByYwrVZiWbhgbMK4+zQQIG2+lCAlIlDi7SV8fDcGL09NA8Z2kpGQ==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/history": "1.161.6", "@tanstack/react-store": "^0.9.1", @@ -5542,7 +5536,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.167.4.tgz", "integrity": "sha512-Gk5V9Zr5JFJ4SbLyCheQLJ3MnXddccENPA+DJRz+9g3QxtN8DJB8w8KCUCgDeYlWp4LvmO4nX3fy3tupqVP2Pw==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/history": "1.161.6", "@tanstack/store": "^0.9.1", @@ -5848,7 +5841,8 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -5940,7 +5934,6 @@ "integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.18.0" } @@ -5951,7 +5944,6 @@ "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -5962,7 +5954,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -6010,7 +6001,6 @@ "resolved": "https://registry.npmjs.org/@vector-im/compound-design-tokens/-/compound-design-tokens-6.10.1.tgz", "integrity": "sha512-rbb+aUQhB6DppZrfZpwg5o2K4Uzil5QGmAoOSBmAdfgFMwQWkhwk1jnZozbH/vbsqwTLtRdX6tztXRZ1W9sJ0A==", "license": "SEE LICENSE IN README.md", - "peer": true, "peerDependencies": { "@types/react": "*", "react": "^17 || ^18 || ^19.0.0" @@ -6688,7 +6678,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -7288,8 +7277,7 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", @@ -7503,7 +7491,8 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/dot-case": { "version": "3.0.4", @@ -7603,7 +7592,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -8130,7 +8118,6 @@ "integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -8453,7 +8440,6 @@ "integrity": "sha512-VQe+Q5CYiGOgcCERXhcfNsbnrN92FDEKciMH/x6LppU9dd0j4aTjCTlqONFOIMcAm/5JxS3+utowbXV1OoFr+g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", @@ -8534,9 +8520,9 @@ } }, "node_modules/i18next": { - "version": "25.8.13", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.8.13.tgz", - "integrity": "sha512-E0vzjBY1yM+nsFrtgkjLhST2NBkirkvOVoQa0MSldhsuZ3jUge7ZNpuwG0Cfc74zwo5ZwRzg3uOgT+McBn32iA==", + "version": "25.8.18", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.8.18.tgz", + "integrity": "sha512-lzY5X83BiL5AP77+9DydbrqkQHFN9hUzWGjqjLpPcp5ZOzuu1aSoKaU3xbBLSjWx9dAzW431y+d+aogxOZaKRA==", "funding": [ { "type": "individual", @@ -8552,9 +8538,8 @@ } ], "license": "MIT", - "peer": true, "dependencies": { - "@babel/runtime": "^7.28.4" + "@babel/runtime": "^7.28.6" }, "peerDependencies": { "typescript": "^5" @@ -8566,28 +8551,28 @@ } }, "node_modules/i18next-cli": { - "version": "1.47.9", - "resolved": "https://registry.npmjs.org/i18next-cli/-/i18next-cli-1.47.9.tgz", - "integrity": "sha512-ZdiV1BOufpw0SEuCkzHFSadW6Ldn0qXiEdOX1o/C4NbjNjSxSXKmXFxAQFLc1EMUyR0wAQTTFCjKYzBASlo+Ig==", + "version": "1.50.3", + "resolved": "https://registry.npmjs.org/i18next-cli/-/i18next-cli-1.50.3.tgz", + "integrity": "sha512-sXyEydTInPfWDGzbGEpSTIrIe0vNl0aLd4qw6lqk+g21CNImZ9t+eTPSkDRRBReBUOdgGC+TS2myqxZmwCPYIA==", "dev": true, "license": "MIT", "dependencies": { - "@croct/json5-parser": "0.2.2", - "@swc/core": "1.15.17", - "chokidar": "5.0.0", - "commander": "14.0.3", - "execa": "9.6.1", - "glob": "13.0.6", - "i18next-resources-for-ts": "2.0.0", - "inquirer": "13.3.0", - "jiti": "2.6.1", - "jsonc-parser": "3.3.1", - "magic-string": "0.30.12", - "minimatch": "10.2.4", - "ora": "9.3.0", + "@croct/json5-parser": "^0.2.2", + "@swc/core": "^1.15.18", + "chokidar": "^5.0.0", + "commander": "^14.0.3", + "execa": "^9.6.1", + "glob": "^13.0.6", + "i18next-resources-for-ts": "^2.0.2", + "inquirer": "^13.3.2", + "jiti": "^2.6.1", + "jsonc-parser": "^3.3.1", + "magic-string": "^0.30.21", + "minimatch": "^10.2.4", + "ora": "^9.3.0", "react": "^19.2.4", - "react-i18next": "^16.5.4", - "yaml": "2.8.2" + "react-i18next": "^16.5.8", + "yaml": "^2.8.2" }, "bin": { "i18next-cli": "dist/esm/cli.js" @@ -8612,16 +8597,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/i18next-cli/node_modules/magic-string": { - "version": "0.30.12", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", - "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, "node_modules/i18next-cli/node_modules/readdirp": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", @@ -8637,14 +8612,14 @@ } }, "node_modules/i18next-resources-for-ts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/i18next-resources-for-ts/-/i18next-resources-for-ts-2.0.0.tgz", - "integrity": "sha512-RvATolbJlxrwpZh2+R7ZcNtg0ewmXFFx6rdu9i2bUEBvn6ThgA82rxDe3rJQa3hFS0SopX0qPaABqVDN3TUVpw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/i18next-resources-for-ts/-/i18next-resources-for-ts-2.0.2.tgz", + "integrity": "sha512-BGPebhvjrvU+pgKNsIzb3cxl6/8LJw1pxNkIlUpnxCC4SXjbIwXeHuNxFnOkTAryRfMqYf81lPjYD2gngDyOfQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.28.4", - "@swc/core": "^1.15.3", + "@babel/runtime": "^7.28.6", + "@swc/core": "^1.15.18", "chokidar": "^5.0.0", "yaml": "^2.8.2" }, @@ -8789,16 +8764,16 @@ "license": "ISC" }, "node_modules/inquirer": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.3.0.tgz", - "integrity": "sha512-APTrZe9IhrsshL0u2PgmEMLP3CXDBjZ99xh5dR2+sryOt5R+JGL0KNuaTTT2lW54B9eNQDMutPR05UYTL7Xb1Q==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.3.2.tgz", + "integrity": "sha512-bh/OjBGxNR9qvfQj1n5bxtIF58mbOTp2InN5dKuwUK03dXcDGFsjlDinQRuXMZ4EGiJaFieUWHCAaxH2p7iUBw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/ansi": "^2.0.3", - "@inquirer/core": "^11.1.5", - "@inquirer/prompts": "^8.3.0", - "@inquirer/type": "^4.0.3", + "@inquirer/ansi": "^2.0.4", + "@inquirer/core": "^11.1.7", + "@inquirer/prompts": "^8.3.2", + "@inquirer/type": "^4.0.4", "mute-stream": "^3.0.0", "run-async": "^4.0.6", "rxjs": "^7.8.2" @@ -8816,9 +8791,9 @@ } }, "node_modules/inquirer/node_modules/@inquirer/ansi": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.3.tgz", - "integrity": "sha512-g44zhR3NIKVs0zUesa4iMzExmZpLUdTLRMCStqX3GE5NT6VkPcxQGJ+uC8tDgBUC/vB1rUhUd55cOf++4NZcmw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.4.tgz", + "integrity": "sha512-DpcZrQObd7S0R/U3bFdkcT5ebRwbTTC4D3tCc1vsJizmgPLxNJBo+AAFmrZwe8zk30P2QzgzGWZ3Q9uJwWuhIg==", "dev": true, "license": "MIT", "engines": { @@ -8826,16 +8801,16 @@ } }, "node_modules/inquirer/node_modules/@inquirer/checkbox": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.1.0.tgz", - "integrity": "sha512-/HjF1LN0a1h4/OFsbGKHNDtWICFU/dqXCdym719HFTyJo9IG7Otr+ziGWc9S0iQuohRZllh+WprSgd5UW5Fw0g==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.1.2.tgz", + "integrity": "sha512-PubpMPO2nJgMufkoB3P2wwxNXEMUXnBIKi/ACzDUYfaoPuM7gSTmuxJeMscoLVEsR4qqrCMf5p0SiYGWnVJ8kw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/ansi": "^2.0.3", - "@inquirer/core": "^11.1.5", - "@inquirer/figures": "^2.0.3", - "@inquirer/type": "^4.0.3" + "@inquirer/ansi": "^2.0.4", + "@inquirer/core": "^11.1.7", + "@inquirer/figures": "^2.0.4", + "@inquirer/type": "^4.0.4" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -8850,14 +8825,14 @@ } }, "node_modules/inquirer/node_modules/@inquirer/confirm": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.8.tgz", - "integrity": "sha512-Di6dgmiZ9xCSUxWUReWTqDtbhXCuG2MQm2xmgSAIruzQzBqNf49b8E07/vbCYY506kDe8BiwJbegXweG8M1klw==", + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.10.tgz", + "integrity": "sha512-tiNyA73pgpQ0FQ7axqtoLUe4GDYjNCDcVsbgcA5anvwg2z6i+suEngLKKJrWKJolT//GFPZHwN30binDIHgSgQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.5", - "@inquirer/type": "^4.0.3" + "@inquirer/core": "^11.1.7", + "@inquirer/type": "^4.0.4" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -8872,15 +8847,15 @@ } }, "node_modules/inquirer/node_modules/@inquirer/core": { - "version": "11.1.5", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.5.tgz", - "integrity": "sha512-QQPAX+lka8GyLcZ7u7Nb1h6q72iZ/oy0blilC3IB2nSt1Qqxp7akt94Jqhi/DzARuN3Eo9QwJRvtl4tmVe4T5A==", + "version": "11.1.7", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.7.tgz", + "integrity": "sha512-1BiBNDk9btIwYIzNZpkikIHXWeNzNncJePPqwDyVMhXhD1ebqbpn1mKGctpoqAbzywZfdG0O4tvmsGIcOevAPQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/ansi": "^2.0.3", - "@inquirer/figures": "^2.0.3", - "@inquirer/type": "^4.0.3", + "@inquirer/ansi": "^2.0.4", + "@inquirer/figures": "^2.0.4", + "@inquirer/type": "^4.0.4", "cli-width": "^4.1.0", "fast-wrap-ansi": "^0.2.0", "mute-stream": "^3.0.0", @@ -8899,15 +8874,15 @@ } }, "node_modules/inquirer/node_modules/@inquirer/editor": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.0.8.tgz", - "integrity": "sha512-sLcpbb9B3XqUEGrj1N66KwhDhEckzZ4nI/W6SvLXyBX8Wic3LDLENlWRvkOGpCPoserabe+MxQkpiMoI8irvyA==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.0.10.tgz", + "integrity": "sha512-VJx4XyaKea7t8hEApTw5dxeIyMtWXre2OiyJcICCRZI4hkoHsMoCnl/KbUnJJExLbH9csLLHMVR144ZhFE1CwA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.5", - "@inquirer/external-editor": "^2.0.3", - "@inquirer/type": "^4.0.3" + "@inquirer/core": "^11.1.7", + "@inquirer/external-editor": "^2.0.4", + "@inquirer/type": "^4.0.4" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -8922,14 +8897,14 @@ } }, "node_modules/inquirer/node_modules/@inquirer/expand": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.8.tgz", - "integrity": "sha512-QieW3F1prNw3j+hxO7/NKkG1pk3oz7pOB6+5Upwu3OIwADfPX0oZVppsqlL+Vl/uBHHDSOBY0BirLctLnXwGGg==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.10.tgz", + "integrity": "sha512-fC0UHJPXsTRvY2fObiwuQYaAnHrp3aDqfwKUJSdfpgv18QUG054ezGbaRNStk/BKD5IPijeMKWej8VV8O5Q/eQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.5", - "@inquirer/type": "^4.0.3" + "@inquirer/core": "^11.1.7", + "@inquirer/type": "^4.0.4" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -8944,9 +8919,9 @@ } }, "node_modules/inquirer/node_modules/@inquirer/external-editor": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-2.0.3.tgz", - "integrity": "sha512-LgyI7Agbda74/cL5MvA88iDpvdXI2KuMBCGRkbCl2Dg1vzHeOgs+s0SDcXV7b+WZJrv2+ERpWSM65Fpi9VfY3w==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-2.0.4.tgz", + "integrity": "sha512-Prenuv9C1PHj2Itx0BcAOVBTonz02Hc2Nd2DbU67PdGUaqn0nPCnV34oDyyoaZHnmfRxkpuhh/u51ThkrO+RdA==", "dev": true, "license": "MIT", "dependencies": { @@ -8966,9 +8941,9 @@ } }, "node_modules/inquirer/node_modules/@inquirer/figures": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.3.tgz", - "integrity": "sha512-y09iGt3JKoOCBQ3w4YrSJdokcD8ciSlMIWsD+auPu+OZpfxLuyz+gICAQ6GCBOmJJt4KEQGHuZSVff2jiNOy7g==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.4.tgz", + "integrity": "sha512-eLBsjlS7rPS3WEhmOmh1znQ5IsQrxWzxWDxO51e4urv+iVrSnIHbq4zqJIOiyNdYLa+BVjwOtdetcQx1lWPpiQ==", "dev": true, "license": "MIT", "engines": { @@ -8976,14 +8951,14 @@ } }, "node_modules/inquirer/node_modules/@inquirer/input": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.8.tgz", - "integrity": "sha512-p0IJslw0AmedLEkOU+yrEX3Aj2RTpQq7ZOf8nc1DIhjzaxRWrrgeuE5Kyh39fVRgtcACaMXx/9WNo8+GjgBOfw==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.10.tgz", + "integrity": "sha512-nvZ6qEVeX/zVtZ1dY2hTGDQpVGD3R7MYPLODPgKO8Y+RAqxkrP3i/3NwF3fZpLdaMiNuK0z2NaYIx9tPwiSegQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.5", - "@inquirer/type": "^4.0.3" + "@inquirer/core": "^11.1.7", + "@inquirer/type": "^4.0.4" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -8998,14 +8973,14 @@ } }, "node_modules/inquirer/node_modules/@inquirer/number": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.8.tgz", - "integrity": "sha512-uGLiQah9A0F9UIvJBX52m0CnqtLaym0WpT9V4YZrjZ+YRDKZdwwoEPz06N6w8ChE2lrnsdyhY9sL+Y690Kh9gQ==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.10.tgz", + "integrity": "sha512-Ht8OQstxiS3APMGjHV0aYAjRAysidWdwurWEo2i8yI5xbhOBWqizT0+MU1S2GCcuhIBg+3SgWVjEoXgfhY+XaA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.5", - "@inquirer/type": "^4.0.3" + "@inquirer/core": "^11.1.7", + "@inquirer/type": "^4.0.4" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -9020,15 +8995,15 @@ } }, "node_modules/inquirer/node_modules/@inquirer/password": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.8.tgz", - "integrity": "sha512-zt1sF4lYLdvPqvmvHdmjOzuUUjuCQ897pdUCO8RbXMUDKXJTTyOQgtn23le+jwcb+MpHl3VAFvzIdxRAf6aPlA==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.10.tgz", + "integrity": "sha512-QbNyvIE8q2GTqKLYSsA8ATG+eETo+m31DSR0+AU7x3d2FhaTWzqQek80dj3JGTo743kQc6mhBR0erMjYw5jQ0A==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/ansi": "^2.0.3", - "@inquirer/core": "^11.1.5", - "@inquirer/type": "^4.0.3" + "@inquirer/ansi": "^2.0.4", + "@inquirer/core": "^11.1.7", + "@inquirer/type": "^4.0.4" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -9043,22 +9018,22 @@ } }, "node_modules/inquirer/node_modules/@inquirer/prompts": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.3.0.tgz", - "integrity": "sha512-JAj66kjdH/F1+B7LCigjARbwstt3SNUOSzMdjpsvwJmzunK88gJeXmcm95L9nw1KynvFVuY4SzXh/3Y0lvtgSg==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.3.2.tgz", + "integrity": "sha512-yFroiSj2iiBFlm59amdTvAcQFvWS6ph5oKESls/uqPBect7rTU2GbjyZO2DqxMGuIwVA8z0P4K6ViPcd/cp+0w==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/checkbox": "^5.1.0", - "@inquirer/confirm": "^6.0.8", - "@inquirer/editor": "^5.0.8", - "@inquirer/expand": "^5.0.8", - "@inquirer/input": "^5.0.8", - "@inquirer/number": "^4.0.8", - "@inquirer/password": "^5.0.8", - "@inquirer/rawlist": "^5.2.4", - "@inquirer/search": "^4.1.4", - "@inquirer/select": "^5.1.0" + "@inquirer/checkbox": "^5.1.2", + "@inquirer/confirm": "^6.0.10", + "@inquirer/editor": "^5.0.10", + "@inquirer/expand": "^5.0.10", + "@inquirer/input": "^5.0.10", + "@inquirer/number": "^4.0.10", + "@inquirer/password": "^5.0.10", + "@inquirer/rawlist": "^5.2.6", + "@inquirer/search": "^4.1.6", + "@inquirer/select": "^5.1.2" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -9073,14 +9048,14 @@ } }, "node_modules/inquirer/node_modules/@inquirer/rawlist": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.4.tgz", - "integrity": "sha512-fTuJ5Cq9W286isLxwj6GGyfTjx1Zdk4qppVEPexFuA6yioCCXS4V1zfKroQqw7QdbDPN73xs2DiIAlo55+kBqg==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.6.tgz", + "integrity": "sha512-jfw0MLJ5TilNsa9zlJ6nmRM0ZFVZhhTICt4/6CU2Dv1ndY7l3sqqo1gIYZyMMDw0LvE1u1nzJNisfHEhJIxq5w==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.5", - "@inquirer/type": "^4.0.3" + "@inquirer/core": "^11.1.7", + "@inquirer/type": "^4.0.4" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -9095,15 +9070,15 @@ } }, "node_modules/inquirer/node_modules/@inquirer/search": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.4.tgz", - "integrity": "sha512-9yPTxq7LPmYjrGn3DRuaPuPbmC6u3fiWcsE9ggfLcdgO/ICHYgxq7mEy1yJ39brVvgXhtOtvDVjDh9slJxE4LQ==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.6.tgz", + "integrity": "sha512-3/6kTRae98hhDevENScy7cdFEuURnSpM3JbBNg8yfXLw88HgTOl+neUuy/l9W0No5NzGsLVydhBzTIxZP7yChQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.5", - "@inquirer/figures": "^2.0.3", - "@inquirer/type": "^4.0.3" + "@inquirer/core": "^11.1.7", + "@inquirer/figures": "^2.0.4", + "@inquirer/type": "^4.0.4" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -9118,16 +9093,16 @@ } }, "node_modules/inquirer/node_modules/@inquirer/select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.1.0.tgz", - "integrity": "sha512-OyYbKnchS1u+zRe14LpYrN8S0wH1vD0p2yKISvSsJdH2TpI87fh4eZdWnpdbrGauCRWDph3NwxRmM4Pcm/hx1Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.1.2.tgz", + "integrity": "sha512-kTK8YIkHV+f02y7bWCh7E0u2/11lul5WepVTclr3UMBtBr05PgcZNWfMa7FY57ihpQFQH/spLMHTcr0rXy50tA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/ansi": "^2.0.3", - "@inquirer/core": "^11.1.5", - "@inquirer/figures": "^2.0.3", - "@inquirer/type": "^4.0.3" + "@inquirer/ansi": "^2.0.4", + "@inquirer/core": "^11.1.7", + "@inquirer/figures": "^2.0.4", + "@inquirer/type": "^4.0.4" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -9142,9 +9117,9 @@ } }, "node_modules/inquirer/node_modules/@inquirer/type": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.3.tgz", - "integrity": "sha512-cKZN7qcXOpj1h+1eTTcGDVLaBIHNMT1Rz9JqJP5MnEJ0JhgVWllx7H/tahUp5YEK1qaByH2Itb8wLG/iScD5kw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.4.tgz", + "integrity": "sha512-PamArxO3cFJZoOzspzo6cxVlLeIftyBsZw/S9bKY5DzxqJVZgjoj1oP8d0rskKtp7sZxBycsoer1g6UeJV1BBA==", "dev": true, "license": "MIT", "engines": { @@ -9944,6 +9919,7 @@ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -10173,7 +10149,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "@inquirer/confirm": "^5.0.0", "@mswjs/interceptors": "^0.41.0", @@ -10901,7 +10876,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -11072,7 +11046,6 @@ "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -11110,6 +11083,7 @@ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -11125,6 +11099,7 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -11184,7 +11159,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -11226,7 +11200,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -11235,9 +11208,9 @@ } }, "node_modules/react-i18next": { - "version": "16.5.4", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-16.5.4.tgz", - "integrity": "sha512-6yj+dcfMncEC21QPhOTsW8mOSO+pzFmT6uvU7XXdvM/Cp38zJkmTeMeKmTrmCMD5ToT79FmiE/mRWiYWcJYW4g==", + "version": "16.5.8", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-16.5.8.tgz", + "integrity": "sha512-2ABeHHlakxVY+LSirD+OiERxFL6+zip0PaHo979bgwzeHg27Sqc82xxXWIrSFmfWX0ZkrvXMHwhsi/NGUf5VQg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.28.4", @@ -11266,7 +11239,8 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/react-refresh": { "version": "0.18.0", @@ -11599,7 +11573,6 @@ "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -11733,7 +11706,6 @@ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.4.2.tgz", "integrity": "sha512-N3HEHRCZYn3cQbsC4B5ldj9j+tHdf4JZoYPlcI4rRYu0Xy4qN8MQf1Z08EibzB0WpgRG5BGK08FTrmM66eSzKQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=10" } @@ -11964,7 +11936,6 @@ "integrity": "sha512-yueTpl5YJqLzQqs3CanxNdAAfFU23iP0j+JVJURE4ghfEtRmWfWoZWLGkVcyjmgum7UmjwAlqRuOjQDNvH89kw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@storybook/global": "^5.0.0", "@storybook/icons": "^2.0.1", @@ -12583,7 +12554,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12851,7 +12821,6 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -12939,7 +12908,6 @@ "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", @@ -13264,7 +13232,6 @@ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.0.0" }, diff --git a/frontend/package.json b/frontend/package.json index db83e4e9e..cd1e03fbc 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -30,10 +30,10 @@ "@zxcvbn-ts/language-common": "^3.0.4", "classnames": "^2.5.1", "date-fns": "^4.1.0", - "i18next": "^25.8.13", + "i18next": "^25.8.18", "react": "^19.2.4", "react-dom": "^19.2.4", - "react-i18next": "^16.5.4", + "react-i18next": "^16.5.8", "swagger-ui-dist": "^5.31.0", "valibot": "^1.2.0", "vaul": "^1.1.2" @@ -64,7 +64,7 @@ "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", "happy-dom": "^20.5.0", - "i18next-cli": "^1.47.9", + "i18next-cli": "^1.50.3", "knip": "^5.81.0", "msw": "^2.12.8", "msw-storybook-addon": "^2.0.6", From 2790e5f47f8adb411737a28e7053804a18bbb616 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 17 Mar 2026 14:25:21 +0000 Subject: [PATCH 096/104] Translations updates --- frontend/.storybook/locales.ts | 78 ++++++++-------- frontend/locales/nl.json | 10 +-- frontend/locales/pt-BR.json | 16 ++-- frontend/locales/sk.json | 16 ++-- frontend/locales/uz.json | 158 ++++++++++++++++----------------- translations/uz.json | 67 +++++++++++++- translations/zh-Hans.json | 4 +- 7 files changed, 207 insertions(+), 142 deletions(-) diff --git a/frontend/.storybook/locales.ts b/frontend/.storybook/locales.ts index 0cfe7eae0..ffcc627ed 100644 --- a/frontend/.storybook/locales.ts +++ b/frontend/.storybook/locales.ts @@ -27,7 +27,7 @@ export type LocalazyMetadata = { }; const localazyMetadata: LocalazyMetadata = { - projectUrl: "https://localazy.com/p/matrix-authentication-service!v1.13", + projectUrl: "https://localazy.com/p/matrix-authentication-service", baseLocale: "en", languages: [ { @@ -208,25 +208,25 @@ const localazyMetadata: LocalazyMetadata = { file: "frontend.json", path: "", cdnFiles: { - "cs": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/cs/frontend.json", - "da": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/da/frontend.json", - "de": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/de/frontend.json", - "en": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/en/frontend.json", - "et": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/et/frontend.json", - "fi": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fi/frontend.json", - "fr": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fr/frontend.json", - "hu": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/hu/frontend.json", - "nb_NO": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nb-NO/frontend.json", - "nl": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nl/frontend.json", - "pl": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pl/frontend.json", - "pt": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt/frontend.json", - "pt_BR": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt-BR/frontend.json", - "ru": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/ru/frontend.json", - "sk": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sk/frontend.json", - "sv": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sv/frontend.json", - "uk": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uk/frontend.json", - "uz": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uz/frontend.json", - "zh#Hans": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/zh-Hans/frontend.json" + "cs": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/cs/frontend.json", + "da": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/da/frontend.json", + "de": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/de/frontend.json", + "en": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/en/frontend.json", + "et": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/et/frontend.json", + "fi": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fi/frontend.json", + "fr": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fr/frontend.json", + "hu": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/hu/frontend.json", + "nb_NO": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nb-NO/frontend.json", + "nl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nl/frontend.json", + "pl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pl/frontend.json", + "pt": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt/frontend.json", + "pt_BR": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt-BR/frontend.json", + "ru": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/ru/frontend.json", + "sk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sk/frontend.json", + "sv": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sv/frontend.json", + "uk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uk/frontend.json", + "uz": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uz/frontend.json", + "zh#Hans": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/zh-Hans/frontend.json" } }, { @@ -234,25 +234,25 @@ const localazyMetadata: LocalazyMetadata = { file: "file.json", path: "", cdnFiles: { - "cs": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/cs/file.json", - "da": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/da/file.json", - "de": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/de/file.json", - "en": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/en/file.json", - "et": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/et/file.json", - "fi": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fi/file.json", - "fr": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fr/file.json", - "hu": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/hu/file.json", - "nb_NO": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nb-NO/file.json", - "nl": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nl/file.json", - "pl": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pl/file.json", - "pt": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt/file.json", - "pt_BR": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt-BR/file.json", - "ru": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/ru/file.json", - "sk": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sk/file.json", - "sv": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sv/file.json", - "uk": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uk/file.json", - "uz": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uz/file.json", - "zh#Hans": "https://delivery.localazy.com/_a660988938937660331009583468/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/zh-Hans/file.json" + "cs": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/cs/file.json", + "da": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/da/file.json", + "de": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/de/file.json", + "en": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/en/file.json", + "et": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/et/file.json", + "fi": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fi/file.json", + "fr": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fr/file.json", + "hu": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/hu/file.json", + "nb_NO": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nb-NO/file.json", + "nl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nl/file.json", + "pl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pl/file.json", + "pt": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt/file.json", + "pt_BR": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt-BR/file.json", + "ru": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/ru/file.json", + "sk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sk/file.json", + "sv": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sv/file.json", + "uk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uk/file.json", + "uz": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uz/file.json", + "zh#Hans": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/zh-Hans/file.json" } } ] diff --git a/frontend/locales/nl.json b/frontend/locales/nl.json index 15b643f05..33645eb71 100644 --- a/frontend/locales/nl.json +++ b/frontend/locales/nl.json @@ -257,8 +257,8 @@ "button": "Identiteit resetten", "cancelled": { "description_1": "You can close this window and go back to the app to continue.", - "description_2": "If you're signed out everywhere and don't remember your recovery code, you'll still need to reset your identity.", - "heading": "Identity reset cancelled." + "description_2": "If don’t have access to any other verified devices and you don’t have your recovery key, then you’ll need to reset your digital identity to continue using the app.", + "heading": "Digital identity reset cancelled." }, "description": "Als u niet bent aangemeld bij andere apparaten en u bent uw herstelsleutel kwijt, moet u uw identiteit opnieuw instellen om de app te kunnen blijven gebruiken.", "effect_list": { @@ -270,7 +270,7 @@ }, "failure": { "description": "This might be a temporary problem, so please try again later. If the problem persists, please contact your server administrator.", - "heading": "Failed to allow crypto identity reset", + "heading": "Failed to allow digital identity reset", "title": "Kan crypto identiteit niet toestaan" }, "finish_reset": "Finish reset", @@ -278,10 +278,10 @@ "start_reset": "Start reset", "success": { "description": "De identiteits reset is goedgekeurd voor de volgende {{minutes}} minuten. U kunt dit venster sluiten en teruggaan naar de app om door te gaan.", - "heading": "Identity reset successfully. Go back to the app to finish the process.", + "heading": "Digital identity reset successfully. Go back to the app to finish the process.", "title": "Het opnieuw instellen van de crypto identiteit is tijdelijk toegestaan" }, - "warning": "Only reset your identity if you don't have access to another signed-in device and you've lost your recovery key." + "warning": "Only reset your digital identity if you don't have access to another verified device and you don't have your recovery key." }, "selectable_session": { "label": "Sessie selecteren" diff --git a/frontend/locales/pt-BR.json b/frontend/locales/pt-BR.json index 87f9a77ea..bee110cae 100644 --- a/frontend/locales/pt-BR.json +++ b/frontend/locales/pt-BR.json @@ -257,10 +257,10 @@ "button": "Reset identity", "cancelled": { "description_1": "You can close this window and go back to the app to continue.", - "description_2": "If you're signed out everywhere and don't remember your recovery code, you'll still need to reset your identity.", - "heading": "Identity reset cancelled." + "description_2": "If don’t have access to any other verified devices and you don’t have your recovery key, then you’ll need to reset your digital identity to continue using the app.", + "heading": "Digital identity reset cancelled." }, - "description": "If you're not signed in to any other devices and you've lost your recovery key, then you'll need to reset your identity to continue using the app.", + "description": "If don’t have access to any other verified devices and you don’t have your recovery key, then you’ll need to reset your digital identity to continue using the app.", "effect_list": { "negative_1": "You will lose your existing message history", "negative_2": "You will need to verify all your existing devices and contacts again", @@ -270,18 +270,18 @@ }, "failure": { "description": "This might be a temporary problem, so please try again later. If the problem persists, please contact your server administrator.", - "heading": "Failed to allow crypto identity reset", + "heading": "Failed to allow digital identity reset", "title": "Failed to allow crypto identity" }, "finish_reset": "Finish reset", - "heading": "Reset your identity in case you can't confirm another way", + "heading": "Reset your digital identity in case you can't confirm another way", "start_reset": "Start reset", "success": { - "description": "The identity reset has been approved for the next {{minutes}} minutes. You can close this window and go back to the app to continue.", - "heading": "Identity reset successfully. Go back to the app to finish the process.", + "description": "The digital identity reset has been approved for the next {{minutes}} minutes. You can close this window and go back to the app to continue.", + "heading": "Digital identity reset successfully. Go back to the app to finish the process.", "title": "Crypto identity reset temporarily allowed" }, - "warning": "Only reset your identity if you don't have access to another signed-in device and you've lost your recovery key." + "warning": "Only reset your digital identity if you don't have access to another verified device and you don't have your recovery key." }, "selectable_session": { "label": "Select session" diff --git a/frontend/locales/sk.json b/frontend/locales/sk.json index 12c112421..a43a7cf78 100644 --- a/frontend/locales/sk.json +++ b/frontend/locales/sk.json @@ -257,10 +257,10 @@ "button": "Reset identity", "cancelled": { "description_1": "You can close this window and go back to the app to continue.", - "description_2": "If you're signed out everywhere and don't remember your recovery code, you'll still need to reset your identity.", - "heading": "Identity reset cancelled." + "description_2": "If don’t have access to any other verified devices and you don’t have your recovery key, then you’ll need to reset your digital identity to continue using the app.", + "heading": "Digital identity reset cancelled." }, - "description": "If you're not signed in to any other devices and you've lost your recovery key, then you'll need to reset your identity to continue using the app.", + "description": "If don’t have access to any other verified devices and you don’t have your recovery key, then you’ll need to reset your digital identity to continue using the app.", "effect_list": { "negative_1": "You will lose your existing message history", "negative_2": "You will need to verify all your existing devices and contacts again", @@ -270,18 +270,18 @@ }, "failure": { "description": "This might be a temporary problem, so please try again later. If the problem persists, please contact your server administrator.", - "heading": "Failed to allow crypto identity reset", + "heading": "Failed to allow digital identity reset", "title": "Failed to allow crypto identity" }, "finish_reset": "Finish reset", - "heading": "Reset your identity in case you can't confirm another way", + "heading": "Reset your digital identity in case you can't confirm another way", "start_reset": "Start reset", "success": { - "description": "The identity reset has been approved for the next {{minutes}} minutes. You can close this window and go back to the app to continue.", - "heading": "Identity reset successfully. Go back to the app to finish the process.", + "description": "The digital identity reset has been approved for the next {{minutes}} minutes. You can close this window and go back to the app to continue.", + "heading": "Digital identity reset successfully. Go back to the app to finish the process.", "title": "Crypto identity reset temporarily allowed" }, - "warning": "Only reset your identity if you don't have access to another signed-in device and you've lost your recovery key." + "warning": "Only reset your digital identity if you don't have access to another verified device and you don't have your recovery key." }, "selectable_session": { "label": "Select session" diff --git a/frontend/locales/uz.json b/frontend/locales/uz.json index d66d54f2f..773b949d2 100644 --- a/frontend/locales/uz.json +++ b/frontend/locales/uz.json @@ -1,13 +1,13 @@ { "action": { - "back": "Back", + "back": "Orqaga", "cancel": "Bekor qilish", - "clear": "Clear", - "close": "Close", + "clear": "Tozalash", + "close": "Yopish", "collapse": "Collapse", "confirm": "Confirm", "continue": "Davom etish", - "edit": "Edit", + "edit": "Tahrirlash", "expand": "Expand", "save": "Saqlash", "save_and_continue": "Save and continue", @@ -16,12 +16,12 @@ }, "branding": { "privacy_policy": { - "alt": "Link to the service privacy policy", - "link": "Privacy Policy" + "alt": "Xizmat maxfiylik siyosatiga havola", + "link": "Maxfiylik siyosati" }, "terms_and_conditions": { - "alt": "Link to the service terms and conditions", - "link": "Terms & Conditions" + "alt": "Xizmat ko‘rsatish shartlari va qoidalariga havola", + "link": "Foydalanish shartlari" } }, "common": { @@ -52,9 +52,9 @@ "password_label": "Enter your password to continue" }, "edit_profile": { - "display_name_help": "This is what others will see wherever you’re signed in.", - "display_name_label": "Display name", - "title": "Edit profile", + "display_name_help": "Siz tizimga kirgan joyingizda boshqalar buni koʻrishadi.", + "display_name_label": "Ko'rsatiladigan ism", + "title": "Profilni tahrirlash", "username_label": "Foydalanuvchi nomi" }, "password": { @@ -66,7 +66,7 @@ "button": "Sign out of account", "dialog": "Sign out of this account?" }, - "title": "Your account" + "title": "Sizning hisobingiz" }, "add_email_form": { "email_denied_alert": { @@ -79,7 +79,7 @@ "title": "Elektron pochta allaqachon mavjud" }, "email_exists_error": "Kiritilgan elektron pochta manzili ushbu hisobga allaqachon qo‘shilgan.", - "email_field_help": "Add an alternative email you can use to access this account.", + "email_field_help": "Bu hisobga kirish uchun ishlatishingiz mumkin bo‘lgan muqobil email manzilini kiriting.", "email_field_label": "Email manzilini kiritish", "email_in_use_error": "The entered email is already in use", "email_invalid_alert": { @@ -95,7 +95,7 @@ "heading": "Ilovalar" }, "browser_session_details": { - "current_badge": "Current", + "current_badge": "Hozirgi", "session_details_title": "Seans" }, "browser_sessions_overview": { @@ -116,8 +116,8 @@ "device_type_icon_label": { "desktop": "Ish stoli", "mobile": "Mobil", - "pc": "Computer", - "tablet": "Tablet", + "pc": "Kompyuter", + "tablet": "Planshet", "unknown": "Noma’lum qurilma turi", "web": "Veb" }, @@ -129,12 +129,12 @@ "text": "Qurilmani olib tashlash" }, "error": { - "hideDetails": "Hide details", - "showDetails": "Show details", - "subtitle": "An unexpected error occurred. Please try again.", - "title": "Something went wrong" + "hideDetails": "Tafsilotlarni yashirish", + "showDetails": "Tafsilotlarni koʻrsatish", + "subtitle": "Kutilmagan xatolik yuz berdi. Qaytadan urinib koʻring.", + "title": "Nimadir xato ketdi" }, - "error_boundary_title": "Something went wrong", + "error_boundary_title": "Nimadir xato ketdi", "errors": { "field_required": "Ushbu qator toʻldirilishi shart", "rate_limit_exceeded": "You've made too many requests in a short period. Please wait a few minutes and try again." @@ -145,11 +145,11 @@ "inactive_90_days": "90+ kun davomida faol emas" }, "nav": { - "devices": "Devices", + "devices": "Qurilmalar", "plan": "Plan", "profile": "Profil", "sessions": "Seanslar", - "settings": "Settings" + "settings": "Sozlamalar" }, "not_found_alert_title": "Topilmadi.", "not_logged_in_alert": "Hisobingizga kirmagansiz.", @@ -201,7 +201,7 @@ "title": "The link to reset your password has already been used" }, "expired": { - "resend_email": "Resend email", + "resend_email": "Elektron pochtani qayta yuborish", "subtitle": "Request a new email that will be sent to: {{email}}", "title": "The link to reset your password has expired" }, @@ -254,13 +254,13 @@ } }, "reset_cross_signing": { - "button": "Reset identity", + "button": "Shaxsni tiklash", "cancelled": { "description_1": "You can close this window and go back to the app to continue.", - "description_2": "If you're signed out everywhere and don't remember your recovery code, you'll still need to reset your identity.", - "heading": "Identity reset cancelled." + "description_2": "If don’t have access to any other verified devices and you don’t have your recovery key, then you’ll need to reset your digital identity to continue using the app.", + "heading": "Digital identity reset cancelled." }, - "description": "If you're not signed in to any other devices and you've lost your recovery key, then you'll need to reset your identity to continue using the app.", + "description": "Agar boshqa tasdiqlangan qurilmalarga kirish imkoningiz boʻlmasa va sizda tiklash kaliti boʻlmasa, ilovadan foydalanishda davom etish uchun raqamli identifikatsiyangizni tiklashingiz kerak boʻladi.", "effect_list": { "negative_1": "You will lose your existing message history", "negative_2": "You will need to verify all your existing devices and contacts again", @@ -270,49 +270,49 @@ }, "failure": { "description": "This might be a temporary problem, so please try again later. If the problem persists, please contact your server administrator.", - "heading": "Failed to allow crypto identity reset", - "title": "Failed to allow crypto identity" + "heading": "Failed to allow digital identity reset", + "title": "Kripto identifikatsiyasiga ruxsat berilmadi" }, "finish_reset": "Finish reset", - "heading": "Reset your identity in case you can't confirm another way", + "heading": "Boshqa usulda tasdiqlay olmasangiz, raqamli identifikatoringizni asliga qaytaring", "start_reset": "Start reset", "success": { - "description": "The identity reset has been approved for the next {{minutes}} minutes. You can close this window and go back to the app to continue.", - "heading": "Identity reset successfully. Go back to the app to finish the process.", - "title": "Crypto identity reset temporarily allowed" + "description": "Raqamli identifikatorni tiklash keyingi {{minutes}} daqiqa uchun tasdiqlandi. Bu oynani yopib, davom etish uchun ilovaga qaytishingiz mumkin.", + "heading": "Digital identity reset successfully. Go back to the app to finish the process.", + "title": "Kripto identifikatorini asliga qaytarishga vaqtincha ruxsat berildi" }, - "warning": "Only reset your identity if you don't have access to another signed-in device and you've lost your recovery key." + "warning": "Only reset your digital identity if you don't have access to another verified device and you don't have your recovery key." }, "selectable_session": { "label": "Sessiyani tanlang" }, "session": { "client_id_label": "Mijoz ID raqami", - "current": "Current", - "current_badge": "Current", - "device_id_label": "Device ID", + "current": "Hozirgi", + "current_badge": "Hozirgi", + "device_id_label": "Qurilma ID", "finished_date": "Tugadi ", - "finished_label": "Finished", + "finished_label": "Tugadi", "generic_browser_session": "Browser session", "id_label": "ID", - "ip_label": "IP Address", - "last_active_label": "Last Active", - "last_auth_label": "Last Authentication", - "name_for_platform": "{{name}} for {{platform}}", - "scopes_label": "Scopes", + "ip_label": "IP-manzil", + "last_active_label": "Oxirgi faollik", + "last_auth_label": "Oxirgi autentifikatsiya", + "name_for_platform": "{{platform}} uchun {{name}}", + "scopes_label": "Ko‘lamlar", "set_device_name": { "help": "Set a name that will help you identify this device.", "label": "Device name", "title": "Edit device name" }, "signed_in_date": " kirildi", - "signed_in_label": "Signed in", - "title": "Device details", - "unknown_browser": "Unknown browser", - "unknown_device": "Unknown device", + "signed_in_label": "Kirish", + "title": "Qurilma tafsilotlari", + "unknown_browser": "Noma’lum brauzer", + "unknown_device": "Noma’lum qurilma.", "uri_label": "Uri", - "user_id_label": "User ID", - "username_label": "User name" + "user_id_label": "Foydalanuvchi ID'si", + "username_label": "Foydalanuvchi nomi" }, "session_detail": { "alert": { @@ -324,40 +324,40 @@ "unknown_route": "Nomaʼlum yoʻnalish {{route}}", "unverified_email_alert": { "button": "Koʻrib chiqing va tasdiqlang", - "text:one": "You have {{count}} unverified email address.", - "text:other": "You have {{count}} unverified email addresses.", + "text:one": "Sizda {{count}} ta tasdiqlanmagan email manzili bor.", + "text:other": "Sizda {{count}} ta tasdiqlanmagan email manzili bor.", "title": "Tasdiqlanmagan elektron pochta" }, "user_email": { - "cant_delete_primary": "Choose a different primary email to delete this one.", + "cant_delete_primary": "Buni oʻchirish uchun boshqa asosiy elektron pochta manzilini tanlang.", "delete_button_confirmation_modal": { - "action": "Delete email", - "body": "Delete this email?", + "action": "Elektron pochtani oʻchirish", + "body": "Bu email o‘chirib tashlansinmi?", "incorrect_password": "Incorrect password, please try again", "password_confirmation": "Confirm your account password to delete this email address" }, - "delete_button_title": "Remove email address", - "email": "Email", - "make_primary_button": "Make primary", - "not_verified": "Not verified", - "primary_email": "Primary email", - "retry_button": "Resend code", - "unverified": "Unverified" + "delete_button_title": "Elektron pochta manzilini olib tashlash", + "email": "Elektron pochta", + "make_primary_button": "Asosiy qilish", + "not_verified": "Tasdiqlanmagan", + "primary_email": "Asosiy elektron pochta", + "retry_button": "Kodni qayta yuborish", + "unverified": "Tasdiqlanmagan" }, "user_email_list": { - "heading": "Emails", - "no_primary_email_alert": "No primary email address" + "heading": "Elektron pochta xabarlari", + "no_primary_email_alert": "Asosiy elektron pochta manzili yo‘q" }, "user_greeting": { - "error": "Failed to load user" + "error": "Foydalanuvchi yuklanmadi" }, "user_name": { - "display_name_field_label": "Display Name" + "display_name_field_label": "Ko'rsatiladigan ism" }, "user_sessions_overview": { "active_sessions:one": "{{count}} ta faol seans", "active_sessions:other": "{{count}} ta faol seans", - "heading": "Where you're signed in", + "heading": "Qayerda tizimga kirgansiz", "no_active_sessions": { "default": "You are not signed in to any application.", "inactive_90_days": "All your sessions have been active in the last 90 days." @@ -368,23 +368,23 @@ "description": "The code has expired. Please request a new code.", "title": "Code expired" }, - "code_field_error": "Code not recognised", - "code_field_label": "6-digit code", - "code_field_wrong_shape": "Code must be 6 digits", + "code_field_error": "Kod tan olinmadi", + "code_field_label": "6 xonali kod", + "code_field_wrong_shape": "Kod 6 xonali bo‘lishi kerak", "email_sent_alert": { - "description": "Enter the new code below.", - "title": "New code sent" + "description": "Quyidagi yangi kodni kiriting.", + "title": "Yangi kod yuborildi" }, - "enter_code_prompt": "Enter the 6-digit code sent to: {{email}}", + "enter_code_prompt": "{{email}} manziliga yuborilgan 6 xonali kodni kiriting", "heading": "Elektron pochtangizni tasdiqlang", "invalid_code_alert": { - "description": "Check the code sent to your email and update the fields below to continue.", - "title": "You entered the wrong code" + "description": "Davom etish uchun elektron pochtangizga yuborilgan kodni tekshiring va quyidagi maydonlarni yangilang.", + "title": "Kodni xato kiritdingiz" }, - "resend_code": "Resend code", - "resend_email": "Resend email", - "sent": "Sent!", - "unknown_email": "Unknown email" + "resend_code": "Kodni qayta yuborish", + "resend_email": "Elektron pochtani qayta yuborish", + "sent": "Yuborildi!", + "unknown_email": "Noma’lum email" } }, "mas": { diff --git a/translations/uz.json b/translations/uz.json index 64a281789..205cd5ed4 100644 --- a/translations/uz.json +++ b/translations/uz.json @@ -1,5 +1,6 @@ { "action": { + "back": "Orqaga", "cancel": "Bekor qilish", "continue": "Davom etish", "create_account": "Ro'yxatdan o'tish", @@ -12,9 +13,21 @@ "name": "matritsa-autentifikatsiya-xizmati", "technical_description": "OpenID Connect kashfiyot hujjati:%(discovery_url)s" }, + "branding": { + "privacy_policy": { + "alt": "Xizmat maxfiylik siyosatiga havola", + "link": "Maxfiylik siyosati" + }, + "terms_and_conditions": { + "alt": "Xizmat ko‘rsatish shartlari va qoidalariga havola", + "link": "Foydalanish shartlari" + } + }, "common": { + "display_name": "Ko'rsatiladigan ism", "email_address": "Email manzili", "loading": "Yuklanmoqda…", + "mxid": "Matrix ID", "password": "Parol", "password_confirm": "Parolni tasdiqlash", "username": "Foydalanuvchi nomi" @@ -24,6 +37,7 @@ }, "mas": { "add_email": { + "description": "Agar hisobingizga kira olmasangiz, uni tiklash uchun email manzilini kiriting.", "heading": "Email manzilini qo‘shish" }, "back_to_homepage": "Bosh sahifaga qaytish", @@ -31,9 +45,41 @@ "change": "Parolni o‘zgartirish", "confirm": "Parolni tasdiqlash", "current": "Joriy parol", + "description": "Bunda hisobingizdagi parol o‘zgaradi.", "heading": "Parolni o‘zgartirish", "new": "Yangi parol" }, + "consent": { + "client_wants_access": "%(client_name)s da %(redirect_uri)s hisobingizga kirmoqchi.", + "heading": "Hisobingizga kirishga ruxsat berilsinmi?", + "make_sure_you_trust": "%(client_name)sga ishonch hosil qiling.", + "this_will_allow": "Bu %(client_name)sga quyidagilarga ruxsat beradi:", + "you_may_be_sharing": "Bu sayt yoki ilovaga maxfiy axborotlarni ulashayotgan bo‘lishingiz mumkin." + }, + "device_card": { + "access_requested": "Ruxsat so‘raldi", + "device_code": "Kod", + "generic_device": "Qurilma", + "ip_address": "IP manzili" + }, + "device_code_link": { + "description": "Qurilmani ulang", + "headline": "Qurilmangizda chiqqan kodni kiriting" + }, + "device_consent": { + "another_device_access": "Boshqa qurilma hisobingizga kirishni xohlamoqda.", + "denied": { + "description": "Siz %(client_name)s uchun ruxsatni rad etdingiz. Bu oynani yopishingiz mumkin.", + "heading": "Ruxsat berilmadi" + }, + "granted": { + "description": "Siz %(client_name)s uchun ruxsat berdingiz. Bu oynani yopishingiz mumkin.", + "heading": "Ruxsat berildi" + } + }, + "device_display_name": { + "unknown_device": "Noma’lum qurilma." + }, "emails": { "greeting": "Salom %(username)s ,", "verify": { @@ -78,8 +124,14 @@ "logged_as": "%(username)s sifatida kirildi" }, "recovery": { + "expired": { + "resend_email": "Elektron pochtani qayta yuborish" + }, "finish": { "new": "Yangi parol" + }, + "progress": { + "resend_email": "Elektron pochtani qayta yuborish" } }, "register": { @@ -88,7 +140,8 @@ "description": "Davom etish uchun foydalanuvchi nomini tanlang.", "heading": "Hisob yaratish" }, - "sign_in_instead": "Buning o‘rniga tizimga kiring" + "sign_in_instead": "Buning o‘rniga tizimga kiring", + "terms_of_service": "Men roziman Foydalanish shartlari" }, "scope": { "edit_profile": "Profilingiz va aloqa maʼlumotlaringizni tahrirlang", @@ -109,15 +162,23 @@ }, "register": { "choose_username": { + "description": "Buni keyin o‘zgartirib bo‘lmaydi.", "heading": "Foydalanuvchi nomingizni tanlang" }, "create_account": "Yangi hisob yaratish", + "enforced_by_policy": "Server siyosati tomonidan amalga oshiriladi", "forced_display_name": "Quyidagi ko‘rsatish nomidan foydalanadi", "forced_email": "Quyidagi elektron pochta manzilidan foydalaniladi", "forced_localpart": "Quyidagi foydalanuvchi nomidan foydalaniladi", + "import_data": { + "description": "Yangi %(server_name)s hisobingizga ulanadigan ma’lumotlarni tasdiqlang.", + "heading": "Ma’lumotlaringizni import qiling" + }, + "imported_from_upstream": "Yuqori darajadagi hisobingizdan import qilindi", "link_existing": "Mavjud hisobga havola", "suggested_display_name": "Ko‘rsatish nomini import qilish", - "suggested_email": "Elektron pochta manzilini import qilish" + "suggested_email": "Elektron pochta manzilini import qilish", + "use": "Foydalanish" }, "suggest_link": { "action": "Havola", @@ -125,6 +186,8 @@ } }, "verify_email": { + "6_digit_code": "6 xonali kod", + "code": "Kod", "description": "Yuborilgan 6 xonali kodni kiriting: %(email)s", "headline": "Elektron pochtangizni tasdiqlang" } diff --git a/translations/zh-Hans.json b/translations/zh-Hans.json index e355a8c99..1dd0dcdfc 100644 --- a/translations/zh-Hans.json +++ b/translations/zh-Hans.json @@ -79,6 +79,7 @@ "make_sure_you_trust": "请确保你信任 %(client_name)s 。", "scope_list_preface": "一旦继续你将允许 %(client_name)s:", "this_will_allow": "这将允许 %(client_name)s :", + "this_will_setup": "这将使用你在 %(server_name)s 上的账户配置 %(client_name)s(%(client_uri)s)。", "use_another_account": "使用另一账户", "you_may_be_sharing": "你可能正在与本网站或 app 分享敏感信息。" }, @@ -101,7 +102,8 @@ "granted": { "description": "您已授予 %(client_name)s 访问权限。您可以关闭此窗口。", "heading": "已授予访问权限" - } + }, + "this_will_setup": "另一设备尝试使用你在上的账户 %(server_name)s 配置 %(client_name)s(%(client_uri)s)。请确保你认识该设备。" }, "device_display_name": { "client_on_device": "运行在 %(device_name)s 的 %(client_name)s", From 8d94c35efd4438c805c54dc7feedc8505ccb388e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 17 Mar 2026 14:43:01 +0000 Subject: [PATCH 097/104] 1.14.0-rc.0 --- Cargo.lock | 56 +++++++++++++++++++++++++------------------------- Cargo.toml | 60 +++++++++++++++++++++++++++--------------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 61625f244..ee1f7e98b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3119,7 +3119,7 @@ dependencies = [ [[package]] name = "mas-axum-utils" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "anyhow", "axum", @@ -3153,7 +3153,7 @@ dependencies = [ [[package]] name = "mas-cli" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "anyhow", "axum", @@ -3228,7 +3228,7 @@ dependencies = [ [[package]] name = "mas-config" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "anyhow", "camino", @@ -3259,7 +3259,7 @@ dependencies = [ [[package]] name = "mas-context" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "console", "opentelemetry", @@ -3275,7 +3275,7 @@ dependencies = [ [[package]] name = "mas-data-model" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "base64ct", "chrono", @@ -3296,7 +3296,7 @@ dependencies = [ [[package]] name = "mas-email" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "async-trait", "lettre", @@ -3307,7 +3307,7 @@ dependencies = [ [[package]] name = "mas-handlers" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "aide", "anyhow", @@ -3388,7 +3388,7 @@ dependencies = [ [[package]] name = "mas-http" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "futures-util", "headers", @@ -3409,7 +3409,7 @@ dependencies = [ [[package]] name = "mas-i18n" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "camino", "icu_calendar", @@ -3431,7 +3431,7 @@ dependencies = [ [[package]] name = "mas-i18n-scan" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "camino", "clap", @@ -3445,7 +3445,7 @@ dependencies = [ [[package]] name = "mas-iana" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "schemars 0.9.0", "serde", @@ -3453,7 +3453,7 @@ dependencies = [ [[package]] name = "mas-iana-codegen" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "anyhow", "async-trait", @@ -3470,7 +3470,7 @@ dependencies = [ [[package]] name = "mas-jose" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "base64ct", "chrono", @@ -3500,7 +3500,7 @@ dependencies = [ [[package]] name = "mas-keystore" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "aead", "base64ct", @@ -3528,7 +3528,7 @@ dependencies = [ [[package]] name = "mas-listener" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "anyhow", "bytes", @@ -3552,7 +3552,7 @@ dependencies = [ [[package]] name = "mas-matrix" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "anyhow", "async-trait", @@ -3562,7 +3562,7 @@ dependencies = [ [[package]] name = "mas-matrix-synapse" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "anyhow", "async-trait", @@ -3579,7 +3579,7 @@ dependencies = [ [[package]] name = "mas-oidc-client" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "assert_matches", "async-trait", @@ -3615,7 +3615,7 @@ dependencies = [ [[package]] name = "mas-policy" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "anyhow", "arc-swap", @@ -3632,7 +3632,7 @@ dependencies = [ [[package]] name = "mas-router" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "axum", "serde", @@ -3643,7 +3643,7 @@ dependencies = [ [[package]] name = "mas-spa" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "camino", "serde", @@ -3652,7 +3652,7 @@ dependencies = [ [[package]] name = "mas-storage" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "async-trait", "chrono", @@ -3674,7 +3674,7 @@ dependencies = [ [[package]] name = "mas-storage-pg" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "async-trait", "chrono", @@ -3704,7 +3704,7 @@ dependencies = [ [[package]] name = "mas-tasks" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "anyhow", "async-trait", @@ -3736,7 +3736,7 @@ dependencies = [ [[package]] name = "mas-templates" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "anyhow", "arc-swap", @@ -3768,7 +3768,7 @@ dependencies = [ [[package]] name = "mas-tower" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "http", "opentelemetry", @@ -4037,7 +4037,7 @@ dependencies = [ [[package]] name = "oauth2-types" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "assert_matches", "base64ct", @@ -6142,7 +6142,7 @@ dependencies = [ [[package]] name = "syn2mas" -version = "1.13.0" +version = "1.14.0-rc.0" dependencies = [ "anyhow", "arc-swap", diff --git a/Cargo.toml b/Cargo.toml index cc62bef79..cbc45eb53 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ members = ["crates/*"] resolver = "2" # Updated in the CI with a `sed` command -package.version = "1.13.0" +package.version = "1.14.0-rc.0" package.license = "AGPL-3.0-only OR LicenseRef-Element-Commercial" package.authors = ["Element Backend Team"] package.edition = "2024" @@ -34,35 +34,35 @@ broken_intra_doc_links = "deny" [workspace.dependencies] # Workspace crates -mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.13.0" } -mas-cli = { path = "./crates/cli/", version = "=1.13.0" } -mas-config = { path = "./crates/config/", version = "=1.13.0" } -mas-context = { path = "./crates/context/", version = "=1.13.0" } -mas-data-model = { path = "./crates/data-model/", version = "=1.13.0" } -mas-email = { path = "./crates/email/", version = "=1.13.0" } -mas-graphql = { path = "./crates/graphql/", version = "=1.13.0" } -mas-handlers = { path = "./crates/handlers/", version = "=1.13.0" } -mas-http = { path = "./crates/http/", version = "=1.13.0" } -mas-i18n = { path = "./crates/i18n/", version = "=1.13.0" } -mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.13.0" } -mas-iana = { path = "./crates/iana/", version = "=1.13.0" } -mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.13.0" } -mas-jose = { path = "./crates/jose/", version = "=1.13.0" } -mas-keystore = { path = "./crates/keystore/", version = "=1.13.0" } -mas-listener = { path = "./crates/listener/", version = "=1.13.0" } -mas-matrix = { path = "./crates/matrix/", version = "=1.13.0" } -mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.13.0" } -mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.13.0" } -mas-policy = { path = "./crates/policy/", version = "=1.13.0" } -mas-router = { path = "./crates/router/", version = "=1.13.0" } -mas-spa = { path = "./crates/spa/", version = "=1.13.0" } -mas-storage = { path = "./crates/storage/", version = "=1.13.0" } -mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.13.0" } -mas-tasks = { path = "./crates/tasks/", version = "=1.13.0" } -mas-templates = { path = "./crates/templates/", version = "=1.13.0" } -mas-tower = { path = "./crates/tower/", version = "=1.13.0" } -oauth2-types = { path = "./crates/oauth2-types/", version = "=1.13.0" } -syn2mas = { path = "./crates/syn2mas", version = "=1.13.0" } +mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.14.0-rc.0" } +mas-cli = { path = "./crates/cli/", version = "=1.14.0-rc.0" } +mas-config = { path = "./crates/config/", version = "=1.14.0-rc.0" } +mas-context = { path = "./crates/context/", version = "=1.14.0-rc.0" } +mas-data-model = { path = "./crates/data-model/", version = "=1.14.0-rc.0" } +mas-email = { path = "./crates/email/", version = "=1.14.0-rc.0" } +mas-graphql = { path = "./crates/graphql/", version = "=1.14.0-rc.0" } +mas-handlers = { path = "./crates/handlers/", version = "=1.14.0-rc.0" } +mas-http = { path = "./crates/http/", version = "=1.14.0-rc.0" } +mas-i18n = { path = "./crates/i18n/", version = "=1.14.0-rc.0" } +mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.14.0-rc.0" } +mas-iana = { path = "./crates/iana/", version = "=1.14.0-rc.0" } +mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.14.0-rc.0" } +mas-jose = { path = "./crates/jose/", version = "=1.14.0-rc.0" } +mas-keystore = { path = "./crates/keystore/", version = "=1.14.0-rc.0" } +mas-listener = { path = "./crates/listener/", version = "=1.14.0-rc.0" } +mas-matrix = { path = "./crates/matrix/", version = "=1.14.0-rc.0" } +mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.14.0-rc.0" } +mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.14.0-rc.0" } +mas-policy = { path = "./crates/policy/", version = "=1.14.0-rc.0" } +mas-router = { path = "./crates/router/", version = "=1.14.0-rc.0" } +mas-spa = { path = "./crates/spa/", version = "=1.14.0-rc.0" } +mas-storage = { path = "./crates/storage/", version = "=1.14.0-rc.0" } +mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.14.0-rc.0" } +mas-tasks = { path = "./crates/tasks/", version = "=1.14.0-rc.0" } +mas-templates = { path = "./crates/templates/", version = "=1.14.0-rc.0" } +mas-tower = { path = "./crates/tower/", version = "=1.14.0-rc.0" } +oauth2-types = { path = "./crates/oauth2-types/", version = "=1.14.0-rc.0" } +syn2mas = { path = "./crates/syn2mas", version = "=1.14.0-rc.0" } # OpenAPI schema generation and validation [workspace.dependencies.aide] From 7a55730d66e7eeaff7df77325e2ca9fffe4d9b02 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 13:54:43 +0000 Subject: [PATCH 098/104] build(deps): bump docker/metadata-action from 5.10.0 to 6.0.0 Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5.10.0 to 6.0.0. - [Release notes](https://github.com/docker/metadata-action/releases) - [Commits](https://github.com/docker/metadata-action/compare/v5.10.0...v6.0.0) --- updated-dependencies: - dependency-name: docker/metadata-action dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index ebb18ee4e..2a8c47d3d 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -226,7 +226,7 @@ jobs: steps: - name: Docker meta id: meta - uses: docker/metadata-action@v5.10.0 + uses: docker/metadata-action@v6.0.0 with: images: "${{ env.IMAGE }}" bake-target: docker-metadata-action @@ -242,7 +242,7 @@ jobs: - name: Docker meta (debug variant) id: meta-debug - uses: docker/metadata-action@v5.10.0 + uses: docker/metadata-action@v6.0.0 with: images: "${{ env.IMAGE }}" bake-target: docker-metadata-action-debug From 5aa0b6baa0781316a18ec0662396a4f33ddc8d12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 13:54:50 +0000 Subject: [PATCH 099/104] build(deps): bump sigstore/cosign-installer from 4.0.0 to 4.1.0 Bumps [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) from 4.0.0 to 4.1.0. - [Release notes](https://github.com/sigstore/cosign-installer/releases) - [Commits](https://github.com/sigstore/cosign-installer/compare/v4.0.0...v4.1.0) --- updated-dependencies: - dependency-name: sigstore/cosign-installer dependency-version: 4.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index ebb18ee4e..12a82e84e 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -258,7 +258,7 @@ jobs: type=sha - name: Setup Cosign - uses: sigstore/cosign-installer@v4.0.0 + uses: sigstore/cosign-installer@v4.1.0 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v4.0.0 From c6a2eb73e0a62e430dbd786fd4f211037d26fead Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 13:54:56 +0000 Subject: [PATCH 100/104] build(deps): bump softprops/action-gh-release from 2.5.0 to 2.6.1 Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.5.0 to 2.6.1. - [Release notes](https://github.com/softprops/action-gh-release/releases) - [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md) - [Commits](https://github.com/softprops/action-gh-release/compare/v2.5.0...v2.6.1) --- updated-dependencies: - dependency-name: softprops/action-gh-release dependency-version: 2.6.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index ebb18ee4e..263f99418 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -327,7 +327,7 @@ jobs: merge-multiple: true - name: Prepare a release - uses: softprops/action-gh-release@v2.5.0 + uses: softprops/action-gh-release@v2.6.1 with: generate_release_notes: true body: | @@ -396,7 +396,7 @@ jobs: await script({ core, github, context }); - name: Update unstable release - uses: softprops/action-gh-release@v2.5.0 + uses: softprops/action-gh-release@v2.6.1 with: name: "Unstable build" tag_name: unstable From ce79451a0c6bc336f12b4c3b67e5942d30ac598f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 13:56:02 +0000 Subject: [PATCH 101/104] build(deps-dev): bump the vite group in /frontend with 2 updates Bumps the vite group in /frontend with 2 updates: [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) and [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite). Updates `@vitejs/plugin-react` from 5.1.4 to 6.0.1 - [Release notes](https://github.com/vitejs/vite-plugin-react/releases) - [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.0.1/packages/plugin-react) Updates `vite` from 7.3.1 to 8.0.0 - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/create-vite@8.0.0/packages/vite) --- updated-dependencies: - dependency-name: "@vitejs/plugin-react" dependency-version: 6.0.1 dependency-type: direct:development update-type: version-update:semver-major dependency-group: vite - dependency-name: vite dependency-version: 8.0.0 dependency-type: direct:development update-type: version-update:semver-major dependency-group: vite ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 821 ++++++++++++++++++++++++++++++++----- frontend/package.json | 4 +- 2 files changed, 729 insertions(+), 96 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d710aa411..216e63b75 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -48,7 +48,7 @@ "@types/react": "19.2.14", "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", - "@vitejs/plugin-react": "^5.1.4", + "@vitejs/plugin-react": "^6.0.1", "@vitest/coverage-v8": "^4.0.18", "autoprefixer": "^10.4.23", "browserslist-to-esbuild": "^2.1.1", @@ -66,7 +66,7 @@ "tailwindcss": "^3.4.19", "tinyglobby": "^0.2.15", "typescript": "^5.9.3", - "vite": "7.3.1", + "vite": "8.0.0", "vite-plugin-graphql-codegen": "^3.8.0", "vitest": "^4.0.15" } @@ -830,38 +830,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", @@ -3334,26 +3302,6 @@ } } }, - "node_modules/@joshwooding/vite-plugin-react-docgen-typescript": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.6.4.tgz", - "integrity": "sha512-6PyZBYKnnVNqOSB0YFly+62R7dmov8segT27A+RVTBVd4iAE6kbW9QBJGlyR2yG4D4ohzhZSTIu7BK1UTtmFFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "^13.0.1", - "react-docgen-typescript": "^2.2.2" - }, - "peerDependencies": { - "typescript": ">= 4.3.x", - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -3441,9 +3389,9 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.0.tgz", - "integrity": "sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", + "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", "dev": true, "license": "MIT", "optional": true, @@ -3451,6 +3399,10 @@ "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" } }, "node_modules/@nodelib/fs.scandir": { @@ -3516,6 +3468,26 @@ "dev": true, "license": "MIT" }, + "node_modules/@oxc-project/runtime": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-project/runtime/-/runtime-0.115.0.tgz", + "integrity": "sha512-Rg8Wlt5dCbXhQnsXPrkOjL1DTSvXLgb2R/KYfnf1/K+R0k6UMLEmbQXPM+kwrWqSmWA2t0B1EtHy2/3zikQpvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.115.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.115.0.tgz", + "integrity": "sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, "node_modules/@oxc-resolver/binding-android-arm-eabi": { "version": "11.15.0", "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm-eabi/-/binding-android-arm-eabi-11.15.0.tgz", @@ -4628,10 +4600,265 @@ "dev": true, "license": "MIT" }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.9.tgz", + "integrity": "sha512-lcJL0bN5hpgJfSIz/8PIf02irmyL43P+j1pTCfbD1DbLkmGRuFIA4DD3B3ZOvGqG0XiVvRznbKtN0COQVaKUTg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.9.tgz", + "integrity": "sha512-J7Zk3kLYFsLtuH6U+F4pS2sYVzac0qkjcO5QxHS7OS7yZu2LRs+IXo+uvJ/mvpyUljDJ3LROZPoQfgBIpCMhdQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.9.tgz", + "integrity": "sha512-iwtmmghy8nhfRGeNAIltcNXzD0QMNaaA5U/NyZc1Ia4bxrzFByNMDoppoC+hl7cDiUq5/1CnFthpT9n+UtfFyg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.9.tgz", + "integrity": "sha512-DLFYI78SCiZr5VvdEplsVC2Vx53lnA4/Ga5C65iyldMVaErr86aiqCoNBLl92PXPfDtUYjUh+xFFor40ueNs4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.9.tgz", + "integrity": "sha512-CsjTmTwd0Hri6iTw/DRMK7kOZ7FwAkrO4h8YWKoX/kcj833e4coqo2wzIFywtch/8Eb5enQ/lwLM7w6JX1W5RQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.9.tgz", + "integrity": "sha512-2x9O2JbSPxpxMDhP9Z74mahAStibTlrBMW0520+epJH5sac7/LwZW5Bmg/E6CXuEF53JJFW509uP+lSedaUNxg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.9.tgz", + "integrity": "sha512-JA1QRW31ogheAIRhIg9tjMfsYbglXXYGNPLdPEYrwFxdbkQCAzvpSCSHCDWNl4hTtrol8WeboCSEpjdZK8qrCg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.9.tgz", + "integrity": "sha512-aOKU9dJheda8Kj8Y3w9gnt9QFOO+qKPAl8SWd7JPHP+Cu0EuDAE5wokQubLzIDQWg2myXq2XhTpOVS07qqvT+w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.9.tgz", + "integrity": "sha512-OalO94fqj7IWRn3VdXWty75jC5dk4C197AWEuMhIpvVv2lw9fiPhud0+bW2ctCxb3YoBZor71QHbY+9/WToadA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.9.tgz", + "integrity": "sha512-cVEl1vZtBsBZna3YMjGXNvnYYrOJ7RzuWvZU0ffvJUexWkukMaDuGhUXn0rjnV0ptzGVkvc+vW9Yqy6h8YX4pg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.9.tgz", + "integrity": "sha512-UzYnKCIIc4heAKgI4PZ3dfBGUZefGCJ1TPDuLHoCzgrMYPb5Rv6TLFuYtyM4rWyHM7hymNdsg5ik2C+UD9VDbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.9.tgz", + "integrity": "sha512-+6zoiF+RRyf5cdlFQP7nm58mq7+/2PFaY2DNQeD4B87N36JzfF/l9mdBkkmTvSYcYPE8tMh/o3cRlsx1ldLfog==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.9.tgz", + "integrity": "sha512-rgFN6sA/dyebil3YTlL2evvi/M+ivhfnyxec7AccTpRPccno/rPoNlqybEZQBkcbZu8Hy+eqNJCqfBR8P7Pg8g==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.9.tgz", + "integrity": "sha512-lHVNUG/8nlF1IQk1C0Ci574qKYyty2goMiPlRqkC5R+3LkXDkL5Dhx8ytbxq35m+pkHVIvIxviD+TWLdfeuadA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.9.tgz", + "integrity": "sha512-G0oA4+w1iY5AGi5HcDTxWsoxF509hrFIPB2rduV5aDqS9FtDg1CAfa7V34qImbjfhIcA8C+RekocJZA96EarwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", - "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", + "version": "1.0.0-rc.7", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.7.tgz", + "integrity": "sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==", "dev": true, "license": "MIT" }, @@ -5208,6 +5435,26 @@ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/@storybook/react-vite/node_modules/@joshwooding/vite-plugin-react-docgen-typescript": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.6.4.tgz", + "integrity": "sha512-6PyZBYKnnVNqOSB0YFly+62R7dmov8segT27A+RVTBVd4iAE6kbW9QBJGlyR2yG4D4ohzhZSTIu7BK1UTtmFFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^13.0.1", + "react-docgen-typescript": "^2.2.2" + }, + "peerDependencies": { + "typescript": ">= 4.3.x", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@swc/core": { "version": "1.15.18", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.18.tgz", @@ -6086,24 +6333,29 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.4.tgz", - "integrity": "sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.1.tgz", + "integrity": "sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.29.0", - "@babel/plugin-transform-react-jsx-self": "^7.27.1", - "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-rc.3", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.18.0" + "@rolldown/pluginutils": "1.0.0-rc.7" }, "engines": { "node": "^20.19.0 || >=22.12.0" }, "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + } } }, "node_modules/@vitest/coverage-v8": { @@ -7472,6 +7724,16 @@ "node": ">=8" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", @@ -9678,6 +9940,267 @@ "url": "https://github.com/sponsors/colinhacks" } }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", @@ -10899,9 +11422,9 @@ } }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", "dev": true, "funding": [ { @@ -11284,16 +11807,6 @@ "license": "MIT", "peer": true }, - "node_modules/react-refresh": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", - "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react-remove-scroll": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", @@ -11609,6 +12122,47 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rolldown": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.9.tgz", + "integrity": "sha512-9EbgWge7ZH+yqb4d2EnELAntgPTWbfL8ajiTW+SyhJEC4qhBbkCKbqFV4Ge4zmu5ziQuVbWxb/XwLZ+RIO7E8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.115.0", + "@rolldown/pluginutils": "1.0.0-rc.9" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.9", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.9", + "@rolldown/binding-darwin-x64": "1.0.0-rc.9", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.9", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.9", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.9", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.9", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.9", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.9", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.9", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.9", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.9", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.9", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.9", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.9" + } + }, + "node_modules/rolldown/node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.9.tgz", + "integrity": "sha512-w6oiRWgEBl04QkFZgmW+jnU1EC9b57Oihi2ot3HNWIQRqgHp5PnYDia5iZ5FF7rpa4EQdiqMDXjlqKGXBhsoXw==", + "dev": true, + "license": "MIT" + }, "node_modules/rollup": { "version": "4.59.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", @@ -12861,17 +13415,17 @@ } }, "node_modules/vite": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", - "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.0.tgz", + "integrity": "sha512-fPGaRNj9Zytaf8LEiBhY7Z6ijnFKdzU/+mL8EFBaKr7Vw1/FWcTBAMW0wLPJAGMPX38ZPVCVgLceWiEqeoqL2Q==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.27.0", - "fdir": "^6.5.0", + "@oxc-project/runtime": "0.115.0", + "lightningcss": "^1.32.0", "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", + "postcss": "^8.5.8", + "rolldown": "1.0.0-rc.9", "tinyglobby": "^0.2.15" }, "bin": { @@ -12888,9 +13442,10 @@ }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.0.0-alpha.31", + "esbuild": "^0.27.0", "jiti": ">=1.21.0", "less": "^4.0.0", - "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", @@ -12903,15 +13458,18 @@ "@types/node": { "optional": true }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, "jiti": { "optional": true }, "less": { "optional": true }, - "lightningcss": { - "optional": true - }, "sass": { "optional": true }, @@ -13100,6 +13658,81 @@ "@types/estree": "^1.0.0" } }, + "node_modules/vitest/node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 21c889464..3c5f1ddad 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -58,7 +58,7 @@ "@types/react": "19.2.14", "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", - "@vitejs/plugin-react": "^5.1.4", + "@vitejs/plugin-react": "^6.0.1", "@vitest/coverage-v8": "^4.0.18", "autoprefixer": "^10.4.23", "browserslist-to-esbuild": "^2.1.1", @@ -76,7 +76,7 @@ "tailwindcss": "^3.4.19", "tinyglobby": "^0.2.15", "typescript": "^5.9.3", - "vite": "7.3.1", + "vite": "8.0.0", "vite-plugin-graphql-codegen": "^3.8.0", "vitest": "^4.0.15" }, From bb6c1e3ea2e7576e2b48b208b5fca129d0fb9f7a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Mar 2026 10:51:57 +0000 Subject: [PATCH 102/104] build(deps-dev): bump the vitest group in /frontend with 2 updates Bumps the vitest group in /frontend with 2 updates: [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) and [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest). Updates `@vitest/coverage-v8` from 4.0.18 to 4.1.0 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.0/packages/coverage-v8) Updates `vitest` from 4.0.18 to 4.1.0 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.0/packages/vitest) --- updated-dependencies: - dependency-name: "@vitest/coverage-v8" dependency-version: 4.1.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: vitest - dependency-name: vitest dependency-version: 4.1.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: vitest ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 696 +++++++------------------------------ frontend/package.json | 2 +- 2 files changed, 122 insertions(+), 576 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 216e63b75..74c5d5304 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -49,7 +49,7 @@ "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", "@vitejs/plugin-react": "^6.0.1", - "@vitest/coverage-v8": "^4.0.18", + "@vitest/coverage-v8": "^4.1.0", "autoprefixer": "^10.4.23", "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", @@ -4885,356 +4885,6 @@ } } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", - "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", - "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", - "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", - "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", - "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", - "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", - "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", - "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", - "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", - "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", - "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", - "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", - "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", - "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", - "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", - "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", - "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", - "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", - "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", - "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", - "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", - "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", - "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", - "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", - "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@scarf/scarf": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz", @@ -6359,29 +6009,29 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.18.tgz", - "integrity": "sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.0.tgz", + "integrity": "sha512-nDWulKeik2bL2Va/Wl4x7DLuTKAXa906iRFooIRPR+huHkcvp9QDkPQ2RJdmjOFrqOqvNfoSQLF68deE3xC3CQ==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^1.0.2", - "@vitest/utils": "4.0.18", - "ast-v8-to-istanbul": "^0.3.10", + "@vitest/utils": "4.1.0", + "ast-v8-to-istanbul": "^1.0.0", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.2.0", - "magicast": "^0.5.1", + "magicast": "^0.5.2", "obug": "^2.1.1", - "std-env": "^3.10.0", + "std-env": "^4.0.0-rc.1", "tinyrainbow": "^3.0.3" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "4.0.18", - "vitest": "4.0.18" + "@vitest/browser": "4.1.0", + "vitest": "4.1.0" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -6444,10 +6094,57 @@ "node": ">=14.0.0" } }, + "node_modules/@vitest/mocker": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.0.tgz", + "integrity": "sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.0", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/@vitest/spy": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.0.tgz", + "integrity": "sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/@vitest/pretty-format": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", - "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.0.tgz", + "integrity": "sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==", "dev": true, "license": "MIT", "dependencies": { @@ -6458,13 +6155,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.18.tgz", - "integrity": "sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.0.tgz", + "integrity": "sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.0.18", + "@vitest/utils": "4.1.0", "pathe": "^2.0.3" }, "funding": { @@ -6472,13 +6169,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.18.tgz", - "integrity": "sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.0.tgz", + "integrity": "sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.18", + "@vitest/pretty-format": "4.1.0", + "@vitest/utils": "4.1.0", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -6500,13 +6198,14 @@ } }, "node_modules/@vitest/utils": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", - "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.0.tgz", + "integrity": "sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.18", + "@vitest/pretty-format": "4.1.0", + "convert-source-map": "^2.0.0", "tinyrainbow": "^3.0.3" }, "funding": { @@ -6761,9 +6460,9 @@ } }, "node_modules/ast-v8-to-istanbul": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.11.tgz", - "integrity": "sha512-Qya9fkoofMjCBNVdWINMjB5KZvkYfaO9/anwkWnjxibpWUxo5iHl2sOdP7/uAqaRuUYuoo8rDwnbaaKVFxoUvw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.0.tgz", + "integrity": "sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==", "dev": true, "license": "MIT", "dependencies": { @@ -7883,9 +7582,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "dev": true, "license": "MIT" }, @@ -10500,14 +10199,14 @@ } }, "node_modules/magicast": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.1.tgz", - "integrity": "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz", + "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "source-map-js": "^1.2.1" } }, @@ -12163,51 +11862,6 @@ "dev": true, "license": "MIT" }, - "node_modules/rollup": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", - "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.59.0", - "@rollup/rollup-android-arm64": "4.59.0", - "@rollup/rollup-darwin-arm64": "4.59.0", - "@rollup/rollup-darwin-x64": "4.59.0", - "@rollup/rollup-freebsd-arm64": "4.59.0", - "@rollup/rollup-freebsd-x64": "4.59.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", - "@rollup/rollup-linux-arm-musleabihf": "4.59.0", - "@rollup/rollup-linux-arm64-gnu": "4.59.0", - "@rollup/rollup-linux-arm64-musl": "4.59.0", - "@rollup/rollup-linux-loong64-gnu": "4.59.0", - "@rollup/rollup-linux-loong64-musl": "4.59.0", - "@rollup/rollup-linux-ppc64-gnu": "4.59.0", - "@rollup/rollup-linux-ppc64-musl": "4.59.0", - "@rollup/rollup-linux-riscv64-gnu": "4.59.0", - "@rollup/rollup-linux-riscv64-musl": "4.59.0", - "@rollup/rollup-linux-s390x-gnu": "4.59.0", - "@rollup/rollup-linux-x64-gnu": "4.59.0", - "@rollup/rollup-linux-x64-musl": "4.59.0", - "@rollup/rollup-openbsd-x64": "4.59.0", - "@rollup/rollup-openharmony-arm64": "4.59.0", - "@rollup/rollup-win32-arm64-msvc": "4.59.0", - "@rollup/rollup-win32-ia32-msvc": "4.59.0", - "@rollup/rollup-win32-x64-gnu": "4.59.0", - "@rollup/rollup-win32-x64-msvc": "4.59.0", - "fsevents": "~2.3.2" - } - }, "node_modules/run-applescript": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", @@ -12510,9 +12164,9 @@ } }, "node_modules/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", + "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", "dev": true, "license": "MIT" }, @@ -13506,31 +13160,31 @@ } }, "node_modules/vitest": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.18.tgz", - "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.0.tgz", + "integrity": "sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.0.18", - "@vitest/mocker": "4.0.18", - "@vitest/pretty-format": "4.0.18", - "@vitest/runner": "4.0.18", - "@vitest/snapshot": "4.0.18", - "@vitest/spy": "4.0.18", - "@vitest/utils": "4.0.18", - "es-module-lexer": "^1.7.0", - "expect-type": "^1.2.2", + "@vitest/expect": "4.1.0", + "@vitest/mocker": "4.1.0", + "@vitest/pretty-format": "4.1.0", + "@vitest/runner": "4.1.0", + "@vitest/snapshot": "4.1.0", + "@vitest/spy": "4.1.0", + "@vitest/utils": "4.1.0", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", - "std-env": "^3.10.0", + "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", - "vite": "^6.0.0 || ^7.0.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0-0", "why-is-node-running": "^2.3.0" }, "bin": { @@ -13546,12 +13200,13 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.0.18", - "@vitest/browser-preview": "4.0.18", - "@vitest/browser-webdriverio": "4.0.18", - "@vitest/ui": "4.0.18", + "@vitest/browser-playwright": "4.1.0", + "@vitest/browser-preview": "4.1.0", + "@vitest/browser-webdriverio": "4.1.0", + "@vitest/ui": "4.1.0", "happy-dom": "*", - "jsdom": "*" + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0-0" }, "peerDependenciesMeta": { "@edge-runtime/vm": { @@ -13580,58 +13235,34 @@ }, "jsdom": { "optional": true + }, + "vite": { + "optional": false } } }, "node_modules/vitest/node_modules/@vitest/expect": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz", - "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.0.tgz", + "integrity": "sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==", "dev": true, "license": "MIT", "dependencies": { - "@standard-schema/spec": "^1.0.0", + "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.0.18", - "@vitest/utils": "4.0.18", - "chai": "^6.2.1", + "@vitest/spy": "4.1.0", + "@vitest/utils": "4.1.0", + "chai": "^6.2.2", "tinyrainbow": "^3.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/vitest/node_modules/@vitest/mocker": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.18.tgz", - "integrity": "sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "4.0.18", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.21" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^6.0.0 || ^7.0.0-0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, "node_modules/vitest/node_modules/@vitest/spy": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", - "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.0.tgz", + "integrity": "sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==", "dev": true, "license": "MIT", "funding": { @@ -13648,91 +13279,6 @@ "node": ">=18" } }, - "node_modules/vitest/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/vitest/node_modules/vite": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", - "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.27.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 3c5f1ddad..7e39b47fc 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -59,7 +59,7 @@ "@types/react-dom": "19.2.3", "@types/swagger-ui-dist": "^3.30.6", "@vitejs/plugin-react": "^6.0.1", - "@vitest/coverage-v8": "^4.0.18", + "@vitest/coverage-v8": "^4.1.0", "autoprefixer": "^10.4.23", "browserslist-to-esbuild": "^2.1.1", "graphql": "^16.12.0", From cb6b36e8cb5cb9abf4986fcb6bb1bf83880ee1c4 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Tue, 24 Mar 2026 13:16:26 +0100 Subject: [PATCH 103/104] Update aws-lc-rs and rustls-webpki to resolve security advisories. Update aws-lc-rs 1.14.0 -> 1.16.2 (aws-lc-sys 0.31.0 -> 0.39.0) and rustls-webpki 0.103.6 -> 0.103.10 to resolve security advisories. Remove ring license clarification and OpenSSL license allowance from the `cargo-deny` config since ring is no longer in the dependency tree. --- Cargo.lock | 105 ++++++----------------------------------------------- deny.toml | 9 +---- 2 files changed, 12 insertions(+), 102 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ee1f7e98b..23dd46daa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -534,9 +534,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-lc-rs" -version = "1.14.0" +version = "1.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b8ff6c09cd57b16da53641caa860168b88c172a5ee163b0288d3d6eea12786" +checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc" dependencies = [ "aws-lc-sys", "zeroize", @@ -544,11 +544,10 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.31.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e44d16778acaf6a9ec9899b92cebd65580b83f685446bf2e1f5d3d732f99dcd" +checksum = "1fa7e52a4c5c547c741610a2c6f123f3881e409b714cd27e6798ef020c514f0a" dependencies = [ - "bindgen", "cc", "cmake", "dunce", @@ -691,26 +690,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "bindgen" -version = "0.72.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" -dependencies = [ - "bitflags", - "cexpr", - "clang-sys", - "itertools 0.13.0", - "log", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "syn", -] - [[package]] name = "bit-set" version = "0.5.3" @@ -870,15 +849,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" -[[package]] -name = "cexpr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom 7.1.3", -] - [[package]] name = "cfg-if" version = "1.0.3" @@ -969,17 +939,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "clang-sys" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" -dependencies = [ - "glob", - "libc", - "libloading", -] - [[package]] name = "clap" version = "4.5.50" @@ -1755,7 +1714,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2083,12 +2042,6 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "glob" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" - [[package]] name = "gloo-timers" version = "0.3.0" @@ -3005,7 +2958,7 @@ dependencies = [ "httpdate", "idna", "mime", - "nom 8.0.0", + "nom", "percent-encoding", "quoted_printable", "rustls", @@ -3023,16 +2976,6 @@ version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" -[[package]] -name = "libloading" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" -dependencies = [ - "cfg-if", - "windows-targets 0.53.3", -] - [[package]] name = "libm" version = "0.2.15" @@ -3866,12 +3809,6 @@ dependencies = [ "serde", ] -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.8.9" @@ -3909,16 +3846,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "nom" version = "8.0.0" @@ -4641,16 +4568,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "primeorder" version = "0.13.6" @@ -4729,7 +4646,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425" dependencies = [ "anyhow", - "itertools 0.13.0", + "itertools 0.14.0", "proc-macro2", "quote", "syn", @@ -5167,7 +5084,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -5235,9 +5152,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.6" +version = "0.103.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8572f3c2cb9934231157b45499fc41e1f58c589fdfb81a844ba873265e80f8eb" +checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef" dependencies = [ "aws-lc-rs", "ring", @@ -6234,7 +6151,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] diff --git a/deny.toml b/deny.toml index d75b25fce..47b0bb9ca 100644 --- a/deny.toml +++ b/deny.toml @@ -1,3 +1,4 @@ +# Copyright 2025, 2026 Element Creations Ltd. # Copyright 2025 New Vector Ltd. # # SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial @@ -33,19 +34,11 @@ allow = [ "ISC", "MIT", "MPL-2.0", - "OpenSSL", "Unicode-3.0", "Zlib", "CDLA-Permissive-2.0", ] -# Ring's license is a bit complicated, so we need to specify it manually -[[licenses.clarify]] -name = "ring" -version = "*" -expression = "MIT AND ISC AND OpenSSL" -license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }] - [bans] # List of crates to deny deny = [ From 8fd574f1a2c23fed12bc927898cf914127d9a06b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 24 Mar 2026 14:09:16 +0000 Subject: [PATCH 104/104] 1.14.0 --- Cargo.lock | 56 +++++++++++++++++++++++++------------------------- Cargo.toml | 60 +++++++++++++++++++++++++++--------------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 23dd46daa..a500974fe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3062,7 +3062,7 @@ dependencies = [ [[package]] name = "mas-axum-utils" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "anyhow", "axum", @@ -3096,7 +3096,7 @@ dependencies = [ [[package]] name = "mas-cli" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "anyhow", "axum", @@ -3171,7 +3171,7 @@ dependencies = [ [[package]] name = "mas-config" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "anyhow", "camino", @@ -3202,7 +3202,7 @@ dependencies = [ [[package]] name = "mas-context" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "console", "opentelemetry", @@ -3218,7 +3218,7 @@ dependencies = [ [[package]] name = "mas-data-model" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "base64ct", "chrono", @@ -3239,7 +3239,7 @@ dependencies = [ [[package]] name = "mas-email" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "async-trait", "lettre", @@ -3250,7 +3250,7 @@ dependencies = [ [[package]] name = "mas-handlers" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "aide", "anyhow", @@ -3331,7 +3331,7 @@ dependencies = [ [[package]] name = "mas-http" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "futures-util", "headers", @@ -3352,7 +3352,7 @@ dependencies = [ [[package]] name = "mas-i18n" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "camino", "icu_calendar", @@ -3374,7 +3374,7 @@ dependencies = [ [[package]] name = "mas-i18n-scan" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "camino", "clap", @@ -3388,7 +3388,7 @@ dependencies = [ [[package]] name = "mas-iana" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "schemars 0.9.0", "serde", @@ -3396,7 +3396,7 @@ dependencies = [ [[package]] name = "mas-iana-codegen" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "anyhow", "async-trait", @@ -3413,7 +3413,7 @@ dependencies = [ [[package]] name = "mas-jose" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "base64ct", "chrono", @@ -3443,7 +3443,7 @@ dependencies = [ [[package]] name = "mas-keystore" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "aead", "base64ct", @@ -3471,7 +3471,7 @@ dependencies = [ [[package]] name = "mas-listener" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "anyhow", "bytes", @@ -3495,7 +3495,7 @@ dependencies = [ [[package]] name = "mas-matrix" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "anyhow", "async-trait", @@ -3505,7 +3505,7 @@ dependencies = [ [[package]] name = "mas-matrix-synapse" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "anyhow", "async-trait", @@ -3522,7 +3522,7 @@ dependencies = [ [[package]] name = "mas-oidc-client" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "assert_matches", "async-trait", @@ -3558,7 +3558,7 @@ dependencies = [ [[package]] name = "mas-policy" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "anyhow", "arc-swap", @@ -3575,7 +3575,7 @@ dependencies = [ [[package]] name = "mas-router" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "axum", "serde", @@ -3586,7 +3586,7 @@ dependencies = [ [[package]] name = "mas-spa" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "camino", "serde", @@ -3595,7 +3595,7 @@ dependencies = [ [[package]] name = "mas-storage" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "async-trait", "chrono", @@ -3617,7 +3617,7 @@ dependencies = [ [[package]] name = "mas-storage-pg" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "async-trait", "chrono", @@ -3647,7 +3647,7 @@ dependencies = [ [[package]] name = "mas-tasks" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "anyhow", "async-trait", @@ -3679,7 +3679,7 @@ dependencies = [ [[package]] name = "mas-templates" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "anyhow", "arc-swap", @@ -3711,7 +3711,7 @@ dependencies = [ [[package]] name = "mas-tower" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "http", "opentelemetry", @@ -3964,7 +3964,7 @@ dependencies = [ [[package]] name = "oauth2-types" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "assert_matches", "base64ct", @@ -6059,7 +6059,7 @@ dependencies = [ [[package]] name = "syn2mas" -version = "1.14.0-rc.0" +version = "1.14.0" dependencies = [ "anyhow", "arc-swap", diff --git a/Cargo.toml b/Cargo.toml index cbc45eb53..4586bfea7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ members = ["crates/*"] resolver = "2" # Updated in the CI with a `sed` command -package.version = "1.14.0-rc.0" +package.version = "1.14.0" package.license = "AGPL-3.0-only OR LicenseRef-Element-Commercial" package.authors = ["Element Backend Team"] package.edition = "2024" @@ -34,35 +34,35 @@ broken_intra_doc_links = "deny" [workspace.dependencies] # Workspace crates -mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.14.0-rc.0" } -mas-cli = { path = "./crates/cli/", version = "=1.14.0-rc.0" } -mas-config = { path = "./crates/config/", version = "=1.14.0-rc.0" } -mas-context = { path = "./crates/context/", version = "=1.14.0-rc.0" } -mas-data-model = { path = "./crates/data-model/", version = "=1.14.0-rc.0" } -mas-email = { path = "./crates/email/", version = "=1.14.0-rc.0" } -mas-graphql = { path = "./crates/graphql/", version = "=1.14.0-rc.0" } -mas-handlers = { path = "./crates/handlers/", version = "=1.14.0-rc.0" } -mas-http = { path = "./crates/http/", version = "=1.14.0-rc.0" } -mas-i18n = { path = "./crates/i18n/", version = "=1.14.0-rc.0" } -mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.14.0-rc.0" } -mas-iana = { path = "./crates/iana/", version = "=1.14.0-rc.0" } -mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.14.0-rc.0" } -mas-jose = { path = "./crates/jose/", version = "=1.14.0-rc.0" } -mas-keystore = { path = "./crates/keystore/", version = "=1.14.0-rc.0" } -mas-listener = { path = "./crates/listener/", version = "=1.14.0-rc.0" } -mas-matrix = { path = "./crates/matrix/", version = "=1.14.0-rc.0" } -mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.14.0-rc.0" } -mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.14.0-rc.0" } -mas-policy = { path = "./crates/policy/", version = "=1.14.0-rc.0" } -mas-router = { path = "./crates/router/", version = "=1.14.0-rc.0" } -mas-spa = { path = "./crates/spa/", version = "=1.14.0-rc.0" } -mas-storage = { path = "./crates/storage/", version = "=1.14.0-rc.0" } -mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.14.0-rc.0" } -mas-tasks = { path = "./crates/tasks/", version = "=1.14.0-rc.0" } -mas-templates = { path = "./crates/templates/", version = "=1.14.0-rc.0" } -mas-tower = { path = "./crates/tower/", version = "=1.14.0-rc.0" } -oauth2-types = { path = "./crates/oauth2-types/", version = "=1.14.0-rc.0" } -syn2mas = { path = "./crates/syn2mas", version = "=1.14.0-rc.0" } +mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.14.0" } +mas-cli = { path = "./crates/cli/", version = "=1.14.0" } +mas-config = { path = "./crates/config/", version = "=1.14.0" } +mas-context = { path = "./crates/context/", version = "=1.14.0" } +mas-data-model = { path = "./crates/data-model/", version = "=1.14.0" } +mas-email = { path = "./crates/email/", version = "=1.14.0" } +mas-graphql = { path = "./crates/graphql/", version = "=1.14.0" } +mas-handlers = { path = "./crates/handlers/", version = "=1.14.0" } +mas-http = { path = "./crates/http/", version = "=1.14.0" } +mas-i18n = { path = "./crates/i18n/", version = "=1.14.0" } +mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.14.0" } +mas-iana = { path = "./crates/iana/", version = "=1.14.0" } +mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.14.0" } +mas-jose = { path = "./crates/jose/", version = "=1.14.0" } +mas-keystore = { path = "./crates/keystore/", version = "=1.14.0" } +mas-listener = { path = "./crates/listener/", version = "=1.14.0" } +mas-matrix = { path = "./crates/matrix/", version = "=1.14.0" } +mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.14.0" } +mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.14.0" } +mas-policy = { path = "./crates/policy/", version = "=1.14.0" } +mas-router = { path = "./crates/router/", version = "=1.14.0" } +mas-spa = { path = "./crates/spa/", version = "=1.14.0" } +mas-storage = { path = "./crates/storage/", version = "=1.14.0" } +mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.14.0" } +mas-tasks = { path = "./crates/tasks/", version = "=1.14.0" } +mas-templates = { path = "./crates/templates/", version = "=1.14.0" } +mas-tower = { path = "./crates/tower/", version = "=1.14.0" } +oauth2-types = { path = "./crates/oauth2-types/", version = "=1.14.0" } +syn2mas = { path = "./crates/syn2mas", version = "=1.14.0" } # OpenAPI schema generation and validation [workspace.dependencies.aide]