From 6d6219811ece7aec6fd03cf705e2dc01d06d7ea9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Dec 2023 11:07:58 +0100 Subject: [PATCH 001/131] ci: bump github/codeql-action from 2 to 3 (#7878) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2 to 3. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/v2...v3) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 5f1255f56..c8c0cc11f 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -27,10 +27,10 @@ jobs: - name: Setup authentik env uses: ./.github/actions/setup - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@v3 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 From 23fb4d436d4430a47cd99708ab0dece6151983b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Dec 2023 11:08:08 +0100 Subject: [PATCH 002/131] web: bump rollup from 4.8.0 to 4.9.0 in /web (#7877) Bumps [rollup](https://github.com/rollup/rollup) from 4.8.0 to 4.9.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.8.0...v4.9.0) --- updated-dependencies: - dependency-name: rollup dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package-lock.json | 112 +++++++++++++++++++++--------------------- web/package.json | 2 +- 2 files changed, 57 insertions(+), 57 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 17f30aee1..ab61a328c 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -90,7 +90,7 @@ "pyright": "=1.1.338", "react": "^18.2.0", "react-dom": "^18.2.0", - "rollup": "^4.8.0", + "rollup": "^4.9.0", "rollup-plugin-copy": "^3.5.0", "rollup-plugin-cssimport": "^1.0.3", "rollup-plugin-postcss-lit": "^2.1.0", @@ -4582,9 +4582,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.8.0.tgz", - "integrity": "sha512-zdTObFRoNENrdPpnTNnhOljYIcOX7aI7+7wyrSpPFFIOf/nRdedE6IYsjaBE7tjukphh1tMTojgJ7p3lKY8x6Q==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.0.tgz", + "integrity": "sha512-+1ge/xmaJpm1KVBuIH38Z94zj9fBD+hp+/5WLaHgyY8XLq1ibxk/zj6dTXaqM2cAbYKq8jYlhHd6k05If1W5xA==", "cpu": [ "arm" ], @@ -4595,9 +4595,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.8.0.tgz", - "integrity": "sha512-aiItwP48BiGpMFS9Znjo/xCNQVwTQVcRKkFKsO81m8exrGjHkCBDvm9PHay2kpa8RPnZzzKcD1iQ9KaLY4fPQQ==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.0.tgz", + "integrity": "sha512-im6hUEyQ7ZfoZdNvtwgEJvBWZYauC9KVKq1w58LG2Zfz6zMd8gRrbN+xCVoqA2hv/v6fm9lp5LFGJ3za8EQH3A==", "cpu": [ "arm64" ], @@ -4608,9 +4608,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.8.0.tgz", - "integrity": "sha512-zhNIS+L4ZYkYQUjIQUR6Zl0RXhbbA0huvNIWjmPc2SL0cB1h5Djkcy+RZ3/Bwszfb6vgwUvcVJYD6e6Zkpsi8g==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.0.tgz", + "integrity": "sha512-u7aTMskN6Dmg1lCT0QJ+tINRt+ntUrvVkhbPfFz4bCwRZvjItx2nJtwJnJRlKMMaQCHRjrNqHRDYvE4mBm3DlQ==", "cpu": [ "arm64" ], @@ -4621,9 +4621,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.8.0.tgz", - "integrity": "sha512-A/FAHFRNQYrELrb/JHncRWzTTXB2ticiRFztP4ggIUAfa9Up1qfW8aG2w/mN9jNiZ+HB0t0u0jpJgFXG6BfRTA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.0.tgz", + "integrity": "sha512-8FvEl3w2ExmpcOmX5RJD0yqXcVSOqAJJUJ29Lca29Ik+3zPS1yFimr2fr5JSZ4Z5gt8/d7WqycpgkX9nocijSw==", "cpu": [ "x64" ], @@ -4634,9 +4634,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.8.0.tgz", - "integrity": "sha512-JsidBnh3p2IJJA4/2xOF2puAYqbaczB3elZDT0qHxn362EIoIkq7hrR43Xa8RisgI6/WPfvb2umbGsuvf7E37A==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.0.tgz", + "integrity": "sha512-lHoKYaRwd4gge+IpqJHCY+8Vc3hhdJfU6ukFnnrJasEBUvVlydP8PuwndbWfGkdgSvZhHfSEw6urrlBj0TSSfg==", "cpu": [ "arm" ], @@ -4647,9 +4647,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.8.0.tgz", - "integrity": "sha512-hBNCnqw3EVCkaPB0Oqd24bv8SklETptQWcJz06kb9OtiShn9jK1VuTgi7o4zPSt6rNGWQOTDEAccbk0OqJmS+g==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.0.tgz", + "integrity": "sha512-JbEPfhndYeWHfOSeh4DOFvNXrj7ls9S/2omijVsao+LBPTPayT1uKcK3dHW3MwDJ7KO11t9m2cVTqXnTKpeaiw==", "cpu": [ "arm64" ], @@ -4660,9 +4660,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.8.0.tgz", - "integrity": "sha512-Fw9ChYfJPdltvi9ALJ9wzdCdxGw4wtq4t1qY028b2O7GwB5qLNSGtqMsAel1lfWTZvf4b6/+4HKp0GlSYg0ahA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.0.tgz", + "integrity": "sha512-ahqcSXLlcV2XUBM3/f/C6cRoh7NxYA/W7Yzuv4bDU1YscTFw7ay4LmD7l6OS8EMhTNvcrWGkEettL1Bhjf+B+w==", "cpu": [ "arm64" ], @@ -4673,9 +4673,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.8.0.tgz", - "integrity": "sha512-BH5xIh7tOzS9yBi8dFrCTG8Z6iNIGWGltd3IpTSKp6+pNWWO6qy8eKoRxOtwFbMrid5NZaidLYN6rHh9aB8bEw==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.0.tgz", + "integrity": "sha512-uwvOYNtLw8gVtrExKhdFsYHA/kotURUmZYlinH2VcQxNCQJeJXnkmWgw2hI9Xgzhgu7J9QvWiq9TtTVwWMDa+w==", "cpu": [ "riscv64" ], @@ -4686,9 +4686,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.8.0.tgz", - "integrity": "sha512-PmvAj8k6EuWiyLbkNpd6BLv5XeYFpqWuRvRNRl80xVfpGXK/z6KYXmAgbI4ogz7uFiJxCnYcqyvZVD0dgFog7Q==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.0.tgz", + "integrity": "sha512-m6pkSwcZZD2LCFHZX/zW2aLIISyzWLU3hrLLzQKMI12+OLEzgruTovAxY5sCZJkipklaZqPy/2bEEBNjp+Y7xg==", "cpu": [ "x64" ], @@ -4699,9 +4699,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.8.0.tgz", - "integrity": "sha512-mdxnlW2QUzXwY+95TuxZ+CurrhgrPAMveDWI97EQlA9bfhR8tw3Pt7SUlc/eSlCNxlWktpmT//EAA8UfCHOyXg==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.0.tgz", + "integrity": "sha512-VFAC1RDRSbU3iOF98X42KaVicAfKf0m0OvIu8dbnqhTe26Kh6Ym9JrDulz7Hbk7/9zGc41JkV02g+p3BivOdAg==", "cpu": [ "x64" ], @@ -4712,9 +4712,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.8.0.tgz", - "integrity": "sha512-ge7saUz38aesM4MA7Cad8CHo0Fyd1+qTaqoIo+Jtk+ipBi4ATSrHWov9/S4u5pbEQmLjgUjB7BJt+MiKG2kzmA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.0.tgz", + "integrity": "sha512-9jPgMvTKXARz4inw6jezMLA2ihDBvgIU9Ml01hjdVpOcMKyxFBJrn83KVQINnbeqDv0+HdO1c09hgZ8N0s820Q==", "cpu": [ "arm64" ], @@ -4725,9 +4725,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.8.0.tgz", - "integrity": "sha512-p9E3PZlzurhlsN5h9g7zIP1DnqKXJe8ZUkFwAazqSvHuWfihlIISPxG9hCHCoA+dOOspL/c7ty1eeEVFTE0UTw==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.0.tgz", + "integrity": "sha512-WE4pT2kTXQN2bAv40Uog0AsV7/s9nT9HBWXAou8+++MBCnY51QS02KYtm6dQxxosKi1VIz/wZIrTQO5UP2EW+Q==", "cpu": [ "ia32" ], @@ -4738,9 +4738,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.8.0.tgz", - "integrity": "sha512-kb4/auKXkYKqlUYTE8s40FcJIj5soOyRLHKd4ugR0dCq0G2EfcF54eYcfQiGkHzjidZ40daB4ulsFdtqNKZtBg==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.0.tgz", + "integrity": "sha512-aPP5Q5AqNGuT0tnuEkK/g4mnt3ZhheiXrDIiSVIHN9mcN21OyXDVbEMqmXPE7e2OplNLDkcvV+ZoGJa2ZImFgw==", "cpu": [ "x64" ], @@ -16673,9 +16673,9 @@ "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" }, "node_modules/rollup": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.8.0.tgz", - "integrity": "sha512-NpsklK2fach5CdI+PScmlE5R4Ao/FSWtF7LkoIrHDxPACY/xshNasPsbpG0VVHxUTbf74tJbVT4PrP8JsJ6ZDA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.0.tgz", + "integrity": "sha512-bUHW/9N21z64gw8s6tP4c88P382Bq/L5uZDowHlHx6s/QWpjJXivIAbEw6LZthgSvlEizZBfLC4OAvWe7aoF7A==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -16685,19 +16685,19 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.8.0", - "@rollup/rollup-android-arm64": "4.8.0", - "@rollup/rollup-darwin-arm64": "4.8.0", - "@rollup/rollup-darwin-x64": "4.8.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.8.0", - "@rollup/rollup-linux-arm64-gnu": "4.8.0", - "@rollup/rollup-linux-arm64-musl": "4.8.0", - "@rollup/rollup-linux-riscv64-gnu": "4.8.0", - "@rollup/rollup-linux-x64-gnu": "4.8.0", - "@rollup/rollup-linux-x64-musl": "4.8.0", - "@rollup/rollup-win32-arm64-msvc": "4.8.0", - "@rollup/rollup-win32-ia32-msvc": "4.8.0", - "@rollup/rollup-win32-x64-msvc": "4.8.0", + "@rollup/rollup-android-arm-eabi": "4.9.0", + "@rollup/rollup-android-arm64": "4.9.0", + "@rollup/rollup-darwin-arm64": "4.9.0", + "@rollup/rollup-darwin-x64": "4.9.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.0", + "@rollup/rollup-linux-arm64-gnu": "4.9.0", + "@rollup/rollup-linux-arm64-musl": "4.9.0", + "@rollup/rollup-linux-riscv64-gnu": "4.9.0", + "@rollup/rollup-linux-x64-gnu": "4.9.0", + "@rollup/rollup-linux-x64-musl": "4.9.0", + "@rollup/rollup-win32-arm64-msvc": "4.9.0", + "@rollup/rollup-win32-ia32-msvc": "4.9.0", + "@rollup/rollup-win32-x64-msvc": "4.9.0", "fsevents": "~2.3.2" } }, diff --git a/web/package.json b/web/package.json index f6f04c27b..a36d63dc0 100644 --- a/web/package.json +++ b/web/package.json @@ -112,7 +112,7 @@ "pyright": "=1.1.338", "react": "^18.2.0", "react-dom": "^18.2.0", - "rollup": "^4.8.0", + "rollup": "^4.9.0", "rollup-plugin-copy": "^3.5.0", "rollup-plugin-cssimport": "^1.0.3", "rollup-plugin-postcss-lit": "^2.1.0", From a7ba6f3263c87730fceed29d9faf717070f46614 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Dec 2023 11:08:23 +0100 Subject: [PATCH 003/131] web: bump the sentry group in /web with 2 updates (#7876) Bumps the sentry group in /web with 2 updates: [@sentry/browser](https://github.com/getsentry/sentry-javascript) and [@sentry/tracing](https://github.com/getsentry/sentry-javascript). Updates `@sentry/browser` from 7.86.0 to 7.87.0 - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.86.0...7.87.0) Updates `@sentry/tracing` from 7.86.0 to 7.87.0 - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.86.0...7.87.0) --- updated-dependencies: - dependency-name: "@sentry/browser" dependency-type: direct:production update-type: version-update:semver-minor dependency-group: sentry - dependency-name: "@sentry/tracing" dependency-type: direct:production update-type: version-update:semver-minor dependency-group: sentry ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package-lock.json | 92 +++++++++++++++++++++---------------------- web/package.json | 4 +- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index ab61a328c..a9e570806 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -24,8 +24,8 @@ "@open-wc/lit-helpers": "^0.6.0", "@patternfly/elements": "^2.4.0", "@patternfly/patternfly": "^4.224.2", - "@sentry/browser": "^7.86.0", - "@sentry/tracing": "^7.86.0", + "@sentry/browser": "^7.87.0", + "@sentry/tracing": "^7.87.0", "@webcomponents/webcomponentsjs": "^2.8.0", "base64-js": "^1.5.1", "chart.js": "^4.4.1", @@ -4751,98 +4751,98 @@ ] }, "node_modules/@sentry-internal/feedback": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.86.0.tgz", - "integrity": "sha512-6rl0JYjmAKnhm4/fuFaROh4Ht8oi9f6ZeIcViCuGJcrGICZJJY0s+R77XJI78rNa82PYFrSCcnWXcGji4T8E7g==", + "version": "7.87.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.87.0.tgz", + "integrity": "sha512-31nvAvcchoBQJoZSxAaMh6FOLIoZEbTOGutiMTPzPLhL4bQF4fNl20Bc/mRD1IL/L7hyKsIl2ahxKjo1ZFbPfg==", "dependencies": { - "@sentry/core": "7.86.0", - "@sentry/types": "7.86.0", - "@sentry/utils": "7.86.0" + "@sentry/core": "7.87.0", + "@sentry/types": "7.87.0", + "@sentry/utils": "7.87.0" }, "engines": { "node": ">=12" } }, "node_modules/@sentry-internal/tracing": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.86.0.tgz", - "integrity": "sha512-b4dUsNWlPWRwakGwR7bhOkqiFlqQszH1hhVFwrm/8s3kqEBZ+E4CeIfCvuHBHQ1cM/fx55xpXX/BU163cy+3iQ==", + "version": "7.87.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.87.0.tgz", + "integrity": "sha512-HYa0+rfFmYQ/DadXoiuarTSxrcnYDCd/fm0pFuOHjICtfja8IcLegVYP2/r3CgwB+IjquCtJ5kDcqS/NTgUcpA==", "dependencies": { - "@sentry/core": "7.86.0", - "@sentry/types": "7.86.0", - "@sentry/utils": "7.86.0" + "@sentry/core": "7.87.0", + "@sentry/types": "7.87.0", + "@sentry/utils": "7.87.0" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/browser": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.86.0.tgz", - "integrity": "sha512-nfYWpVOmug+W7KJO7/xhA1JScMZcYHcoOVHLsUFm4znx51U4qZEk+zZDM11Q2Nw6MuDyEYg6bsH1QCwaoC6nLw==", + "version": "7.87.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.87.0.tgz", + "integrity": "sha512-+WVqIns2ZFF/tsjNf90Km3eIKUd6lGQSsBQ+cVa05v0ebMr5OtnOkKlOHN4CJZ0gT0lyDnNHoys9Af6edIbE1Q==", "dependencies": { - "@sentry-internal/feedback": "7.86.0", - "@sentry-internal/tracing": "7.86.0", - "@sentry/core": "7.86.0", - "@sentry/replay": "7.86.0", - "@sentry/types": "7.86.0", - "@sentry/utils": "7.86.0" + "@sentry-internal/feedback": "7.87.0", + "@sentry-internal/tracing": "7.87.0", + "@sentry/core": "7.87.0", + "@sentry/replay": "7.87.0", + "@sentry/types": "7.87.0", + "@sentry/utils": "7.87.0" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/core": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.86.0.tgz", - "integrity": "sha512-SbLvqd1bRYzhDS42u7GMnmbDMfth/zRiLElQWbLK/shmuZzTcfQSwNNdF4Yj+VfjOkqPFgGmICHSHVUc9dh01g==", + "version": "7.87.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.87.0.tgz", + "integrity": "sha512-jkoXqK/nuYh8DYS+n7uaSuSIdw4HJemyRkXsWjAEPtEgD7taGMafZGbP5pl+XE38SE59jTBxmKnkUEZOFMgZGA==", "dependencies": { - "@sentry/types": "7.86.0", - "@sentry/utils": "7.86.0" + "@sentry/types": "7.87.0", + "@sentry/utils": "7.87.0" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/replay": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.86.0.tgz", - "integrity": "sha512-YYZO8bfQSx1H87Te/zzyHPLHvExWiYwUfMWW68yGX+PPZIIzxaM81/iCQHkoucxlvuPCOtxCgf7RSMbsnqEa8g==", + "version": "7.87.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.87.0.tgz", + "integrity": "sha512-QinY5uYARRkZsdInNy8cFY4p/H697DutRdpWEIi/v7hsOiRVRxIVZ3n8dJxVIpPbVQ9upI19s/J3bb4mSERLSg==", "dependencies": { - "@sentry-internal/tracing": "7.86.0", - "@sentry/core": "7.86.0", - "@sentry/types": "7.86.0", - "@sentry/utils": "7.86.0" + "@sentry-internal/tracing": "7.87.0", + "@sentry/core": "7.87.0", + "@sentry/types": "7.87.0", + "@sentry/utils": "7.87.0" }, "engines": { "node": ">=12" } }, "node_modules/@sentry/tracing": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.86.0.tgz", - "integrity": "sha512-WPqgmbLm6ntpIoTZd1L/RHIVEDMmvVjIDxKeXGiJeXHZG2VMtgwoxuZAFluVFaD0Sr20Nhj+ZS7HvKOWTxrjjA==", + "version": "7.87.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.87.0.tgz", + "integrity": "sha512-oEj4wo5K9WSyYgMInM/DA5DToS0F/dz2PNe5dkhIdEkMGTarSvLm7DIo3L44NfYUtj4DrKyMM61vXHNIeQitVg==", "dependencies": { - "@sentry-internal/tracing": "7.86.0" + "@sentry-internal/tracing": "7.87.0" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/types": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.86.0.tgz", - "integrity": "sha512-pGAt0+bMfWgo0KG2epthfNV4Wae03tURpoxNjGo5Fr4cXxvLTSijSAQ6rmmO4bXBJ7+rErEjX30g30o/eEdP9g==", + "version": "7.87.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.87.0.tgz", + "integrity": "sha512-w8jKFHq/Llupmr2FezmFgQsnm3y/CnqLjb7s6PstI78E409wrhH7p7oqX/OEuzccH1qNCNwes/3QKvPTRQDB4Q==", "engines": { "node": ">=8" } }, "node_modules/@sentry/utils": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.86.0.tgz", - "integrity": "sha512-6PejFtw9VTFFy5vu0ks+U7Ozkqz+eMt+HN8AZKBKErYzX5/xs0kpkOcSRpu3ETdTYcZf8VAmLVgFgE2BE+3WuQ==", + "version": "7.87.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.87.0.tgz", + "integrity": "sha512-7xgtPTnTNP/4IznFMFXxltuaXfLvzznrYCDMv9ny8EeUjJqlLX3CVA8Qq3YALsLCQCKcrGRARbAcd/EGG//w2w==", "dependencies": { - "@sentry/types": "7.86.0" + "@sentry/types": "7.87.0" }, "engines": { "node": ">=8" diff --git a/web/package.json b/web/package.json index a36d63dc0..90ca7b1e9 100644 --- a/web/package.json +++ b/web/package.json @@ -46,8 +46,8 @@ "@open-wc/lit-helpers": "^0.6.0", "@patternfly/elements": "^2.4.0", "@patternfly/patternfly": "^4.224.2", - "@sentry/browser": "^7.86.0", - "@sentry/tracing": "^7.86.0", + "@sentry/browser": "^7.87.0", + "@sentry/tracing": "^7.87.0", "@webcomponents/webcomponentsjs": "^2.8.0", "base64-js": "^1.5.1", "chart.js": "^4.4.1", From a0269acb16f2f89a76e07172c1ba195f1f6e7863 Mon Sep 17 00:00:00 2001 From: Ken Sternberg <133134217+kensternberg-authentik@users.noreply.github.com> Date: Thu, 14 Dec 2023 09:55:11 -0800 Subject: [PATCH 004/131] web: fix overflow glitch on ak-page-header (#7883) By adding 'grow' but not 'shrink' to the header section, the page was allowed to allocate as much width as was available when the window opened, but not allowed to resize the width if it was pushed closed by zoom, page resize, or summon sidebar. This commit adds 'shrink' to the capabilities of the header. --- web/src/elements/PageHeader.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/web/src/elements/PageHeader.ts b/web/src/elements/PageHeader.ts index 3f187291b..fcdbbeffc 100644 --- a/web/src/elements/PageHeader.ts +++ b/web/src/elements/PageHeader.ts @@ -79,6 +79,7 @@ export class PageHeader extends AKElement { } .pf-c-page__main-section { flex-grow: 1; + flex-shrink: 1; display: flex; flex-direction: column; justify-content: center; From 14fb34f4925110c282659a4e87c6b832d06f3734 Mon Sep 17 00:00:00 2001 From: Jens L Date: Thu, 14 Dec 2023 20:37:48 +0100 Subject: [PATCH 005/131] website/docs: expand Identification stage docs (#7869) * website/docs: expand Identification stage docs Signed-off-by: Jens Langhammer * also (unrelated) add blurb to application docs to hide an application Signed-off-by: Jens Langhammer * Apply suggestions from code review Co-authored-by: Tana M Berry Signed-off-by: Jens L. --------- Signed-off-by: Jens Langhammer Signed-off-by: Jens L. Co-authored-by: Tana M Berry --- website/docs/core/applications.md | 2 ++ .../stages/authenticator_validate/index.md | 2 +- .../docs/flow/stages/identification/index.md | 30 ++++++++++++++++--- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/website/docs/core/applications.md b/website/docs/core/applications.md index 9908cdfa9..d27d51097 100644 --- a/website/docs/core/applications.md +++ b/website/docs/core/applications.md @@ -27,6 +27,8 @@ The following aspects can be configured: Starting with authentik 2022.2, you can use placeholders in the launch url to build them dynamically based on logged in user. For example, you can set the Launch URL to `https://goauthentik.io/%(username)s`, which will be replaced with the currently logged in user's username. + Only applications whose launch URL starts with `http://` or `https://` or are relative URLs are shown on the users's **My applications** page. This can also be used to hide applications that shouldn't be visible on the **My applications** page but are still accessible by users, by setting the _Launch URL_ to `hidden://`. + - _Icon (URL)_: Optionally configure an Icon for the application If the authentik server does not have a volume mounted under `/media`, you'll get a text input. This accepts absolute URLs. If you've mounted single files into the container, you can reference them using `https://authentik.company/media/my-file.png`. diff --git a/website/docs/flow/stages/authenticator_validate/index.md b/website/docs/flow/stages/authenticator_validate/index.md index b72afa47a..9a7df4e0e 100644 --- a/website/docs/flow/stages/authenticator_validate/index.md +++ b/website/docs/flow/stages/authenticator_validate/index.md @@ -46,7 +46,7 @@ As first stage, add an _Authentication validation_ stage, with the WebAuthn devi After this stage you can bind any additional verification stages. As final stage, bind a _User login_ stage. -Users can either access this flow directly via it's URL, or you can modify any Identification stage to add a direct link to this flow. +Users can either access this flow directly via its URL, or you can modify any Identification stage's _Passwordless flow_ setting to add a direct link to this flow. ### Logging diff --git a/website/docs/flow/stages/identification/index.md b/website/docs/flow/stages/identification/index.md index f2f6cbb98..8bf0e6f49 100644 --- a/website/docs/flow/stages/identification/index.md +++ b/website/docs/flow/stages/identification/index.md @@ -14,10 +14,6 @@ Select which fields the user can use to identify themselves. Multiple fields can UPN will attempt to identify the user based on the `upn` attribute, which can be imported with an [LDAP Source](/integrations/sources/ldap/index) -:::info -Starting with authentik 2023.5, when no user fields are selected and only one source is selected, authentik will automatically redirect the user to that source. -::: - ## Password stage To prompt users for their password on the same step as identifying themselves, a password stage can be selected here. If a password stage is selected in the Identification stage, the password stage should not be bound to the flow. @@ -33,3 +29,29 @@ Requires authentik 2024.1 ::: When enabled, any user identifier will be accepted as valid (as long as they match the correct format, i.e. when [User fields](#user-fields) is set to only allow Emails, then the identifier still needs to be an Email). The stage will succeed and the flow will continue to the next stage. Stages like the [Password stage](../password/index.md) and [Email stage](../email/index.mdx) are aware of this "pretend" user and will behave the same as if the user would exist. + +## Source settings + +Some sources (like the [OAuth Source](../../../../integrations/sources/oauth/) and [SAML Source](../../../../integrations/sources/saml/)) require user interaction. To make these sources available to users, they can be selected in the Identification stage settings, which will show them below the selected [user field](#user-fields). + +By default, sources are only shown with their icon, which can be changed with the _Show sources' labels_ option. + +Furthermore, it is also possible to deselect any [user field option](#user-fields) for an Identification stage, which will result in users only being able to use currently configured sources. + +:::info +Starting with authentik 2023.5, when no user fields are selected and only one source is selected, authentik will automatically redirect the user to that source. This only applies when the **Passwordless flow** option is *not* configured. +::: + +## Flow settings + +### Passwordless flow + +See [Passwordless authentication](../authenticator_validate/index.md#passwordless-authentication). + +### Enrollment flow + +Optionally can be set to a flow with the designation of _Enrollment_, which will allow users to sign up. + +### Recovery flow + +Optionally can be set to a flow with the designation of _Recovery_, which will allow users to recover their credentials. From cb906e19131a321cbdee0940e6d9ee11721463eb Mon Sep 17 00:00:00 2001 From: Jens L Date: Thu, 14 Dec 2023 20:38:34 +0100 Subject: [PATCH 006/131] website/integrations: add Jenkins docs (#7882) * website/integrations: add Jenkins docs Signed-off-by: Jens Langhammer * Apply suggestions from code review Co-authored-by: Tana M Berry Signed-off-by: Jens L. * prettier pass Signed-off-by: Jens Langhammer --------- Signed-off-by: Jens Langhammer Signed-off-by: Jens L. Co-authored-by: Tana M Berry --- .../docs/flow/stages/identification/index.md | 2 +- .../integrations/services/dokuwiki/index.md | 2 +- .../integrations/services/grafana/index.mdx | 2 +- .../integrations/services/jellyfin/index.md | 2 +- .../integrations/services/jenkins/index.md | 53 +++++++++++++++++++ website/sidebarsIntegrations.js | 1 + 6 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 website/integrations/services/jenkins/index.md diff --git a/website/docs/flow/stages/identification/index.md b/website/docs/flow/stages/identification/index.md index 8bf0e6f49..f911fc4f8 100644 --- a/website/docs/flow/stages/identification/index.md +++ b/website/docs/flow/stages/identification/index.md @@ -39,7 +39,7 @@ By default, sources are only shown with their icon, which can be changed with th Furthermore, it is also possible to deselect any [user field option](#user-fields) for an Identification stage, which will result in users only being able to use currently configured sources. :::info -Starting with authentik 2023.5, when no user fields are selected and only one source is selected, authentik will automatically redirect the user to that source. This only applies when the **Passwordless flow** option is *not* configured. +Starting with authentik 2023.5, when no user fields are selected and only one source is selected, authentik will automatically redirect the user to that source. This only applies when the **Passwordless flow** option is _not_ configured. ::: ## Flow settings diff --git a/website/integrations/services/dokuwiki/index.md b/website/integrations/services/dokuwiki/index.md index 7b7e27e4c..b84dd50a2 100644 --- a/website/integrations/services/dokuwiki/index.md +++ b/website/integrations/services/dokuwiki/index.md @@ -17,7 +17,7 @@ The following placeholders will be used: - `dokuwiki.company` is the FQDN of the DokiWiki install. - `authentik.company` is the FQDN of the authentik install. -## Service Configuration +## DokuWiki configuration In DokuWiki, navigate to the _Extension Manager_ section in the _Administration_ interface and install diff --git a/website/integrations/services/grafana/index.mdx b/website/integrations/services/grafana/index.mdx index e6cc7a5a8..a79730ea0 100644 --- a/website/integrations/services/grafana/index.mdx +++ b/website/integrations/services/grafana/index.mdx @@ -86,7 +86,7 @@ resource "authentik_group" "grafana_viewers" { ``` -## Grafana +## Grafana configuration import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; diff --git a/website/integrations/services/jellyfin/index.md b/website/integrations/services/jellyfin/index.md index c92e21f52..5de18d3b4 100644 --- a/website/integrations/services/jellyfin/index.md +++ b/website/integrations/services/jellyfin/index.md @@ -32,7 +32,7 @@ The following placeholders will be used: - `dc=company,dc=com` the Base DN of the LDAP outpost. - `ldap_bind_user` the username of the desired LDAP Bind User -## Service Configuration +## Jellyfin configuration 1. If you don't have one already create an LDAP bind user before starting these steps. - Ideally, this user doesn't have any permissions other than the ability to view other users. However, some functions do require an account with permissions. diff --git a/website/integrations/services/jenkins/index.md b/website/integrations/services/jenkins/index.md new file mode 100644 index 000000000..a8b4388ab --- /dev/null +++ b/website/integrations/services/jenkins/index.md @@ -0,0 +1,53 @@ +--- +title: Jenkins +--- + +Support level: Community + +## What is Jenkins + +> The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project. +> +> -- https://www.jenkins.io/ + +## Preparation + +The following placeholders will be used: + +- `jenkins.company` is the FQDN of the Service install. +- `authentik.company` is the FQDN of the authentik install. + +Create an OAuth2/OpenID provider with the following parameters: + +- **Client Type**: `Confidential` +- Scopes: OpenID, Email and Profile +- **Signing Key**: Select any available key + +Note the Client ID and Client Secret values for the provider. + +Next, create an application, using the provider you've created above. Note the slug of the application you create. + +## Jenkins Configuration + +Navigate to the Jenkins plugin manager: **Manage Jenkins** -> **Plugins** -> **Available plugins**. Search for the plugin `oic-auth` in the search field, and install the plugin. Jenkins must be restarted afterwards to ensure the plugin is loaded. + +After the restart, navigate to **Manage Jenkins** again, and click **Security**. + +Modify the **Security Realm** option to select `Login with Openid Connect`. + +In the **Client id** and **Client secret** fields, enter the Client ID and Client Secret values from the provider you created. + +Set the configuration mode to **Automatic configuration** and set the **Well-known configuration endpoint** to `https://authentik.company/application/o//.well-known/openid-configuration` + +Check the checkbox **Override scopes** and input the scopes `openid profile email` into the new input field. + +Further down the page, expand the **Advanced** section and input the following values: + +- **User name field name**: `preferred_username` +- **Full name field name**: `name` +- **Email field name**: `email` +- **Groups field name**: `groups` + +We also recommend enabling the option **Enable Proof Key for Code Exchange** further down the page. + +Additionally, as a fallback to regain access to Jenkins in the case of misconfiguration, we recommend configuring the **Configure 'escape hatch' for when the OpenID Provider is unavailable** option below. How to configure this option is beyond the scope of this document, and is explained by the OpenID Plugin. diff --git a/website/sidebarsIntegrations.js b/website/sidebarsIntegrations.js index bc857116b..4c89585b4 100644 --- a/website/sidebarsIntegrations.js +++ b/website/sidebarsIntegrations.js @@ -75,6 +75,7 @@ module.exports = { "services/fortimanager/index", "services/harbor/index", "services/hashicorp-vault/index", + "services/jenkins/index", "services/minio/index", "services/netbox/index", "services/opnsense/index", From 03534ee7130fc7e56677f961d05b0af0e9bd069c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Dec 2023 10:58:38 +0100 Subject: [PATCH 007/131] web: bump the sentry group in /web with 2 updates (#7889) Bumps the sentry group in /web with 2 updates: [@sentry/browser](https://github.com/getsentry/sentry-javascript) and [@sentry/tracing](https://github.com/getsentry/sentry-javascript). Updates `@sentry/browser` from 7.87.0 to 7.88.0 - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.87.0...7.88.0) Updates `@sentry/tracing` from 7.87.0 to 7.88.0 - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.87.0...7.88.0) --- updated-dependencies: - dependency-name: "@sentry/browser" dependency-type: direct:production update-type: version-update:semver-minor dependency-group: sentry - dependency-name: "@sentry/tracing" dependency-type: direct:production update-type: version-update:semver-minor dependency-group: sentry ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package-lock.json | 92 +++++++++++++++++++++---------------------- web/package.json | 4 +- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index a9e570806..760c89e8c 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -24,8 +24,8 @@ "@open-wc/lit-helpers": "^0.6.0", "@patternfly/elements": "^2.4.0", "@patternfly/patternfly": "^4.224.2", - "@sentry/browser": "^7.87.0", - "@sentry/tracing": "^7.87.0", + "@sentry/browser": "^7.88.0", + "@sentry/tracing": "^7.88.0", "@webcomponents/webcomponentsjs": "^2.8.0", "base64-js": "^1.5.1", "chart.js": "^4.4.1", @@ -4751,98 +4751,98 @@ ] }, "node_modules/@sentry-internal/feedback": { - "version": "7.87.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.87.0.tgz", - "integrity": "sha512-31nvAvcchoBQJoZSxAaMh6FOLIoZEbTOGutiMTPzPLhL4bQF4fNl20Bc/mRD1IL/L7hyKsIl2ahxKjo1ZFbPfg==", + "version": "7.88.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.88.0.tgz", + "integrity": "sha512-lbK6jgO1I0M96nZQ99mcLSZ55ebwPAP6LhEWhkmc+eAfy97VpiY+qsbmgsmOzCEPqMmEUCEcI0rEZ7fiye2v2Q==", "dependencies": { - "@sentry/core": "7.87.0", - "@sentry/types": "7.87.0", - "@sentry/utils": "7.87.0" + "@sentry/core": "7.88.0", + "@sentry/types": "7.88.0", + "@sentry/utils": "7.88.0" }, "engines": { "node": ">=12" } }, "node_modules/@sentry-internal/tracing": { - "version": "7.87.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.87.0.tgz", - "integrity": "sha512-HYa0+rfFmYQ/DadXoiuarTSxrcnYDCd/fm0pFuOHjICtfja8IcLegVYP2/r3CgwB+IjquCtJ5kDcqS/NTgUcpA==", + "version": "7.88.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.88.0.tgz", + "integrity": "sha512-xXQdcYhsS+ourzJHjXNjZC9zakuc97udmpgaXRjEP7FjPYclIx+YXwgFBdHM2kzAwZLFOsEce5dr46GVXUDfZw==", "dependencies": { - "@sentry/core": "7.87.0", - "@sentry/types": "7.87.0", - "@sentry/utils": "7.87.0" + "@sentry/core": "7.88.0", + "@sentry/types": "7.88.0", + "@sentry/utils": "7.88.0" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/browser": { - "version": "7.87.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.87.0.tgz", - "integrity": "sha512-+WVqIns2ZFF/tsjNf90Km3eIKUd6lGQSsBQ+cVa05v0ebMr5OtnOkKlOHN4CJZ0gT0lyDnNHoys9Af6edIbE1Q==", + "version": "7.88.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.88.0.tgz", + "integrity": "sha512-il4x3PB99nuU/OJQw2RltgYYbo8vtnYoIgneOeEiw4m0ppK1nKkMkd3vDRipGL6E/0i7IUmQfYYy6U10J5Rx+g==", "dependencies": { - "@sentry-internal/feedback": "7.87.0", - "@sentry-internal/tracing": "7.87.0", - "@sentry/core": "7.87.0", - "@sentry/replay": "7.87.0", - "@sentry/types": "7.87.0", - "@sentry/utils": "7.87.0" + "@sentry-internal/feedback": "7.88.0", + "@sentry-internal/tracing": "7.88.0", + "@sentry/core": "7.88.0", + "@sentry/replay": "7.88.0", + "@sentry/types": "7.88.0", + "@sentry/utils": "7.88.0" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/core": { - "version": "7.87.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.87.0.tgz", - "integrity": "sha512-jkoXqK/nuYh8DYS+n7uaSuSIdw4HJemyRkXsWjAEPtEgD7taGMafZGbP5pl+XE38SE59jTBxmKnkUEZOFMgZGA==", + "version": "7.88.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.88.0.tgz", + "integrity": "sha512-Jzbb7dcwiCO7kI0a1w+32UzWxbEn2OcZWzp55QMEeAh6nZ/5CXhXwpuHi0tW7doPj+cJdmxMTMu9LqMVfdGkzQ==", "dependencies": { - "@sentry/types": "7.87.0", - "@sentry/utils": "7.87.0" + "@sentry/types": "7.88.0", + "@sentry/utils": "7.88.0" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/replay": { - "version": "7.87.0", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.87.0.tgz", - "integrity": "sha512-QinY5uYARRkZsdInNy8cFY4p/H697DutRdpWEIi/v7hsOiRVRxIVZ3n8dJxVIpPbVQ9upI19s/J3bb4mSERLSg==", + "version": "7.88.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.88.0.tgz", + "integrity": "sha512-em5dPKLPG7c/HGDbpIj3aHrWbA4iMwqjevqTzn+++KNO1YslkOosCaGsb1whU3AL1T9c3aIFIhZ4u3rNo+DxcA==", "dependencies": { - "@sentry-internal/tracing": "7.87.0", - "@sentry/core": "7.87.0", - "@sentry/types": "7.87.0", - "@sentry/utils": "7.87.0" + "@sentry-internal/tracing": "7.88.0", + "@sentry/core": "7.88.0", + "@sentry/types": "7.88.0", + "@sentry/utils": "7.88.0" }, "engines": { "node": ">=12" } }, "node_modules/@sentry/tracing": { - "version": "7.87.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.87.0.tgz", - "integrity": "sha512-oEj4wo5K9WSyYgMInM/DA5DToS0F/dz2PNe5dkhIdEkMGTarSvLm7DIo3L44NfYUtj4DrKyMM61vXHNIeQitVg==", + "version": "7.88.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.88.0.tgz", + "integrity": "sha512-Lj4hhLraalN4w3swXkP2do1hcaQVOuLvO6eJJbcwf10b+P4CcdlwAnqvxOOCNxA5VzG4/K2BqQ8LRU4S0Ulj9A==", "dependencies": { - "@sentry-internal/tracing": "7.87.0" + "@sentry-internal/tracing": "7.88.0" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/types": { - "version": "7.87.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.87.0.tgz", - "integrity": "sha512-w8jKFHq/Llupmr2FezmFgQsnm3y/CnqLjb7s6PstI78E409wrhH7p7oqX/OEuzccH1qNCNwes/3QKvPTRQDB4Q==", + "version": "7.88.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.88.0.tgz", + "integrity": "sha512-FvwvmX1pWAZKicPj4EpKyho8Wm+C4+r5LiepbbBF8oKwSPJdD2QV1fo/LWxsrzNxWOllFIVIXF5Ed3nPYQWpTw==", "engines": { "node": ">=8" } }, "node_modules/@sentry/utils": { - "version": "7.87.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.87.0.tgz", - "integrity": "sha512-7xgtPTnTNP/4IznFMFXxltuaXfLvzznrYCDMv9ny8EeUjJqlLX3CVA8Qq3YALsLCQCKcrGRARbAcd/EGG//w2w==", + "version": "7.88.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.88.0.tgz", + "integrity": "sha512-ukminfRmdBXTzk49orwJf3Lu3hR60ZRHjE2a4IXwYhyDT6JJgJqgsq1hzGXx0AyFfyS4WhfZ6QUBy7fu3BScZQ==", "dependencies": { - "@sentry/types": "7.87.0" + "@sentry/types": "7.88.0" }, "engines": { "node": ">=8" diff --git a/web/package.json b/web/package.json index 90ca7b1e9..6f7440618 100644 --- a/web/package.json +++ b/web/package.json @@ -46,8 +46,8 @@ "@open-wc/lit-helpers": "^0.6.0", "@patternfly/elements": "^2.4.0", "@patternfly/patternfly": "^4.224.2", - "@sentry/browser": "^7.87.0", - "@sentry/tracing": "^7.87.0", + "@sentry/browser": "^7.88.0", + "@sentry/tracing": "^7.88.0", "@webcomponents/webcomponentsjs": "^2.8.0", "base64-js": "^1.5.1", "chart.js": "^4.4.1", From 1e3feca4b632900095ec7d8983fb830c4cdc621f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Dec 2023 10:59:00 +0100 Subject: [PATCH 008/131] core: bump github.com/jellydator/ttlcache/v3 from 3.1.0 to 3.1.1 (#7888) Bumps [github.com/jellydator/ttlcache/v3](https://github.com/jellydator/ttlcache) from 3.1.0 to 3.1.1. - [Release notes](https://github.com/jellydator/ttlcache/releases) - [Commits](https://github.com/jellydator/ttlcache/compare/v3.1.0...v3.1.1) --- updated-dependencies: - dependency-name: github.com/jellydator/ttlcache/v3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 961f07d07..e318eced1 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/gorilla/securecookie v1.1.2 github.com/gorilla/sessions v1.2.2 github.com/gorilla/websocket v1.5.1 - github.com/jellydator/ttlcache/v3 v3.1.0 + github.com/jellydator/ttlcache/v3 v3.1.1 github.com/mitchellh/mapstructure v1.5.0 github.com/nmcclain/asn1-ber v0.0.0-20170104154839-2661553a0484 github.com/pires/go-proxyproto v0.7.0 diff --git a/go.sum b/go.sum index e65a8b9a5..ef95559d6 100644 --- a/go.sum +++ b/go.sum @@ -202,8 +202,8 @@ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jellydator/ttlcache/v3 v3.1.0 h1:0gPFG0IHHP6xyUyXq+JaD8fwkDCqgqwohXNJBcYE71g= -github.com/jellydator/ttlcache/v3 v3.1.0/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4= +github.com/jellydator/ttlcache/v3 v3.1.1 h1:RCgYJqo3jgvhl+fEWvjNW8thxGWsgxi+TPhRir1Y9y8= +github.com/jellydator/ttlcache/v3 v3.1.1/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= From f9b998e81495037c754280cb585e08521efecaed Mon Sep 17 00:00:00 2001 From: ZuluWhiskey <35011199+ZuluWhiskey@users.noreply.github.com> Date: Fri, 15 Dec 2023 13:02:53 +0000 Subject: [PATCH 009/131] website/integrations: add Immich (#7829) --- website/integrations/services/immich/index.md | 48 +++++++++++++++++++ website/sidebarsIntegrations.js | 1 + 2 files changed, 49 insertions(+) create mode 100644 website/integrations/services/immich/index.md diff --git a/website/integrations/services/immich/index.md b/website/integrations/services/immich/index.md new file mode 100644 index 000000000..88554d302 --- /dev/null +++ b/website/integrations/services/immich/index.md @@ -0,0 +1,48 @@ +--- +title: Immich +--- + +Support level: Community + +## What is Immich + +> Immich is a self-hosted backup solution for photos and videos on mobile devices. +> +> -- https://immich.app/ + +## Preparation + +The following placeholders will be used: + +- `https://immich.company` is the URL used to access the Immich instance. +- `authentik.company` is the FQDN of the authentik install. + +## authentik configuration + +1. Create a new OAuth2/OpenID Provider using the following settings: + - **Name**: Immich + - **Authentication flow**: default-authentication-flow + - **Authorization flow**: default-provider-authorization-explicit-consent + - **Client type**: Confidential + - **Client ID**: Either create your own Client ID or make a note of the auto-populated one + - **Client Secret**: Either create your own Client Secret or make a note of the auto-populated one + - **Redirect URIs/Origins (RegEx)**: + _Please note that the following URIs are just examples. Be sure to include all of the domains / URLs that you will use to access Immich._ + - app.immich:/ + - https://immich.company/auth/login + - https://immich.company/user-settings + - **Signing Key**: authentik Self-signed Certificate + - Leave everything else as default +2. Open the new provider you've just created. +3. Make a note of the **OpenID Configuration Issuer**. + +## Immich Configuration + +Immich documentation can be found here: https://immich.app/docs/administration/oauth + +1. In Immich, navigate to **Administration** > **Settings** > **OAuth Authentication** +2. Configure Immich as follows: + - **Issuer URL**: Populate this field with the `OpenID Configuration Issuer` + - **Client ID**: Enter your Client ID from authentik + - **Client Secret**: Enter your Client Secret from authentik + - **Scope**: `openid email profile` diff --git a/website/sidebarsIntegrations.js b/website/sidebarsIntegrations.js index 4c89585b4..22b65ab22 100644 --- a/website/sidebarsIntegrations.js +++ b/website/sidebarsIntegrations.js @@ -100,6 +100,7 @@ module.exports = { "services/freshrss/index", "services/gravitee/index", "services/home-assistant/index", + "services/immich/index", "services/jellyfin/index", "services/node-red/index", "services/sonar-qube/index", From 21eafc09ee1398de2524ef61751b43bdd6a8614e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 15:45:41 +0100 Subject: [PATCH 010/131] web: bump rollup from 4.9.0 to 4.9.1 in /web (#7899) Bumps [rollup](https://github.com/rollup/rollup) from 4.9.0 to 4.9.1. - [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.9.0...v4.9.1) --- updated-dependencies: - dependency-name: rollup dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package-lock.json | 112 +++++++++++++++++++++--------------------- web/package.json | 2 +- 2 files changed, 57 insertions(+), 57 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 760c89e8c..703288577 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -90,7 +90,7 @@ "pyright": "=1.1.338", "react": "^18.2.0", "react-dom": "^18.2.0", - "rollup": "^4.9.0", + "rollup": "^4.9.1", "rollup-plugin-copy": "^3.5.0", "rollup-plugin-cssimport": "^1.0.3", "rollup-plugin-postcss-lit": "^2.1.0", @@ -4582,9 +4582,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.0.tgz", - "integrity": "sha512-+1ge/xmaJpm1KVBuIH38Z94zj9fBD+hp+/5WLaHgyY8XLq1ibxk/zj6dTXaqM2cAbYKq8jYlhHd6k05If1W5xA==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.1.tgz", + "integrity": "sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==", "cpu": [ "arm" ], @@ -4595,9 +4595,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.0.tgz", - "integrity": "sha512-im6hUEyQ7ZfoZdNvtwgEJvBWZYauC9KVKq1w58LG2Zfz6zMd8gRrbN+xCVoqA2hv/v6fm9lp5LFGJ3za8EQH3A==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.1.tgz", + "integrity": "sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==", "cpu": [ "arm64" ], @@ -4608,9 +4608,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.0.tgz", - "integrity": "sha512-u7aTMskN6Dmg1lCT0QJ+tINRt+ntUrvVkhbPfFz4bCwRZvjItx2nJtwJnJRlKMMaQCHRjrNqHRDYvE4mBm3DlQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.1.tgz", + "integrity": "sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==", "cpu": [ "arm64" ], @@ -4621,9 +4621,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.0.tgz", - "integrity": "sha512-8FvEl3w2ExmpcOmX5RJD0yqXcVSOqAJJUJ29Lca29Ik+3zPS1yFimr2fr5JSZ4Z5gt8/d7WqycpgkX9nocijSw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.1.tgz", + "integrity": "sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==", "cpu": [ "x64" ], @@ -4634,9 +4634,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.0.tgz", - "integrity": "sha512-lHoKYaRwd4gge+IpqJHCY+8Vc3hhdJfU6ukFnnrJasEBUvVlydP8PuwndbWfGkdgSvZhHfSEw6urrlBj0TSSfg==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.1.tgz", + "integrity": "sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==", "cpu": [ "arm" ], @@ -4647,9 +4647,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.0.tgz", - "integrity": "sha512-JbEPfhndYeWHfOSeh4DOFvNXrj7ls9S/2omijVsao+LBPTPayT1uKcK3dHW3MwDJ7KO11t9m2cVTqXnTKpeaiw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.1.tgz", + "integrity": "sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==", "cpu": [ "arm64" ], @@ -4660,9 +4660,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.0.tgz", - "integrity": "sha512-ahqcSXLlcV2XUBM3/f/C6cRoh7NxYA/W7Yzuv4bDU1YscTFw7ay4LmD7l6OS8EMhTNvcrWGkEettL1Bhjf+B+w==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.1.tgz", + "integrity": "sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==", "cpu": [ "arm64" ], @@ -4673,9 +4673,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.0.tgz", - "integrity": "sha512-uwvOYNtLw8gVtrExKhdFsYHA/kotURUmZYlinH2VcQxNCQJeJXnkmWgw2hI9Xgzhgu7J9QvWiq9TtTVwWMDa+w==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.1.tgz", + "integrity": "sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==", "cpu": [ "riscv64" ], @@ -4686,9 +4686,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.0.tgz", - "integrity": "sha512-m6pkSwcZZD2LCFHZX/zW2aLIISyzWLU3hrLLzQKMI12+OLEzgruTovAxY5sCZJkipklaZqPy/2bEEBNjp+Y7xg==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.1.tgz", + "integrity": "sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==", "cpu": [ "x64" ], @@ -4699,9 +4699,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.0.tgz", - "integrity": "sha512-VFAC1RDRSbU3iOF98X42KaVicAfKf0m0OvIu8dbnqhTe26Kh6Ym9JrDulz7Hbk7/9zGc41JkV02g+p3BivOdAg==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.1.tgz", + "integrity": "sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==", "cpu": [ "x64" ], @@ -4712,9 +4712,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.0.tgz", - "integrity": "sha512-9jPgMvTKXARz4inw6jezMLA2ihDBvgIU9Ml01hjdVpOcMKyxFBJrn83KVQINnbeqDv0+HdO1c09hgZ8N0s820Q==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.1.tgz", + "integrity": "sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==", "cpu": [ "arm64" ], @@ -4725,9 +4725,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.0.tgz", - "integrity": "sha512-WE4pT2kTXQN2bAv40Uog0AsV7/s9nT9HBWXAou8+++MBCnY51QS02KYtm6dQxxosKi1VIz/wZIrTQO5UP2EW+Q==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.1.tgz", + "integrity": "sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==", "cpu": [ "ia32" ], @@ -4738,9 +4738,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.0.tgz", - "integrity": "sha512-aPP5Q5AqNGuT0tnuEkK/g4mnt3ZhheiXrDIiSVIHN9mcN21OyXDVbEMqmXPE7e2OplNLDkcvV+ZoGJa2ZImFgw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.1.tgz", + "integrity": "sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==", "cpu": [ "x64" ], @@ -16673,9 +16673,9 @@ "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" }, "node_modules/rollup": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.0.tgz", - "integrity": "sha512-bUHW/9N21z64gw8s6tP4c88P382Bq/L5uZDowHlHx6s/QWpjJXivIAbEw6LZthgSvlEizZBfLC4OAvWe7aoF7A==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.1.tgz", + "integrity": "sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -16685,19 +16685,19 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.0", - "@rollup/rollup-android-arm64": "4.9.0", - "@rollup/rollup-darwin-arm64": "4.9.0", - "@rollup/rollup-darwin-x64": "4.9.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.0", - "@rollup/rollup-linux-arm64-gnu": "4.9.0", - "@rollup/rollup-linux-arm64-musl": "4.9.0", - "@rollup/rollup-linux-riscv64-gnu": "4.9.0", - "@rollup/rollup-linux-x64-gnu": "4.9.0", - "@rollup/rollup-linux-x64-musl": "4.9.0", - "@rollup/rollup-win32-arm64-msvc": "4.9.0", - "@rollup/rollup-win32-ia32-msvc": "4.9.0", - "@rollup/rollup-win32-x64-msvc": "4.9.0", + "@rollup/rollup-android-arm-eabi": "4.9.1", + "@rollup/rollup-android-arm64": "4.9.1", + "@rollup/rollup-darwin-arm64": "4.9.1", + "@rollup/rollup-darwin-x64": "4.9.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.1", + "@rollup/rollup-linux-arm64-gnu": "4.9.1", + "@rollup/rollup-linux-arm64-musl": "4.9.1", + "@rollup/rollup-linux-riscv64-gnu": "4.9.1", + "@rollup/rollup-linux-x64-gnu": "4.9.1", + "@rollup/rollup-linux-x64-musl": "4.9.1", + "@rollup/rollup-win32-arm64-msvc": "4.9.1", + "@rollup/rollup-win32-ia32-msvc": "4.9.1", + "@rollup/rollup-win32-x64-msvc": "4.9.1", "fsevents": "~2.3.2" } }, diff --git a/web/package.json b/web/package.json index 6f7440618..48f7c2c5b 100644 --- a/web/package.json +++ b/web/package.json @@ -112,7 +112,7 @@ "pyright": "=1.1.338", "react": "^18.2.0", "react-dom": "^18.2.0", - "rollup": "^4.9.0", + "rollup": "^4.9.1", "rollup-plugin-copy": "^3.5.0", "rollup-plugin-cssimport": "^1.0.3", "rollup-plugin-postcss-lit": "^2.1.0", From 764389a78f50a817b5c8db045407e73716eeb4af Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 15:45:53 +0100 Subject: [PATCH 011/131] web: bump the storybook group in /web with 7 updates (#7897) Bumps the storybook group in /web with 7 updates: | Package | From | To | | --- | --- | --- | | [@storybook/addon-essentials](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials) | `7.6.4` | `7.6.5` | | [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links) | `7.6.4` | `7.6.5` | | [@storybook/api](https://github.com/storybookjs/storybook/tree/HEAD/code/deprecated/manager-api-shim) | `7.6.4` | `7.6.5` | | [@storybook/manager-api](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/manager-api) | `7.6.4` | `7.6.5` | | [@storybook/web-components](https://github.com/storybookjs/storybook/tree/HEAD/code/renderers/web-components) | `7.6.4` | `7.6.5` | | [@storybook/web-components-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/web-components-vite) | `7.6.4` | `7.6.5` | | [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/cli) | `7.6.4` | `7.6.5` | Updates `@storybook/addon-essentials` from 7.6.4 to 7.6.5 - [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/v7.6.5/code/addons/essentials) Updates `@storybook/addon-links` from 7.6.4 to 7.6.5 - [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/v7.6.5/code/addons/links) Updates `@storybook/api` from 7.6.4 to 7.6.5 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/v7.6.5/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v7.6.5/code/deprecated/manager-api-shim) Updates `@storybook/manager-api` from 7.6.4 to 7.6.5 - [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/v7.6.5/code/lib/manager-api) Updates `@storybook/web-components` from 7.6.4 to 7.6.5 - [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/v7.6.5/code/renderers/web-components) Updates `@storybook/web-components-vite` from 7.6.4 to 7.6.5 - [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/v7.6.5/code/frameworks/web-components-vite) Updates `storybook` from 7.6.4 to 7.6.5 - [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/v7.6.5/code/lib/cli) --- updated-dependencies: - dependency-name: "@storybook/addon-essentials" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: "@storybook/addon-links" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: "@storybook/api" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: "@storybook/manager-api" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: "@storybook/web-components" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: "@storybook/web-components-vite" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook - dependency-name: storybook dependency-type: direct:development update-type: version-update:semver-patch dependency-group: storybook ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package-lock.json | 1066 +++++++++++------------------------------ web/package.json | 14 +- 2 files changed, 300 insertions(+), 780 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 703288577..4e746ea69 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -61,13 +61,13 @@ "@rollup/plugin-replace": "^5.0.5", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.5", - "@storybook/addon-essentials": "^7.6.4", - "@storybook/addon-links": "^7.6.4", - "@storybook/api": "^7.6.4", + "@storybook/addon-essentials": "^7.6.5", + "@storybook/addon-links": "^7.6.5", + "@storybook/api": "^7.6.5", "@storybook/blocks": "^7.6.4", - "@storybook/manager-api": "^7.6.4", - "@storybook/web-components": "^7.6.4", - "@storybook/web-components-vite": "^7.6.4", + "@storybook/manager-api": "^7.6.5", + "@storybook/web-components": "^7.6.5", + "@storybook/web-components-vite": "^7.6.5", "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@types/chart.js": "^2.9.41", "@types/codemirror": "5.60.15", @@ -94,7 +94,7 @@ "rollup-plugin-copy": "^3.5.0", "rollup-plugin-cssimport": "^1.0.3", "rollup-plugin-postcss-lit": "^2.1.0", - "storybook": "^7.6.4", + "storybook": "^7.6.5", "storybook-addon-mock": "^4.3.0", "ts-lit-plugin": "^2.0.1", "tslib": "^2.6.2", @@ -4855,12 +4855,12 @@ "dev": true }, "node_modules/@storybook/addon-actions": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.4.tgz", - "integrity": "sha512-91UD5KPDik74VKVioPMcbwwvDXN/non8p1wArYAHCHCmd/Pts5MJRiFueSdfomSpNjUtjtn6eSXtwpIL3XVOfQ==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.5.tgz", + "integrity": "sha512-lW/m9YcaNfBZk+TZLxyzHdd563mBWpsUIveOKYjcPdl/q0FblWWZrRsFHqwLK1ldZ4AZXs8J/47G8CBr6Ew2uQ==", "dev": true, "dependencies": { - "@storybook/core-events": "7.6.4", + "@storybook/core-events": "7.6.5", "@storybook/global": "^5.0.0", "@types/uuid": "^9.0.1", "dequal": "^2.0.2", @@ -4872,23 +4872,10 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/addon-actions/node_modules/@storybook/core-events": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz", - "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/addon-backgrounds": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.4.tgz", - "integrity": "sha512-gNy3kIkHSr+Lg/jVDHwbZjIe1po5SDGZNVe39vrJwnqGz8T1clWes9WHCL6zk/uaCDA3yUna2Nt/KlOFAWDSoQ==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.5.tgz", + "integrity": "sha512-wZZOL19vg4TTRtOTl71XKqPe5hQx3XUh9Fle0wOi91FiFrBdqusrppnyS89wPS8RQG5lXEOFEUvYcMmdCcdZfw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -4901,12 +4888,12 @@ } }, "node_modules/@storybook/addon-controls": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.4.tgz", - "integrity": "sha512-k4AtZfazmD/nL3JAtLGAB7raPhkhUo0jWnaZWrahd9h1Fm13mBU/RW+JzTRhCw3Mp2HPERD7NI5Qcd2fUP6WDA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.5.tgz", + "integrity": "sha512-EdSZ2pYf74mOXZGGJ22lrDvdvL0YKc95iWv9FFEhUFOloMy/0OZPB2ybYmd2KVCy3SeIE4Zfeiw8pDXdCUniOQ==", "dev": true, "dependencies": { - "@storybook/blocks": "7.6.4", + "@storybook/blocks": "7.6.5", "lodash": "^4.17.21", "ts-dedent": "^2.0.0" }, @@ -4916,26 +4903,26 @@ } }, "node_modules/@storybook/addon-docs": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.4.tgz", - "integrity": "sha512-PbFMbvC9sK3sGdMhwmagXs9TqopTp9FySji+L8O7W9SHRC6wSmdwoWWPWybkOYxr/z/wXi7EM0azSAX7yQxLbw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.5.tgz", + "integrity": "sha512-D9tZyD41IujCHiPYdfS2bKtZRJPNwO4EydzyqODXppomluhFbY3uTEaf0H1UFnJLQxWNXZ7rr3aS0V3O6yu8pA==", "dev": true, "dependencies": { "@jest/transform": "^29.3.1", "@mdx-js/react": "^2.1.5", - "@storybook/blocks": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/components": "7.6.4", - "@storybook/csf-plugin": "7.6.4", - "@storybook/csf-tools": "7.6.4", + "@storybook/blocks": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/components": "7.6.5", + "@storybook/csf-plugin": "7.6.5", + "@storybook/csf-tools": "7.6.5", "@storybook/global": "^5.0.0", "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.6.4", - "@storybook/postinstall": "7.6.4", - "@storybook/preview-api": "7.6.4", - "@storybook/react-dom-shim": "7.6.4", - "@storybook/theming": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/node-logger": "7.6.5", + "@storybook/postinstall": "7.6.5", + "@storybook/preview-api": "7.6.5", + "@storybook/react-dom-shim": "7.6.5", + "@storybook/theming": "7.6.5", + "@storybook/types": "7.6.5", "fs-extra": "^11.1.0", "remark-external-links": "^8.0.0", "remark-slug": "^6.0.0", @@ -4950,44 +4937,18 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/addon-docs/node_modules/@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/addon-docs/node_modules/@storybook/core-events": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz", - "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/addon-docs/node_modules/@storybook/preview-api": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.4.tgz", - "integrity": "sha512-KhisNdQX5NdfAln+spLU4B82d804GJQp/CnI5M1mm/taTnjvMgs/wTH9AmR89OPoq+tFZVW0vhy2zgPS3ar71A==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.5.tgz", + "integrity": "sha512-9XzuDXXgNuA6dDZ3DXsUwEG6ElxeTbzLuYuzcjtS1FusSICZ2iYmxfS0GfSud9MjPPYOJYoSOvMdIHjorjgByA==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/channels": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.4", + "@storybook/types": "7.6.5", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -5002,26 +4963,6 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/addon-docs/node_modules/@storybook/theming": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.4.tgz", - "integrity": "sha512-Z/dcC5EpkIXelYCkt9ojnX6D7qGOng8YHxV/OWlVE9TrEGYVGPOEfwQryR0RhmGpDha1TYESLYrsDb4A8nJ1EA==", - "dev": true, - "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.6.4", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/@storybook/addon-docs/node_modules/fs-extra": { "version": "11.2.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", @@ -5037,24 +4978,24 @@ } }, "node_modules/@storybook/addon-essentials": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.4.tgz", - "integrity": "sha512-J+zPmP4pbuuFxQ3pjLRYQRnxEtp7jF3xRXGFO8brVnEqtqoxwJ6j3euUrRLe0rpGAU3AD7dYfaaFjd3xkENgTw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.5.tgz", + "integrity": "sha512-VCLj1JAEpGoqF5iFJOo1CZFFck/tg4m/98DLdQuNuXvxT6jqaF0NI9UUQuJLIGteDCR7NKRbTFc1hV3/Ev+Ziw==", "dev": true, "dependencies": { - "@storybook/addon-actions": "7.6.4", - "@storybook/addon-backgrounds": "7.6.4", - "@storybook/addon-controls": "7.6.4", - "@storybook/addon-docs": "7.6.4", - "@storybook/addon-highlight": "7.6.4", - "@storybook/addon-measure": "7.6.4", - "@storybook/addon-outline": "7.6.4", - "@storybook/addon-toolbars": "7.6.4", - "@storybook/addon-viewport": "7.6.4", - "@storybook/core-common": "7.6.4", - "@storybook/manager-api": "7.6.4", - "@storybook/node-logger": "7.6.4", - "@storybook/preview-api": "7.6.4", + "@storybook/addon-actions": "7.6.5", + "@storybook/addon-backgrounds": "7.6.5", + "@storybook/addon-controls": "7.6.5", + "@storybook/addon-docs": "7.6.5", + "@storybook/addon-highlight": "7.6.5", + "@storybook/addon-measure": "7.6.5", + "@storybook/addon-outline": "7.6.5", + "@storybook/addon-toolbars": "7.6.5", + "@storybook/addon-viewport": "7.6.5", + "@storybook/core-common": "7.6.5", + "@storybook/manager-api": "7.6.5", + "@storybook/node-logger": "7.6.5", + "@storybook/preview-api": "7.6.5", "ts-dedent": "^2.0.0" }, "funding": { @@ -5066,44 +5007,18 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/addon-essentials/node_modules/@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/addon-essentials/node_modules/@storybook/core-events": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz", - "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/addon-essentials/node_modules/@storybook/preview-api": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.4.tgz", - "integrity": "sha512-KhisNdQX5NdfAln+spLU4B82d804GJQp/CnI5M1mm/taTnjvMgs/wTH9AmR89OPoq+tFZVW0vhy2zgPS3ar71A==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.5.tgz", + "integrity": "sha512-9XzuDXXgNuA6dDZ3DXsUwEG6ElxeTbzLuYuzcjtS1FusSICZ2iYmxfS0GfSud9MjPPYOJYoSOvMdIHjorjgByA==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/channels": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.4", + "@storybook/types": "7.6.5", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -5119,9 +5034,9 @@ } }, "node_modules/@storybook/addon-highlight": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.4.tgz", - "integrity": "sha512-0kvjDzquoPwWWU61QYmEtcSGWXufnV7Z/bfBTYh132uxvV/X9YzDFcXXrxGL7sBJkK32gNUUBDuiTOxs5NxyOQ==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.5.tgz", + "integrity": "sha512-CxzmIb30F9nLPQwT0lCPYhOAwGlGF4IkgkO8hYA7VfGCGUkJZEyyN/YkP/ZCUSdCIRChDBouR3KiFFd4mDFKzg==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -5132,9 +5047,9 @@ } }, "node_modules/@storybook/addon-links": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.6.4.tgz", - "integrity": "sha512-TEhxYdMhJO28gD84ej1FCwLv9oLuCPt77bRXip9ndaNPRTdHYdWv6IP94dhbuDi8eHux7Z4A/mllciFuDFrnCw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.6.5.tgz", + "integrity": "sha512-Lx4Ng+iXt0YpIrKGr+nOZlpN9ypOoEDoP/7bZ6m7GXuVAkDm3JrRCBp7e2ZKSKcTxPdjPuO9HVKkIjtqjINlpw==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.2", @@ -5155,9 +5070,9 @@ } }, "node_modules/@storybook/addon-measure": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.4.tgz", - "integrity": "sha512-73wsJ8PALsgWniR3MA/cmxcFuU6cRruWdIyYzOMgM8ife2Jm3xSkV7cTTXAqXt2H9Uuki4PGnuMHWWFLpPeyVA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.5.tgz", + "integrity": "sha512-tlUudVQSrA+bwI4dhO8J7nYHtYdylcBZ86ybnqMmdTthsnyc7jnaFVQwbb6bbQJpPxvEvoNds5bVGUFocuvymQ==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5169,9 +5084,9 @@ } }, "node_modules/@storybook/addon-outline": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.4.tgz", - "integrity": "sha512-CFxGASRse/qeFocetDKFNeWZ3Aa2wapVtRciDNa4Zx7k1wCnTjEsPIm54waOuCaNVcrvO+nJUAZG5WyiorQvcg==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.5.tgz", + "integrity": "sha512-P7X4+Z9L/l/RZW9UvvM+iuK2SUHD22KPc+dbYOifRXDovUqhfmcKVh1CUqTDMyZrg2ZAbropehMz1eI9BlQfxg==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5183,9 +5098,9 @@ } }, "node_modules/@storybook/addon-toolbars": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.4.tgz", - "integrity": "sha512-ENMQJgU4sRCLLDVXYfa+P3cQVV9PC0ZxwVAKeM3NPYPNH/ODoryGNtq+Q68LwHlM4ObCE2oc9MzaQqPxloFcCw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.5.tgz", + "integrity": "sha512-/zqWbVNE/SHc8I5Prnd2Q8U57RGEIYvHfeXjfkuLcE2Quc4Iss4x/9eU7SKu4jm+IOO2s0wlN6HcqI3XEf2XxA==", "dev": true, "funding": { "type": "opencollective", @@ -5193,9 +5108,9 @@ } }, "node_modules/@storybook/addon-viewport": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.4.tgz", - "integrity": "sha512-SoTcHIoqybhYD28v7QExF1EZnl7FfxuP74VDhtze5LyMd2CbqmVnUfwewLCz/3IvCNce0GqdNyg1m6QJ7Eq1uw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.5.tgz", + "integrity": "sha512-9ghKTaduIUvQ6oShmWLuwMeTjtMR4RgKeKHrTJ7THMqvE/ydDPCYeL7ugF65ocXZSEz/QmxdK7uL686ZMKsqNA==", "dev": true, "dependencies": { "memoizerific": "^1.11.3" @@ -5388,26 +5303,13 @@ "dev": true }, "node_modules/@storybook/api": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-7.6.4.tgz", - "integrity": "sha512-iY/ZejLmVHctT6WcCiVCXBY84g/wMP7Amb+J3xTBM6jZHAJoHpM3ZeYlR5eZu4QfbGZh608TQDTmdQ7irDo3ZA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-7.6.5.tgz", + "integrity": "sha512-o1RH47iIgG4ie4hjJP1HgsCiuTKlGW0egaAy6E6Np3bDmujy5udWEf8vnXbcaBerc5ZSrQs45kfSWugHy2a4FA==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.4", - "@storybook/manager-api": "7.6.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/api/node_modules/@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" + "@storybook/client-logger": "7.6.5", + "@storybook/manager-api": "7.6.5" }, "funding": { "type": "opencollective", @@ -5415,22 +5317,22 @@ } }, "node_modules/@storybook/blocks": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.4.tgz", - "integrity": "sha512-iXinXXhTUBtReREP1Jifpu35DnGg7FidehjvCM8sM4E4aymfb8czdg9DdvG46T2UFUPUct36nnjIdMLWOya8Bw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.5.tgz", + "integrity": "sha512-/NjuYkPks5w9lKn47KLgVC5cBkwfc+ERAp0CY0Xe//BQJkP+bcI8lE8d9Qc9IXFbOTvYEULeQrFgCkesk5BmLg==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/components": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/channels": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/components": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/csf": "^0.1.2", - "@storybook/docs-tools": "7.6.4", + "@storybook/docs-tools": "7.6.5", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.6.4", - "@storybook/preview-api": "7.6.4", - "@storybook/theming": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/manager-api": "7.6.5", + "@storybook/preview-api": "7.6.5", + "@storybook/theming": "7.6.5", + "@storybook/types": "7.6.5", "@types/lodash": "^4.14.167", "color-convert": "^2.0.1", "dequal": "^2.0.2", @@ -5453,44 +5355,18 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/blocks/node_modules/@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/blocks/node_modules/@storybook/core-events": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz", - "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/blocks/node_modules/@storybook/preview-api": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.4.tgz", - "integrity": "sha512-KhisNdQX5NdfAln+spLU4B82d804GJQp/CnI5M1mm/taTnjvMgs/wTH9AmR89OPoq+tFZVW0vhy2zgPS3ar71A==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.5.tgz", + "integrity": "sha512-9XzuDXXgNuA6dDZ3DXsUwEG6ElxeTbzLuYuzcjtS1FusSICZ2iYmxfS0GfSud9MjPPYOJYoSOvMdIHjorjgByA==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/channels": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.4", + "@storybook/types": "7.6.5", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -5505,36 +5381,16 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/blocks/node_modules/@storybook/theming": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.4.tgz", - "integrity": "sha512-Z/dcC5EpkIXelYCkt9ojnX6D7qGOng8YHxV/OWlVE9TrEGYVGPOEfwQryR0RhmGpDha1TYESLYrsDb4A8nJ1EA==", - "dev": true, - "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.6.4", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/@storybook/builder-manager": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.4.tgz", - "integrity": "sha512-k5+D3fXw7LdMOWd5tF7cIq8L3irrdW6/vmcEHLaJj1EXZ+DvsNCH9xSsLS+6zfrUcxug4oSfRqvF87w6Oz3DtA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.5.tgz", + "integrity": "sha512-FQyI+tfzMam2XKXq7k921YVafIJs9Vqvos5qx8vyRnRffo55UU8tgunwjGn0PswtbMm6sThVqE0C0ZzVr7RG8A==", "dev": true, "dependencies": { "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "7.6.4", - "@storybook/manager": "7.6.4", - "@storybook/node-logger": "7.6.4", + "@storybook/core-common": "7.6.5", + "@storybook/manager": "7.6.5", + "@storybook/node-logger": "7.6.5", "@types/ejs": "^3.1.1", "@types/find-cache-dir": "^3.2.1", "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", @@ -5568,19 +5424,19 @@ } }, "node_modules/@storybook/builder-vite": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-7.6.4.tgz", - "integrity": "sha512-eqb3mLUfuXd4a7+46cWevQ9qH81FvHy1lrAbZGwp4bQ/Tj0YF8Ej7lKBbg7zoIwiu2zDci+BbMiaDOY1kPtILw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-7.6.5.tgz", + "integrity": "sha512-VbAYTGr92lgCWTwO2Z7NgSW3f5/K4Vr0Qxa2IlTgMCymWdDbWdIQiREcmCP0vjAGM2ftq1+vxngohVgx/r7pUw==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/core-common": "7.6.4", - "@storybook/csf-plugin": "7.6.4", - "@storybook/node-logger": "7.6.4", - "@storybook/preview": "7.6.4", - "@storybook/preview-api": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/channels": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/core-common": "7.6.5", + "@storybook/csf-plugin": "7.6.5", + "@storybook/node-logger": "7.6.5", + "@storybook/preview": "7.6.5", + "@storybook/preview-api": "7.6.5", + "@storybook/types": "7.6.5", "@types/find-cache-dir": "^3.2.1", "browser-assert": "^1.2.1", "es-module-lexer": "^0.9.3", @@ -5612,44 +5468,18 @@ } } }, - "node_modules/@storybook/builder-vite/node_modules/@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/builder-vite/node_modules/@storybook/core-events": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz", - "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/builder-vite/node_modules/@storybook/preview-api": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.4.tgz", - "integrity": "sha512-KhisNdQX5NdfAln+spLU4B82d804GJQp/CnI5M1mm/taTnjvMgs/wTH9AmR89OPoq+tFZVW0vhy2zgPS3ar71A==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.5.tgz", + "integrity": "sha512-9XzuDXXgNuA6dDZ3DXsUwEG6ElxeTbzLuYuzcjtS1FusSICZ2iYmxfS0GfSud9MjPPYOJYoSOvMdIHjorjgByA==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/channels": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.4", + "@storybook/types": "7.6.5", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -5695,13 +5525,13 @@ } }, "node_modules/@storybook/channels": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.4.tgz", - "integrity": "sha512-Z4PY09/Czl70ap4ObmZ4bgin+EQhPaA3HdrEDNwpnH7A9ttfEO5u5KThytIjMq6kApCCihmEPDaYltoVrfYJJA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.5.tgz", + "integrity": "sha512-FIlNkyfQy9uHoJfAFL2/wO3ASGJELFvBzURBE2rcEF/TS7GcUiqWnBfiDxAbwSEjSOm2F0eEq3UXhaZEjpJHDw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/client-logger": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/global": "^5.0.0", "qs": "^6.10.0", "telejson": "^7.2.0", @@ -5712,50 +5542,24 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/channels/node_modules/@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/channels/node_modules/@storybook/core-events": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz", - "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/cli": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.4.tgz", - "integrity": "sha512-GqvaFdkkBMJOdnrVe82XY0V3b+qFMhRNyVoTv2nqB87iMUXZHqh4Pu4LqwaJBsBpuNregvCvVOPe9LGgoOzy4A==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.5.tgz", + "integrity": "sha512-w+Y8dx5oCLQVESOVmpsQuFksr/ewARKrnSKl9kwnVMN4sMgjOgoZ3zmV66J7SKexvwyuwlOjf840pmEglGdPPg==", "dev": true, "dependencies": { "@babel/core": "^7.23.2", "@babel/preset-env": "^7.23.2", "@babel/types": "^7.23.0", "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "7.6.4", - "@storybook/core-common": "7.6.4", - "@storybook/core-events": "7.6.4", - "@storybook/core-server": "7.6.4", - "@storybook/csf-tools": "7.6.4", - "@storybook/node-logger": "7.6.4", - "@storybook/telemetry": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/codemod": "7.6.5", + "@storybook/core-common": "7.6.5", + "@storybook/core-events": "7.6.5", + "@storybook/core-server": "7.6.5", + "@storybook/csf-tools": "7.6.5", + "@storybook/node-logger": "7.6.5", + "@storybook/telemetry": "7.6.5", + "@storybook/types": "7.6.5", "@types/semver": "^7.3.4", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", @@ -5795,19 +5599,6 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/node_modules/@storybook/core-events": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz", - "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/cli/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -5932,11 +5723,10 @@ "dev": true }, "node_modules/@storybook/client-logger": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.1.tgz", - "integrity": "sha512-2j0DQlKlPNY8XAaEZv+mUYEUm4dOWg6/Q92UNbvYPRK5qbXUvbMiQco5nmvg4LvMT6y99LhRSW2xrwEx5xKAKw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.5.tgz", + "integrity": "sha512-S5aROWgssqg7tcs9lgW5wmCAz4SxMAtioiyVj5oFecmPCbQtFVIAREYzeoxE4GfJL+plrfRkum4BzziANn8EhQ==", "dev": true, - "peer": true, "dependencies": { "@storybook/global": "^5.0.0" }, @@ -5946,18 +5736,18 @@ } }, "node_modules/@storybook/codemod": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.4.tgz", - "integrity": "sha512-q4rZVOfozxzbDRH/LzuFDoIGBdXs+orAm18fi6iAx8PeMHe8J/MOXKccNV1zdkm/h7mTQowuRo45KwJHw8vX+g==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.5.tgz", + "integrity": "sha512-K5C9ltBClZ0aSyujGt3RJFtRicrUZy8nzhHrcADUj27rrQD26jH/p+Y05jWKj9JcI8SyMg978GN5X/1aw2Y31A==", "dev": true, "dependencies": { "@babel/core": "^7.23.2", "@babel/preset-env": "^7.23.2", "@babel/types": "^7.23.0", "@storybook/csf": "^0.1.2", - "@storybook/csf-tools": "7.6.4", - "@storybook/node-logger": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/csf-tools": "7.6.5", + "@storybook/node-logger": "7.6.5", + "@storybook/types": "7.6.5", "@types/cross-spawn": "^6.0.2", "cross-spawn": "^7.0.3", "globby": "^11.0.2", @@ -5987,18 +5777,18 @@ } }, "node_modules/@storybook/components": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.6.4.tgz", - "integrity": "sha512-K5RvEObJAnX+SbGJbkM1qrZEk+VR2cUhRCSrFnlfMwsn8/60T3qoH7U8bCXf8krDgbquhMwqev5WzDB+T1VV8g==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.6.5.tgz", + "integrity": "sha512-w4ZucbBBZ+NKMWlJKVj2I/bMBBq7gzDp9lzc4+8QaQ3vUPXKqc1ilIPYo/7UR5oxwDVMZocmMSgl9L8lvf7+Mw==", "dev": true, "dependencies": { "@radix-ui/react-select": "^1.2.2", "@radix-ui/react-toolbar": "^1.0.4", - "@storybook/client-logger": "7.6.4", + "@storybook/client-logger": "7.6.5", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/theming": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/theming": "7.6.5", + "@storybook/types": "7.6.5", "memoizerific": "^1.11.3", "use-resize-observer": "^9.1.0", "util-deprecate": "^1.0.2" @@ -6012,73 +5802,14 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/components/node_modules/@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/components/node_modules/@storybook/theming": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.4.tgz", - "integrity": "sha512-Z/dcC5EpkIXelYCkt9ojnX6D7qGOng8YHxV/OWlVE9TrEGYVGPOEfwQryR0RhmGpDha1TYESLYrsDb4A8nJ1EA==", - "dev": true, - "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.6.4", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/@storybook/core-client": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.4.tgz", - "integrity": "sha512-0msqdGd+VYD1dRgAJ2StTu4d543Wveb7LVVujX3PwD/QCxmCaVUHuAoZrekM/H7jZLw546ZIbLZo0xWrADAUMw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.5.tgz", + "integrity": "sha512-6FtyJcz8MSl+JYwNJZ53FM6rkT27pFHWcJPdtw/9229Ec8as9RpkNeZ/NBZjRTeDkn9Ki0VOiVAefNie9tZ/8Q==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.4", - "@storybook/preview-api": "7.6.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core-client/node_modules/@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core-client/node_modules/@storybook/core-events": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz", - "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" + "@storybook/client-logger": "7.6.5", + "@storybook/preview-api": "7.6.5" }, "funding": { "type": "opencollective", @@ -6086,17 +5817,17 @@ } }, "node_modules/@storybook/core-client/node_modules/@storybook/preview-api": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.4.tgz", - "integrity": "sha512-KhisNdQX5NdfAln+spLU4B82d804GJQp/CnI5M1mm/taTnjvMgs/wTH9AmR89OPoq+tFZVW0vhy2zgPS3ar71A==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.5.tgz", + "integrity": "sha512-9XzuDXXgNuA6dDZ3DXsUwEG6ElxeTbzLuYuzcjtS1FusSICZ2iYmxfS0GfSud9MjPPYOJYoSOvMdIHjorjgByA==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/channels": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.4", + "@storybook/types": "7.6.5", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -6112,14 +5843,14 @@ } }, "node_modules/@storybook/core-common": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.4.tgz", - "integrity": "sha512-qes4+mXqINu0kCgSMFjk++GZokmYjb71esId0zyJsk0pcIPkAiEjnhbSEQkMhbUfcvO1lztoaQTBW2P7Rd1tag==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.5.tgz", + "integrity": "sha512-z4EgzZSIVbID6Ib0jhh3jimKeaDWU8OOhoZYfn3galFmgQWowWOv1oMgipWiXfRLWw9DaLFQiCHIdLANH+VO2g==", "dev": true, "dependencies": { - "@storybook/core-events": "7.6.4", - "@storybook/node-logger": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/core-events": "7.6.5", + "@storybook/node-logger": "7.6.5", + "@storybook/types": "7.6.5", "@types/find-cache-dir": "^3.2.1", "@types/node": "^18.0.0", "@types/node-fetch": "^2.6.4", @@ -6146,19 +5877,6 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-common/node_modules/@storybook/core-events": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz", - "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/core-common/node_modules/@types/node": { "version": "18.19.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz", @@ -6281,11 +5999,10 @@ } }, "node_modules/@storybook/core-events": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.1.tgz", - "integrity": "sha512-F1tGb32XZ4FRfbtXdi4b+zdzWUjFz5rn3TF18mSuBGGXvxKU+4tywgjGQ3dKGdvuP754czn3poSdz2ZW08bLsQ==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.5.tgz", + "integrity": "sha512-zk2q/qicYXAzHA4oV3GDbIql+Kd4TOHUgDE8e4jPCOPp856z2ScqEKUAbiJizs6eEJOH4nW9Db1kuzgrBVEykQ==", "dev": true, - "peer": true, "dependencies": { "ts-dedent": "^2.0.0" }, @@ -6295,26 +6012,26 @@ } }, "node_modules/@storybook/core-server": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.4.tgz", - "integrity": "sha512-mXxZMpCwOhjEPPRjqrTHdiCpFdkc47f46vlgTj02SX+9xKHxslmZ2D3JG/8O4Ab9tG+bBl6lBm3RIrIzaiCu9Q==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.5.tgz", + "integrity": "sha512-BfKzK/ObTjUcPvE5/r1pogCifM/4nLRhOUYJl7XekwHkOQwn19e6H3/ku1W3jDoYXBu642Dc9X7l/ERjKTqxFg==", "dev": true, "dependencies": { "@aw-web-design/x-default-browser": "1.4.126", "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "7.6.4", - "@storybook/channels": "7.6.4", - "@storybook/core-common": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/builder-manager": "7.6.5", + "@storybook/channels": "7.6.5", + "@storybook/core-common": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/csf": "^0.1.2", - "@storybook/csf-tools": "7.6.4", + "@storybook/csf-tools": "7.6.5", "@storybook/docs-mdx": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/manager": "7.6.4", - "@storybook/node-logger": "7.6.4", - "@storybook/preview-api": "7.6.4", - "@storybook/telemetry": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/manager": "7.6.5", + "@storybook/node-logger": "7.6.5", + "@storybook/preview-api": "7.6.5", + "@storybook/telemetry": "7.6.5", + "@storybook/types": "7.6.5", "@types/detect-port": "^1.3.0", "@types/node": "^18.0.0", "@types/pretty-hrtime": "^1.0.0", @@ -6347,44 +6064,18 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-server/node_modules/@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core-server/node_modules/@storybook/core-events": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz", - "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/core-server/node_modules/@storybook/preview-api": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.4.tgz", - "integrity": "sha512-KhisNdQX5NdfAln+spLU4B82d804GJQp/CnI5M1mm/taTnjvMgs/wTH9AmR89OPoq+tFZVW0vhy2zgPS3ar71A==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.5.tgz", + "integrity": "sha512-9XzuDXXgNuA6dDZ3DXsUwEG6ElxeTbzLuYuzcjtS1FusSICZ2iYmxfS0GfSud9MjPPYOJYoSOvMdIHjorjgByA==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/channels": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.4", + "@storybook/types": "7.6.5", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -6517,12 +6208,12 @@ } }, "node_modules/@storybook/csf-plugin": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.4.tgz", - "integrity": "sha512-7g9p8s2ITX+Z9iThK5CehPhJOcusVN7JcUEEW+gVF5PlYT+uk/x+66gmQno+scQuNkV9+8UJD6RLFjP+zg2uCA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.5.tgz", + "integrity": "sha512-iQ8Y/Qq1IUhHRddjDVicWJA2sM7OZA1FR97OvWUT2240WjCuQSCfy32JD8TQlYjqXgEolJeLPv3zW4qH5om4LQ==", "dev": true, "dependencies": { - "@storybook/csf-tools": "7.6.4", + "@storybook/csf-tools": "7.6.5", "unplugin": "^1.3.1" }, "funding": { @@ -6531,9 +6222,9 @@ } }, "node_modules/@storybook/csf-tools": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.4.tgz", - "integrity": "sha512-6sLayuhgReIK3/QauNj5BW4o4ZfEMJmKf+EWANPEM/xEOXXqrog6Un8sjtBuJS9N1DwyhHY6xfkEiPAwdttwqw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.5.tgz", + "integrity": "sha512-1iaCh7nt+WE7Q5UwRhLLc5flMNoAV/vBr0tvDSCKiHaO+D3dZzlZOe/U+S6wegdyN2QNcvT2xs179CcrX6Qp6w==", "dev": true, "dependencies": { "@babel/generator": "^7.23.0", @@ -6541,7 +6232,7 @@ "@babel/traverse": "^7.23.2", "@babel/types": "^7.23.0", "@storybook/csf": "^0.1.2", - "@storybook/types": "7.6.4", + "@storybook/types": "7.6.5", "fs-extra": "^11.1.0", "recast": "^0.23.1", "ts-dedent": "^2.0.0" @@ -6572,14 +6263,14 @@ "dev": true }, "node_modules/@storybook/docs-tools": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.4.tgz", - "integrity": "sha512-2eGam43aD7O3cocA72Z63kRi7t/ziMSpst0qB218QwBWAeZjT4EYDh8V6j/Xhv6zVQL3msW7AglrQP5kCKPvPA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.5.tgz", + "integrity": "sha512-UyHkHu5Af6jMpYsR4lZ69D32GQGeA0pLAn7jaBbQndgAjBdK1ykZcifiUC7Wz1hG7+YpuYspEGuDEddOh+X8FQ==", "dev": true, "dependencies": { - "@storybook/core-common": "7.6.4", - "@storybook/preview-api": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/core-common": "7.6.5", + "@storybook/preview-api": "7.6.5", + "@storybook/types": "7.6.5", "@types/doctrine": "^0.0.3", "assert": "^2.1.0", "doctrine": "^3.0.0", @@ -6590,44 +6281,18 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/docs-tools/node_modules/@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/docs-tools/node_modules/@storybook/core-events": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz", - "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/docs-tools/node_modules/@storybook/preview-api": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.4.tgz", - "integrity": "sha512-KhisNdQX5NdfAln+spLU4B82d804GJQp/CnI5M1mm/taTnjvMgs/wTH9AmR89OPoq+tFZVW0vhy2zgPS3ar71A==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.5.tgz", + "integrity": "sha512-9XzuDXXgNuA6dDZ3DXsUwEG6ElxeTbzLuYuzcjtS1FusSICZ2iYmxfS0GfSud9MjPPYOJYoSOvMdIHjorjgByA==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/channels": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.4", + "@storybook/types": "7.6.5", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -6649,9 +6314,9 @@ "dev": true }, "node_modules/@storybook/manager": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.4.tgz", - "integrity": "sha512-Ug2ejfKgKre8h/RJbkumukwAA44TbvTPEjDcJmyFdAI+kHYhOYdKPEC2UNmVYz8/4HjwMTJQ3M7t/esK8HHY4A==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.5.tgz", + "integrity": "sha512-y1KLH0O1PGPyMxGMvOhppzFSO7r4ibjTve5iqsI0JZwxUjNuBKRLYbrhXdAyC2iacvxYNrHgevae1k9XdD+FQw==", "dev": true, "funding": { "type": "opencollective", @@ -6659,19 +6324,19 @@ } }, "node_modules/@storybook/manager-api": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.4.tgz", - "integrity": "sha512-RFb/iaBJfXygSgXkINPRq8dXu7AxBicTGX7MxqKXbz5FU7ANwV7abH6ONBYURkSDOH9//TQhRlVkF5u8zWg3bw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.5.tgz", + "integrity": "sha512-tE3OShOcs6A3XtI3NJd6hYQOZLaP++Fn0dCtowBwYh/vS1EN/AyroVmL97tsxn1DZTyoRt0GidwbB6dvLMBOwA==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/channels": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/router": "7.6.4", - "@storybook/theming": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/router": "7.6.5", + "@storybook/theming": "7.6.5", + "@storybook/types": "7.6.5", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", @@ -6685,52 +6350,6 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/manager-api/node_modules/@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/manager-api/node_modules/@storybook/core-events": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz", - "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/manager-api/node_modules/@storybook/theming": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.4.tgz", - "integrity": "sha512-Z/dcC5EpkIXelYCkt9ojnX6D7qGOng8YHxV/OWlVE9TrEGYVGPOEfwQryR0RhmGpDha1TYESLYrsDb4A8nJ1EA==", - "dev": true, - "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.6.4", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/@storybook/manager-api/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -6771,9 +6390,9 @@ "dev": true }, "node_modules/@storybook/node-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.4.tgz", - "integrity": "sha512-GDkEnnDj4Op+PExs8ZY/P6ox3wg453CdEIaR8PR9TxF/H/T2fBL6puzma3hN2CMam6yzfAL8U+VeIIDLQ5BZdQ==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.5.tgz", + "integrity": "sha512-xKw6IH1wLkIssekdBv3bd13xYKUF1t8EwqDR8BYcN8AVjZlqJMTifssqG4bYV+G/B7J3tz4ugJ5nmtWg6RQ0Qw==", "dev": true, "funding": { "type": "opencollective", @@ -6781,9 +6400,9 @@ } }, "node_modules/@storybook/postinstall": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.4.tgz", - "integrity": "sha512-7uoB82hSzlFSdDMS3hKQD+AaeSvPit/fAMvXCBxn0/D0UGJUZcq4M9JcKBwEHkZJcbuDROgOTJ6TUeXi/FWO0w==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.5.tgz", + "integrity": "sha512-12WxfpqGKsk7GQ3KWiZSbamsYK8vtRmhOTkavZ9IQkcJ/zuVfmqK80/Mds+njJMudUPzuREuSFGWACczo17EDA==", "dev": true, "funding": { "type": "opencollective", @@ -6791,9 +6410,9 @@ } }, "node_modules/@storybook/preview": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.4.tgz", - "integrity": "sha512-p9xIvNkgXgTpSRphOMV9KpIiNdkymH61jBg3B0XyoF6IfM1S2/mQGvC89lCVz1dMGk2SrH4g87/WcOapkU5ArA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.5.tgz", + "integrity": "sha512-zmLa7C7yFGTYhgGZXoecdww9rx0Z5HpNi/GDBRWoNSK+FEdE8Jj2jF5NJ2ncldtYIyegz9ku29JFMKbhMj9K5Q==", "dev": true, "funding": { "type": "opencollective", @@ -6887,9 +6506,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.4.tgz", - "integrity": "sha512-wGJfomlDEBnowNmhmumWDu/AcUInxSoPqUUJPgk2f5oL0EW17fR9fDP/juG3XOEdieMDM0jDX48GML7lyvL2fg==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.5.tgz", + "integrity": "sha512-Qp3N3zENdvx20ikHmz5yI03z+mAWF8bUAwUofqXarVtZUkBNtvfTfUwgAezOAF0eClClH+ktIziIKd976tLSPw==", "dev": true, "funding": { "type": "opencollective", @@ -6901,12 +6520,12 @@ } }, "node_modules/@storybook/router": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.4.tgz", - "integrity": "sha512-5MQ7Z4D7XNPN2yhFgjey7hXOYd6s8CggUqeAwhzGTex90SMCkKHSz1hfkcXn1ZqBPaall2b53uK553OvPLp9KQ==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.5.tgz", + "integrity": "sha512-QiTC86gRuoepzzmS6HNJZTwfz/n27NcqtaVEIxJi1Yvsx2/kLa9NkRhylNkfTuZ1gEry9stAlKWanMsB2aKyjQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.4", + "@storybook/client-logger": "7.6.5", "memoizerific": "^1.11.3", "qs": "^6.10.0" }, @@ -6915,28 +6534,15 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/router/node_modules/@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/telemetry": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.4.tgz", - "integrity": "sha512-Q4QpvcgloHUEqC9PGo7tgqkUH91/PjX+74/0Hi9orLo8QmLMgdYS5fweFwgSKoTwDGNg2PaHp/jqvhhw7UmnJA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.5.tgz", + "integrity": "sha512-FiLRh9k9LoGphqgBqPYySWdGqplihiZyDwqdo+Qs19RcQ/eiKg0W7fdA09nStcdcsHmDl/1cMfRhz9KUiMtwOw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.4", - "@storybook/core-common": "7.6.4", - "@storybook/csf-tools": "7.6.4", + "@storybook/client-logger": "7.6.5", + "@storybook/core-common": "7.6.5", + "@storybook/csf-tools": "7.6.5", "chalk": "^4.1.0", "detect-package-manager": "^2.0.1", "fetch-retry": "^5.0.2", @@ -6948,19 +6554,6 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/telemetry/node_modules/@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/telemetry/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -7028,14 +6621,13 @@ } }, "node_modules/@storybook/theming": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.1.tgz", - "integrity": "sha512-a4QajZbnYumq8ovtn7nW7BeNrk/TaWyKmUrIz4w08I6ghzESJA4aCWZ6394awbrruiIOzCCKOUq4mfWEsc8W6A==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.5.tgz", + "integrity": "sha512-RpcWT0YEgiobO41McVPDfQQHHFnjyr1sJnNTPJIvOUgSfURdgSj17mQVxtD5xcXcPWUdle5UhIOrCixHbL/NNw==", "dev": true, - "peer": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.1", + "@storybook/client-logger": "7.6.5", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -7049,12 +6641,12 @@ } }, "node_modules/@storybook/types": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.4.tgz", - "integrity": "sha512-qyiiXPCvol5uVgfubcIMzJBA0awAyFPU+TyUP1mkPYyiTHnsHYel/mKlSdPjc8a97N3SlJXHOCx41Hde4IyJgg==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.5.tgz", + "integrity": "sha512-Q757v+fYZZSaEpks/zDL5YgXRozxkgKakXFc+BoQHK5q5sVhJ+0jvpLJiAQAniIIaMIkqY/G24Kd6Uo6UdKBCg==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.4", + "@storybook/channels": "7.6.5", "@types/babel__core": "^7.0.0", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" @@ -7065,18 +6657,18 @@ } }, "node_modules/@storybook/web-components": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/web-components/-/web-components-7.6.4.tgz", - "integrity": "sha512-SUvNDzSUkvQdDhPhZU04UNIpuyrpMylodXwe8UX6V/q8dbv1n5RP7mpBh9tGNb9pJKIIznybJAC/oGnUy9jkzw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/web-components/-/web-components-7.6.5.tgz", + "integrity": "sha512-uBL1d/qSwvbmkV/JGBdLySdmyOnZKBK+hn7+lgfQfTPV7JjOmTzuifnnSrhKlI/wupdBM/LYjlax5kGYt3oBXQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.4", - "@storybook/core-client": "7.6.4", - "@storybook/docs-tools": "7.6.4", + "@storybook/client-logger": "7.6.5", + "@storybook/core-client": "7.6.5", + "@storybook/docs-tools": "7.6.5", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.6.4", - "@storybook/preview-api": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/manager-api": "7.6.5", + "@storybook/preview-api": "7.6.5", + "@storybook/types": "7.6.5", "tiny-invariant": "^1.3.1", "ts-dedent": "^2.0.0" }, @@ -7092,15 +6684,15 @@ } }, "node_modules/@storybook/web-components-vite": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/web-components-vite/-/web-components-vite-7.6.4.tgz", - "integrity": "sha512-y4LJFUkzIy8Ggv9ZFeaTZKAZOCrJBlqAqNuSEKyxuBH8JVWZaDMgkDIE4U7vYt9vu5edtA5uYTh4KLHI80gVXw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/web-components-vite/-/web-components-vite-7.6.5.tgz", + "integrity": "sha512-j4lfrgPjlqAeoUdfXWMESUAxrOn+YUJekGh3saxsHxXIiYnzJBdkiJju4Hzqav4j8645bJzlZBw51e6wJJsuFw==", "dev": true, "dependencies": { - "@storybook/builder-vite": "7.6.4", - "@storybook/core-server": "7.6.4", - "@storybook/node-logger": "7.6.4", - "@storybook/web-components": "7.6.4", + "@storybook/builder-vite": "7.6.5", + "@storybook/core-server": "7.6.5", + "@storybook/node-logger": "7.6.5", + "@storybook/web-components": "7.6.5", "magic-string": "^0.30.0" }, "engines": { @@ -7111,44 +6703,18 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/web-components/node_modules/@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/web-components/node_modules/@storybook/core-events": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz", - "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/web-components/node_modules/@storybook/preview-api": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.4.tgz", - "integrity": "sha512-KhisNdQX5NdfAln+spLU4B82d804GJQp/CnI5M1mm/taTnjvMgs/wTH9AmR89OPoq+tFZVW0vhy2zgPS3ar71A==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.5.tgz", + "integrity": "sha512-9XzuDXXgNuA6dDZ3DXsUwEG6ElxeTbzLuYuzcjtS1FusSICZ2iYmxfS0GfSud9MjPPYOJYoSOvMdIHjorjgByA==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/channels": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.4", + "@storybook/types": "7.6.5", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -11869,9 +11435,9 @@ "dev": true }, "node_modules/flow-parser": { - "version": "0.223.3", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.223.3.tgz", - "integrity": "sha512-9KxxDKSB22ovMpSULbOL/QAQGPN6M0YMS3PubQvB0jVc4W7QP6VhasIVic7MzKcJSh0BAVs4J6SZjoH0lDDNlg==", + "version": "0.224.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.224.0.tgz", + "integrity": "sha512-S1P78o0VLB1FZvkoGSIpaRiiTUQ3xDhm9I4Z1qc3lglmkjehfR2sjM0vhwKS7UC1G12VT4Leb/GGV/KlactqjA==", "dev": true, "engines": { "node": ">=0.4.0" @@ -17334,12 +16900,12 @@ "dev": true }, "node_modules/storybook": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.6.4.tgz", - "integrity": "sha512-nQhs9XkrroxjqMoBnnToyc6M8ndbmpkOb1qmULO4chtfMy4k0p9Un3K4TJvDaP8c3wPUFGd4ZaJ1hZNVmIl56Q==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.6.5.tgz", + "integrity": "sha512-uHPrL+g/0v6iIVtDA8J0uWd3jDZcdr51lCR/vPXTkrCY1uVaFjswzl8EMy5PR05I7jMpKUzkJWZtFbgbh9e1Bw==", "dev": true, "dependencies": { - "@storybook/cli": "7.6.4" + "@storybook/cli": "7.6.5" }, "bin": { "sb": "index.js", @@ -17383,52 +16949,6 @@ } } }, - "node_modules/storybook-addon-mock/node_modules/@storybook/client-logger": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", - "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/storybook-addon-mock/node_modules/@storybook/core-events": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", - "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/storybook-addon-mock/node_modules/@storybook/theming": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.2.tgz", - "integrity": "sha512-wVmxZHVCqDoZgUOXTS4HRV4UClLtCydRNOEuUZ7X08QIPSA1FVL3gEpTQJfgCsyBX/cwSSofAMUbzAGEVNo+9g==", - "dev": true, - "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.2", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/storybook-addon-mock/node_modules/path-to-regexp": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", diff --git a/web/package.json b/web/package.json index 48f7c2c5b..35271d7f2 100644 --- a/web/package.json +++ b/web/package.json @@ -83,13 +83,13 @@ "@rollup/plugin-replace": "^5.0.5", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.5", - "@storybook/addon-essentials": "^7.6.4", - "@storybook/addon-links": "^7.6.4", - "@storybook/api": "^7.6.4", + "@storybook/addon-essentials": "^7.6.5", + "@storybook/addon-links": "^7.6.5", + "@storybook/api": "^7.6.5", "@storybook/blocks": "^7.6.4", - "@storybook/manager-api": "^7.6.4", - "@storybook/web-components": "^7.6.4", - "@storybook/web-components-vite": "^7.6.4", + "@storybook/manager-api": "^7.6.5", + "@storybook/web-components": "^7.6.5", + "@storybook/web-components-vite": "^7.6.5", "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@types/chart.js": "^2.9.41", "@types/codemirror": "5.60.15", @@ -116,7 +116,7 @@ "rollup-plugin-copy": "^3.5.0", "rollup-plugin-cssimport": "^1.0.3", "rollup-plugin-postcss-lit": "^2.1.0", - "storybook": "^7.6.4", + "storybook": "^7.6.5", "storybook-addon-mock": "^4.3.0", "ts-lit-plugin": "^2.0.1", "tslib": "^2.6.2", From 36de629899127b74e111799bcca45253d1abb8e5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 15:46:00 +0100 Subject: [PATCH 012/131] web: bump the eslint group in /web with 2 updates (#7898) Bumps the eslint group in /web with 2 updates: [eslint](https://github.com/eslint/eslint) and [eslint-plugin-lit](https://github.com/43081j/eslint-plugin-lit). Updates `eslint` from 8.55.0 to 8.56.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.55.0...v8.56.0) Updates `eslint-plugin-lit` from 1.10.1 to 1.11.0 - [Commits](https://github.com/43081j/eslint-plugin-lit/compare/v1.10.1...v1.11.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor dependency-group: eslint - dependency-name: eslint-plugin-lit dependency-type: direct:development update-type: version-update:semver-minor dependency-group: eslint ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package-lock.json | 24 ++++++++++++------------ web/package.json | 4 ++-- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 4e746ea69..982d2090f 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -77,10 +77,10 @@ "babel-plugin-macros": "^3.1.0", "babel-plugin-tsconfig-paths": "^1.0.3", "cross-env": "^7.0.3", - "eslint": "^8.55.0", + "eslint": "^8.56.0", "eslint-config-google": "^0.14.0", "eslint-plugin-custom-elements": "0.0.8", - "eslint-plugin-lit": "^1.10.1", + "eslint-plugin-lit": "^1.11.0", "eslint-plugin-sonarjs": "^0.23.0", "eslint-plugin-storybook": "^0.6.15", "lit-analyzer": "^2.0.2", @@ -2827,9 +2827,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", - "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -10440,15 +10440,15 @@ } }, "node_modules/eslint": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", - "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.55.0", + "@eslint/js": "8.56.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -10516,9 +10516,9 @@ } }, "node_modules/eslint-plugin-lit": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-lit/-/eslint-plugin-lit-1.10.1.tgz", - "integrity": "sha512-3eH++xFpe6efd+TN6B9kW1coULdPyK+3fMNws378nbYQ/HiWIz0+jVcsaGVs9BbLt6kVkDxZmUGF4Ivx3BatkA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-lit/-/eslint-plugin-lit-1.11.0.tgz", + "integrity": "sha512-jVqy2juQTAtOzj1ILf+ZW5GpDobXlSw0kvpP2zu2r8ZbW7KISt7ikj1Gw9DhNeirEU1UlSJR0VIWpdr4lzjayw==", "dev": true, "dependencies": { "parse5": "^6.0.1", diff --git a/web/package.json b/web/package.json index 35271d7f2..39fac3dcc 100644 --- a/web/package.json +++ b/web/package.json @@ -99,10 +99,10 @@ "babel-plugin-macros": "^3.1.0", "babel-plugin-tsconfig-paths": "^1.0.3", "cross-env": "^7.0.3", - "eslint": "^8.55.0", + "eslint": "^8.56.0", "eslint-config-google": "^0.14.0", "eslint-plugin-custom-elements": "0.0.8", - "eslint-plugin-lit": "^1.10.1", + "eslint-plugin-lit": "^1.11.0", "eslint-plugin-sonarjs": "^0.23.0", "eslint-plugin-storybook": "^0.6.15", "lit-analyzer": "^2.0.2", From 3bec7c905ed0da1c0e5ad85cc959748d5683868f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 15:46:15 +0100 Subject: [PATCH 013/131] web: bump the eslint group in /tests/wdio with 1 update (#7895) Bumps the eslint group in /tests/wdio with 1 update: [eslint](https://github.com/eslint/eslint). - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.55.0...v8.56.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor dependency-group: eslint ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tests/wdio/package-lock.json | 16 ++++++++-------- tests/wdio/package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/wdio/package-lock.json b/tests/wdio/package-lock.json index 1689c45f1..16cfc4c11 100644 --- a/tests/wdio/package-lock.json +++ b/tests/wdio/package-lock.json @@ -13,7 +13,7 @@ "@wdio/local-runner": "^8.26.1", "@wdio/mocha-framework": "^8.24.12", "@wdio/spec-reporter": "^8.24.12", - "eslint": "^8.55.0", + "eslint": "^8.56.0", "eslint-config-google": "^0.14.0", "eslint-plugin-sonarjs": "^0.23.0", "npm-run-all": "^4.1.5", @@ -382,9 +382,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", - "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2806,15 +2806,15 @@ } }, "node_modules/eslint": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", - "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.55.0", + "@eslint/js": "8.56.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", diff --git a/tests/wdio/package.json b/tests/wdio/package.json index b9b6df3da..0e57aaebe 100644 --- a/tests/wdio/package.json +++ b/tests/wdio/package.json @@ -10,7 +10,7 @@ "@wdio/local-runner": "^8.26.1", "@wdio/mocha-framework": "^8.24.12", "@wdio/spec-reporter": "^8.24.12", - "eslint": "^8.55.0", + "eslint": "^8.56.0", "eslint-config-google": "^0.14.0", "eslint-plugin-sonarjs": "^0.23.0", "npm-run-all": "^4.1.5", From 66413f09d4c0ef6a669a0f369bd979167b54ac3c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 15:47:26 +0100 Subject: [PATCH 014/131] web: bump the wdio group in /tests/wdio with 4 updates (#7896) Bumps the wdio group in /tests/wdio with 4 updates: [@wdio/cli](https://github.com/webdriverio/webdriverio/tree/HEAD/packages/wdio-cli), [@wdio/local-runner](https://github.com/webdriverio/webdriverio/tree/HEAD/packages/wdio-local-runner), [@wdio/mocha-framework](https://github.com/webdriverio/webdriverio/tree/HEAD/packages/wdio-mocha-framework) and [@wdio/spec-reporter](https://github.com/webdriverio/webdriverio/tree/HEAD/packages/wdio-spec-reporter). Updates `@wdio/cli` from 8.26.1 to 8.26.2 - [Release notes](https://github.com/webdriverio/webdriverio/releases) - [Changelog](https://github.com/webdriverio/webdriverio/blob/main/CHANGELOG.md) - [Commits](https://github.com/webdriverio/webdriverio/commits/v8.26.2/packages/wdio-cli) Updates `@wdio/local-runner` from 8.26.1 to 8.26.2 - [Release notes](https://github.com/webdriverio/webdriverio/releases) - [Changelog](https://github.com/webdriverio/webdriverio/blob/main/CHANGELOG.md) - [Commits](https://github.com/webdriverio/webdriverio/commits/v8.26.2/packages/wdio-local-runner) Updates `@wdio/mocha-framework` from 8.24.12 to 8.26.2 - [Release notes](https://github.com/webdriverio/webdriverio/releases) - [Changelog](https://github.com/webdriverio/webdriverio/blob/main/CHANGELOG.md) - [Commits](https://github.com/webdriverio/webdriverio/commits/v8.26.2/packages/wdio-mocha-framework) Updates `@wdio/spec-reporter` from 8.24.12 to 8.26.2 - [Release notes](https://github.com/webdriverio/webdriverio/releases) - [Changelog](https://github.com/webdriverio/webdriverio/blob/main/CHANGELOG.md) - [Commits](https://github.com/webdriverio/webdriverio/commits/v8.26.2/packages/wdio-spec-reporter) --- updated-dependencies: - dependency-name: "@wdio/cli" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: wdio - dependency-name: "@wdio/local-runner" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: wdio - dependency-name: "@wdio/mocha-framework" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: wdio - dependency-name: "@wdio/spec-reporter" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: wdio ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tests/wdio/package-lock.json | 220 +++++++++++++++++------------------ tests/wdio/package.json | 8 +- 2 files changed, 114 insertions(+), 114 deletions(-) diff --git a/tests/wdio/package-lock.json b/tests/wdio/package-lock.json index 16cfc4c11..9e274be9a 100644 --- a/tests/wdio/package-lock.json +++ b/tests/wdio/package-lock.json @@ -9,10 +9,10 @@ "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@typescript-eslint/eslint-plugin": "^6.14.0", "@typescript-eslint/parser": "^6.14.0", - "@wdio/cli": "^8.26.1", - "@wdio/local-runner": "^8.26.1", - "@wdio/mocha-framework": "^8.24.12", - "@wdio/spec-reporter": "^8.24.12", + "@wdio/cli": "^8.26.2", + "@wdio/local-runner": "^8.26.2", + "@wdio/mocha-framework": "^8.26.2", + "@wdio/spec-reporter": "^8.26.2", "eslint": "^8.56.0", "eslint-config-google": "^0.14.0", "eslint-plugin-sonarjs": "^0.23.0", @@ -1141,18 +1141,18 @@ "dev": true }, "node_modules/@wdio/cli": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-8.26.1.tgz", - "integrity": "sha512-KZ3MVyH4N6j0Gdy6RL6Wv0uf5OeggFe0WRpOwZFjjQpYVEV8IEuB4kDcw8ld7f3kp9YYQGabMAkGrO6tnz5T8w==", + "version": "8.26.2", + "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-8.26.2.tgz", + "integrity": "sha512-Gu9JZHFe1Kd69ip8FsXb8rQpt/dYqOBYj47kF8c/lTObhwf/WYXLwlS5XpNTc81vLK+iiM7p92QLgfG8oOHyIg==", "dev": true, "dependencies": { "@types/node": "^20.1.1", - "@wdio/config": "8.24.12", - "@wdio/globals": "8.26.1", + "@wdio/config": "8.26.2", + "@wdio/globals": "8.26.2", "@wdio/logger": "8.24.12", "@wdio/protocols": "8.24.12", - "@wdio/types": "8.24.12", - "@wdio/utils": "8.24.12", + "@wdio/types": "8.26.2", + "@wdio/utils": "8.26.2", "async-exit-hook": "^2.0.1", "chalk": "^5.2.0", "chokidar": "^3.5.3", @@ -1167,7 +1167,7 @@ "lodash.union": "^4.6.0", "read-pkg-up": "^10.0.0", "recursive-readdir": "^2.2.3", - "webdriverio": "8.26.1", + "webdriverio": "8.26.2", "yargs": "^17.7.2" }, "bin": { @@ -1190,14 +1190,14 @@ } }, "node_modules/@wdio/config": { - "version": "8.24.12", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.24.12.tgz", - "integrity": "sha512-3HW7qG1rIHzOIybV6oHR1CqLghsN0G3Xzs90ZciGL8dYhtcLtYCHwuWmBw4mkaB5xViU4AmZDuj7ChiG8Cr6Qw==", + "version": "8.26.2", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.26.2.tgz", + "integrity": "sha512-E7QQ5t5LMLnfytls0SePJ61CGkYiBzN9D0dsNQuEOXjiWXt3Q+1VZnQgbfk85P6gRSxfyp7unB4VRxpsHDCwrw==", "dev": true, "dependencies": { "@wdio/logger": "8.24.12", - "@wdio/types": "8.24.12", - "@wdio/utils": "8.24.12", + "@wdio/types": "8.26.2", + "@wdio/utils": "8.26.2", "decamelize": "^6.0.0", "deepmerge-ts": "^5.0.0", "glob": "^10.2.2", @@ -1208,29 +1208,29 @@ } }, "node_modules/@wdio/globals": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.26.1.tgz", - "integrity": "sha512-hNJ4mvSHzvAzDcBisaNgwRzJ2sLN4B/fno6VZcskgfYlg7UyWpVHigyxaddP2e1OeoxLL9pc2hKCtwgDr4UozA==", + "version": "8.26.2", + "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.26.2.tgz", + "integrity": "sha512-ie96SYwvnZTfcTQPYjshxoaNob9yndlG6z29l5bugY6xkpW2YVKOJ7bf8X4S+1M9ATIJiBYh1fpliuxyib2JXQ==", "dev": true, "engines": { "node": "^16.13 || >=18" }, "optionalDependencies": { "expect-webdriverio": "^4.6.1", - "webdriverio": "8.26.1" + "webdriverio": "8.26.2" } }, "node_modules/@wdio/local-runner": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-8.26.1.tgz", - "integrity": "sha512-n7iiB/mKt7u6bd3uJTgqOTaN2r/EUVQpBMsrXyv5XidYEr9QHuq2OOE3biswdxSez24p0zZGU35fu6oUwz5J1Q==", + "version": "8.26.2", + "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-8.26.2.tgz", + "integrity": "sha512-sAgWT2/l1zuCvk7MkNyrSCOj2cF6G//XYlqXiUGyG5O8R2B6GWB/bOrh4GsuOQ8rQ8vnUPnJVUeravHWhVePNA==", "dev": true, "dependencies": { "@types/node": "^20.1.0", "@wdio/logger": "8.24.12", "@wdio/repl": "8.24.12", - "@wdio/runner": "8.26.1", - "@wdio/types": "8.24.12", + "@wdio/runner": "8.26.2", + "@wdio/types": "8.26.2", "async-exit-hook": "^2.0.1", "split2": "^4.1.0", "stream-buffers": "^3.0.2" @@ -1267,16 +1267,16 @@ } }, "node_modules/@wdio/mocha-framework": { - "version": "8.24.12", - "resolved": "https://registry.npmjs.org/@wdio/mocha-framework/-/mocha-framework-8.24.12.tgz", - "integrity": "sha512-SHN7CYZnDkVUNYxLp8iMV92xcmU/4gq5dqA0pRrK4m5nIU7BoL0flm0kA+ydYUQyNedQh2ru1V63uNyTOyCKAg==", + "version": "8.26.2", + "resolved": "https://registry.npmjs.org/@wdio/mocha-framework/-/mocha-framework-8.26.2.tgz", + "integrity": "sha512-VEbkj/R9dOs9WWeO/xCSiGLZSCYEQ6We6MFiedSiTUFyPFbbBqtDE6ENJzstJhyoywwHsr9XuTxIGqakaDmfBw==", "dev": true, "dependencies": { "@types/mocha": "^10.0.0", "@types/node": "^20.1.0", "@wdio/logger": "8.24.12", - "@wdio/types": "8.24.12", - "@wdio/utils": "8.24.12", + "@wdio/types": "8.26.2", + "@wdio/utils": "8.26.2", "mocha": "^10.0.0" }, "engines": { @@ -1302,14 +1302,14 @@ } }, "node_modules/@wdio/reporter": { - "version": "8.24.12", - "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-8.24.12.tgz", - "integrity": "sha512-FtLzDTBXdgxXf4T9HJQ2bNpYYSKEw//jojFm9XzB4fPwzPeFY3HC+dbePucVW1SSLrVzVxqIOyHiwCLqQ/4cQw==", + "version": "8.26.2", + "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-8.26.2.tgz", + "integrity": "sha512-Fzn8AmYCmeqWyZBgkIgWuHEHb5HQgZXHxYvT1LeG+3B/w1F6OAU3lZSuY/ACoDI0vAYgRTHVDHFwuuhdUjtDew==", "dev": true, "dependencies": { "@types/node": "^20.1.0", "@wdio/logger": "8.24.12", - "@wdio/types": "8.24.12", + "@wdio/types": "8.26.2", "diff": "^5.0.0", "object-inspect": "^1.12.0" }, @@ -1318,35 +1318,35 @@ } }, "node_modules/@wdio/runner": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-8.26.1.tgz", - "integrity": "sha512-Uhz82HD53LvfW6hLwd/cX+vYVZpiKtAr7ipTxaLt5VPEIwcDlrVz1hoVkVMGyfvkAuHxDKLZx16bigfMg+5eTQ==", + "version": "8.26.2", + "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-8.26.2.tgz", + "integrity": "sha512-0eKmAJ1/KqFsEIhfKVCipPL2i3vMjRld6PDQxgZWLaxOsyVXQ38njJ+HHogskWtdGQqWNisosYGUv29QNTJYsw==", "dev": true, "dependencies": { "@types/node": "^20.1.0", - "@wdio/config": "8.24.12", - "@wdio/globals": "8.26.1", + "@wdio/config": "8.26.2", + "@wdio/globals": "8.26.2", "@wdio/logger": "8.24.12", - "@wdio/types": "8.24.12", - "@wdio/utils": "8.24.12", + "@wdio/types": "8.26.2", + "@wdio/utils": "8.26.2", "deepmerge-ts": "^5.0.0", "expect-webdriverio": "^4.6.1", "gaze": "^1.1.2", - "webdriver": "8.24.12", - "webdriverio": "8.26.1" + "webdriver": "8.26.2", + "webdriverio": "8.26.2" }, "engines": { "node": "^16.13 || >=18" } }, "node_modules/@wdio/spec-reporter": { - "version": "8.24.12", - "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-8.24.12.tgz", - "integrity": "sha512-Ng3ErWK8eESamCYwIr2Uv49+46RvmT8FnmGaJ6irJoAp101K8zENEs1pyqYHJReucN+ka/wM87blfc2k8NEHCA==", + "version": "8.26.2", + "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-8.26.2.tgz", + "integrity": "sha512-GysWLoBukPNgxuXyobt7xPI776kW2NBsdvNYn8ECpYXWh7Of+ANSOGgGNWrN70Chct1NbGA5W4WwuDWcMeDDwg==", "dev": true, "dependencies": { - "@wdio/reporter": "8.24.12", - "@wdio/types": "8.24.12", + "@wdio/reporter": "8.26.2", + "@wdio/types": "8.26.2", "chalk": "^5.1.2", "easy-table": "^1.2.0", "pretty-ms": "^7.0.0" @@ -1368,9 +1368,9 @@ } }, "node_modules/@wdio/types": { - "version": "8.24.12", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.24.12.tgz", - "integrity": "sha512-SaD3OacDiW06DvSgAQ7sDBbpiI9qZRg7eoVYeBg3uSGVtUq84vTETRhhV7D6xTC00IqZu+mmN2TY5/q+7Gqy7w==", + "version": "8.26.2", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.26.2.tgz", + "integrity": "sha512-LBaoTr4jrPu9knQBN1/7BD3SLkaGoQPcbE3GKIxeaOu0fRMOtEr22HxoONahOlQDvyPoOBmSoZw8wUvIfwhrRw==", "dev": true, "dependencies": { "@types/node": "^20.1.0" @@ -1380,14 +1380,14 @@ } }, "node_modules/@wdio/utils": { - "version": "8.24.12", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.24.12.tgz", - "integrity": "sha512-uzwZyBVgqz0Wz1KL3aOUaQsxT8TNkzxti4NNTSMrU256qAPqc/n75rB7V73QASapCMpy70mZZTsuPgQYYj4ytQ==", + "version": "8.26.2", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.26.2.tgz", + "integrity": "sha512-QohaDMxsNunn6sWFBBtw2vSsoSfpbbjLAszW+iBLccpNGfRfHnaJ8HZ5gfsphMYnLfQe5lZRliIX5+8sSnjU1Q==", "dev": true, "dependencies": { "@puppeteer/browsers": "^1.6.0", "@wdio/logger": "8.24.12", - "@wdio/types": "8.24.12", + "@wdio/types": "8.26.2", "decamelize": "^6.0.0", "deepmerge-ts": "^5.1.0", "edgedriver": "^5.3.5", @@ -2456,9 +2456,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1233178", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1233178.tgz", - "integrity": "sha512-jmMfyaqlzddwmDaSR1AQ+5ek+f7rupZdxKuPdkRcoxrZoF70Idg/4dTgXA08TLPmwAwB54gh49Wm2l/gRM0eUg==", + "version": "0.0.1235375", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1235375.tgz", + "integrity": "sha512-MOMnfplVXEhcP7+W98NK8ZJtgoo2/A+s+FkIu9+TbSgWSZREVK5Ozh2qCQgRN4EPYMxiSJX09OoVJT+hGj4aTw==", "dev": true }, "node_modules/diff": { @@ -3887,6 +3887,43 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/got": { + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/got/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -8458,18 +8495,18 @@ } }, "node_modules/webdriver": { - "version": "8.24.12", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.24.12.tgz", - "integrity": "sha512-03DQIClHoaAqTsmDkxGwo4HwHfkn9LzJ1wfNyUerzKg8DnyXeiT6ILqj6EXLfsvh5zddU2vhYGLFXSerPgkuOQ==", + "version": "8.26.2", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.26.2.tgz", + "integrity": "sha512-3i+icym2m0EYRyJP9zbjoy2Npw3nNAK8iVC5VVo35lb9bFmyHoLsihxxsHnALgVRyBLahZV0Smh2dnVsePHOvw==", "dev": true, "dependencies": { "@types/node": "^20.1.0", "@types/ws": "^8.5.3", - "@wdio/config": "8.24.12", + "@wdio/config": "8.26.2", "@wdio/logger": "8.24.12", "@wdio/protocols": "8.24.12", - "@wdio/types": "8.24.12", - "@wdio/utils": "8.24.12", + "@wdio/types": "8.26.2", + "@wdio/utils": "8.26.2", "deepmerge-ts": "^5.1.0", "got": "^12.6.1", "ky": "^0.33.0", @@ -8479,61 +8516,24 @@ "node": "^16.13 || >=18" } }, - "node_modules/webdriver/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/webdriver/node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, "node_modules/webdriverio": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.26.1.tgz", - "integrity": "sha512-KnM92UPqk7FmPJpZf3krHrqn0ydjSdyAMn+i4uENxLBqm1OyQ12gSKtIatt8FOP9/C+UrFXATSOd+jRkU2xMkw==", + "version": "8.26.2", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.26.2.tgz", + "integrity": "sha512-kjSl3g6K0ieVt2np6dDJxsIb80kVKlKX6NNcBzQdAVrLcydRt4ibPa5oYalap9X2PgxA9I5Kae+ZTeM+d4f71w==", "dev": true, "dependencies": { "@types/node": "^20.1.0", - "@wdio/config": "8.24.12", + "@wdio/config": "8.26.2", "@wdio/logger": "8.24.12", "@wdio/protocols": "8.24.12", "@wdio/repl": "8.24.12", - "@wdio/types": "8.24.12", - "@wdio/utils": "8.24.12", + "@wdio/types": "8.26.2", + "@wdio/utils": "8.26.2", "archiver": "^6.0.0", "aria-query": "^5.0.0", "css-shorthand-properties": "^1.1.1", "css-value": "^0.0.1", - "devtools-protocol": "^0.0.1233178", + "devtools-protocol": "^0.0.1235375", "grapheme-splitter": "^1.0.2", "import-meta-resolve": "^4.0.0", "is-plain-obj": "^4.1.0", @@ -8545,7 +8545,7 @@ "resq": "^1.9.1", "rgb2hex": "0.2.5", "serialize-error": "^11.0.1", - "webdriver": "8.24.12" + "webdriver": "8.26.2" }, "engines": { "node": "^16.13 || >=18" diff --git a/tests/wdio/package.json b/tests/wdio/package.json index 0e57aaebe..4ae9982d4 100644 --- a/tests/wdio/package.json +++ b/tests/wdio/package.json @@ -6,10 +6,10 @@ "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@typescript-eslint/eslint-plugin": "^6.14.0", "@typescript-eslint/parser": "^6.14.0", - "@wdio/cli": "^8.26.1", - "@wdio/local-runner": "^8.26.1", - "@wdio/mocha-framework": "^8.24.12", - "@wdio/spec-reporter": "^8.24.12", + "@wdio/cli": "^8.26.2", + "@wdio/local-runner": "^8.26.2", + "@wdio/mocha-framework": "^8.26.2", + "@wdio/spec-reporter": "^8.26.2", "eslint": "^8.56.0", "eslint-config-google": "^0.14.0", "eslint-plugin-sonarjs": "^0.23.0", From 0fb07454018cad3b720aa933e0560c36b12f2e7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 15:49:42 +0100 Subject: [PATCH 015/131] core: bump github.com/go-openapi/strfmt from 0.21.9 to 0.21.10 (#7901) Bumps [github.com/go-openapi/strfmt](https://github.com/go-openapi/strfmt) from 0.21.9 to 0.21.10. - [Commits](https://github.com/go-openapi/strfmt/compare/v0.21.9...v0.21.10) --- updated-dependencies: - dependency-name: github.com/go-openapi/strfmt dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index e318eced1..c295495c8 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/go-http-utils/etag v0.0.0-20161124023236-513ea8f21eb1 github.com/go-ldap/ldap/v3 v3.4.6 github.com/go-openapi/runtime v0.26.2 - github.com/go-openapi/strfmt v0.21.9 + github.com/go-openapi/strfmt v0.21.10 github.com/golang-jwt/jwt v3.2.2+incompatible github.com/google/uuid v1.5.0 github.com/gorilla/handlers v1.5.2 @@ -49,7 +49,7 @@ require ( github.com/go-logr/logr v1.3.0 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/analysis v0.21.4 // indirect - github.com/go-openapi/errors v0.20.4 // indirect + github.com/go-openapi/errors v0.21.0 // indirect github.com/go-openapi/jsonpointer v0.20.0 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/loads v0.21.2 // indirect diff --git a/go.sum b/go.sum index ef95559d6..cc21d82de 100644 --- a/go.sum +++ b/go.sum @@ -98,8 +98,8 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre github.com/go-openapi/analysis v0.21.4 h1:ZDFLvSNxpDaomuCueM0BlSXxpANBlFYiBvr+GXrvIHc= github.com/go-openapi/analysis v0.21.4/go.mod h1:4zQ35W4neeZTqh3ol0rv/O8JBbka9QyAgQRPp9y3pfo= github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/errors v0.20.4 h1:unTcVm6PispJsMECE3zWgvG4xTiKda1LIR5rCRWLG6M= -github.com/go-openapi/errors v0.20.4/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= +github.com/go-openapi/errors v0.21.0 h1:FhChC/duCnfoLj1gZ0BgaBmzhJC2SL/sJr8a2vAobSY= +github.com/go-openapi/errors v0.21.0/go.mod h1:jxNTMUxRCKj65yb/okJGEtahVd7uvWnuWfj53bse4ho= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= @@ -116,8 +116,8 @@ github.com/go-openapi/spec v0.20.6/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6 github.com/go-openapi/spec v0.20.11 h1:J/TzFDLTt4Rcl/l1PmyErvkqlJDncGvPTMnCI39I4gY= github.com/go-openapi/spec v0.20.11/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg= -github.com/go-openapi/strfmt v0.21.9 h1:LnEGOO9qyEC1v22Bzr323M98G13paIUGPU7yeJtG9Xs= -github.com/go-openapi/strfmt v0.21.9/go.mod h1:0k3v301mglEaZRJdDDGSlN6Npq4VMVU69DE0LUyf7uA= +github.com/go-openapi/strfmt v0.21.10 h1:JIsly3KXZB/Qf4UzvzJpg4OELH/0ASDQsyk//TTBDDk= +github.com/go-openapi/strfmt v0.21.10/go.mod h1:vNDMwbilnl7xKiO/Ve/8H8Bb2JIInBnH+lqiw6QWgis= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= From 4a8fb8e14d20296cf8436b483d902411e93a58d9 Mon Sep 17 00:00:00 2001 From: vherrlein Date: Mon, 18 Dec 2023 15:50:20 +0100 Subject: [PATCH 016/131] website/docs: add SharePoint Subscription Edition Integration (#7358) Co-authored-by: Marc 'risson' Schmitt Co-authored-by: Tana M Berry --- .../services/sharepoint-se/index.md | 376 ++++++++++++++++++ website/sidebarsIntegrations.js | 1 + 2 files changed, 377 insertions(+) create mode 100644 website/integrations/services/sharepoint-se/index.md diff --git a/website/integrations/services/sharepoint-se/index.md b/website/integrations/services/sharepoint-se/index.md new file mode 100644 index 000000000..1ec243598 --- /dev/null +++ b/website/integrations/services/sharepoint-se/index.md @@ -0,0 +1,376 @@ +--- +title: SharePoint Server SE +--- + +Support level: Community + +## What is Microsoft SharePoint + +> SharePoint is a proprietary, web-based collaborative platform that integrates natively with Microsoft 365. +> +> Launched in 2001, SharePoint is primarily sold as a document management and storage system, although it is also used for sharing information through an intranet, implementing internal applications, and for implementing business processes. +> +> -- https://en.wikipedia.org/wiki/SharePoint + +> Organizations use Microsoft SharePoint to create websites. +> +> You can use it as a secure place to store, organize, share, and access information from any device. +> All you need is a web browser, such as Microsoft Edge, Internet Explorer, Chrome, or Firefox. +> +> -- https://support.microsoft.com/en-us/office/what-is-sharepoint-97b915e6-651b-43b2-827d-fb25777f446f + +:::note +There are many ways to implement SSO mechanism within Microsoft SharePoint Server Subscription Edition. + +These guidelines provides the procedure to integrate authentik with an OIDC provider based on Microsoft documentation. +(cf. https://learn.microsoft.com/en-us/sharepoint/security-for-sharepoint-server/set-up-oidc-auth-in-sharepoint-server-with-msaad) + +In addition, it provides the procedure to enable claims augmentations in order to resolve group memberships. + +For all other integration models, read Microsoft official documentation. +(cf. https://learn.microsoft.com/en-us/sharepoint/security-for-sharepoint-server/plan-user-authentication) +::: + +:::caution +This setup only works starting with **authentik** version **2023.10** and Microsoft **SharePoint** Subscription Edition starting with the **Cumulative Updates** of **September 2023**. +::: + +## Preparation + +When you configure OIDC with authentik, you need the following resources: + +1. A SharePoint Server Subscription Edition farm starting with CU of September 2023 +2. An authentik instance starting with version 2023.10 +3. (Optional) [LDAPCP](https://www.ldapcp.com/docs/overview/introduction/) installed on the target SharePoint farm + +:::info +Ensure that the authentik and SharePoint Server clocks are synchronized. +::: + +These guidelines use the following placeholders for the overall setup: + +| Name | Placeholder | Sample value | +| -------------------------------------------------- | ------------------------------------ | -------------------------------------------------------------------------------------- | +| authentik Application Name | `auth.applicationName` | SharePoint SE | +| authentik Application Slug | `auth.applicationSlug` | sharepoint-se | +| authentik OIDC Name | `auth.providerName` | OIDC-SP | +| authentik OIDC Configuration URL | `auth.providerConfigURL` | https://authentik.company/application/o/sharepoint-se/.well-known/openid-configuration | +| authentik OIDC Client ID | `auth.providerClientID` | 0ab1c234d567ef8a90123bc4567890e12fa3b45c | +| authentik OIDC Redirect URIs | `auth.providerRedirectURI` | https://sharepoint.company/.\* | +| (Optional) authentik LDAP Outpost URI | `ldap.outpostURI` | ak-outpost-ldap.authentik.svc.cluster.local | +| (Optional) authentik LDAP Service Account | `ldap.outpostServiceAccount` | cn=ldapservice,ou=users,dc=ldap,dc=goauthentik,dc=io | +| (Optional) authentik LDAP Service Account Password | `ldap.outpostServiceAccountPassword` | mystrongpassword | +| SharePoint Default Web Application URL | `sp.webAppURL` | https://sharepoint.company | +| SharePoint Trusted Token Issuer Name | `sp.issuerName` | Authentik | +| SharePoint Trusted Token Issuer Description | `sp.issuerDesc` | authentik IDP | + +## authentik configuration + +### Step 1: Create authentik OpenID Property Mappings + +SharePoint requires additional properties within the OpenID and profile scopes in order to operate OIDC properly and be able to map incoming authentik OID Claims with Microsoft Claims. + +Additional information from Microsoft documentation: + +- https://learn.microsoft.com/en-us/entra/identity-platform/id-tokens#validate-tokens +- https://learn.microsoft.com/en-us/entra/identity-platform/id-token-claims-reference#payload-claims + +#### Add an OpenID scope mapping for SharePoint + +From the authentik Admin Dashboard: + +1. Open **Customisation > Property Mappings** page from the sidebar. +2. Click **Create** from the property mapping list command bar. +3. Within the new property mapping form, select **Scope Mapping**. +4. Click **Next** and enter the following values: + - **Name**: SPopenid + - **Scope name**: openid + - **Expression**: + +```python +return { + "nbf": "0", # Identifies the time before which the JWT can't be accepted for processing. + # 0 stand for the date 1970-01-01 in unix timestamp + "oid": user.uid, # This ID uniquely identifies the user across applications - two different applications signing in the same user receives the same value in the oid claim. + "upn": user.username # (Optional) User Principal Name, used for troubleshooting within JWT tokens or to setup SharePoint like ADFS +} +``` + +5. Click **Finish**. + +#### Add a profile scope mapping for SharePoint + +From the authentik Admin Dashboard: + +1. Open **Customisation > Property Mappings** page from the sidebar. +2. Click **Create** from the property mapping list command bar. +3. Within the new property mapping form, select **Scope Mapping**. +4. Click **Next** and enter the following values: + - **Name**: SPprofile + - **Scope name**: profile + - **Expression**: + +```python +return { + "name": request.user.name, # The name claim provides a human-readable value that identifies the subject of the token. + "given_name": request.user.name, # Interoperability with Microsoft Entra ID + "unique_name": request.user.name, # (Optional) Used for troubleshooting within JWT tokens or to setup SharePoint like ADFS + "preferred_username": request.user.username, # (Optional) The primary username that represents the user. + "nickname": request.user.username, # (Optional) Used for troubleshooting within JWT tokens or to setup SharePoint like ADFS + "roles": [group.name for group in request.user.ak_groups.all()], # The set of roles that were assigned to the user who is logging in. +} +``` + +5. Click **Finish**. + +### Step 2: Create authentik Open ID Connect Provider + +From the authentik Admin Dashboard: + +1. Open **Applications > Providers** page from the sidebar. +2. Click **Create** from the provider list command bar. +3. Within the new provider form, select **OAuth2/OpenID Provider**. +4. Click **Next** and enter the following values: + - **Name**: `auth.providerName` + - **Authentication flow**: default-authentication-flow + - **Authorization flow**: default-provider-authorization-implicit-consent + :::note + use the explicit flow if user consents are required + ::: + - **Redirect URIs / Origins**: `auth.providerRedirectURI` + - **Signing Key**: authentik Self-signed Certificate + :::note + The certificate is used for signing JWT tokens;, if you change it after the integration do not forget to update your SharePoint Trusted Certificate. + ::: + - **Access code validity**: minutes=5 + :::note + The minimum is 5 minutes, otherwise SharePoint backend might consider the access code expired. + ::: + - **Access Token validity**: minutes=15 + :::note + The minimum is 15 minutes, otherwise SharePoint backend will consider the access token expired. + ::: + - **Scopes**: select default email, SPopenid and SPprofile + - **Subject mode**: Based on the User's hashed ID +5. Click **Finish**. + +### Step 3: Create an application in authentik + +From the authentik Admin Dashboard: + +1. Open **Applications > Applications** page from the sidebar. +2. Click **Create** from the application list command bar. +3. Within the new application form, enter the following values: + - **Name**: `auth.applicationName` + - **Slug**: `auth.applicationSlug` + - **Provider**: `auth.providerName` + - (Optional) **Launch URL**: `sp.webAppURL` + - (Optional) **Icon**: https://res-1.cdn.office.net/files/fabric-cdn-prod_20221209.001/assets/brand-icons/product/svg/sharepoint_48x1.svg +4. Click **Create**. + +### Step 4: Setup OIDC authentication in SharePoint Server + +#### Pre-requisites + +##### Update SharePoint farm properties + +The following PowerShell script must be updated according to your environment and executed as **Farm Admin account** with **elevated privileges** on a SharePoint Server. + +:::caution + +- Update placeholders +- Read all script's comments + +::: + +```PowerShell +Add-PSSnapin microsoft.sharepoint.powershell + +# Setup farm properties to work with OIDC +$cert = New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -Provider 'Microsoft Enhanced RSA and AES Cryptographic Provider' -Subject "CN=SharePoint Cookie Cert" +$rsaCert = [System.Security.Cryptography.X509Certificates.RSACertificateExtensions]::GetRSAPrivateKey($cert) +$fileName = $rsaCert.key.UniqueName + +#If you have multiple SharePoint servers in the farm, you need to export certificate by Export-PfxCertificate and import certificate to all other SharePoint servers in the farm by Import-PfxCertificate and apply the same permissions as below. + +#After certificate is successfully imported to SharePoint Server, we will need to grant access permission to certificate private key. + +$path = "$env:ALLUSERSPROFILE\Microsoft\Crypto\RSA\MachineKeys\$fileName" +$permissions = Get-Acl -Path $path + +#Please replace the with the real application pool account of your web application. +$access_rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$($env:computername)\WSS_WPG", 'Read', 'None', 'None', 'Allow') +$permissions.AddAccessRule($access_rule) +Set-Acl -Path $path -AclObject $permissions + +#Then we update farm properties only once. +$f = Get-SPFarm +$f.Farm.Properties['SP-NonceCookieCertificateThumbprint']=$cert.Thumbprint +$f.Farm.Properties['SP-NonceCookieHMACSecretKey']='seed' +$f.Farm.Update() +``` + +##### SharePoint settings in case of SSL offloading + +Update the SharePoint farm to accept OAuth authentication over HTTP. + +The following PowerShell script must be updated according to your environment and executed as **Farm Admin account** with **elevated privileges** on a SharePoint Server. + +```PowerShell +Add-PSSnapin microsoft.sharepoint.powershell +$c = get-spsecuritytokenserviceconfig +$c.AllowOAuthOverHttp = $true +$c.update() +``` + +#### Create SharePoint authentication provider + +The following PowerShell script must be updated according to your environment and executed as **Farm Admin account** with **elevated privileges** on a SharePoint Server. + +:::caution + +- Update placeholders +- Read all script's comments. + +::: + +```PowerShell +Add-PSSnapin microsoft.sharepoint.powershell + +# OIDC Settings +$metadataendpointurl = "auth.providerConfigURL" +$clientIdentifier = "auth.providerClientID" +$trustedTokenIssuerName = "sp.issuerName" +$trustedTokenIssuerDescription = "sp.issuerDesc" + +# OIDC Claims Mapping +## Identity claim: oid => defined within the Authentik scope mapping +$idClaim = New-SPClaimTypeMapping "http://schemas.microsoft.com/identity/claims/objectidentifier" -IncomingClaimTypeDisplayName "oid" -SameAsIncoming + +## User claims mappings +$claims = @( + $idClaim + ## User Roles (Group membership) + ,(New-SPClaimTypeMapping ([System.Security.Claims.ClaimTypes]::Role) -IncomingClaimTypeDisplayName "Role" -SameAsIncoming) + ## User email + ,(New-SPClaimTypeMapping ([System.Security.Claims.ClaimTypes]::Email) -IncomingClaimTypeDisplayName "Email" -SameAsIncoming) + ## User given_name + ,(New-SPClaimTypeMapping ([System.Security.Claims.ClaimTypes]::GivenName) -IncomingClaimTypeDisplayName "GivenName" -SameAsIncoming ) + ## (Optional) User account name + #,(New-SPClaimTypeMapping ([System.Security.Claims.ClaimTypes]::NameIdentifier) -IncomingClaimTypeDisplayName "Username" -SameAsIncoming) + +) + +# Trust 3rd party identity token issuer +$trustedTokenIssuer = New-SPTrustedIdentityTokenIssuer -Name $trustedTokenIssuerName -Description $trustedTokenIssuerDescription -ClaimsMappings $claims -IdentifierClaim $idClaim.InputClaimType -DefaultClientIdentifier $clientIdentifier -MetadataEndPoint $metadataendpointurl -Scope "openid email profile" +#Note: Remove the profile scope if you plan to use the LDAPCP claims augmentation. + +# Create the SharePoint authentication provider based on the trusted token issuer +New-SPAuthenticationProvider -TrustedIdentityTokenIssuer $trustedTokenIssuer + +``` + +#### Configure SharePoint web applications + +From the Central Administration opened as a Farm Administrator: + +1. Open the **Application Management > Manage web applications** page. +2. Select your web application `sp.webAppURL`. +3. Click **Authentication Providers** from the ribbon bar. +4. According to your environment, click on the target zone such as "Default". +5. Update the authentication provider form as following: + - Check **Trusted Identity Provider** + - Check the newly created provider named `sp.issuerName` + - (Optional) Set **Custom Sign In Page**: /\_trust/default.aspx +6. Click **Save**. + +Repeat all steps for each target web applications that matches with `auth.providerRedirectURI`. + +## (Optional) SharePoint enhancements + +Objectives : + +- Integrate SharePoint People Picker with authentik to search users and groups +- Augment SharePoint user claims at login stage +- Resolve user's membership + +:::caution +[LDAPCP](https://www.ldapcp.com/docs/overview/introduction/) must be installed on the target SharePoint farm. +::: + +### Step 1: Assign LDAPCP as claim provider for the identity token issuer + +The following PowerShell script must be updated according to your environment and executed as **Farm Admin account** with **elevated privileges** on a SharePoint Server. + +:::caution + +- Update placeholders +- Read all script's comments + +::: + +```PowerShell +Add-PSSnapin microsoft.sharepoint.powershell +$trustedTokenIssuerName = "sp.issuerName" + +$sptrust = Get-SPTrustedIdentityTokenIssuer $trustedTokenIssuerName +$sptrust.ClaimProviderName = "LDAPCP" +$sptrust.Update() +``` + +### Step 2: Configure LDAPCP claim types + +From the SharePoint Central Administration opened as a Farm Administrator: + +1. Open **Security > LDAPCP Configuration > Claim types configuration** page. +2. Update the mapping table to match these value: + +| Claim type | Entity type | LDAP class | LDAP Attribute to query | LDAP attribute to display | PickerEntity metadata | +| ------------------------------------------------------------- | ----------- | ---------- | ----------------------- | ------------------------- | --------------------- | +| http://schemas.microsoft.com/identity/claims/objectidentifier | User | user | uid | sn | UserId | +| LDAP attribute linked to the main mapping for object User | User | user | mail | | Email | +| LDAP attribute linked to the main mapping for object User | User | user | sn | | DisplayName | +| http://schemas.microsoft.com/ws/2008/06/identity/claims/role | Group | group | cn | | DisplayName | +| LDAP attribute linked to the main mapping for object Group | Group | group | uid | | SPGroupID | + +### Step 3: Create an authentik LDAP Outpost + +From the authentik Admin Dashboard: + +:::note +The following procedure apply to an authentik deployment within Kubernetes. + +For other kinds of deployment, please refer to the [authentik documentation](https://goauthentik.io/docs/). +::: + +1. Follow authentik [LDAP Provider Generic Setup](https://version-2023-10.goauthentik.io/docs/providers/ldap/generic_setup) with the following steps : + - **Create User/Group** to create a "service account" for `ldap.outpostServiceAccount` and a searchable group of users & groups + - **LDAP Flow** to create the authentication flow for the LDAP Provider + - **LDAP Provider** to create an LDAP provider which can be consumed by the LDAP Application +2. Open **Applications > Applications** page from the sidebar. +3. Open the edit form of your application `auth.applicationName`. +4. In the edit form: + - **Backchannel Providers**: add the LDAP provider previously created +5. Click **Update**. + +### Step 4: Configure LDAPCP global configuration + +From the SharePoint Central Administration opened as a Farm Administrator: + +1. Open the **Security > LDAPCP Configuration > Global configuration** page. +2. Add an LDAP connection with th following properties: + - **LDAP Path**: LDAP://`ldap.outpostURI`/dc=ldap,dc=goauthentik,dc=io + - **Username**: `ldap.outpostServiceAccount` + - **Password**: `ldap.outpostServiceAccountPassword` + - **Authentication types**: check ServerBind +3. Augmentation - Check **Enable augmentation** +4. Augmentation - Select the Role claim "http://schemas.microsoft.com/ws/2008/06/identity/claims/role" +5. Augmentation - Check only "**Query this server**" for your `ldap.outpostURI` +6. User identifier properties: + - **LDAP class**: user + - **LDAP attribute**: uid +7. Display of user identifier results: + - Tick **Show the value of another LDAP attribute**: sn +8. Click on "**OK**" + +_Note: The `ldap.outpostURI` should be the IP, hostname, or FQDN of the LDAP Outpost service deployed accessible by your SharePoint farm_. diff --git a/website/sidebarsIntegrations.js b/website/sidebarsIntegrations.js index 22b65ab22..3735e3b32 100644 --- a/website/sidebarsIntegrations.js +++ b/website/sidebarsIntegrations.js @@ -32,6 +32,7 @@ module.exports = { "services/paperless-ng/index", "services/rocketchat/index", "services/roundcube/index", + "services/sharepoint-se/index", "services/vikunja/index", "services/wekan/index", "services/wiki-js/index", From d3cbe261069269fe77a33d29394654f45635e7f9 Mon Sep 17 00:00:00 2001 From: Ken Sternberg <133134217+kensternberg-authentik@users.noreply.github.com> Date: Mon, 18 Dec 2023 06:57:39 -0800 Subject: [PATCH 017/131] web: fix storybook build after npm update (#7855) * web: fix storybookbuild build after npm update This commit follows the [patch for Turnstile](https://github.com/goauthentik/authentik/pull/7854) and performs a similar operation for the Storybook build, which failed after the latest `npm audit` and `npm update` passes. [This patch to Vite](https://github.com/vitejs/vite/pull/10762) fixes a problem with the Vite build in that Vite could not resolve if a CSS import was strictly at the module level or if it was necessary to include the imported CSS at the document level. The fix is to hack a query, `?inline`, to the end of the import string, to indicate that it's a module-only import. The Storybook for Web Components build recommended by the Open Webcomponent Consortium is a Storybook-Vite implementation. The latest update fully deprecated undecorated CSS imports, and Storybook broke, unable to reconcile the CSS imports. This patch inlines the inlining of the CSS automatically for Storybook by using the Rollup `modify()` plug-in which performs string substitutions on the source code before it's presented to the compiler and bundler; it recognizes the strings that require inlining, those that match the regex: ``` JavaScript /^(import \w+ from .*\.css)";/ ``` ... and replaces them with a version ending in `.css?inline`. Because the actual recognizer inside `modify()` recognizes strings and not regular expressions, a script to build the strings has been added to the `scripts` folder. Just like locales, you will have to re-run and re-build `build-storybook-import-maps` script if you add a new CSS file to the source tree. * web: prettier had opinions * web: apply eslint + sonarjs check to the scripts folder. * Google recaptcha (aka Turnstile) doesn't understand the "invisible" setting; that's purely an HCaptcha thing. * web: removing the typecast means I no longer need the type. * web: prettier is still having opinions, dammit. --- web/.storybook/css-import-maps.ts | 129 +++++++++++++++++++++ web/.storybook/main.ts | 10 +- web/package-lock.json | 52 +++++++++ web/package.json | 6 +- web/scripts/build-storybook-import-maps.ts | 84 ++++++++++++++ 5 files changed, 277 insertions(+), 4 deletions(-) create mode 100644 web/.storybook/css-import-maps.ts create mode 100644 web/scripts/build-storybook-import-maps.ts diff --git a/web/.storybook/css-import-maps.ts b/web/.storybook/css-import-maps.ts new file mode 100644 index 000000000..13b55284e --- /dev/null +++ b/web/.storybook/css-import-maps.ts @@ -0,0 +1,129 @@ +// THIS IS A GENERATED FILE. DO NOT EDIT BY HAND. +// +// This file is generated by the build-storybook-import-maps script in the UI's base directory. +// This is a *hack* to work around an inconsistency in the way rollup, vite, and storybook +// import CSS modules. +// +// Sometime around 2030 or so, the Javascript community may finally get its collective act together +// and we'll have one unified way of doing this. I can only hope. + +export const cssImportMaps = { + 'import AKGlobal from "@goauthentik/common/styles/authentik.css";': + 'import AKGlobal from "@goauthentik/common/styles/authentik.css?inline";', + 'import PFAlert from "@patternfly/patternfly/components/Alert/alert.css";': + 'import PFAlert from "@patternfly/patternfly/components/Alert/alert.css?inline";', + 'import PFAlertGroup from "@patternfly/patternfly/components/AlertGroup/alert-group.css";': + 'import PFAlertGroup from "@patternfly/patternfly/components/AlertGroup/alert-group.css?inline";', + 'import PFAvatar from "@patternfly/patternfly/components/Avatar/avatar.css";': + 'import PFAvatar from "@patternfly/patternfly/components/Avatar/avatar.css?inline";', + 'import PFBackdrop from "@patternfly/patternfly/components/Backdrop/backdrop.css";': + 'import PFBackdrop from "@patternfly/patternfly/components/Backdrop/backdrop.css?inline";', + 'import PFBackgroundImage from "@patternfly/patternfly/components/BackgroundImage/background-image.css";': + 'import PFBackgroundImage from "@patternfly/patternfly/components/BackgroundImage/background-image.css?inline";', + 'import PFBanner from "@patternfly/patternfly/components/Banner/banner.css";': + 'import PFBanner from "@patternfly/patternfly/components/Banner/banner.css?inline";', + 'import PFBase from "@patternfly/patternfly/patternfly-base.css";': + 'import PFBase from "@patternfly/patternfly/patternfly-base.css?inline";', + 'import PFBrand from "@patternfly/patternfly/components/Brand/brand.css";': + 'import PFBrand from "@patternfly/patternfly/components/Brand/brand.css?inline";', + 'import PFBullseye from "@patternfly/patternfly/layouts/Bullseye/bullseye.css";': + 'import PFBullseye from "@patternfly/patternfly/layouts/Bullseye/bullseye.css?inline";', + 'import PFButton from "@patternfly/patternfly/components/Button/button.css";': + 'import PFButton from "@patternfly/patternfly/components/Button/button.css?inline";', + 'import PFCard from "@patternfly/patternfly/components/Card/card.css";': + 'import PFCard from "@patternfly/patternfly/components/Card/card.css?inline";', + 'import PFCheck from "@patternfly/patternfly/components/Check/check.css";': + 'import PFCheck from "@patternfly/patternfly/components/Check/check.css?inline";', + 'import PFChip from "@patternfly/patternfly/components/Chip/chip.css";': + 'import PFChip from "@patternfly/patternfly/components/Chip/chip.css?inline";', + 'import PFChipGroup from "@patternfly/patternfly/components/ChipGroup/chip-group.css";': + 'import PFChipGroup from "@patternfly/patternfly/components/ChipGroup/chip-group.css?inline";', + 'import PFContent from "@patternfly/patternfly/components/Content/content.css";': + 'import PFContent from "@patternfly/patternfly/components/Content/content.css?inline";', + 'import PFDataList from "@patternfly/patternfly/components/DataList/data-list.css";': + 'import PFDataList from "@patternfly/patternfly/components/DataList/data-list.css?inline";', + 'import PFDescriptionList from "@patternfly/patternfly/components/DescriptionList/description-list.css";': + 'import PFDescriptionList from "@patternfly/patternfly/components/DescriptionList/description-list.css?inline";', + 'import PFDisplay from "@patternfly/patternfly/utilities/Display/display.css";': + 'import PFDisplay from "@patternfly/patternfly/utilities/Display/display.css?inline";', + 'import PFDrawer from "@patternfly/patternfly/components/Drawer/drawer.css";': + 'import PFDrawer from "@patternfly/patternfly/components/Drawer/drawer.css?inline";', + 'import PFDropdown from "@patternfly/patternfly/components/Dropdown/dropdown.css";': + 'import PFDropdown from "@patternfly/patternfly/components/Dropdown/dropdown.css?inline";', + 'import PFEmptyState from "@patternfly/patternfly/components/EmptyState/empty-state.css";': + 'import PFEmptyState from "@patternfly/patternfly/components/EmptyState/empty-state.css?inline";', + 'import PFExpandableSection from "@patternfly/patternfly/components/ExpandableSection/expandable-section.css";': + 'import PFExpandableSection from "@patternfly/patternfly/components/ExpandableSection/expandable-section.css?inline";', + 'import PFFAIcons from "@patternfly/patternfly/base/patternfly-fa-icons.css";': + 'import PFFAIcons from "@patternfly/patternfly/base/patternfly-fa-icons.css?inline";', + 'import PFFlex from "@patternfly/patternfly/layouts/Flex/flex.css";': + 'import PFFlex from "@patternfly/patternfly/layouts/Flex/flex.css?inline";', + 'import PFForm from "@patternfly/patternfly/components/Form/form.css";': + 'import PFForm from "@patternfly/patternfly/components/Form/form.css?inline";', + 'import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";': + 'import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css?inline";', + 'import PFGallery from "@patternfly/patternfly/layouts/Gallery/gallery.css";': + 'import PFGallery from "@patternfly/patternfly/layouts/Gallery/gallery.css?inline";', + 'import PFGlobal from "@patternfly/patternfly/patternfly-base.css";': + 'import PFGlobal from "@patternfly/patternfly/patternfly-base.css?inline";', + 'import PFGrid from "@patternfly/patternfly/layouts/Grid/grid.css";': + 'import PFGrid from "@patternfly/patternfly/layouts/Grid/grid.css?inline";', + 'import PFHint from "@patternfly/patternfly/components/Hint/hint.css";': + 'import PFHint from "@patternfly/patternfly/components/Hint/hint.css?inline";', + 'import PFInputGroup from "@patternfly/patternfly/components/InputGroup/input-group.css";': + 'import PFInputGroup from "@patternfly/patternfly/components/InputGroup/input-group.css?inline";', + 'import PFLabel from "@patternfly/patternfly/components/Label/label.css";': + 'import PFLabel from "@patternfly/patternfly/components/Label/label.css?inline";', + 'import PFList from "@patternfly/patternfly/components/List/list.css";': + 'import PFList from "@patternfly/patternfly/components/List/list.css?inline";', + 'import PFLogin from "@patternfly/patternfly/components/Login/login.css";': + 'import PFLogin from "@patternfly/patternfly/components/Login/login.css?inline";', + 'import PFModalBox from "@patternfly/patternfly/components/ModalBox/modal-box.css";': + 'import PFModalBox from "@patternfly/patternfly/components/ModalBox/modal-box.css?inline";', + 'import PFNav from "@patternfly/patternfly/components/Nav/nav.css";': + 'import PFNav from "@patternfly/patternfly/components/Nav/nav.css?inline";', + 'import PFNotificationBadge from "@patternfly/patternfly/components/NotificationBadge/notification-badge.css";': + 'import PFNotificationBadge from "@patternfly/patternfly/components/NotificationBadge/notification-badge.css?inline";', + 'import PFNotificationDrawer from "@patternfly/patternfly/components/NotificationDrawer/notification-drawer.css";': + 'import PFNotificationDrawer from "@patternfly/patternfly/components/NotificationDrawer/notification-drawer.css?inline";', + 'import PFPage from "@patternfly/patternfly/components/Page/page.css";': + 'import PFPage from "@patternfly/patternfly/components/Page/page.css?inline";', + 'import PFPagination from "@patternfly/patternfly/components/Pagination/pagination.css";': + 'import PFPagination from "@patternfly/patternfly/components/Pagination/pagination.css?inline";', + 'import PFProgressStepper from "@patternfly/patternfly/components/ProgressStepper/progress-stepper.css";': + 'import PFProgressStepper from "@patternfly/patternfly/components/ProgressStepper/progress-stepper.css?inline";', + 'import PFRadio from "@patternfly/patternfly/components/Radio/radio.css";': + 'import PFRadio from "@patternfly/patternfly/components/Radio/radio.css?inline";', + 'import PFSelect from "@patternfly/patternfly/components/Select/select.css";': + 'import PFSelect from "@patternfly/patternfly/components/Select/select.css?inline";', + 'import PFSidebar from "@patternfly/patternfly/components/Sidebar/sidebar.css";': + 'import PFSidebar from "@patternfly/patternfly/components/Sidebar/sidebar.css?inline";', + 'import PFSizing from "@patternfly/patternfly/utilities/Sizing/sizing.css";': + 'import PFSizing from "@patternfly/patternfly/utilities/Sizing/sizing.css?inline";', + 'import PFSpacing from "@patternfly/patternfly/utilities/Spacing/spacing.css";': + 'import PFSpacing from "@patternfly/patternfly/utilities/Spacing/spacing.css?inline";', + 'import PFSpinner from "@patternfly/patternfly/components/Spinner/spinner.css";': + 'import PFSpinner from "@patternfly/patternfly/components/Spinner/spinner.css?inline";', + 'import PFStack from "@patternfly/patternfly/layouts/Stack/stack.css";': + 'import PFStack from "@patternfly/patternfly/layouts/Stack/stack.css?inline";', + 'import PFSwitch from "@patternfly/patternfly/components/Switch/switch.css";': + 'import PFSwitch from "@patternfly/patternfly/components/Switch/switch.css?inline";', + 'import PFTable from "@patternfly/patternfly/components/Table/table.css";': + 'import PFTable from "@patternfly/patternfly/components/Table/table.css?inline";', + 'import PFTabs from "@patternfly/patternfly/components/Tabs/tabs.css";': + 'import PFTabs from "@patternfly/patternfly/components/Tabs/tabs.css?inline";', + 'import PFTitle from "@patternfly/patternfly/components/Title/title.css";': + 'import PFTitle from "@patternfly/patternfly/components/Title/title.css?inline";', + 'import PFToggleGroup from "@patternfly/patternfly/components/ToggleGroup/toggle-group.css";': + 'import PFToggleGroup from "@patternfly/patternfly/components/ToggleGroup/toggle-group.css?inline";', + 'import PFToolbar from "@patternfly/patternfly/components/Toolbar/toolbar.css";': + 'import PFToolbar from "@patternfly/patternfly/components/Toolbar/toolbar.css?inline";', + 'import PFTreeView from "@patternfly/patternfly/components/TreeView/tree-view.css";': + 'import PFTreeView from "@patternfly/patternfly/components/TreeView/tree-view.css?inline";', + 'import PFWizard from "@patternfly/patternfly/components/Wizard/wizard.css";': + 'import PFWizard from "@patternfly/patternfly/components/Wizard/wizard.css?inline";', + 'import ThemeDark from "@goauthentik/common/styles/theme-dark.css";': + 'import ThemeDark from "@goauthentik/common/styles/theme-dark.css?inline";', + 'import styles from "./LibraryPageImpl.css";': + 'import styles from "./LibraryPageImpl.css?inline";', +}; diff --git a/web/.storybook/main.ts b/web/.storybook/main.ts index e6583e476..c3f042282 100644 --- a/web/.storybook/main.ts +++ b/web/.storybook/main.ts @@ -1,9 +1,12 @@ import replace from "@rollup/plugin-replace"; import type { StorybookConfig } from "@storybook/web-components-vite"; import { cwd } from "process"; +import modify from "rollup-plugin-modify"; import postcssLit from "rollup-plugin-postcss-lit"; import tsconfigPaths from "vite-tsconfig-paths"; +import { cssImportMaps } from "./css-import-maps"; + export const isProdBuild = process.env.NODE_ENV === "production"; export const apiBasePath = process.env.AK_API_BASE_PATH || ""; @@ -27,9 +30,7 @@ const config: StorybookConfig = { return { ...config, plugins: [ - ...config.plugins, - postcssLit(), - tsconfigPaths(), + modify(cssImportMaps), replace({ "process.env.NODE_ENV": JSON.stringify( isProdBuild ? "production" : "development", @@ -38,6 +39,9 @@ const config: StorybookConfig = { "process.env.AK_API_BASE_PATH": JSON.stringify(apiBasePath), "preventAssignment": true, }), + ...config.plugins, + postcssLit(), + tsconfigPaths(), ], }; }, diff --git a/web/package-lock.json b/web/package-lock.json index 982d2090f..08a019f30 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -93,6 +93,7 @@ "rollup": "^4.9.1", "rollup-plugin-copy": "^3.5.0", "rollup-plugin-cssimport": "^1.0.3", + "rollup-plugin-modify": "^3.0.0", "rollup-plugin-postcss-lit": "^2.1.0", "storybook": "^7.6.5", "storybook-addon-mock": "^4.3.0", @@ -14942,6 +14943,38 @@ "node": ">=8" } }, + "node_modules/ospec": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ospec/-/ospec-3.1.0.tgz", + "integrity": "sha512-+nGtjV3vlADp+UGfL51miAh/hB4awPBkQrArhcgG4trAaoA2gKt5bf9w0m9ch9zOr555cHWaCHZEDiBOkNZSxw==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "ospec": "bin/ospec" + } + }, + "node_modules/ospec/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -16376,6 +16409,25 @@ "node": ">= 8.0.0" } }, + "node_modules/rollup-plugin-modify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-modify/-/rollup-plugin-modify-3.0.0.tgz", + "integrity": "sha512-p/ffs0Y2jz2dEnWjq1oVC7SY37tuS+aP7whoNaQz1EAAOPg+k3vKJo8cMMWx6xpdd0NzhX4y2YF9o/NPu5YR0Q==", + "dev": true, + "dependencies": { + "magic-string": "0.25.2", + "ospec": "3.1.0" + } + }, + "node_modules/rollup-plugin-modify/node_modules/magic-string": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz", + "integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, "node_modules/rollup-plugin-postcss-lit": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/rollup-plugin-postcss-lit/-/rollup-plugin-postcss-lit-2.1.0.tgz", diff --git a/web/package.json b/web/package.json index 39fac3dcc..666077e8f 100644 --- a/web/package.json +++ b/web/package.json @@ -28,7 +28,10 @@ "tsc:execute": "tsc --noEmit -p .", "tsc": "run-s build-locales tsc:execute", "storybook": "storybook dev -p 6006", - "storybook:build": "cross-env NODE_OPTIONS='--max_old_space_size=4096' storybook build" + "storybook:build": "cross-env NODE_OPTIONS='--max_old_space_size=4096' storybook build", + "storybook:build-import-map": "run-s storybook:build-import-map-script storybook:run-import-map-script", + "storybook:build-import-map-script": "cd scripts && tsc --esModuleInterop --module es2020 --target es2020 --moduleResolution 'node' build-storybook-import-maps.ts && mv build-storybook-import-maps.js build-storybook-import-maps.mjs", + "storybook:run-import-map-script": "node scripts/build-storybook-import-maps.mjs" }, "dependencies": { "@codemirror/lang-html": "^6.4.7", @@ -115,6 +118,7 @@ "rollup": "^4.9.1", "rollup-plugin-copy": "^3.5.0", "rollup-plugin-cssimport": "^1.0.3", + "rollup-plugin-modify": "^3.0.0", "rollup-plugin-postcss-lit": "^2.1.0", "storybook": "^7.6.5", "storybook-addon-mock": "^4.3.0", diff --git a/web/scripts/build-storybook-import-maps.ts b/web/scripts/build-storybook-import-maps.ts new file mode 100644 index 000000000..121ad105f --- /dev/null +++ b/web/scripts/build-storybook-import-maps.ts @@ -0,0 +1,84 @@ +import fs from "fs"; +import path from "path"; +import { fileURLToPath } from "url"; + +const __dirname = fileURLToPath(new URL(".", import.meta.url)); + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function* walkFilesystem(dir: string): Generator { + const openeddir = fs.opendirSync(dir); + if (!openeddir) { + return; + } + + let d: fs.Dirent | null; + while ((d = openeddir?.readSync())) { + if (!d) { + break; + } + const entry = path.join(dir, d.name); + if (d.isDirectory()) yield* walkFilesystem(entry); + else if (d.isFile()) yield entry; + } + openeddir.close(); +} + +const import_re = /^(import \w+ from .*\.css)";/; +function extractImportLinesFromFile(path: string) { + const source = fs.readFileSync(path, { encoding: "utf8", flag: "r" }); + const lines = source?.split("\n") ?? []; + return lines.filter((l) => import_re.test(l)); +} + +function createOneImportLine(line: string) { + const importMatch = import_re.exec(line); + if (!importMatch) { + throw new Error("How did an unmatchable line get here?"); + } + const importContent = importMatch[1]; + if (!importContent) { + throw new Error("How did an unmatchable line get here!?"); + } + return `'${importContent}";': '${importContent}?inline";',`; +} + +const isSourceFile = /\.ts$/; +function getTheSourceFiles() { + return Array.from(walkFilesystem(path.join(__dirname, "..", "src"))).filter((path) => + isSourceFile.test(path), + ); +} + +function getTheImportLines(importPaths: string[]) { + const importLines: string[] = importPaths.reduce( + (acc: string[], path) => [...acc, extractImportLinesFromFile(path)].flat(), + [], + ); + const uniqueImportLines = new Set(importLines); + const sortedImportLines = Array.from(uniqueImportLines.keys()); + sortedImportLines.sort(); + return sortedImportLines; +} + +const importPaths = getTheSourceFiles(); +const importLines = getTheImportLines(importPaths); + +const outputFile = ` +// THIS IS A GENERATED FILE. DO NOT EDIT BY HAND. +// +// This file is generated by the build-storybook-import-maps script in the UI's base directory. +// This is a *hack* to work around an inconsistency in the way rollup, vite, and storybook +// import CSS modules. +// +// Sometime around 2030 or so, the Javascript community may finally get its collective act together +// and we'll have one unified way of doing this. I can only hope. + +export const cssImportMaps = { +${importLines.map(createOneImportLine).join("\n")} +}; +`; + +fs.writeFileSync(path.join(__dirname, "..", ".storybook", "css-import-maps.ts"), outputFile, { + encoding: "utf8", + flag: "w", +}); From 1a21af0361a312bab03861d92c08d36f2226f8aa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 16:52:18 +0100 Subject: [PATCH 018/131] web: bump vite from 4.4.9 to 5.0.10 in /web (#7903) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.4.9 to 5.0.10. - [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/v5.0.10/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package-lock.json | 409 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 385 insertions(+), 24 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 08a019f30..5565fd398 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -14427,9 +14427,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -15258,9 +15258,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", "dev": true, "funding": [ { @@ -15278,7 +15278,7 @@ ], "peer": true, "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -18272,30 +18272,30 @@ } }, "node_modules/vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.10.tgz", + "integrity": "sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==", "dev": true, "peer": true, "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", + "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", @@ -18346,21 +18346,382 @@ } } }, - "node_modules/vite/node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.9.tgz", + "integrity": "sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==", + "cpu": [ + "arm" + ], "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.9.tgz", + "integrity": "sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.9.tgz", + "integrity": "sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.9.tgz", + "integrity": "sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.9.tgz", + "integrity": "sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.9.tgz", + "integrity": "sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.9.tgz", + "integrity": "sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.9.tgz", + "integrity": "sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.9.tgz", + "integrity": "sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.9.tgz", + "integrity": "sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.9.tgz", + "integrity": "sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.9.tgz", + "integrity": "sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.9.tgz", + "integrity": "sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.9.tgz", + "integrity": "sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.9.tgz", + "integrity": "sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.9.tgz", + "integrity": "sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.9.tgz", + "integrity": "sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.9.tgz", + "integrity": "sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.9.tgz", + "integrity": "sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.9.tgz", + "integrity": "sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.9.tgz", + "integrity": "sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==", + "dev": true, + "hasInstallScript": true, "peer": true, "bin": { - "rollup": "dist/bin/rollup" + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" + "node": ">=12" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "@esbuild/android-arm": "0.19.9", + "@esbuild/android-arm64": "0.19.9", + "@esbuild/android-x64": "0.19.9", + "@esbuild/darwin-arm64": "0.19.9", + "@esbuild/darwin-x64": "0.19.9", + "@esbuild/freebsd-arm64": "0.19.9", + "@esbuild/freebsd-x64": "0.19.9", + "@esbuild/linux-arm": "0.19.9", + "@esbuild/linux-arm64": "0.19.9", + "@esbuild/linux-ia32": "0.19.9", + "@esbuild/linux-loong64": "0.19.9", + "@esbuild/linux-mips64el": "0.19.9", + "@esbuild/linux-ppc64": "0.19.9", + "@esbuild/linux-riscv64": "0.19.9", + "@esbuild/linux-s390x": "0.19.9", + "@esbuild/linux-x64": "0.19.9", + "@esbuild/netbsd-x64": "0.19.9", + "@esbuild/openbsd-x64": "0.19.9", + "@esbuild/sunos-x64": "0.19.9", + "@esbuild/win32-arm64": "0.19.9", + "@esbuild/win32-ia32": "0.19.9", + "@esbuild/win32-x64": "0.19.9" } }, "node_modules/vscode-css-languageservice": { From ba174d810bf7fc09b802a968a8b837f0a951462f Mon Sep 17 00:00:00 2001 From: Jens L Date: Mon, 18 Dec 2023 16:52:34 +0100 Subject: [PATCH 019/131] providers/scim: change familyName default (#7904) * Update providers-scim.yaml Signed-off-by: Antoine * fix: add formatted to match the givenName & familyName Signed-off-by: Antoine * fix, update tests Signed-off-by: Jens Langhammer --------- Signed-off-by: Antoine Signed-off-by: Jens Langhammer Co-authored-by: Antoine --- .../providers/scim/tests/test_membership.py | 4 +-- authentik/providers/scim/tests/test_user.py | 32 +++++++++---------- blueprints/system/providers-scim.yaml | 6 ++-- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/authentik/providers/scim/tests/test_membership.py b/authentik/providers/scim/tests/test_membership.py index f2bbc74c5..8c792d0cc 100644 --- a/authentik/providers/scim/tests/test_membership.py +++ b/authentik/providers/scim/tests/test_membership.py @@ -93,7 +93,7 @@ class SCIMMembershipTests(TestCase): "emails": [], "active": True, "externalId": user.uid, - "name": {"familyName": "", "formatted": "", "givenName": ""}, + "name": {"familyName": " ", "formatted": " ", "givenName": ""}, "displayName": "", "userName": user.username, }, @@ -184,7 +184,7 @@ class SCIMMembershipTests(TestCase): "displayName": "", "emails": [], "externalId": user.uid, - "name": {"familyName": "", "formatted": "", "givenName": ""}, + "name": {"familyName": " ", "formatted": " ", "givenName": ""}, "userName": user.username, }, ) diff --git a/authentik/providers/scim/tests/test_user.py b/authentik/providers/scim/tests/test_user.py index 36377b925..b9eb46f37 100644 --- a/authentik/providers/scim/tests/test_user.py +++ b/authentik/providers/scim/tests/test_user.py @@ -57,7 +57,7 @@ class SCIMUserTests(TestCase): uid = generate_id() user = User.objects.create( username=uid, - name=uid, + name=f"{uid} {uid}", email=f"{uid}@goauthentik.io", ) self.assertEqual(mock.call_count, 2) @@ -77,11 +77,11 @@ class SCIMUserTests(TestCase): ], "externalId": user.uid, "name": { - "familyName": "", - "formatted": uid, + "familyName": uid, + "formatted": f"{uid} {uid}", "givenName": uid, }, - "displayName": uid, + "displayName": f"{uid} {uid}", "userName": uid, }, ) @@ -110,7 +110,7 @@ class SCIMUserTests(TestCase): uid = generate_id() user = User.objects.create( username=uid, - name=uid, + name=f"{uid} {uid}", email=f"{uid}@goauthentik.io", ) self.assertEqual(mock.call_count, 2) @@ -131,11 +131,11 @@ class SCIMUserTests(TestCase): "value": f"{uid}@goauthentik.io", } ], - "displayName": uid, + "displayName": f"{uid} {uid}", "externalId": user.uid, "name": { - "familyName": "", - "formatted": uid, + "familyName": uid, + "formatted": f"{uid} {uid}", "givenName": uid, }, "userName": uid, @@ -166,7 +166,7 @@ class SCIMUserTests(TestCase): uid = generate_id() user = User.objects.create( username=uid, - name=uid, + name=f"{uid} {uid}", email=f"{uid}@goauthentik.io", ) self.assertEqual(mock.call_count, 2) @@ -186,11 +186,11 @@ class SCIMUserTests(TestCase): ], "externalId": user.uid, "name": { - "familyName": "", - "formatted": uid, + "familyName": uid, + "formatted": f"{uid} {uid}", "givenName": uid, }, - "displayName": uid, + "displayName": f"{uid} {uid}", "userName": uid, }, ) @@ -230,7 +230,7 @@ class SCIMUserTests(TestCase): ) user = User.objects.create( username=uid, - name=uid, + name=f"{uid} {uid}", email=f"{uid}@goauthentik.io", ) @@ -254,11 +254,11 @@ class SCIMUserTests(TestCase): ], "externalId": user.uid, "name": { - "familyName": "", - "formatted": uid, + "familyName": uid, + "formatted": f"{uid} {uid}", "givenName": uid, }, - "displayName": uid, + "displayName": f"{uid} {uid}", "userName": uid, }, ) diff --git a/blueprints/system/providers-scim.yaml b/blueprints/system/providers-scim.yaml index 9fdac0376..527992c43 100644 --- a/blueprints/system/providers-scim.yaml +++ b/blueprints/system/providers-scim.yaml @@ -11,13 +11,15 @@ entries: name: "authentik default SCIM Mapping: User" expression: | # Some implementations require givenName and familyName to be set - givenName, familyName = request.user.name, "" + givenName, familyName = request.user.name, " " + formatted = request.user.name + " " # This default sets givenName to the name before the first space # and the remainder as family name # if the user's name has no space the givenName is the entire name # (this might cause issues with some SCIM implementations) if " " in request.user.name: givenName, _, familyName = request.user.name.partition(" ") + formatted = request.user.name # photos supports URLs to images, however authentik might return data URIs avatar = request.user.avatar @@ -39,7 +41,7 @@ entries: return { "userName": request.user.username, "name": { - "formatted": request.user.name, + "formatted": formatted, "givenName": givenName, "familyName": familyName, }, From 729ef4d78630295123260eb9b9f017f0e73526f2 Mon Sep 17 00:00:00 2001 From: Jens L Date: Mon, 18 Dec 2023 22:07:59 +0100 Subject: [PATCH 020/131] root: bump python deps (django 5) (#7862) * bump python deps Signed-off-by: Jens Langhammer * vendor pickle serializer for now Signed-off-by: Jens Langhammer #7761 * cleanup some things and re-build api scheme Signed-off-by: Jens Langhammer * fix web and go Signed-off-by: Jens Langhammer * actually fix go...? Signed-off-by: Jens Langhammer * better annotate json fields Signed-off-by: Jens Langhammer * use jsondictfield wherever Signed-off-by: Jens Langhammer * remove all virtualenvs? Signed-off-by: Jens Langhammer * ? Signed-off-by: Jens Langhammer * final version bump Signed-off-by: Jens Langhammer --------- Signed-off-by: Jens Langhammer --- .github/workflows/ci-main.yml | 9 +- Makefile | 5 +- authentik/blueprints/api.py | 6 +- .../blueprints/v1/meta/apply_blueprint.py | 6 +- authentik/core/api/groups.py | 8 +- authentik/core/api/users.py | 14 +- authentik/core/api/utils.py | 20 +- authentik/outposts/api/outposts.py | 8 +- authentik/policies/api/exec.py | 6 +- authentik/root/sessions/__init__.py | 0 authentik/root/sessions/pickle.py | 22 + authentik/root/settings.py | 3 +- authentik/stages/authenticator_totp/models.py | 4 +- .../authenticator_validate/challenge.py | 6 +- .../stages/authenticator_validate/stage.py | 6 +- .../stages/authenticator_webauthn/stage.py | 7 +- authentik/stages/invitation/api.py | 5 +- cmd/radius/main.go | 1 - go.mod | 2 + internal/config/struct.go | 14 +- internal/outpost/ak/api.go | 2 - internal/outpost/ak/global.go | 6 +- internal/outpost/ldap/handler/handler.go | 3 +- internal/outpost/ldap/search.go | 1 - internal/outpost/ldap/search/direct/base.go | 30 +- internal/outpost/ldap/search/memory/memory.go | 2 +- .../proxyv2/application/application.go | 2 +- .../proxyv2/application/mode_common.go | 4 +- .../outpost/proxyv2/constants/constants.go | 6 +- .../outpost/radius/handle_access_request.go | 3 +- internal/web/metrics.go | 10 +- poetry.lock | 1461 +++++++++-------- schema.yml | 139 +- web/src/admin/flows/FlowForm.ts | 32 +- web/src/admin/flows/utils.ts | 16 +- web/src/flow/FlowExecutor.ts | 10 +- 36 files changed, 960 insertions(+), 919 deletions(-) create mode 100644 authentik/root/sessions/__init__.py create mode 100644 authentik/root/sessions/pickle.py diff --git a/.github/workflows/ci-main.yml b/.github/workflows/ci-main.yml index 4f7cf5256..8d0e8bc79 100644 --- a/.github/workflows/ci-main.yml +++ b/.github/workflows/ci-main.yml @@ -61,10 +61,6 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Setup authentik env - uses: ./.github/actions/setup - with: - postgresql_version: ${{ matrix.psql }} - name: checkout stable run: | # Delete all poetry envs @@ -76,7 +72,7 @@ jobs: git checkout version/$(python -c "from authentik import __version__; print(__version__)") rm -rf .github/ scripts/ mv ../.github ../scripts . - - name: Setup authentik env (ensure stable deps are installed) + - name: Setup authentik env (stable) uses: ./.github/actions/setup with: postgresql_version: ${{ matrix.psql }} @@ -90,14 +86,13 @@ jobs: git clean -d -fx . git checkout $GITHUB_SHA # Delete previous poetry env - rm -rf $(poetry env info --path) + rm -rf /home/runner/.cache/pypoetry/virtualenvs/* - name: Setup authentik env (ensure latest deps are installed) uses: ./.github/actions/setup with: postgresql_version: ${{ matrix.psql }} - name: migrate to latest run: | - poetry install poetry run python -m lifecycle.migrate test-unittest: name: test-unittest - PostgreSQL ${{ matrix.psql }} diff --git a/Makefile b/Makefile index c649ff230..a91ca7464 100644 --- a/Makefile +++ b/Makefile @@ -115,8 +115,9 @@ gen-diff: ## (Release) generate the changelog diff between the current schema a npx prettier --write diff.md gen-clean: - rm -rf web/api/src/ - rm -rf api/ + rm -rf gen-go-api/ + rm -rf gen-ts-api/ + rm -rf web/node_modules/@goauthentik/api/ gen-client-ts: ## Build and install the authentik API for Typescript into the authentik UI Application docker run \ diff --git a/authentik/blueprints/api.py b/authentik/blueprints/api.py index 721eb5dcb..7abf488da 100644 --- a/authentik/blueprints/api.py +++ b/authentik/blueprints/api.py @@ -3,7 +3,7 @@ from django.utils.translation import gettext_lazy as _ from drf_spectacular.utils import extend_schema, inline_serializer from rest_framework.decorators import action from rest_framework.exceptions import ValidationError -from rest_framework.fields import CharField, DateTimeField, JSONField +from rest_framework.fields import CharField, DateTimeField from rest_framework.request import Request from rest_framework.response import Response from rest_framework.serializers import ListSerializer, ModelSerializer @@ -15,7 +15,7 @@ from authentik.blueprints.v1.importer import Importer from authentik.blueprints.v1.oci import OCI_PREFIX from authentik.blueprints.v1.tasks import apply_blueprint, blueprints_find_dict from authentik.core.api.used_by import UsedByMixin -from authentik.core.api.utils import PassiveSerializer +from authentik.core.api.utils import JSONDictField, PassiveSerializer class ManagedSerializer: @@ -28,7 +28,7 @@ class MetadataSerializer(PassiveSerializer): """Serializer for blueprint metadata""" name = CharField() - labels = JSONField() + labels = JSONDictField() class BlueprintInstanceSerializer(ModelSerializer): diff --git a/authentik/blueprints/v1/meta/apply_blueprint.py b/authentik/blueprints/v1/meta/apply_blueprint.py index 5946342a3..0a8d84e66 100644 --- a/authentik/blueprints/v1/meta/apply_blueprint.py +++ b/authentik/blueprints/v1/meta/apply_blueprint.py @@ -2,11 +2,11 @@ from typing import TYPE_CHECKING from rest_framework.exceptions import ValidationError -from rest_framework.fields import BooleanField, JSONField +from rest_framework.fields import BooleanField from structlog.stdlib import get_logger from authentik.blueprints.v1.meta.registry import BaseMetaModel, MetaResult, registry -from authentik.core.api.utils import PassiveSerializer, is_dict +from authentik.core.api.utils import JSONDictField, PassiveSerializer if TYPE_CHECKING: from authentik.blueprints.models import BlueprintInstance @@ -17,7 +17,7 @@ LOGGER = get_logger() class ApplyBlueprintMetaSerializer(PassiveSerializer): """Serializer for meta apply blueprint model""" - identifiers = JSONField(validators=[is_dict]) + identifiers = JSONDictField() required = BooleanField(default=True) # We cannot override `instance` as that will confuse rest_framework diff --git a/authentik/core/api/groups.py b/authentik/core/api/groups.py index 21ba19974..04670844d 100644 --- a/authentik/core/api/groups.py +++ b/authentik/core/api/groups.py @@ -8,7 +8,7 @@ from django_filters.filterset import FilterSet from drf_spectacular.utils import OpenApiResponse, extend_schema from guardian.shortcuts import get_objects_for_user from rest_framework.decorators import action -from rest_framework.fields import CharField, IntegerField, JSONField +from rest_framework.fields import CharField, IntegerField from rest_framework.request import Request from rest_framework.response import Response from rest_framework.serializers import ListSerializer, ModelSerializer, ValidationError @@ -16,7 +16,7 @@ from rest_framework.viewsets import ModelViewSet from authentik.api.decorators import permission_required from authentik.core.api.used_by import UsedByMixin -from authentik.core.api.utils import PassiveSerializer, is_dict +from authentik.core.api.utils import JSONDictField, PassiveSerializer from authentik.core.models import Group, User from authentik.rbac.api.roles import RoleSerializer @@ -24,7 +24,7 @@ from authentik.rbac.api.roles import RoleSerializer class GroupMemberSerializer(ModelSerializer): """Stripped down user serializer to show relevant users for groups""" - attributes = JSONField(validators=[is_dict], required=False) + attributes = JSONDictField(required=False) uid = CharField(read_only=True) class Meta: @@ -44,7 +44,7 @@ class GroupMemberSerializer(ModelSerializer): class GroupSerializer(ModelSerializer): """Group Serializer""" - attributes = JSONField(validators=[is_dict], required=False) + attributes = JSONDictField(required=False) users_obj = ListSerializer( child=GroupMemberSerializer(), read_only=True, source="users", required=False ) diff --git a/authentik/core/api/users.py b/authentik/core/api/users.py index 5ee249729..5b6a4a199 100644 --- a/authentik/core/api/users.py +++ b/authentik/core/api/users.py @@ -32,13 +32,7 @@ from drf_spectacular.utils import ( ) from guardian.shortcuts import get_anonymous_user, get_objects_for_user from rest_framework.decorators import action -from rest_framework.fields import ( - CharField, - IntegerField, - JSONField, - ListField, - SerializerMethodField, -) +from rest_framework.fields import CharField, IntegerField, ListField, SerializerMethodField from rest_framework.request import Request from rest_framework.response import Response from rest_framework.serializers import ( @@ -57,7 +51,7 @@ from authentik.admin.api.metrics import CoordinateSerializer from authentik.api.decorators import permission_required from authentik.blueprints.v1.importer import SERIALIZER_CONTEXT_BLUEPRINT from authentik.core.api.used_by import UsedByMixin -from authentik.core.api.utils import LinkSerializer, PassiveSerializer, is_dict +from authentik.core.api.utils import JSONDictField, LinkSerializer, PassiveSerializer from authentik.core.middleware import ( SESSION_KEY_IMPERSONATE_ORIGINAL_USER, SESSION_KEY_IMPERSONATE_USER, @@ -89,7 +83,7 @@ LOGGER = get_logger() class UserGroupSerializer(ModelSerializer): """Simplified Group Serializer for user's groups""" - attributes = JSONField(required=False) + attributes = JSONDictField(required=False) parent_name = CharField(source="parent.name", read_only=True) class Meta: @@ -110,7 +104,7 @@ class UserSerializer(ModelSerializer): is_superuser = BooleanField(read_only=True) avatar = CharField(read_only=True) - attributes = JSONField(validators=[is_dict], required=False) + attributes = JSONDictField(required=False) groups = PrimaryKeyRelatedField( allow_empty=True, many=True, source="ak_groups", queryset=Group.objects.all(), default=list ) diff --git a/authentik/core/api/utils.py b/authentik/core/api/utils.py index cf1870197..c7a188f5c 100644 --- a/authentik/core/api/utils.py +++ b/authentik/core/api/utils.py @@ -2,6 +2,9 @@ from typing import Any from django.db.models import Model +from drf_spectacular.extensions import OpenApiSerializerFieldExtension +from drf_spectacular.plumbing import build_basic_type +from drf_spectacular.types import OpenApiTypes from rest_framework.fields import CharField, IntegerField, JSONField from rest_framework.serializers import Serializer, SerializerMethodField, ValidationError @@ -13,6 +16,21 @@ def is_dict(value: Any): raise ValidationError("Value must be a dictionary, and not have any duplicate keys.") +class JSONDictField(JSONField): + """JSON Field which only allows dictionaries""" + + default_validators = [is_dict] + + +class JSONExtension(OpenApiSerializerFieldExtension): + """Generate API Schema for JSON fields as""" + + target_class = "authentik.core.api.utils.JSONDictField" + + def map_serializer_field(self, auto_schema, direction): + return build_basic_type(OpenApiTypes.OBJECT) + + class PassiveSerializer(Serializer): """Base serializer class which doesn't implement create/update methods""" @@ -26,7 +44,7 @@ class PassiveSerializer(Serializer): class PropertyMappingPreviewSerializer(PassiveSerializer): """Preview how the current user is mapped via the property mappings selected in a provider""" - preview = JSONField(read_only=True) + preview = JSONDictField(read_only=True) class MetaNameSerializer(PassiveSerializer): diff --git a/authentik/outposts/api/outposts.py b/authentik/outposts/api/outposts.py index 140f01fac..4e9925029 100644 --- a/authentik/outposts/api/outposts.py +++ b/authentik/outposts/api/outposts.py @@ -9,13 +9,13 @@ from rest_framework.fields import BooleanField, CharField, DateTimeField from rest_framework.relations import PrimaryKeyRelatedField from rest_framework.request import Request from rest_framework.response import Response -from rest_framework.serializers import JSONField, ModelSerializer, ValidationError +from rest_framework.serializers import ModelSerializer, ValidationError from rest_framework.viewsets import ModelViewSet from authentik import get_build_hash from authentik.core.api.providers import ProviderSerializer from authentik.core.api.used_by import UsedByMixin -from authentik.core.api.utils import PassiveSerializer, is_dict +from authentik.core.api.utils import JSONDictField, PassiveSerializer from authentik.core.models import Provider from authentik.outposts.api.service_connections import ServiceConnectionSerializer from authentik.outposts.apps import MANAGED_OUTPOST @@ -34,7 +34,7 @@ from authentik.providers.radius.models import RadiusProvider class OutpostSerializer(ModelSerializer): """Outpost Serializer""" - config = JSONField(validators=[is_dict], source="_config") + config = JSONDictField(source="_config") # Need to set allow_empty=True for the embedded outpost with no providers # is checked for other providers in the API Viewset providers = PrimaryKeyRelatedField( @@ -95,7 +95,7 @@ class OutpostSerializer(ModelSerializer): class OutpostDefaultConfigSerializer(PassiveSerializer): """Global default outpost config""" - config = JSONField(read_only=True) + config = JSONDictField(read_only=True) class OutpostHealthSerializer(PassiveSerializer): diff --git a/authentik/policies/api/exec.py b/authentik/policies/api/exec.py index 580b74f95..56fb42c90 100644 --- a/authentik/policies/api/exec.py +++ b/authentik/policies/api/exec.py @@ -1,8 +1,8 @@ """Serializer for policy execution""" -from rest_framework.fields import BooleanField, CharField, DictField, JSONField, ListField +from rest_framework.fields import BooleanField, CharField, DictField, ListField from rest_framework.relations import PrimaryKeyRelatedField -from authentik.core.api.utils import PassiveSerializer, is_dict +from authentik.core.api.utils import JSONDictField, PassiveSerializer from authentik.core.models import User @@ -10,7 +10,7 @@ class PolicyTestSerializer(PassiveSerializer): """Test policy execution for a user with context""" user = PrimaryKeyRelatedField(queryset=User.objects.all()) - context = JSONField(required=False, validators=[is_dict]) + context = JSONDictField(required=False) class PolicyTestResultSerializer(PassiveSerializer): diff --git a/authentik/root/sessions/__init__.py b/authentik/root/sessions/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/authentik/root/sessions/pickle.py b/authentik/root/sessions/pickle.py new file mode 100644 index 000000000..94c7f6fc0 --- /dev/null +++ b/authentik/root/sessions/pickle.py @@ -0,0 +1,22 @@ +""" +Module for abstract serializer/unserializer base classes. +""" +import pickle # nosec + + +class PickleSerializer: + """ + Simple wrapper around pickle to be used in signing.dumps()/loads() and + cache backends. + """ + + def __init__(self, protocol=None): + self.protocol = pickle.HIGHEST_PROTOCOL if protocol is None else protocol + + def dumps(self, obj): + """Pickle data to be stored in redis""" + return pickle.dumps(obj, self.protocol) + + def loads(self, data): + """Unpickle data to be loaded from redis""" + return pickle.loads(data) # nosec diff --git a/authentik/root/settings.py b/authentik/root/settings.py index 634e1bba8..df144431f 100644 --- a/authentik/root/settings.py +++ b/authentik/root/settings.py @@ -138,6 +138,7 @@ SPECTACULAR_SETTINGS = { "EventActions": "authentik.events.models.EventAction", "ChallengeChoices": "authentik.flows.challenge.ChallengeTypes", "FlowDesignationEnum": "authentik.flows.models.FlowDesignation", + "FlowLayoutEnum": "authentik.flows.models.FlowLayout", "PolicyEngineMode": "authentik.policies.models.PolicyEngineMode", "ProxyMode": "authentik.providers.proxy.models.ProxyMode", "PromptTypeEnum": "authentik.stages.prompt.models.FieldTypes", @@ -204,7 +205,7 @@ DJANGO_REDIS_SCAN_ITERSIZE = 1000 DJANGO_REDIS_IGNORE_EXCEPTIONS = True DJANGO_REDIS_LOG_IGNORED_EXCEPTIONS = True SESSION_ENGINE = "django.contrib.sessions.backends.cache" -SESSION_SERIALIZER = "django.contrib.sessions.serializers.PickleSerializer" +SESSION_SERIALIZER = "authentik.root.sessions.pickle.PickleSerializer" SESSION_CACHE_ALIAS = "default" # Configured via custom SessionMiddleware # SESSION_COOKIE_SAMESITE = "None" diff --git a/authentik/stages/authenticator_totp/models.py b/authentik/stages/authenticator_totp/models.py index e00d39d40..9f4ccacdc 100644 --- a/authentik/stages/authenticator_totp/models.py +++ b/authentik/stages/authenticator_totp/models.py @@ -22,8 +22,8 @@ from authentik.stages.authenticator.util import hex_validator, random_hex class TOTPDigits(models.TextChoices): """OTP Time Digits""" - SIX = 6, _("6 digits, widely compatible") - EIGHT = 8, _("8 digits, not compatible with apps like Google Authenticator") + SIX = "6", _("6 digits, widely compatible") + EIGHT = "8", _("8 digits, not compatible with apps like Google Authenticator") class AuthenticatorTOTPStage(ConfigurableStage, FriendlyNamedStage, Stage): diff --git a/authentik/stages/authenticator_validate/challenge.py b/authentik/stages/authenticator_validate/challenge.py index 3cd43c07b..c1b2a7f1c 100644 --- a/authentik/stages/authenticator_validate/challenge.py +++ b/authentik/stages/authenticator_validate/challenge.py @@ -7,7 +7,7 @@ from django.http.response import Http404 from django.shortcuts import get_object_or_404 from django.utils.translation import gettext as __ from django.utils.translation import gettext_lazy as _ -from rest_framework.fields import CharField, JSONField +from rest_framework.fields import CharField from rest_framework.serializers import ValidationError from structlog.stdlib import get_logger from webauthn.authentication.generate_authentication_options import generate_authentication_options @@ -16,7 +16,7 @@ from webauthn.helpers.base64url_to_bytes import base64url_to_bytes from webauthn.helpers.exceptions import InvalidAuthenticationResponse from webauthn.helpers.structs import AuthenticationCredential -from authentik.core.api.utils import PassiveSerializer +from authentik.core.api.utils import JSONDictField, PassiveSerializer from authentik.core.models import Application, User from authentik.core.signals import login_failed from authentik.events.models import Event, EventAction @@ -40,7 +40,7 @@ class DeviceChallenge(PassiveSerializer): device_class = CharField() device_uid = CharField() - challenge = JSONField() + challenge = JSONDictField() def get_challenge_for_device( diff --git a/authentik/stages/authenticator_validate/stage.py b/authentik/stages/authenticator_validate/stage.py index 4b88041e5..defd55154 100644 --- a/authentik/stages/authenticator_validate/stage.py +++ b/authentik/stages/authenticator_validate/stage.py @@ -6,10 +6,10 @@ from typing import Optional from django.conf import settings from django.http import HttpRequest, HttpResponse from jwt import PyJWTError, decode, encode -from rest_framework.fields import CharField, IntegerField, JSONField, ListField, UUIDField +from rest_framework.fields import CharField, IntegerField, ListField, UUIDField from rest_framework.serializers import ValidationError -from authentik.core.api.utils import PassiveSerializer +from authentik.core.api.utils import JSONDictField, PassiveSerializer from authentik.core.models import User from authentik.events.models import Event, EventAction from authentik.flows.challenge import ChallengeResponse, ChallengeTypes, WithUserInfoChallenge @@ -68,7 +68,7 @@ class AuthenticatorValidationChallengeResponse(ChallengeResponse): selected_stage = CharField(required=False) code = CharField(required=False) - webauthn = JSONField(required=False) + webauthn = JSONDictField(required=False) duo = IntegerField(required=False) component = CharField(default="ak-stage-authenticator-validate") diff --git a/authentik/stages/authenticator_webauthn/stage.py b/authentik/stages/authenticator_webauthn/stage.py index 153409879..35d424a00 100644 --- a/authentik/stages/authenticator_webauthn/stage.py +++ b/authentik/stages/authenticator_webauthn/stage.py @@ -1,7 +1,7 @@ """WebAuthn stage""" from django.http import HttpRequest, HttpResponse from django.http.request import QueryDict -from rest_framework.fields import CharField, JSONField +from rest_framework.fields import CharField from rest_framework.serializers import ValidationError from webauthn.helpers.bytes_to_base64url import bytes_to_base64url from webauthn.helpers.exceptions import InvalidRegistrationResponse @@ -16,6 +16,7 @@ from webauthn.registration.verify_registration_response import ( verify_registration_response, ) +from authentik.core.api.utils import JSONDictField from authentik.core.models import User from authentik.flows.challenge import ( Challenge, @@ -33,14 +34,14 @@ SESSION_KEY_WEBAUTHN_CHALLENGE = "authentik/stages/authenticator_webauthn/challe class AuthenticatorWebAuthnChallenge(WithUserInfoChallenge): """WebAuthn Challenge""" - registration = JSONField() + registration = JSONDictField() component = CharField(default="ak-stage-authenticator-webauthn") class AuthenticatorWebAuthnChallengeResponse(ChallengeResponse): """WebAuthn Challenge response""" - response = JSONField() + response = JSONDictField() component = CharField(default="ak-stage-authenticator-webauthn") request: HttpRequest diff --git a/authentik/stages/invitation/api.py b/authentik/stages/invitation/api.py index f064664b5..827662d53 100644 --- a/authentik/stages/invitation/api.py +++ b/authentik/stages/invitation/api.py @@ -1,13 +1,12 @@ """Invitation Stage API Views""" from django_filters.filters import BooleanFilter from django_filters.filterset import FilterSet -from rest_framework.fields import JSONField from rest_framework.serializers import ModelSerializer from rest_framework.viewsets import ModelViewSet from authentik.core.api.groups import GroupMemberSerializer from authentik.core.api.used_by import UsedByMixin -from authentik.core.api.utils import is_dict +from authentik.core.api.utils import JSONDictField from authentik.flows.api.flows import FlowSerializer from authentik.flows.api.stages import StageSerializer from authentik.stages.invitation.models import Invitation, InvitationStage @@ -47,7 +46,7 @@ class InvitationSerializer(ModelSerializer): """Invitation Serializer""" created_by = GroupMemberSerializer(read_only=True) - fixed_data = JSONField(validators=[is_dict], required=False) + fixed_data = JSONDictField(required=False) flow_obj = FlowSerializer(read_only=True, required=False, source="flow") class Meta: diff --git a/cmd/radius/main.go b/cmd/radius/main.go index f442cb101..0d6b7abeb 100644 --- a/cmd/radius/main.go +++ b/cmd/radius/main.go @@ -81,7 +81,6 @@ var rootCmd = &cobra.Command{ for { <-ex } - }, } diff --git a/go.mod b/go.mod index c295495c8..d36876837 100644 --- a/go.mod +++ b/go.mod @@ -82,3 +82,5 @@ require ( gopkg.in/square/go-jose.v2 v2.5.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace goauthentik.io/api/v3 => ./gen-go-api diff --git a/internal/config/struct.go b/internal/config/struct.go index c42fb2c7a..e7be9733e 100644 --- a/internal/config/struct.go +++ b/internal/config/struct.go @@ -25,13 +25,13 @@ type Config struct { } type RedisConfig struct { - Host string `yaml:"host" env:"AUTHENTIK_REDIS__HOST"` - Port int `yaml:"port" env:"AUTHENTIK_REDIS__PORT"` - DB int `yaml:"db" env:"AUTHENTIK_REDIS__DB"` - Username string `yaml:"username" env:"AUTHENTIK_REDIS__USERNAME"` - Password string `yaml:"password" env:"AUTHENTIK_REDIS__PASSWORD"` - TLS bool `yaml:"tls" env:"AUTHENTIK_REDIS__TLS"` - TLSReqs string `yaml:"tls_reqs" env:"AUTHENTIK_REDIS__TLS_REQS"` + Host string `yaml:"host" env:"AUTHENTIK_REDIS__HOST"` + Port int `yaml:"port" env:"AUTHENTIK_REDIS__PORT"` + DB int `yaml:"db" env:"AUTHENTIK_REDIS__DB"` + Username string `yaml:"username" env:"AUTHENTIK_REDIS__USERNAME"` + Password string `yaml:"password" env:"AUTHENTIK_REDIS__PASSWORD"` + TLS bool `yaml:"tls" env:"AUTHENTIK_REDIS__TLS"` + TLSReqs string `yaml:"tls_reqs" env:"AUTHENTIK_REDIS__TLS_REQS"` } type ListenConfig struct { diff --git a/internal/outpost/ak/api.go b/internal/outpost/ak/api.go index f6003c02f..34a30cbea 100644 --- a/internal/outpost/ak/api.go +++ b/internal/outpost/ak/api.go @@ -76,7 +76,6 @@ func NewAPIController(akURL url.URL, token string) *APIController { // Because we don't know the outpost UUID, we simply do a list and pick the first // The service account this token belongs to should only have access to a single outpost outposts, _, err := apiClient.OutpostsApi.OutpostsInstancesList(context.Background()).Execute() - if err != nil { log.WithError(err).Error("Failed to fetch outpost configuration, retrying in 3 seconds") time.Sleep(time.Second * 3) @@ -168,7 +167,6 @@ func (a *APIController) OnRefresh() error { // Because we don't know the outpost UUID, we simply do a list and pick the first // The service account this token belongs to should only have access to a single outpost outposts, _, err := a.Client.OutpostsApi.OutpostsInstancesList(context.Background()).Execute() - if err != nil { log.WithError(err).Error("Failed to fetch outpost configuration") return err diff --git a/internal/outpost/ak/global.go b/internal/outpost/ak/global.go index 7373463ee..19047fa5d 100644 --- a/internal/outpost/ak/global.go +++ b/internal/outpost/ak/global.go @@ -14,8 +14,10 @@ import ( webutils "goauthentik.io/internal/utils/web" ) -var initialSetup = false -var tlsTransport *http.RoundTripper = nil +var ( + initialSetup = false + tlsTransport *http.RoundTripper = nil +) func doGlobalSetup(outpost api.Outpost, globalConfig *api.Config) { l := log.WithField("logger", "authentik.outpost") diff --git a/internal/outpost/ldap/handler/handler.go b/internal/outpost/ldap/handler/handler.go index 6d1c380cf..f035a8ecc 100644 --- a/internal/outpost/ldap/handler/handler.go +++ b/internal/outpost/ldap/handler/handler.go @@ -1,4 +1,3 @@ package handler -type Handler interface { -} +type Handler interface{} diff --git a/internal/outpost/ldap/search.go b/internal/outpost/ldap/search.go index b26df5023..6043dbb28 100644 --- a/internal/outpost/ldap/search.go +++ b/internal/outpost/ldap/search.go @@ -78,5 +78,4 @@ func (ls *LDAPServer) fallbackRootDSE(req *search.Request) (ldap.ServerSearchRes }, Referrals: []string{}, Controls: []ldap.Control{}, ResultCode: ldap.LDAPResultSuccess, }, nil - } diff --git a/internal/outpost/ldap/search/direct/base.go b/internal/outpost/ldap/search/direct/base.go index 0f87b7bf3..1afff056f 100644 --- a/internal/outpost/ldap/search/direct/base.go +++ b/internal/outpost/ldap/search/direct/base.go @@ -34,26 +34,26 @@ func (ds *DirectSearcher) SearchBase(req *search.Request) (ldap.ServerSearchResu Values: []string{"3"}, }, { - Name: "supportedCapabilities", + Name: "supportedCapabilities", Values: []string{ - "1.2.840.113556.1.4.800", //LDAP_CAP_ACTIVE_DIRECTORY_OID - "1.2.840.113556.1.4.1791", //LDAP_CAP_ACTIVE_DIRECTORY_LDAP_INTEG_OID - "1.2.840.113556.1.4.1670", //LDAP_CAP_ACTIVE_DIRECTORY_V51_OID - "1.2.840.113556.1.4.1880", //LDAP_CAP_ACTIVE_DIRECTORY_ADAM_DIGEST_OID - "1.2.840.113556.1.4.1851", //LDAP_CAP_ACTIVE_DIRECTORY_ADAM_OID - "1.2.840.113556.1.4.1920", //LDAP_CAP_ACTIVE_DIRECTORY_PARTIAL_SECRETS_OID - "1.2.840.113556.1.4.1935", //LDAP_CAP_ACTIVE_DIRECTORY_V60_OID - "1.2.840.113556.1.4.2080", //LDAP_CAP_ACTIVE_DIRECTORY_V61_R2_OID - "1.2.840.113556.1.4.2237", //LDAP_CAP_ACTIVE_DIRECTORY_W8_OID + "1.2.840.113556.1.4.800", // LDAP_CAP_ACTIVE_DIRECTORY_OID + "1.2.840.113556.1.4.1791", // LDAP_CAP_ACTIVE_DIRECTORY_LDAP_INTEG_OID + "1.2.840.113556.1.4.1670", // LDAP_CAP_ACTIVE_DIRECTORY_V51_OID + "1.2.840.113556.1.4.1880", // LDAP_CAP_ACTIVE_DIRECTORY_ADAM_DIGEST_OID + "1.2.840.113556.1.4.1851", // LDAP_CAP_ACTIVE_DIRECTORY_ADAM_OID + "1.2.840.113556.1.4.1920", // LDAP_CAP_ACTIVE_DIRECTORY_PARTIAL_SECRETS_OID + "1.2.840.113556.1.4.1935", // LDAP_CAP_ACTIVE_DIRECTORY_V60_OID + "1.2.840.113556.1.4.2080", // LDAP_CAP_ACTIVE_DIRECTORY_V61_R2_OID + "1.2.840.113556.1.4.2237", // LDAP_CAP_ACTIVE_DIRECTORY_W8_OID }, }, { - Name: "supportedControl", + Name: "supportedControl", Values: []string{ - "2.16.840.1.113730.3.4.9", //VLV Request LDAPv3 Control - "2.16.840.1.113730.3.4.10", //VLV Response LDAPv3 Control - "1.2.840.113556.1.4.474", //Sort result - "1.2.840.113556.1.4.319", //Paged Result Control + "2.16.840.1.113730.3.4.9", // VLV Request LDAPv3 Control + "2.16.840.1.113730.3.4.10", // VLV Response LDAPv3 Control + "1.2.840.113556.1.4.474", // Sort result + "1.2.840.113556.1.4.319", // Paged Result Control }, }, { diff --git a/internal/outpost/ldap/search/memory/memory.go b/internal/outpost/ldap/search/memory/memory.go index 198739122..fa25ed96f 100644 --- a/internal/outpost/ldap/search/memory/memory.go +++ b/internal/outpost/ldap/search/memory/memory.go @@ -143,7 +143,7 @@ func (ms *MemorySearcher) Search(req *search.Request) (ldap.ServerSearchResult, // as a member. for _, u := range g.UsersObj { if flag.UserPk == u.Pk { - //TODO: Is there a better way to clone this object? + // TODO: Is there a better way to clone this object? fg := api.NewGroup(g.Pk, g.NumPk, g.Name, g.ParentName, []api.GroupMember{u}, []api.Role{}) fg.SetUsers([]int32{flag.UserPk}) if g.Parent.IsSet() { diff --git a/internal/outpost/proxyv2/application/application.go b/internal/outpost/proxyv2/application/application.go index 03dc4289d..3f3fcaa3b 100644 --- a/internal/outpost/proxyv2/application/application.go +++ b/internal/outpost/proxyv2/application/application.go @@ -220,7 +220,7 @@ func NewApplication(p api.ProxyOutpostConfig, c *http.Client, server Server) (*A for _, regex := range strings.Split(*p.SkipPathRegex, "\n") { re, err := regexp.Compile(regex) if err != nil { - //TODO: maybe create event for this? + // TODO: maybe create event for this? a.log.WithError(err).Warning("failed to compile SkipPathRegex") continue } else { diff --git a/internal/outpost/proxyv2/application/mode_common.go b/internal/outpost/proxyv2/application/mode_common.go index d2eac42cb..5866f5850 100644 --- a/internal/outpost/proxyv2/application/mode_common.go +++ b/internal/outpost/proxyv2/application/mode_common.go @@ -59,12 +59,12 @@ func (a *Application) addHeaders(headers http.Header, c *Claims) { userAttributes := c.Proxy.UserAttributes a.setAuthorizationHeader(headers, c) // Check if user has additional headers set that we should sent - if additionalHeaders, ok := userAttributes["additionalHeaders"].(map[string]interface{}); ok { + if additionalHeaders, ok := userAttributes["additionalHeaders"]; ok { a.log.WithField("headers", additionalHeaders).Trace("setting additional headers") if additionalHeaders == nil { return } - for key, value := range additionalHeaders { + for key, value := range additionalHeaders.(map[string]interface{}) { headers.Set(key, toString(value)) } } diff --git a/internal/outpost/proxyv2/constants/constants.go b/internal/outpost/proxyv2/constants/constants.go index cdb3fcffe..339d49268 100644 --- a/internal/outpost/proxyv2/constants/constants.go +++ b/internal/outpost/proxyv2/constants/constants.go @@ -1,7 +1,9 @@ package constants -const SessionOAuthState = "oauth_state" -const SessionClaims = "claims" +const ( + SessionOAuthState = "oauth_state" + SessionClaims = "claims" +) const SessionRedirect = "redirect" diff --git a/internal/outpost/radius/handle_access_request.go b/internal/outpost/radius/handle_access_request.go index 1c5f32202..ea2b5c860 100644 --- a/internal/outpost/radius/handle_access_request.go +++ b/internal/outpost/radius/handle_access_request.go @@ -15,7 +15,7 @@ func (rs *RadiusServer) Handle_AccessRequest(w radius.ResponseWriter, r *RadiusR fe := flow.NewFlowExecutor(r.Context(), r.pi.flowSlug, r.pi.s.ac.Client.GetConfig(), log.Fields{ "username": username, "client": r.RemoteAddr(), - "requestId": r.ID, + "requestId": r.ID(), }) fe.DelegateClientIP(r.RemoteAddr()) fe.Params.Add("goauthentik.io/outpost/radius", "true") @@ -27,7 +27,6 @@ func (rs *RadiusServer) Handle_AccessRequest(w radius.ResponseWriter, r *RadiusR } passed, err := fe.Execute() - if err != nil { r.Log().WithField("username", username).WithError(err).Warning("failed to execute flow") metrics.RequestsRejected.With(prometheus.Labels{ diff --git a/internal/web/metrics.go b/internal/web/metrics.go index 2e6b0def1..baf486e26 100644 --- a/internal/web/metrics.go +++ b/internal/web/metrics.go @@ -14,12 +14,10 @@ import ( "goauthentik.io/internal/utils/sentry" ) -var ( - Requests = promauto.NewHistogramVec(prometheus.HistogramOpts{ - Name: "authentik_main_request_duration_seconds", - Help: "API request latencies in seconds", - }, []string{"dest"}) -) +var Requests = promauto.NewHistogramVec(prometheus.HistogramOpts{ + Name: "authentik_main_request_duration_seconds", + Help: "API request latencies in seconds", +}, []string{"dest"}) func (ws *WebServer) runMetricsServer() { m := mux.NewRouter() diff --git a/poetry.lock b/poetry.lock index fe90220ed..500e2e832 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,88 +1,88 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "aiohttp" -version = "3.9.0" +version = "3.9.1" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.8" files = [ - {file = "aiohttp-3.9.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6896b8416be9ada4d22cd359d7cb98955576ce863eadad5596b7cdfbf3e17c6c"}, - {file = "aiohttp-3.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1736d87dad8ef46a8ec9cddd349fa9f7bd3a064c47dd6469c0d6763d3d49a4fc"}, - {file = "aiohttp-3.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8c9e5f4d7208cda1a2bb600e29069eecf857e6980d0ccc922ccf9d1372c16f4b"}, - {file = "aiohttp-3.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8488519aa05e636c5997719fe543c8daf19f538f4fa044f3ce94bee608817cff"}, - {file = "aiohttp-3.9.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ab16c254e2312efeb799bc3c06897f65a133b38b69682bf75d1f1ee1a9c43a9"}, - {file = "aiohttp-3.9.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7a94bde005a8f926d0fa38b88092a03dea4b4875a61fbcd9ac6f4351df1b57cd"}, - {file = "aiohttp-3.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b777c9286b6c6a94f50ddb3a6e730deec327e9e2256cb08b5530db0f7d40fd8"}, - {file = "aiohttp-3.9.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:571760ad7736b34d05597a1fd38cbc7d47f7b65deb722cb8e86fd827404d1f6b"}, - {file = "aiohttp-3.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:deac0a32aec29608eb25d730f4bc5a261a65b6c48ded1ed861d2a1852577c932"}, - {file = "aiohttp-3.9.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4ee1b4152bc3190cc40ddd6a14715e3004944263ea208229ab4c297712aa3075"}, - {file = "aiohttp-3.9.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:3607375053df58ed6f23903aa10cf3112b1240e8c799d243bbad0f7be0666986"}, - {file = "aiohttp-3.9.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:65b0a70a25456d329a5e1426702dde67be0fb7a4ead718005ba2ca582d023a94"}, - {file = "aiohttp-3.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5a2eb5311a37fe105aa35f62f75a078537e1a9e4e1d78c86ec9893a3c97d7a30"}, - {file = "aiohttp-3.9.0-cp310-cp310-win32.whl", hash = "sha256:2cbc14a13fb6b42d344e4f27746a4b03a2cb0c1c3c5b932b0d6ad8881aa390e3"}, - {file = "aiohttp-3.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ac9669990e2016d644ba8ae4758688534aabde8dbbc81f9af129c3f5f01ca9cd"}, - {file = "aiohttp-3.9.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f8e05f5163528962ce1d1806fce763ab893b1c5b7ace0a3538cd81a90622f844"}, - {file = "aiohttp-3.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4afa8f71dba3a5a2e1e1282a51cba7341ae76585345c43d8f0e624882b622218"}, - {file = "aiohttp-3.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f929f4c9b9a00f3e6cc0587abb95ab9c05681f8b14e0fe1daecfa83ea90f8318"}, - {file = "aiohttp-3.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28185e36a78d247c55e9fbea2332d16aefa14c5276a582ce7a896231c6b1c208"}, - {file = "aiohttp-3.9.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a486ddf57ab98b6d19ad36458b9f09e6022de0381674fe00228ca7b741aacb2f"}, - {file = "aiohttp-3.9.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70e851f596c00f40a2f00a46126c95c2e04e146015af05a9da3e4867cfc55911"}, - {file = "aiohttp-3.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5b7bf8fe4d39886adc34311a233a2e01bc10eb4e842220235ed1de57541a896"}, - {file = "aiohttp-3.9.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c67a51ea415192c2e53e4e048c78bab82d21955b4281d297f517707dc836bf3d"}, - {file = "aiohttp-3.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:694df243f394629bcae2d8ed94c589a181e8ba8604159e6e45e7b22e58291113"}, - {file = "aiohttp-3.9.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3dd8119752dd30dd7bca7d4bc2a92a59be6a003e4e5c2cf7e248b89751b8f4b7"}, - {file = "aiohttp-3.9.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:eb6dfd52063186ac97b4caa25764cdbcdb4b10d97f5c5f66b0fa95052e744eb7"}, - {file = "aiohttp-3.9.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:d97c3e286d0ac9af6223bc132dc4bad6540b37c8d6c0a15fe1e70fb34f9ec411"}, - {file = "aiohttp-3.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:816f4db40555026e4cdda604a1088577c1fb957d02f3f1292e0221353403f192"}, - {file = "aiohttp-3.9.0-cp311-cp311-win32.whl", hash = "sha256:3abf0551874fecf95f93b58f25ef4fc9a250669a2257753f38f8f592db85ddea"}, - {file = "aiohttp-3.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:e18d92c3e9e22553a73e33784fcb0ed484c9874e9a3e96c16a8d6a1e74a0217b"}, - {file = "aiohttp-3.9.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:99ae01fb13a618b9942376df77a1f50c20a281390dad3c56a6ec2942e266220d"}, - {file = "aiohttp-3.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:05857848da443c8c12110d99285d499b4e84d59918a21132e45c3f0804876994"}, - {file = "aiohttp-3.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:317719d7f824eba55857fe0729363af58e27c066c731bc62cd97bc9c3d9c7ea4"}, - {file = "aiohttp-3.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1e3b3c107ccb0e537f309f719994a55621acd2c8fdf6d5ce5152aed788fb940"}, - {file = "aiohttp-3.9.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45820ddbb276113ead8d4907a7802adb77548087ff5465d5c554f9aa3928ae7d"}, - {file = "aiohttp-3.9.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:05a183f1978802588711aed0dea31e697d760ce9055292db9dc1604daa9a8ded"}, - {file = "aiohttp-3.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a4cd44788ea0b5e6bb8fa704597af3a30be75503a7ed1098bc5b8ffdf6c982"}, - {file = "aiohttp-3.9.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:673343fbc0c1ac44d0d2640addc56e97a052504beacd7ade0dc5e76d3a4c16e8"}, - {file = "aiohttp-3.9.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7e8a3b79b6d186a9c99761fd4a5e8dd575a48d96021f220ac5b5fa856e5dd029"}, - {file = "aiohttp-3.9.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6777a390e41e78e7c45dab43a4a0196c55c3b8c30eebe017b152939372a83253"}, - {file = "aiohttp-3.9.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7ae5f99a32c53731c93ac3075abd3e1e5cfbe72fc3eaac4c27c9dd64ba3b19fe"}, - {file = "aiohttp-3.9.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:f1e4f254e9c35d8965d377e065c4a8a55d396fe87c8e7e8429bcfdeeb229bfb3"}, - {file = "aiohttp-3.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:11ca808f9a6b63485059f5f6e164ef7ec826483c1212a44f268b3653c91237d8"}, - {file = "aiohttp-3.9.0-cp312-cp312-win32.whl", hash = "sha256:de3cc86f4ea8b4c34a6e43a7306c40c1275e52bfa9748d869c6b7d54aa6dad80"}, - {file = "aiohttp-3.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:ca4fddf84ac7d8a7d0866664936f93318ff01ee33e32381a115b19fb5a4d1202"}, - {file = "aiohttp-3.9.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f09960b5bb1017d16c0f9e9f7fc42160a5a49fa1e87a175fd4a2b1a1833ea0af"}, - {file = "aiohttp-3.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8303531e2c17b1a494ffaeba48f2da655fe932c4e9a2626c8718403c83e5dd2b"}, - {file = "aiohttp-3.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4790e44f46a4aa07b64504089def5744d3b6780468c4ec3a1a36eb7f2cae9814"}, - {file = "aiohttp-3.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1d7edf74a36de0e5ca50787e83a77cf352f5504eb0ffa3f07000a911ba353fb"}, - {file = "aiohttp-3.9.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:94697c7293199c2a2551e3e3e18438b4cba293e79c6bc2319f5fd652fccb7456"}, - {file = "aiohttp-3.9.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a1b66dbb8a7d5f50e9e2ea3804b01e766308331d0cac76eb30c563ac89c95985"}, - {file = "aiohttp-3.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9623cfd9e85b76b83ef88519d98326d4731f8d71869867e47a0b979ffec61c73"}, - {file = "aiohttp-3.9.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f32c86dc967ab8c719fd229ce71917caad13cc1e8356ee997bf02c5b368799bf"}, - {file = "aiohttp-3.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f50b4663c3e0262c3a361faf440761fbef60ccdde5fe8545689a4b3a3c149fb4"}, - {file = "aiohttp-3.9.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:dcf71c55ec853826cd70eadb2b6ac62ec577416442ca1e0a97ad875a1b3a0305"}, - {file = "aiohttp-3.9.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:42fe4fd9f0dfcc7be4248c162d8056f1d51a04c60e53366b0098d1267c4c9da8"}, - {file = "aiohttp-3.9.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76a86a9989ebf82ee61e06e2bab408aec4ea367dc6da35145c3352b60a112d11"}, - {file = "aiohttp-3.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f9e09a1c83521d770d170b3801eea19b89f41ccaa61d53026ed111cb6f088887"}, - {file = "aiohttp-3.9.0-cp38-cp38-win32.whl", hash = "sha256:a00ce44c21612d185c5275c5cba4bab8d7c1590f248638b667ed8a782fa8cd6f"}, - {file = "aiohttp-3.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:d5b9345ab92ebe6003ae11d8092ce822a0242146e6fa270889b9ba965457ca40"}, - {file = "aiohttp-3.9.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:98d21092bf2637c5fa724a428a69e8f5955f2182bff61f8036827cf6ce1157bf"}, - {file = "aiohttp-3.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:35a68cd63ca6aaef5707888f17a70c36efe62b099a4e853d33dc2e9872125be8"}, - {file = "aiohttp-3.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3d7f6235c7475658acfc1769d968e07ab585c79f6ca438ddfecaa9a08006aee2"}, - {file = "aiohttp-3.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db04d1de548f7a62d1dd7e7cdf7c22893ee168e22701895067a28a8ed51b3735"}, - {file = "aiohttp-3.9.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:536b01513d67d10baf6f71c72decdf492fb7433c5f2f133e9a9087379d4b6f31"}, - {file = "aiohttp-3.9.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c8b0a6487e8109427ccf638580865b54e2e3db4a6e0e11c02639231b41fc0f"}, - {file = "aiohttp-3.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7276fe0017664414fdc3618fca411630405f1aaf0cc3be69def650eb50441787"}, - {file = "aiohttp-3.9.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23170247ef89ffa842a02bbfdc425028574d9e010611659abeb24d890bc53bb8"}, - {file = "aiohttp-3.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b1a2ea8252cacc7fd51df5a56d7a2bb1986ed39be9397b51a08015727dfb69bd"}, - {file = "aiohttp-3.9.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2d71abc15ff7047412ef26bf812dfc8d0d1020d664617f4913df2df469f26b76"}, - {file = "aiohttp-3.9.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:2d820162c8c2bdbe97d328cd4f417c955ca370027dce593345e437b2e9ffdc4d"}, - {file = "aiohttp-3.9.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:2779f5e7c70f7b421915fd47db332c81de365678180a9f3ab404088f87ba5ff9"}, - {file = "aiohttp-3.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:366bc870d7ac61726f32a489fbe3d1d8876e87506870be66b01aeb84389e967e"}, - {file = "aiohttp-3.9.0-cp39-cp39-win32.whl", hash = "sha256:1df43596b826022b14998f0460926ce261544fedefe0d2f653e1b20f49e96454"}, - {file = "aiohttp-3.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:9c196b30f1b1aa3363a69dd69079ae9bec96c2965c4707eaa6914ba099fb7d4f"}, - {file = "aiohttp-3.9.0.tar.gz", hash = "sha256:09f23292d29135025e19e8ff4f0a68df078fe4ee013bca0105b2e803989de92d"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1f80197f8b0b846a8d5cf7b7ec6084493950d0882cc5537fb7b96a69e3c8590"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72444d17777865734aa1a4d167794c34b63e5883abb90356a0364a28904e6c0"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b05d5cbe9dafcdc733262c3a99ccf63d2f7ce02543620d2bd8db4d4f7a22f83"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c4fa235d534b3547184831c624c0b7c1e262cd1de847d95085ec94c16fddcd5"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:289ba9ae8e88d0ba16062ecf02dd730b34186ea3b1e7489046fc338bdc3361c4"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bff7e2811814fa2271be95ab6e84c9436d027a0e59665de60edf44e529a42c1f"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81b77f868814346662c96ab36b875d7814ebf82340d3284a31681085c051320f"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b9c7426923bb7bd66d409da46c41e3fb40f5caf679da624439b9eba92043fa6"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8d44e7bf06b0c0a70a20f9100af9fcfd7f6d9d3913e37754c12d424179b4e48f"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22698f01ff5653fe66d16ffb7658f582a0ac084d7da1323e39fd9eab326a1f26"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ca7ca5abfbfe8d39e653870fbe8d7710be7a857f8a8386fc9de1aae2e02ce7e4"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8d7f98fde213f74561be1d6d3fa353656197f75d4edfbb3d94c9eb9b0fc47f5d"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5216b6082c624b55cfe79af5d538e499cd5f5b976820eac31951fb4325974501"}, + {file = "aiohttp-3.9.1-cp310-cp310-win32.whl", hash = "sha256:0e7ba7ff228c0d9a2cd66194e90f2bca6e0abca810b786901a569c0de082f489"}, + {file = "aiohttp-3.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:c7e939f1ae428a86e4abbb9a7c4732bf4706048818dfd979e5e2839ce0159f23"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:df9cf74b9bc03d586fc53ba470828d7b77ce51b0582d1d0b5b2fb673c0baa32d"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ecca113f19d5e74048c001934045a2b9368d77b0b17691d905af18bd1c21275e"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8cef8710fb849d97c533f259103f09bac167a008d7131d7b2b0e3a33269185c0"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea94403a21eb94c93386d559bce297381609153e418a3ffc7d6bf772f59cc35"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91c742ca59045dce7ba76cab6e223e41d2c70d79e82c284a96411f8645e2afff"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c93b7c2e52061f0925c3382d5cb8980e40f91c989563d3d32ca280069fd6a87"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee2527134f95e106cc1653e9ac78846f3a2ec1004cf20ef4e02038035a74544d"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11ff168d752cb41e8492817e10fb4f85828f6a0142b9726a30c27c35a1835f01"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b8c3a67eb87394386847d188996920f33b01b32155f0a94f36ca0e0c635bf3e3"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c7b5d5d64e2a14e35a9240b33b89389e0035e6de8dbb7ffa50d10d8b65c57449"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:69985d50a2b6f709412d944ffb2e97d0be154ea90600b7a921f95a87d6f108a2"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c9110c06eaaac7e1f5562caf481f18ccf8f6fdf4c3323feab28a93d34cc646bd"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737e69d193dac7296365a6dcb73bbbf53bb760ab25a3727716bbd42022e8d7a"}, + {file = "aiohttp-3.9.1-cp311-cp311-win32.whl", hash = "sha256:4ee8caa925aebc1e64e98432d78ea8de67b2272252b0a931d2ac3bd876ad5544"}, + {file = "aiohttp-3.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:a34086c5cc285be878622e0a6ab897a986a6e8bf5b67ecb377015f06ed316587"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f800164276eec54e0af5c99feb9494c295118fc10a11b997bbb1348ba1a52065"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:500f1c59906cd142d452074f3811614be04819a38ae2b3239a48b82649c08821"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0b0a6a36ed7e164c6df1e18ee47afbd1990ce47cb428739d6c99aaabfaf1b3af"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69da0f3ed3496808e8cbc5123a866c41c12c15baaaead96d256477edf168eb57"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:176df045597e674fa950bf5ae536be85699e04cea68fa3a616cf75e413737eb5"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b796b44111f0cab6bbf66214186e44734b5baab949cb5fb56154142a92989aeb"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f27fdaadce22f2ef950fc10dcdf8048407c3b42b73779e48a4e76b3c35bca26c"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcb6532b9814ea7c5a6a3299747c49de30e84472fa72821b07f5a9818bce0f66"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:54631fb69a6e44b2ba522f7c22a6fb2667a02fd97d636048478db2fd8c4e98fe"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4b4c452d0190c5a820d3f5c0f3cd8a28ace48c54053e24da9d6041bf81113183"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:cae4c0c2ca800c793cae07ef3d40794625471040a87e1ba392039639ad61ab5b"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:565760d6812b8d78d416c3c7cfdf5362fbe0d0d25b82fed75d0d29e18d7fc30f"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54311eb54f3a0c45efb9ed0d0a8f43d1bc6060d773f6973efd90037a51cd0a3f"}, + {file = "aiohttp-3.9.1-cp312-cp312-win32.whl", hash = "sha256:85c3e3c9cb1d480e0b9a64c658cd66b3cfb8e721636ab8b0e746e2d79a7a9eed"}, + {file = "aiohttp-3.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:11cb254e397a82efb1805d12561e80124928e04e9c4483587ce7390b3866d213"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8a22a34bc594d9d24621091d1b91511001a7eea91d6652ea495ce06e27381f70"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:598db66eaf2e04aa0c8900a63b0101fdc5e6b8a7ddd805c56d86efb54eb66672"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c9376e2b09895c8ca8b95362283365eb5c03bdc8428ade80a864160605715f1"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41473de252e1797c2d2293804e389a6d6986ef37cbb4a25208de537ae32141dd"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c5857612c9813796960c00767645cb5da815af16dafb32d70c72a8390bbf690"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffcd828e37dc219a72c9012ec44ad2e7e3066bec6ff3aaa19e7d435dbf4032ca"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:219a16763dc0294842188ac8a12262b5671817042b35d45e44fd0a697d8c8361"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f694dc8a6a3112059258a725a4ebe9acac5fe62f11c77ac4dcf896edfa78ca28"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcc0ea8d5b74a41b621ad4a13d96c36079c81628ccc0b30cfb1603e3dfa3a014"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:90ec72d231169b4b8d6085be13023ece8fa9b1bb495e4398d847e25218e0f431"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cf2a0ac0615842b849f40c4d7f304986a242f1e68286dbf3bd7a835e4f83acfd"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:0e49b08eafa4f5707ecfb321ab9592717a319e37938e301d462f79b4e860c32a"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c59e0076ea31c08553e868cec02d22191c086f00b44610f8ab7363a11a5d9d8"}, + {file = "aiohttp-3.9.1-cp38-cp38-win32.whl", hash = "sha256:4831df72b053b1eed31eb00a2e1aff6896fb4485301d4ccb208cac264b648db4"}, + {file = "aiohttp-3.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:3135713c5562731ee18f58d3ad1bf41e1d8883eb68b363f2ffde5b2ea4b84cc7"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cfeadf42840c1e870dc2042a232a8748e75a36b52d78968cda6736de55582766"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:70907533db712f7aa791effb38efa96f044ce3d4e850e2d7691abd759f4f0ae0"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdefe289681507187e375a5064c7599f52c40343a8701761c802c1853a504558"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7481f581251bb5558ba9f635db70908819caa221fc79ee52a7f58392778c636"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49f0c1b3c2842556e5de35f122fc0f0b721334ceb6e78c3719693364d4af8499"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d406b01a9f5a7e232d1b0d161b40c05275ffbcbd772dc18c1d5a570961a1ca4"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d8e4450e7fe24d86e86b23cc209e0023177b6d59502e33807b732d2deb6975f"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c0266cd6f005e99f3f51e583012de2778e65af6b73860038b968a0a8888487a"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab221850108a4a063c5b8a70f00dd7a1975e5a1713f87f4ab26a46e5feac5a0e"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c88a15f272a0ad3d7773cf3a37cc7b7d077cbfc8e331675cf1346e849d97a4e5"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:237533179d9747080bcaad4d02083ce295c0d2eab3e9e8ce103411a4312991a0"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:02ab6006ec3c3463b528374c4cdce86434e7b89ad355e7bf29e2f16b46c7dd6f"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04fa38875e53eb7e354ece1607b1d2fdee2d175ea4e4d745f6ec9f751fe20c7c"}, + {file = "aiohttp-3.9.1-cp39-cp39-win32.whl", hash = "sha256:82eefaf1a996060602f3cc1112d93ba8b201dbf5d8fd9611227de2003dddb3b7"}, + {file = "aiohttp-3.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:9b05d33ff8e6b269e30a7957bd3244ffbce2a7a35a81b81c382629b80af1a8bf"}, + {file = "aiohttp-3.9.1.tar.gz", hash = "sha256:8fc49a87ac269d4529da45871e2ffb6874e87779c3d0e2ccd813c0899221239d"}, ] [package.dependencies] @@ -150,13 +150,13 @@ files = [ [[package]] name = "anyio" -version = "4.0.0" +version = "4.2.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" files = [ - {file = "anyio-4.0.0-py3-none-any.whl", hash = "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f"}, - {file = "anyio-4.0.0.tar.gz", hash = "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a"}, + {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"}, + {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"}, ] [package.dependencies] @@ -164,9 +164,9 @@ idna = ">=2.8" sniffio = ">=1.1" [package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.22)"] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] [[package]] name = "argon2-cffi" @@ -252,13 +252,13 @@ files = [ [[package]] name = "astroid" -version = "3.0.1" +version = "3.0.2" description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.8.0" files = [ - {file = "astroid-3.0.1-py3-none-any.whl", hash = "sha256:7d5895c9825e18079c5aeac0572bc2e4c83205c95d416e0b4fee8bc361d2d9ca"}, - {file = "astroid-3.0.1.tar.gz", hash = "sha256:86b0bb7d7da0be1a7c4aedb7974e391b32d4ed89e33de6ed6902b4b15c97577e"}, + {file = "astroid-3.0.2-py3-none-any.whl", hash = "sha256:d6e62862355f60e716164082d6b4b041d38e2a8cf1c7cd953ded5108bac8ff5c"}, + {file = "astroid-3.0.2.tar.gz", hash = "sha256:4a61cf0a59097c7bb52689b0fd63717cd2a8a14dc9f1eee97b82d814881c8c91"}, ] [[package]] @@ -341,18 +341,18 @@ pycodestyle = ">=2.10.0" [[package]] name = "bandit" -version = "1.7.5" +version = "1.7.6" description = "Security oriented static analyser for python code." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "bandit-1.7.5-py3-none-any.whl", hash = "sha256:75665181dc1e0096369112541a056c59d1c5f66f9bb74a8d686c3c362b83f549"}, - {file = "bandit-1.7.5.tar.gz", hash = "sha256:bdfc739baa03b880c2d15d0431b31c658ffc348e907fe197e54e0389dd59e11e"}, + {file = "bandit-1.7.6-py3-none-any.whl", hash = "sha256:36da17c67fc87579a5d20c323c8d0b1643a890a2b93f00b3d1229966624694ff"}, + {file = "bandit-1.7.6.tar.gz", hash = "sha256:72ce7bc9741374d96fb2f1c9a8960829885f1243ffde743de70a19cee353e8f3"}, ] [package.dependencies] colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} -GitPython = ">=1.0.1" +GitPython = ">=3.1.30" PyYAML = ">=5.3.1" rich = "*" stevedore = ">=1.20.0" @@ -364,32 +364,38 @@ yaml = ["PyYAML"] [[package]] name = "bcrypt" -version = "4.0.1" +version = "4.1.2" description = "Modern password hashing for your software and your servers" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "bcrypt-4.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:b1023030aec778185a6c16cf70f359cbb6e0c289fd564a7cfa29e727a1c38f8f"}, - {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:08d2947c490093a11416df18043c27abe3921558d2c03e2076ccb28a116cb6d0"}, - {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eaa47d4661c326bfc9d08d16debbc4edf78778e6aaba29c1bc7ce67214d4410"}, - {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae88eca3024bb34bb3430f964beab71226e761f51b912de5133470b649d82344"}, - {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:a522427293d77e1c29e303fc282e2d71864579527a04ddcfda6d4f8396c6c36a"}, - {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:fbdaec13c5105f0c4e5c52614d04f0bca5f5af007910daa8b6b12095edaa67b3"}, - {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ca3204d00d3cb2dfed07f2d74a25f12fc12f73e606fcaa6975d1f7ae69cacbb2"}, - {file = "bcrypt-4.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:089098effa1bc35dc055366740a067a2fc76987e8ec75349eb9484061c54f535"}, - {file = "bcrypt-4.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e9a51bbfe7e9802b5f3508687758b564069ba937748ad7b9e890086290d2f79e"}, - {file = "bcrypt-4.0.1-cp36-abi3-win32.whl", hash = "sha256:2caffdae059e06ac23fce178d31b4a702f2a3264c20bfb5ff541b338194d8fab"}, - {file = "bcrypt-4.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:8a68f4341daf7522fe8d73874de8906f3a339048ba406be6ddc1b3ccb16fc0d9"}, - {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf4fa8b2ca74381bb5442c089350f09a3f17797829d958fad058d6e44d9eb83c"}, - {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:67a97e1c405b24f19d08890e7ae0c4f7ce1e56a712a016746c8b2d7732d65d4b"}, - {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b3b85202d95dd568efcb35b53936c5e3b3600c7cdcc6115ba461df3a8e89f38d"}, - {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbb03eec97496166b704ed663a53680ab57c5084b2fc98ef23291987b525cb7d"}, - {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:5ad4d32a28b80c5fa6671ccfb43676e8c1cc232887759d1cd7b6f56ea4355215"}, - {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b57adba8a1444faf784394de3436233728a1ecaeb6e07e8c22c8848f179b893c"}, - {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:705b2cea8a9ed3d55b4491887ceadb0106acf7c6387699fca771af56b1cdeeda"}, - {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:2b3ac11cf45161628f1f3733263e63194f22664bf4d0c0f3ab34099c02134665"}, - {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3100851841186c25f127731b9fa11909ab7b1df6fc4b9f8353f4f1fd952fbf71"}, - {file = "bcrypt-4.0.1.tar.gz", hash = "sha256:27d375903ac8261cfe4047f6709d16f7d18d39b1ec92aaf72af989552a650ebd"}, + {file = "bcrypt-4.1.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:ac621c093edb28200728a9cca214d7e838529e557027ef0581685909acd28b5e"}, + {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea505c97a5c465ab8c3ba75c0805a102ce526695cd6818c6de3b1a38f6f60da1"}, + {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57fa9442758da926ed33a91644649d3e340a71e2d0a5a8de064fb621fd5a3326"}, + {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:eb3bd3321517916696233b5e0c67fd7d6281f0ef48e66812db35fc963a422a1c"}, + {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6cad43d8c63f34b26aef462b6f5e44fdcf9860b723d2453b5d391258c4c8e966"}, + {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:44290ccc827d3a24604f2c8bcd00d0da349e336e6503656cb8192133e27335e2"}, + {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:732b3920a08eacf12f93e6b04ea276c489f1c8fb49344f564cca2adb663b3e4c"}, + {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1c28973decf4e0e69cee78c68e30a523be441972c826703bb93099868a8ff5b5"}, + {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b8df79979c5bae07f1db22dcc49cc5bccf08a0380ca5c6f391cbb5790355c0b0"}, + {file = "bcrypt-4.1.2-cp37-abi3-win32.whl", hash = "sha256:fbe188b878313d01b7718390f31528be4010fed1faa798c5a1d0469c9c48c369"}, + {file = "bcrypt-4.1.2-cp37-abi3-win_amd64.whl", hash = "sha256:9800ae5bd5077b13725e2e3934aa3c9c37e49d3ea3d06318010aa40f54c63551"}, + {file = "bcrypt-4.1.2-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:71b8be82bc46cedd61a9f4ccb6c1a493211d031415a34adde3669ee1b0afbb63"}, + {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e3c6642077b0c8092580c819c1684161262b2e30c4f45deb000c38947bf483"}, + {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:387e7e1af9a4dd636b9505a465032f2f5cb8e61ba1120e79a0e1cd0b512f3dfc"}, + {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f70d9c61f9c4ca7d57f3bfe88a5ccf62546ffbadf3681bb1e268d9d2e41c91a7"}, + {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2a298db2a8ab20056120b45e86c00a0a5eb50ec4075b6142db35f593b97cb3fb"}, + {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ba55e40de38a24e2d78d34c2d36d6e864f93e0d79d0b6ce915e4335aa81d01b1"}, + {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:3566a88234e8de2ccae31968127b0ecccbb4cddb629da744165db72b58d88ca4"}, + {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b90e216dc36864ae7132cb151ffe95155a37a14e0de3a8f64b49655dd959ff9c"}, + {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:69057b9fc5093ea1ab00dd24ede891f3e5e65bee040395fb1e66ee196f9c9b4a"}, + {file = "bcrypt-4.1.2-cp39-abi3-win32.whl", hash = "sha256:02d9ef8915f72dd6daaef40e0baeef8a017ce624369f09754baf32bb32dba25f"}, + {file = "bcrypt-4.1.2-cp39-abi3-win_amd64.whl", hash = "sha256:be3ab1071662f6065899fe08428e45c16aa36e28bc42921c4901a191fda6ee42"}, + {file = "bcrypt-4.1.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d75fc8cd0ba23f97bae88a6ec04e9e5351ff3c6ad06f38fe32ba50cbd0d11946"}, + {file = "bcrypt-4.1.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:a97e07e83e3262599434816f631cc4c7ca2aa8e9c072c1b1a7fec2ae809a1d2d"}, + {file = "bcrypt-4.1.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e51c42750b7585cee7892c2614be0d14107fad9581d1738d954a262556dd1aab"}, + {file = "bcrypt-4.1.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba4e4cc26610581a6329b3937e02d319f5ad4b85b074846bf4fef8a8cf51e7bb"}, + {file = "bcrypt-4.1.2.tar.gz", hash = "sha256:33313a1200a3ae90b75587ceac502b048b840fc69e7f7a0905b5f87fac7a1258"}, ] [package.extras] @@ -409,29 +415,33 @@ files = [ [[package]] name = "black" -version = "23.11.0" +version = "23.12.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-23.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dbea0bb8575c6b6303cc65017b46351dc5953eea5c0a59d7b7e3a2d2f433a911"}, - {file = "black-23.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:412f56bab20ac85927f3a959230331de5614aecda1ede14b373083f62ec24e6f"}, - {file = "black-23.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d136ef5b418c81660ad847efe0e55c58c8208b77a57a28a503a5f345ccf01394"}, - {file = "black-23.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:6c1cac07e64433f646a9a838cdc00c9768b3c362805afc3fce341af0e6a9ae9f"}, - {file = "black-23.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cf57719e581cfd48c4efe28543fea3d139c6b6f1238b3f0102a9c73992cbb479"}, - {file = "black-23.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:698c1e0d5c43354ec5d6f4d914d0d553a9ada56c85415700b81dc90125aac244"}, - {file = "black-23.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:760415ccc20f9e8747084169110ef75d545f3b0932ee21368f63ac0fee86b221"}, - {file = "black-23.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:58e5f4d08a205b11800332920e285bd25e1a75c54953e05502052738fe16b3b5"}, - {file = "black-23.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:45aa1d4675964946e53ab81aeec7a37613c1cb71647b5394779e6efb79d6d187"}, - {file = "black-23.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c44b7211a3a0570cc097e81135faa5f261264f4dfaa22bd5ee2875a4e773bd6"}, - {file = "black-23.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a9acad1451632021ee0d146c8765782a0c3846e0e0ea46659d7c4f89d9b212b"}, - {file = "black-23.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:fc7f6a44d52747e65a02558e1d807c82df1d66ffa80a601862040a43ec2e3142"}, - {file = "black-23.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7f622b6822f02bfaf2a5cd31fdb7cd86fcf33dab6ced5185c35f5db98260b055"}, - {file = "black-23.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:250d7e60f323fcfc8ea6c800d5eba12f7967400eb6c2d21ae85ad31c204fb1f4"}, - {file = "black-23.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5133f5507007ba08d8b7b263c7aa0f931af5ba88a29beacc4b2dc23fcefe9c06"}, - {file = "black-23.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:421f3e44aa67138ab1b9bfbc22ee3780b22fa5b291e4db8ab7eee95200726b07"}, - {file = "black-23.11.0-py3-none-any.whl", hash = "sha256:54caaa703227c6e0c87b76326d0862184729a69b73d3b7305b6288e1d830067e"}, - {file = "black-23.11.0.tar.gz", hash = "sha256:4c68855825ff432d197229846f971bc4d6666ce90492e5b02013bcaca4d9ab05"}, + {file = "black-23.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:67f19562d367468ab59bd6c36a72b2c84bc2f16b59788690e02bbcb140a77175"}, + {file = "black-23.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bbd75d9f28a7283b7426160ca21c5bd640ca7cd8ef6630b4754b6df9e2da8462"}, + {file = "black-23.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:593596f699ca2dcbbbdfa59fcda7d8ad6604370c10228223cd6cf6ce1ce7ed7e"}, + {file = "black-23.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:12d5f10cce8dc27202e9a252acd1c9a426c83f95496c959406c96b785a92bb7d"}, + {file = "black-23.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e73c5e3d37e5a3513d16b33305713237a234396ae56769b839d7c40759b8a41c"}, + {file = "black-23.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ba09cae1657c4f8a8c9ff6cfd4a6baaf915bb4ef7d03acffe6a2f6585fa1bd01"}, + {file = "black-23.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace64c1a349c162d6da3cef91e3b0e78c4fc596ffde9413efa0525456148873d"}, + {file = "black-23.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:72db37a2266b16d256b3ea88b9affcdd5c41a74db551ec3dd4609a59c17d25bf"}, + {file = "black-23.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fdf6f23c83078a6c8da2442f4d4eeb19c28ac2a6416da7671b72f0295c4a697b"}, + {file = "black-23.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39dda060b9b395a6b7bf9c5db28ac87b3c3f48d4fdff470fa8a94ab8271da47e"}, + {file = "black-23.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7231670266ca5191a76cb838185d9be59cfa4f5dd401b7c1c70b993c58f6b1b5"}, + {file = "black-23.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:193946e634e80bfb3aec41830f5d7431f8dd5b20d11d89be14b84a97c6b8bc75"}, + {file = "black-23.12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcf91b01ddd91a2fed9a8006d7baa94ccefe7e518556470cf40213bd3d44bbbc"}, + {file = "black-23.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:996650a89fe5892714ea4ea87bc45e41a59a1e01675c42c433a35b490e5aa3f0"}, + {file = "black-23.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdbff34c487239a63d86db0c9385b27cdd68b1bfa4e706aa74bb94a435403672"}, + {file = "black-23.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:97af22278043a6a1272daca10a6f4d36c04dfa77e61cbaaf4482e08f3640e9f0"}, + {file = "black-23.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ead25c273adfad1095a8ad32afdb8304933efba56e3c1d31b0fee4143a1e424a"}, + {file = "black-23.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c71048345bdbced456cddf1622832276d98a710196b842407840ae8055ade6ee"}, + {file = "black-23.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a832b6e00eef2c13b3239d514ea3b7d5cc3eaa03d0474eedcbbda59441ba5d"}, + {file = "black-23.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:6a82a711d13e61840fb11a6dfecc7287f2424f1ca34765e70c909a35ffa7fb95"}, + {file = "black-23.12.0-py3-none-any.whl", hash = "sha256:a7c07db8200b5315dc07e331dda4d889a56f6bf4db6a9c2a526fa3166a81614f"}, + {file = "black-23.12.0.tar.gz", hash = "sha256:330a327b422aca0634ecd115985c1c7fd7bdb5b5a2ef8aa9888a82e2ebe9437a"}, ] [package.dependencies] @@ -443,7 +453,7 @@ platformdirs = ">=2" [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] @@ -522,13 +532,13 @@ test = ["coverage (>=7)", "hypothesis", "pytest"] [[package]] name = "celery" -version = "5.3.5" +version = "5.3.6" description = "Distributed Task Queue." optional = false python-versions = ">=3.8" files = [ - {file = "celery-5.3.5-py3-none-any.whl", hash = "sha256:30b75ac60fb081c2d9f8881382c148ed7c9052031a75a1e8743ff4b4b071f184"}, - {file = "celery-5.3.5.tar.gz", hash = "sha256:6b65d8dd5db499dd6190c45aa6398e171b99592f2af62c312f7391587feb5458"}, + {file = "celery-5.3.6-py3-none-any.whl", hash = "sha256:9da4ea0118d232ce97dff5ed4974587fb1c0ff5c10042eb15278487cdd27d1af"}, + {file = "celery-5.3.6.tar.gz", hash = "sha256:870cc71d737c0200c397290d730344cc991d13a057534353d124c9380267aab9"}, ] [package.dependencies] @@ -537,7 +547,7 @@ click = ">=8.1.2,<9.0" click-didyoumean = ">=0.3.0" click-plugins = ">=1.1.1" click-repl = ">=0.2.0" -kombu = ">=5.3.3,<6.0" +kombu = ">=5.3.4,<6.0" python-dateutil = ">=2.8.2" tzdata = ">=2022.7" vine = ">=5.1.0,<6.0" @@ -554,7 +564,7 @@ couchbase = ["couchbase (>=3.0.0)"] couchdb = ["pycouchdb (==1.14.2)"] django = ["Django (>=2.2.28)"] dynamodb = ["boto3 (>=1.26.143)"] -elasticsearch = ["elastic-transport (<=8.10.0)", "elasticsearch (<=8.10.1)"] +elasticsearch = ["elastic-transport (<=8.10.0)", "elasticsearch (<=8.11.0)"] eventlet = ["eventlet (>=0.32.0)"] gevent = ["gevent (>=1.5.0)"] librabbitmq = ["librabbitmq (>=2.0.0)"] @@ -894,63 +904,63 @@ files = [ [[package]] name = "coverage" -version = "7.3.2" +version = "7.3.3" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, - {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, - {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, - {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, - {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, - {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, - {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, - {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, - {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, - {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, - {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, - {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, - {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, - {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, - {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, - {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, - {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, - {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, - {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, - {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, - {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, - {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, + {file = "coverage-7.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d874434e0cb7b90f7af2b6e3309b0733cde8ec1476eb47db148ed7deeb2a9494"}, + {file = "coverage-7.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ee6621dccce8af666b8c4651f9f43467bfbf409607c604b840b78f4ff3619aeb"}, + {file = "coverage-7.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1367aa411afb4431ab58fd7ee102adb2665894d047c490649e86219327183134"}, + {file = "coverage-7.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f0f8f0c497eb9c9f18f21de0750c8d8b4b9c7000b43996a094290b59d0e7523"}, + {file = "coverage-7.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db0338c4b0951d93d547e0ff8d8ea340fecf5885f5b00b23be5aa99549e14cfd"}, + {file = "coverage-7.3.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d31650d313bd90d027f4be7663dfa2241079edd780b56ac416b56eebe0a21aab"}, + {file = "coverage-7.3.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9437a4074b43c177c92c96d051957592afd85ba00d3e92002c8ef45ee75df438"}, + {file = "coverage-7.3.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9e17d9cb06c13b4f2ef570355fa45797d10f19ca71395910b249e3f77942a837"}, + {file = "coverage-7.3.3-cp310-cp310-win32.whl", hash = "sha256:eee5e741b43ea1b49d98ab6e40f7e299e97715af2488d1c77a90de4a663a86e2"}, + {file = "coverage-7.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:593efa42160c15c59ee9b66c5f27a453ed3968718e6e58431cdfb2d50d5ad284"}, + {file = "coverage-7.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8c944cf1775235c0857829c275c777a2c3e33032e544bcef614036f337ac37bb"}, + {file = "coverage-7.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:eda7f6e92358ac9e1717ce1f0377ed2b9320cea070906ece4e5c11d172a45a39"}, + {file = "coverage-7.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c854c1d2c7d3e47f7120b560d1a30c1ca221e207439608d27bc4d08fd4aeae8"}, + {file = "coverage-7.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:222b038f08a7ebed1e4e78ccf3c09a1ca4ac3da16de983e66520973443b546bc"}, + {file = "coverage-7.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff4800783d85bff132f2cc7d007426ec698cdce08c3062c8d501ad3f4ea3d16c"}, + {file = "coverage-7.3.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fc200cec654311ca2c3f5ab3ce2220521b3d4732f68e1b1e79bef8fcfc1f2b97"}, + {file = "coverage-7.3.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:307aecb65bb77cbfebf2eb6e12009e9034d050c6c69d8a5f3f737b329f4f15fb"}, + {file = "coverage-7.3.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ffb0eacbadb705c0a6969b0adf468f126b064f3362411df95f6d4f31c40d31c1"}, + {file = "coverage-7.3.3-cp311-cp311-win32.whl", hash = "sha256:79c32f875fd7c0ed8d642b221cf81feba98183d2ff14d1f37a1bbce6b0347d9f"}, + {file = "coverage-7.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:243576944f7c1a1205e5cd658533a50eba662c74f9be4c050d51c69bd4532936"}, + {file = "coverage-7.3.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a2ac4245f18057dfec3b0074c4eb366953bca6787f1ec397c004c78176a23d56"}, + {file = "coverage-7.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f9191be7af41f0b54324ded600e8ddbcabea23e1e8ba419d9a53b241dece821d"}, + {file = "coverage-7.3.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31c0b1b8b5a4aebf8fcd227237fc4263aa7fa0ddcd4d288d42f50eff18b0bac4"}, + {file = "coverage-7.3.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee453085279df1bac0996bc97004771a4a052b1f1e23f6101213e3796ff3cb85"}, + {file = "coverage-7.3.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1191270b06ecd68b1d00897b2daddb98e1719f63750969614ceb3438228c088e"}, + {file = "coverage-7.3.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:007a7e49831cfe387473e92e9ff07377f6121120669ddc39674e7244350a6a29"}, + {file = "coverage-7.3.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:af75cf83c2d57717a8493ed2246d34b1f3398cb8a92b10fd7a1858cad8e78f59"}, + {file = "coverage-7.3.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:811ca7373da32f1ccee2927dc27dc523462fd30674a80102f86c6753d6681bc6"}, + {file = "coverage-7.3.3-cp312-cp312-win32.whl", hash = "sha256:733537a182b5d62184f2a72796eb6901299898231a8e4f84c858c68684b25a70"}, + {file = "coverage-7.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:e995efb191f04b01ced307dbd7407ebf6e6dc209b528d75583277b10fd1800ee"}, + {file = "coverage-7.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fbd8a5fe6c893de21a3c6835071ec116d79334fbdf641743332e442a3466f7ea"}, + {file = "coverage-7.3.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:50c472c1916540f8b2deef10cdc736cd2b3d1464d3945e4da0333862270dcb15"}, + {file = "coverage-7.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e9223a18f51d00d3ce239c39fc41410489ec7a248a84fab443fbb39c943616c"}, + {file = "coverage-7.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f501e36ac428c1b334c41e196ff6bd550c0353c7314716e80055b1f0a32ba394"}, + {file = "coverage-7.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:475de8213ed95a6b6283056d180b2442eee38d5948d735cd3d3b52b86dd65b92"}, + {file = "coverage-7.3.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:afdcc10c01d0db217fc0a64f58c7edd635b8f27787fea0a3054b856a6dff8717"}, + {file = "coverage-7.3.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:fff0b2f249ac642fd735f009b8363c2b46cf406d3caec00e4deeb79b5ff39b40"}, + {file = "coverage-7.3.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a1f76cfc122c9e0f62dbe0460ec9cc7696fc9a0293931a33b8870f78cf83a327"}, + {file = "coverage-7.3.3-cp38-cp38-win32.whl", hash = "sha256:757453848c18d7ab5d5b5f1827293d580f156f1c2c8cef45bfc21f37d8681069"}, + {file = "coverage-7.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:ad2453b852a1316c8a103c9c970db8fbc262f4f6b930aa6c606df9b2766eee06"}, + {file = "coverage-7.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b15e03b8ee6a908db48eccf4e4e42397f146ab1e91c6324da44197a45cb9132"}, + {file = "coverage-7.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:89400aa1752e09f666cc48708eaa171eef0ebe3d5f74044b614729231763ae69"}, + {file = "coverage-7.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c59a3e59fb95e6d72e71dc915e6d7fa568863fad0a80b33bc7b82d6e9f844973"}, + {file = "coverage-7.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ede881c7618f9cf93e2df0421ee127afdfd267d1b5d0c59bcea771cf160ea4a"}, + {file = "coverage-7.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3bfd2c2f0e5384276e12b14882bf2c7621f97c35320c3e7132c156ce18436a1"}, + {file = "coverage-7.3.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7f3bad1a9313401ff2964e411ab7d57fb700a2d5478b727e13f156c8f89774a0"}, + {file = "coverage-7.3.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:65d716b736f16e250435473c5ca01285d73c29f20097decdbb12571d5dfb2c94"}, + {file = "coverage-7.3.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a702e66483b1fe602717020a0e90506e759c84a71dbc1616dd55d29d86a9b91f"}, + {file = "coverage-7.3.3-cp39-cp39-win32.whl", hash = "sha256:7fbf3f5756e7955174a31fb579307d69ffca91ad163467ed123858ce0f3fd4aa"}, + {file = "coverage-7.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:cad9afc1644b979211989ec3ff7d82110b2ed52995c2f7263e7841c846a75348"}, + {file = "coverage-7.3.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:d299d379b676812e142fb57662a8d0d810b859421412b4d7af996154c00c31bb"}, + {file = "coverage-7.3.3.tar.gz", hash = "sha256:df04c64e58df96b4427db8d0559e95e2df3138c9916c96f9f6a4dd220db2fdb7"}, ] [package.extras] @@ -958,34 +968,34 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "41.0.5" +version = "41.0.7" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-41.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:da6a0ff8f1016ccc7477e6339e1d50ce5f59b88905585f77193ebd5068f1e797"}, - {file = "cryptography-41.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b948e09fe5fb18517d99994184854ebd50b57248736fd4c720ad540560174ec5"}, - {file = "cryptography-41.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d38e6031e113b7421db1de0c1b1f7739564a88f1684c6b89234fbf6c11b75147"}, - {file = "cryptography-41.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e270c04f4d9b5671ebcc792b3ba5d4488bf7c42c3c241a3748e2599776f29696"}, - {file = "cryptography-41.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ec3b055ff8f1dce8e6ef28f626e0972981475173d7973d63f271b29c8a2897da"}, - {file = "cryptography-41.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:7d208c21e47940369accfc9e85f0de7693d9a5d843c2509b3846b2db170dfd20"}, - {file = "cryptography-41.0.5-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:8254962e6ba1f4d2090c44daf50a547cd5f0bf446dc658a8e5f8156cae0d8548"}, - {file = "cryptography-41.0.5-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:a48e74dad1fb349f3dc1d449ed88e0017d792997a7ad2ec9587ed17405667e6d"}, - {file = "cryptography-41.0.5-cp37-abi3-win32.whl", hash = "sha256:d3977f0e276f6f5bf245c403156673db103283266601405376f075c849a0b936"}, - {file = "cryptography-41.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:73801ac9736741f220e20435f84ecec75ed70eda90f781a148f1bad546963d81"}, - {file = "cryptography-41.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3be3ca726e1572517d2bef99a818378bbcf7d7799d5372a46c79c29eb8d166c1"}, - {file = "cryptography-41.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e886098619d3815e0ad5790c973afeee2c0e6e04b4da90b88e6bd06e2a0b1b72"}, - {file = "cryptography-41.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:573eb7128cbca75f9157dcde974781209463ce56b5804983e11a1c462f0f4e88"}, - {file = "cryptography-41.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0c327cac00f082013c7c9fb6c46b7cc9fa3c288ca702c74773968173bda421bf"}, - {file = "cryptography-41.0.5-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:227ec057cd32a41c6651701abc0328135e472ed450f47c2766f23267b792a88e"}, - {file = "cryptography-41.0.5-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:22892cc830d8b2c89ea60148227631bb96a7da0c1b722f2aac8824b1b7c0b6b8"}, - {file = "cryptography-41.0.5-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:5a70187954ba7292c7876734183e810b728b4f3965fbe571421cb2434d279179"}, - {file = "cryptography-41.0.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:88417bff20162f635f24f849ab182b092697922088b477a7abd6664ddd82291d"}, - {file = "cryptography-41.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c707f7afd813478e2019ae32a7c49cd932dd60ab2d2a93e796f68236b7e1fbf1"}, - {file = "cryptography-41.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:580afc7b7216deeb87a098ef0674d6ee34ab55993140838b14c9b83312b37b86"}, - {file = "cryptography-41.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fba1e91467c65fe64a82c689dc6cf58151158993b13eb7a7f3f4b7f395636723"}, - {file = "cryptography-41.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d2a6a598847c46e3e321a7aef8af1436f11c27f1254933746304ff014664d84"}, - {file = "cryptography-41.0.5.tar.gz", hash = "sha256:392cb88b597247177172e02da6b7a63deeff1937fa6fec3bbf902ebd75d97ec7"}, + {file = "cryptography-41.0.7-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:3c78451b78313fa81607fa1b3f1ae0a5ddd8014c38a02d9db0616133987b9cdf"}, + {file = "cryptography-41.0.7-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:928258ba5d6f8ae644e764d0f996d61a8777559f72dfeb2eea7e2fe0ad6e782d"}, + {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a1b41bc97f1ad230a41657d9155113c7521953869ae57ac39ac7f1bb471469a"}, + {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:841df4caa01008bad253bce2a6f7b47f86dc9f08df4b433c404def869f590a15"}, + {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5429ec739a29df2e29e15d082f1d9ad683701f0ec7709ca479b3ff2708dae65a"}, + {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:43f2552a2378b44869fe8827aa19e69512e3245a219104438692385b0ee119d1"}, + {file = "cryptography-41.0.7-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:af03b32695b24d85a75d40e1ba39ffe7db7ffcb099fe507b39fd41a565f1b157"}, + {file = "cryptography-41.0.7-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:49f0805fc0b2ac8d4882dd52f4a3b935b210935d500b6b805f321addc8177406"}, + {file = "cryptography-41.0.7-cp37-abi3-win32.whl", hash = "sha256:f983596065a18a2183e7f79ab3fd4c475205b839e02cbc0efbbf9666c4b3083d"}, + {file = "cryptography-41.0.7-cp37-abi3-win_amd64.whl", hash = "sha256:90452ba79b8788fa380dfb587cca692976ef4e757b194b093d845e8d99f612f2"}, + {file = "cryptography-41.0.7-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:079b85658ea2f59c4f43b70f8119a52414cdb7be34da5d019a77bf96d473b960"}, + {file = "cryptography-41.0.7-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b640981bf64a3e978a56167594a0e97db71c89a479da8e175d8bb5be5178c003"}, + {file = "cryptography-41.0.7-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e3114da6d7f95d2dee7d3f4eec16dacff819740bbab931aff8648cb13c5ff5e7"}, + {file = "cryptography-41.0.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d5ec85080cce7b0513cfd233914eb8b7bbd0633f1d1703aa28d1dd5a72f678ec"}, + {file = "cryptography-41.0.7-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7a698cb1dac82c35fcf8fe3417a3aaba97de16a01ac914b89a0889d364d2f6be"}, + {file = "cryptography-41.0.7-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:37a138589b12069efb424220bf78eac59ca68b95696fc622b6ccc1c0a197204a"}, + {file = "cryptography-41.0.7-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:68a2dec79deebc5d26d617bfdf6e8aab065a4f34934b22d3b5010df3ba36612c"}, + {file = "cryptography-41.0.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:09616eeaef406f99046553b8a40fbf8b1e70795a91885ba4c96a70793de5504a"}, + {file = "cryptography-41.0.7-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48a0476626da912a44cc078f9893f292f0b3e4c739caf289268168d8f4702a39"}, + {file = "cryptography-41.0.7-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c7f3201ec47d5207841402594f1d7950879ef890c0c495052fa62f58283fde1a"}, + {file = "cryptography-41.0.7-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c5ca78485a255e03c32b513f8c2bc39fedb7f5c5f8535545bdc223a03b24f248"}, + {file = "cryptography-41.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d6c391c021ab1f7a82da5d8d0b3cee2f4b2c455ec86c8aebbc84837a631ff309"}, + {file = "cryptography-41.0.7.tar.gz", hash = "sha256:13f93ce9bea8016c253b34afc6bd6a75993e5c40672ed5405a9c832f0d4a00bc"}, ] [package.dependencies] @@ -1098,17 +1108,17 @@ graph = ["objgraph (>=1.7.2)"] [[package]] name = "django" -version = "4.2.7" +version = "5.0" description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" files = [ - {file = "Django-4.2.7-py3-none-any.whl", hash = "sha256:e1d37c51ad26186de355cbcec16613ebdabfa9689bbade9c538835205a8abbe9"}, - {file = "Django-4.2.7.tar.gz", hash = "sha256:8e0f1c2c2786b5c0e39fe1afce24c926040fad47c8ea8ad30aaf1188df29fc41"}, + {file = "Django-5.0-py3-none-any.whl", hash = "sha256:3a9fd52b8dbeae335ddf4a9dfa6c6a0853a1122f1fb071a8d5eca979f73a05c8"}, + {file = "Django-5.0.tar.gz", hash = "sha256:7d29e14dfbc19cb6a95a4bd669edbde11f5d4c6a71fdaa42c2d40b6846e807f7"}, ] [package.dependencies] -asgiref = ">=3.6.0,<4" +asgiref = ">=3.7.0" sqlparse = ">=0.3.1" tzdata = {version = "*", markers = "sys_platform == \"win32\""} @@ -1118,13 +1128,13 @@ bcrypt = ["bcrypt"] [[package]] name = "django-filter" -version = "23.4" +version = "23.5" description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically." optional = false python-versions = ">=3.7" files = [ - {file = "django-filter-23.4.tar.gz", hash = "sha256:bed070b38359dce7d2dbe057b165d59773057986356cb809ded983b36c77a976"}, - {file = "django_filter-23.4-py3-none-any.whl", hash = "sha256:526954f18bd7d6423f232a9a7974f58fbc6863908b9fc160de075e01adcc2a5f"}, + {file = "django-filter-23.5.tar.gz", hash = "sha256:67583aa43b91fe8c49f74a832d95f4d8442be628fd4c6d65e9f811f5153a4e5c"}, + {file = "django_filter-23.5-py3-none-any.whl", hash = "sha256:99122a201d83860aef4fe77758b69dda913e874cc5e0eaa50a86b0b18d708400"}, ] [package.dependencies] @@ -1259,13 +1269,13 @@ wmi = ["wmi (>=1.5.1,<2.0.0)"] [[package]] name = "docker" -version = "6.1.3" +version = "7.0.0" description = "A Python library for the Docker Engine API." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "docker-6.1.3-py3-none-any.whl", hash = "sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9"}, - {file = "docker-6.1.3.tar.gz", hash = "sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20"}, + {file = "docker-7.0.0-py3-none-any.whl", hash = "sha256:12ba681f2777a0ad28ffbcc846a69c31b4dfd9752b47eb425a274ee269c5e14b"}, + {file = "docker-7.0.0.tar.gz", hash = "sha256:323736fb92cd9418fc5e7133bc953e11a9da04f4483f828b527db553f1e7e5a3"}, ] [package.dependencies] @@ -1273,10 +1283,10 @@ packaging = ">=14.0" pywin32 = {version = ">=304", markers = "sys_platform == \"win32\""} requests = ">=2.26.0" urllib3 = ">=1.26.0" -websocket-client = ">=0.32.0" [package.extras] ssh = ["paramiko (>=2.4.3)"] +websockets = ["websocket-client (>=1.3.0)"] [[package]] name = "drf-jsonschema-serializer" @@ -1303,13 +1313,13 @@ tests = ["black", "django-stubs[compatible-mypy]", "djangorestframework-stubs[co [[package]] name = "drf-spectacular" -version = "0.26.5" +version = "0.27.0" description = "Sane and flexible OpenAPI 3 schema generation for Django REST framework" optional = false python-versions = ">=3.6" files = [ - {file = "drf-spectacular-0.26.5.tar.gz", hash = "sha256:aee55330a774ba8a9cbdb125714d1c9ee05a8aafd3ce3be8bfd26527649aeb44"}, - {file = "drf_spectacular-0.26.5-py3-none-any.whl", hash = "sha256:c0002a820b11771fdbf37853deb371947caf0159d1afeeffe7598e964bc1db94"}, + {file = "drf-spectacular-0.27.0.tar.gz", hash = "sha256:18d7ae74b2b5d533fd31f1c591ebaa5cce1447e0976ced927401e3163040dea9"}, + {file = "drf_spectacular-0.27.0-py3-none-any.whl", hash = "sha256:6ab2d20674244e8c940c2883f744b43c34fc68c70ea3aefa802f574108c9699b"}, ] [package.dependencies] @@ -1402,13 +1412,13 @@ tornado = ">=5.0.0,<7.0.0" [[package]] name = "freezegun" -version = "1.2.2" +version = "1.3.1" description = "Let your Python tests travel through time" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "freezegun-1.2.2-py3-none-any.whl", hash = "sha256:ea1b963b993cb9ea195adbd893a48d573fda951b0da64f60883d7e988b606c9f"}, - {file = "freezegun-1.2.2.tar.gz", hash = "sha256:cd22d1ba06941384410cd967d8a99d5ae2442f57dfafeff2fda5de8dc5c05446"}, + {file = "freezegun-1.3.1-py3-none-any.whl", hash = "sha256:065e77a12624d05531afa87ade12a0b9bdb53495c4573893252a055b545ce3ea"}, + {file = "freezegun-1.3.1.tar.gz", hash = "sha256:48984397b3b58ef5dfc645d6a304b0060f612bcecfdaaf45ce8aff0077a6cb6a"}, ] [package.dependencies] @@ -1416,89 +1426,109 @@ python-dateutil = ">=2.7" [[package]] name = "frozenlist" -version = "1.4.0" +version = "1.4.1" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" files = [ - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"}, - {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"}, - {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"}, - {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"}, - {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"}, - {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"}, - {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"}, - {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"}, - {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, - {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, + {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, + {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, + {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, + {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, + {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, + {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, + {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, + {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, + {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, + {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, + {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, + {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, ] [[package]] name = "geoip2" -version = "4.7.0" +version = "4.8.0" description = "MaxMind GeoIP2 API" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "geoip2-4.7.0-py2.py3-none-any.whl", hash = "sha256:078fcd4cce26ea029b1e3252a0f0ec20a1f42e7ab0f19b7be3864f20f4db2b51"}, - {file = "geoip2-4.7.0.tar.gz", hash = "sha256:3bdde4994f6bc917eafab5b51e772d737b2ae00037a5b85001fb06dc68f779df"}, + {file = "geoip2-4.8.0-py2.py3-none-any.whl", hash = "sha256:39b38ec703575355d10475c0e6aa981827a2b4b5471d308c4ecb5e79cbe366ce"}, + {file = "geoip2-4.8.0.tar.gz", hash = "sha256:dd9cc180b7d41724240ea481d5d539149e65b234f64282b231b9170794a9ac35"}, ] [package.dependencies] aiohttp = ">=3.6.2,<4.0.0" -maxminddb = ">=2.3.0,<3.0.0" +maxminddb = ">=2.5.1,<3.0.0" requests = ">=2.24.0,<3.0.0" +setuptools = ">=60.0.0" + +[package.extras] +test = ["mocket (>=3.11.1)"] [[package]] name = "gitdb" @@ -1533,13 +1563,13 @@ test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre [[package]] name = "google-auth" -version = "2.23.4" +version = "2.25.2" description = "Google Authentication Library" optional = false python-versions = ">=3.7" files = [ - {file = "google-auth-2.23.4.tar.gz", hash = "sha256:79905d6b1652187def79d491d6e23d0cbb3a21d3c7ba0dbaa9c8a01906b13ff3"}, - {file = "google_auth-2.23.4-py2.py3-none-any.whl", hash = "sha256:d4bbc92fe4b8bfd2f3e8d88e5ba7085935da208ee38a134fc280e7ce682a05f2"}, + {file = "google-auth-2.25.2.tar.gz", hash = "sha256:42f707937feb4f5e5a39e6c4f343a17300a459aaf03141457ba505812841cc40"}, + {file = "google_auth-2.25.2-py2.py3-none-any.whl", hash = "sha256:473a8dfd0135f75bb79d878436e568f2695dce456764bf3a02b6f8c540b1d256"}, ] [package.dependencies] @@ -1646,13 +1676,13 @@ test = ["Cython (>=0.29.24,<0.30.0)"] [[package]] name = "humanize" -version = "4.8.0" +version = "4.9.0" description = "Python humanize utilities" optional = false python-versions = ">=3.8" files = [ - {file = "humanize-4.8.0-py3-none-any.whl", hash = "sha256:8bc9e2bb9315e61ec06bf690151ae35aeb65651ab091266941edf97c90836404"}, - {file = "humanize-4.8.0.tar.gz", hash = "sha256:9783373bf1eec713a770ecaa7c2d7a7902c98398009dfa3d8a2df91eec9311e8"}, + {file = "humanize-4.9.0-py3-none-any.whl", hash = "sha256:ce284a76d5b1377fd8836733b983bfb0b76f1aa1c090de2566fcf008d7f6ab16"}, + {file = "humanize-4.9.0.tar.gz", hash = "sha256:582a265c931c683a7e9b8ed9559089dea7edcf6cc95be39a3cbc2c5d5ac2bcfa"}, ] [package.extras] @@ -1674,31 +1704,31 @@ idna = ">=2.5" [[package]] name = "idna" -version = "3.4" +version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] [[package]] name = "importlib-metadata" -version = "6.8.0" +version = "7.0.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, - {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, + {file = "importlib_metadata-7.0.0-py3-none-any.whl", hash = "sha256:d97503976bb81f40a193d41ee6570868479c69d5068651eb039c40d850c59d67"}, + {file = "importlib_metadata-7.0.0.tar.gz", hash = "sha256:7fc841f8b8332803464e5dc1c63a2e59121f46ca186c0e2e182e80bf8c1319f7"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] @@ -1741,20 +1771,17 @@ files = [ [[package]] name = "isort" -version = "5.12.0" +version = "5.13.2" description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.8.0" files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, ] [package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] +colors = ["colorama (>=0.4.6)"] [[package]] name = "jinja2" @@ -1821,13 +1848,13 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jsonschema-specifications" -version = "2023.11.1" +version = "2023.11.2" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema_specifications-2023.11.1-py3-none-any.whl", hash = "sha256:f596778ab612b3fd29f72ea0d990393d0540a5aab18bf0407a46632eab540779"}, - {file = "jsonschema_specifications-2023.11.1.tar.gz", hash = "sha256:c9b234904ffe02f079bf91b14d79987faa685fd4b39c377a0996954c0090b9ca"}, + {file = "jsonschema_specifications-2023.11.2-py3-none-any.whl", hash = "sha256:e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93"}, + {file = "jsonschema_specifications-2023.11.2.tar.gz", hash = "sha256:9472fc4fea474cd74bea4a2b190daeccb5a9e4db2ea80efcf7a1b582fc9a81b8"}, ] [package.dependencies] @@ -2410,13 +2437,13 @@ files = [ [[package]] name = "paramiko" -version = "3.3.1" +version = "3.4.0" description = "SSH2 protocol library" optional = false python-versions = ">=3.6" files = [ - {file = "paramiko-3.3.1-py3-none-any.whl", hash = "sha256:b7bc5340a43de4287bbe22fe6de728aa2c22468b2a849615498dd944c2f275eb"}, - {file = "paramiko-3.3.1.tar.gz", hash = "sha256:6a3777a961ac86dbef375c5f5b8d50014a1a96d0fd7f054a43bc880134b0ff77"}, + {file = "paramiko-3.4.0-py3-none-any.whl", hash = "sha256:43f0b51115a896f9c00f59618023484cb3a14b98bbceab43394a39c6739b7ee7"}, + {file = "paramiko-3.4.0.tar.gz", hash = "sha256:aac08f26a31dc4dffd92821527d1682d99d52f9ef6851968114a8728f3c274d3"}, ] [package.dependencies] @@ -2431,13 +2458,13 @@ invoke = ["invoke (>=2.0)"] [[package]] name = "pathspec" -version = "0.11.2" +version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] [[package]] @@ -2453,13 +2480,13 @@ files = [ [[package]] name = "pdoc" -version = "14.1.0" +version = "14.2.0" description = "API Documentation for Python Projects" optional = false python-versions = ">=3.8" files = [ - {file = "pdoc-14.1.0-py3-none-any.whl", hash = "sha256:e8869dffe21296b3bd5545b28e7f07cae0656082aca43f8915323187e541b126"}, - {file = "pdoc-14.1.0.tar.gz", hash = "sha256:3a0bd921a05c39a82b1505089eb6dc99d857b71b856aa60d1aca4d9086d0e18c"}, + {file = "pdoc-14.2.0-py3-none-any.whl", hash = "sha256:c9c0aa79090dcdcdb0a6c7e367cb0e241e891a836348ef741a8847397dcf98cc"}, + {file = "pdoc-14.2.0.tar.gz", hash = "sha256:a6fac864b2690391e89cb16b280603646eddaa5a2a3057c2973261b9a398416e"}, ] [package.dependencies] @@ -2468,17 +2495,17 @@ MarkupSafe = "*" pygments = ">=2.12.0" [package.extras] -dev = ["black", "hypothesis", "mypy", "pygments (>=2.14.0)", "pytest", "pytest-cov", "pytest-timeout", "ruff", "tox", "types-pygments"] +dev = ["hypothesis", "mypy", "pdoc-pyo3-sample-library (==1.0.11)", "pygments (>=2.14.0)", "pytest", "pytest-cov", "pytest-timeout", "ruff", "tox", "types-pygments"] [[package]] name = "platformdirs" -version = "4.0.0" +version = "4.1.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "platformdirs-4.0.0-py3-none-any.whl", hash = "sha256:118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b"}, - {file = "platformdirs-4.0.0.tar.gz", hash = "sha256:cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731"}, + {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, + {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, ] [package.extras] @@ -2502,13 +2529,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "prometheus-client" -version = "0.18.0" +version = "0.19.0" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.8" files = [ - {file = "prometheus_client-0.18.0-py3-none-any.whl", hash = "sha256:8de3ae2755f890826f4b6479e5571d4f74ac17a81345fe69a6778fdb92579184"}, - {file = "prometheus_client-0.18.0.tar.gz", hash = "sha256:35f7a8c22139e2bb7ca5a698e92d38145bc8dc74c1c0bf56f25cca886a764e17"}, + {file = "prometheus_client-0.19.0-py3-none-any.whl", hash = "sha256:c88b1e6ecf6b41cd8fb5731c7ae919bf66df6ec6fafa555cd6c0e16ca169ae92"}, + {file = "prometheus_client-0.19.0.tar.gz", hash = "sha256:4585b0d1223148c27a225b10dbec5ae9bc4c81a99a3fa80774fa6209935324e1"}, ] [package.extras] @@ -2516,13 +2543,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.41" +version = "3.0.43" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.41-py3-none-any.whl", hash = "sha256:f36fe301fafb7470e86aaf90f036eef600a3210be4decf461a5b1ca8403d3cb2"}, - {file = "prompt_toolkit-3.0.41.tar.gz", hash = "sha256:941367d97fc815548822aa26c2a269fdc4eb21e9ec05fc5d447cf09bad5d75f0"}, + {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, + {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"}, ] [package.dependencies] @@ -2530,23 +2557,23 @@ wcwidth = "*" [[package]] name = "psycopg" -version = "3.1.13" +version = "3.1.15" description = "PostgreSQL database adapter for Python" optional = false python-versions = ">=3.7" files = [ - {file = "psycopg-3.1.13-py3-none-any.whl", hash = "sha256:1253010894cfb64e2da4556d4eff5f05e45cafee641f64e02453be849c8f7687"}, - {file = "psycopg-3.1.13.tar.gz", hash = "sha256:e6d047ce16950651d6e26c7c19ca57cc42e1d4841b58729f691244baeee46e30"}, + {file = "psycopg-3.1.15-py3-none-any.whl", hash = "sha256:a6c03e508be0e42facb1e8581156fdc2904322fe8077ba4f298f5f0a947cb8e0"}, + {file = "psycopg-3.1.15.tar.gz", hash = "sha256:1b8e3e8d1612ea289a2684a5bf0c1f9a209549b222b6958377ce970a6e10b80c"}, ] [package.dependencies] -psycopg-c = {version = "3.1.13", optional = true, markers = "extra == \"c\""} +psycopg-c = {version = "3.1.15", optional = true, markers = "implementation_name != \"pypy\" and extra == \"c\""} typing-extensions = ">=4.1" tzdata = {version = "*", markers = "sys_platform == \"win32\""} [package.extras] -binary = ["psycopg-binary (==3.1.13)"] -c = ["psycopg-c (==3.1.13)"] +binary = ["psycopg-binary (==3.1.15)"] +c = ["psycopg-c (==3.1.15)"] dev = ["black (>=23.1.0)", "dnspython (>=2.1)", "flake8 (>=4.0)", "mypy (>=1.4.1)", "types-setuptools (>=57.4)", "wheel (>=0.37)"] docs = ["Sphinx (>=5.0)", "furo (==2022.6.21)", "sphinx-autobuild (>=2021.3.14)", "sphinx-autodoc-typehints (>=1.12)"] pool = ["psycopg-pool"] @@ -2554,23 +2581,23 @@ test = ["anyio (>=3.6.2,<4.0)", "mypy (>=1.4.1)", "pproxy (>=2.7)", "pytest (>=6 [[package]] name = "psycopg-c" -version = "3.1.13" +version = "3.1.15" description = "PostgreSQL database adapter for Python -- C optimisation distribution" optional = false python-versions = ">=3.7" files = [ - {file = "psycopg-c-3.1.13.tar.gz", hash = "sha256:a7f39d29e5ba46cdc5ff6b40a1e418dba034efd2faf7369a8b6d20effbd2a19d"}, + {file = "psycopg-c-3.1.15.tar.gz", hash = "sha256:7f1513e8fb494f54be83ec02b4f1c91c729b72510c192434c563c1d95bdc74b7"}, ] [[package]] name = "pyasn1" -version = "0.5.0" +version = "0.5.1" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, - {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, + {file = "pyasn1-0.5.1-py2.py3-none-any.whl", hash = "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58"}, + {file = "pyasn1-0.5.1.tar.gz", hash = "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c"}, ] [[package]] @@ -2652,19 +2679,19 @@ files = [ [[package]] name = "pydantic" -version = "2.5.1" +version = "2.5.2" description = "Data validation using Python type hints" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-2.5.1-py3-none-any.whl", hash = "sha256:dc5244a8939e0d9a68f1f1b5f550b2e1c879912033b1becbedb315accc75441b"}, - {file = "pydantic-2.5.1.tar.gz", hash = "sha256:0b8be5413c06aadfbe56f6dc1d45c9ed25fd43264414c571135c97dd77c2bedb"}, + {file = "pydantic-2.5.2-py3-none-any.whl", hash = "sha256:80c50fb8e3dcecfddae1adbcc00ec5822918490c99ab31f6cf6140ca1c1429f0"}, + {file = "pydantic-2.5.2.tar.gz", hash = "sha256:ff177ba64c6faf73d7afa2e8cad38fd456c0dbe01c9954e71038001cd15a6edd"}, ] [package.dependencies] annotated-types = ">=0.4.0" email-validator = {version = ">=2.0.0", optional = true, markers = "extra == \"email\""} -pydantic-core = "2.14.3" +pydantic-core = "2.14.5" typing-extensions = ">=4.6.1" [package.extras] @@ -2672,116 +2699,116 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.14.3" +version = "2.14.5" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic_core-2.14.3-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ba44fad1d114539d6a1509966b20b74d2dec9a5b0ee12dd7fd0a1bb7b8785e5f"}, - {file = "pydantic_core-2.14.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4a70d23eedd88a6484aa79a732a90e36701048a1509078d1b59578ef0ea2cdf5"}, - {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cc24728a1a9cef497697e53b3d085fb4d3bc0ef1ef4d9b424d9cf808f52c146"}, - {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab4a2381005769a4af2ffddae74d769e8a4aae42e970596208ec6d615c6fb080"}, - {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a12bf088d6fa20e094f9a477bf84bd823651d8b8384f59bcd50eaa92e6a52"}, - {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:38aed5a1bbc3025859f56d6a32f6e53ca173283cb95348e03480f333b1091e7d"}, - {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1767bd3f6370458e60c1d3d7b1d9c2751cc1ad743434e8ec84625a610c8b9195"}, - {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7cb0c397f29688a5bd2c0dbd44451bc44ebb9b22babc90f97db5ec3e5bb69977"}, - {file = "pydantic_core-2.14.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9ff737f24b34ed26de62d481ef522f233d3c5927279f6b7229de9b0deb3f76b5"}, - {file = "pydantic_core-2.14.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a1a39fecb5f0b19faee9a8a8176c805ed78ce45d760259a4ff3d21a7daa4dfc1"}, - {file = "pydantic_core-2.14.3-cp310-none-win32.whl", hash = "sha256:ccbf355b7276593c68fa824030e68cb29f630c50e20cb11ebb0ee450ae6b3d08"}, - {file = "pydantic_core-2.14.3-cp310-none-win_amd64.whl", hash = "sha256:536e1f58419e1ec35f6d1310c88496f0d60e4f182cacb773d38076f66a60b149"}, - {file = "pydantic_core-2.14.3-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:f1f46700402312bdc31912f6fc17f5ecaaaa3bafe5487c48f07c800052736289"}, - {file = "pydantic_core-2.14.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:88ec906eb2d92420f5b074f59cf9e50b3bb44f3cb70e6512099fdd4d88c2f87c"}, - {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:056ea7cc3c92a7d2a14b5bc9c9fa14efa794d9f05b9794206d089d06d3433dc7"}, - {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:076edc972b68a66870cec41a4efdd72a6b655c4098a232314b02d2bfa3bfa157"}, - {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e71f666c3bf019f2490a47dddb44c3ccea2e69ac882f7495c68dc14d4065eac2"}, - {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f518eac285c9632be337323eef9824a856f2680f943a9b68ac41d5f5bad7df7c"}, - {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dbab442a8d9ca918b4ed99db8d89d11b1f067a7dadb642476ad0889560dac79"}, - {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0653fb9fc2fa6787f2fa08631314ab7fc8070307bd344bf9471d1b7207c24623"}, - {file = "pydantic_core-2.14.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c54af5069da58ea643ad34ff32fd6bc4eebb8ae0fef9821cd8919063e0aeeaab"}, - {file = "pydantic_core-2.14.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc956f78651778ec1ab105196e90e0e5f5275884793ab67c60938c75bcca3989"}, - {file = "pydantic_core-2.14.3-cp311-none-win32.whl", hash = "sha256:5b73441a1159f1fb37353aaefb9e801ab35a07dd93cb8177504b25a317f4215a"}, - {file = "pydantic_core-2.14.3-cp311-none-win_amd64.whl", hash = "sha256:7349f99f1ef8b940b309179733f2cad2e6037a29560f1b03fdc6aa6be0a8d03c"}, - {file = "pydantic_core-2.14.3-cp311-none-win_arm64.whl", hash = "sha256:ec79dbe23702795944d2ae4c6925e35a075b88acd0d20acde7c77a817ebbce94"}, - {file = "pydantic_core-2.14.3-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:8f5624f0f67f2b9ecaa812e1dfd2e35b256487566585160c6c19268bf2ffeccc"}, - {file = "pydantic_core-2.14.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6c2d118d1b6c9e2d577e215567eedbe11804c3aafa76d39ec1f8bc74e918fd07"}, - {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe863491664c6720d65ae438d4efaa5eca766565a53adb53bf14bc3246c72fe0"}, - {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:136bc7247e97a921a020abbd6ef3169af97569869cd6eff41b6a15a73c44ea9b"}, - {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aeafc7f5bbddc46213707266cadc94439bfa87ecf699444de8be044d6d6eb26f"}, - {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e16aaf788f1de5a85c8f8fcc9c1ca1dd7dd52b8ad30a7889ca31c7c7606615b8"}, - {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8fc652c354d3362e2932a79d5ac4bbd7170757a41a62c4fe0f057d29f10bebb"}, - {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f1b92e72babfd56585c75caf44f0b15258c58e6be23bc33f90885cebffde3400"}, - {file = "pydantic_core-2.14.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:75f3f534f33651b73f4d3a16d0254de096f43737d51e981478d580f4b006b427"}, - {file = "pydantic_core-2.14.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c9ffd823c46e05ef3eb28b821aa7bc501efa95ba8880b4a1380068e32c5bed47"}, - {file = "pydantic_core-2.14.3-cp312-none-win32.whl", hash = "sha256:12e05a76b223577a4696c76d7a6b36a0ccc491ffb3c6a8cf92d8001d93ddfd63"}, - {file = "pydantic_core-2.14.3-cp312-none-win_amd64.whl", hash = "sha256:1582f01eaf0537a696c846bea92082082b6bfc1103a88e777e983ea9fbdc2a0f"}, - {file = "pydantic_core-2.14.3-cp312-none-win_arm64.whl", hash = "sha256:96fb679c7ca12a512d36d01c174a4fbfd912b5535cc722eb2c010c7b44eceb8e"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:71ed769b58d44e0bc2701aa59eb199b6665c16e8a5b8b4a84db01f71580ec448"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:5402ee0f61e7798ea93a01b0489520f2abfd9b57b76b82c93714c4318c66ca06"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eaab9dc009e22726c62fe3b850b797e7f0e7ba76d245284d1064081f512c7226"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92486a04d54987054f8b4405a9af9d482e5100d6fe6374fc3303015983fc8bda"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cf08b43d1d5d1678f295f0431a4a7e1707d4652576e1d0f8914b5e0213bfeee5"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8ca13480ce16daad0504be6ce893b0ee8ec34cd43b993b754198a89e2787f7e"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44afa3c18d45053fe8d8228950ee4c8eaf3b5a7f3b64963fdeac19b8342c987f"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56814b41486e2d712a8bc02a7b1f17b87fa30999d2323bbd13cf0e52296813a1"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c3dc2920cc96f9aa40c6dc54256e436cc95c0a15562eb7bd579e1811593c377e"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e483b8b913fcd3b48badec54185c150cb7ab0e6487914b84dc7cde2365e0c892"}, - {file = "pydantic_core-2.14.3-cp37-none-win32.whl", hash = "sha256:364dba61494e48f01ef50ae430e392f67ee1ee27e048daeda0e9d21c3ab2d609"}, - {file = "pydantic_core-2.14.3-cp37-none-win_amd64.whl", hash = "sha256:a402ae1066be594701ac45661278dc4a466fb684258d1a2c434de54971b006ca"}, - {file = "pydantic_core-2.14.3-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:10904368261e4509c091cbcc067e5a88b070ed9a10f7ad78f3029c175487490f"}, - {file = "pydantic_core-2.14.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:260692420028319e201b8649b13ac0988974eeafaaef95d0dfbf7120c38dc000"}, - {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c1bf1a7b05a65d3b37a9adea98e195e0081be6b17ca03a86f92aeb8b110f468"}, - {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7abd17a838a52140e3aeca271054e321226f52df7e0a9f0da8f91ea123afe98"}, - {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5c51460ede609fbb4fa883a8fe16e749964ddb459966d0518991ec02eb8dfb9"}, - {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d06c78074646111fb01836585f1198367b17d57c9f427e07aaa9ff499003e58d"}, - {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af452e69446fadf247f18ac5d153b1f7e61ef708f23ce85d8c52833748c58075"}, - {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e3ad4968711fb379a67c8c755beb4dae8b721a83737737b7bcee27c05400b047"}, - {file = "pydantic_core-2.14.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c5ea0153482e5b4d601c25465771c7267c99fddf5d3f3bdc238ef930e6d051cf"}, - {file = "pydantic_core-2.14.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:96eb10ef8920990e703da348bb25fedb8b8653b5966e4e078e5be382b430f9e0"}, - {file = "pydantic_core-2.14.3-cp38-none-win32.whl", hash = "sha256:ea1498ce4491236d1cffa0eee9ad0968b6ecb0c1cd711699c5677fc689905f00"}, - {file = "pydantic_core-2.14.3-cp38-none-win_amd64.whl", hash = "sha256:2bc736725f9bd18a60eec0ed6ef9b06b9785454c8d0105f2be16e4d6274e63d0"}, - {file = "pydantic_core-2.14.3-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:1ea992659c03c3ea811d55fc0a997bec9dde863a617cc7b25cfde69ef32e55af"}, - {file = "pydantic_core-2.14.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d2b53e1f851a2b406bbb5ac58e16c4a5496038eddd856cc900278fa0da97f3fc"}, - {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c7f8e8a7cf8e81ca7d44bea4f181783630959d41b4b51d2f74bc50f348a090f"}, - {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8d3b9c91eeb372a64ec6686c1402afd40cc20f61a0866850f7d989b6bf39a41a"}, - {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ef3e2e407e4cad2df3c89488a761ed1f1c33f3b826a2ea9a411b0a7d1cccf1b"}, - {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f86f20a9d5bee1a6ede0f2757b917bac6908cde0f5ad9fcb3606db1e2968bcf5"}, - {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61beaa79d392d44dc19d6f11ccd824d3cccb865c4372157c40b92533f8d76dd0"}, - {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d41df8e10b094640a6b234851b624b76a41552f637b9fb34dc720b9fe4ef3be4"}, - {file = "pydantic_core-2.14.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c08ac60c3caa31f825b5dbac47e4875bd4954d8f559650ad9e0b225eaf8ed0c"}, - {file = "pydantic_core-2.14.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d8b3932f1a369364606417ded5412c4ffb15bedbcf797c31317e55bd5d920e"}, - {file = "pydantic_core-2.14.3-cp39-none-win32.whl", hash = "sha256:caa94726791e316f0f63049ee00dff3b34a629b0d099f3b594770f7d0d8f1f56"}, - {file = "pydantic_core-2.14.3-cp39-none-win_amd64.whl", hash = "sha256:2494d20e4c22beac30150b4be3b8339bf2a02ab5580fa6553ca274bc08681a65"}, - {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:fe272a72c7ed29f84c42fedd2d06c2f9858dc0c00dae3b34ba15d6d8ae0fbaaf"}, - {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7e63a56eb7fdee1587d62f753ccd6d5fa24fbeea57a40d9d8beaef679a24bdd6"}, - {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7692f539a26265cece1e27e366df5b976a6db6b1f825a9e0466395b314ee48b"}, - {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af46f0b7a1342b49f208fed31f5a83b8495bb14b652f621e0a6787d2f10f24ee"}, - {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6e2f9d76c00e805d47f19c7a96a14e4135238a7551a18bfd89bb757993fd0933"}, - {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:de52ddfa6e10e892d00f747bf7135d7007302ad82e243cf16d89dd77b03b649d"}, - {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:38113856c7fad8c19be7ddd57df0c3e77b1b2336459cb03ee3903ce9d5e236ce"}, - {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:354db020b1f8f11207b35360b92d95725621eb92656725c849a61e4b550f4acc"}, - {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:76fc18653a5c95e5301a52d1b5afb27c9adc77175bf00f73e94f501caf0e05ad"}, - {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2646f8270f932d79ba61102a15ea19a50ae0d43b314e22b3f8f4b5fabbfa6e38"}, - {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37dad73a2f82975ed563d6a277fd9b50e5d9c79910c4aec787e2d63547202315"}, - {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:113752a55a8eaece2e4ac96bc8817f134c2c23477e477d085ba89e3aa0f4dc44"}, - {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:8488e973547e8fb1b4193fd9faf5236cf1b7cd5e9e6dc7ff6b4d9afdc4c720cb"}, - {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3d1dde10bd9962b1434053239b1d5490fc31a2b02d8950a5f731bc584c7a5a0f"}, - {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:2c83892c7bf92b91d30faca53bb8ea21f9d7e39f0ae4008ef2c2f91116d0464a"}, - {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:849cff945284c577c5f621d2df76ca7b60f803cc8663ff01b778ad0af0e39bb9"}, - {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa89919fbd8a553cd7d03bf23d5bc5deee622e1b5db572121287f0e64979476"}, - {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf15145b1f8056d12c67255cd3ce5d317cd4450d5ee747760d8d088d85d12a2d"}, - {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4cc6bb11f4e8e5ed91d78b9880774fbc0856cb226151b0a93b549c2b26a00c19"}, - {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:832d16f248ca0cc96929139734ec32d21c67669dcf8a9f3f733c85054429c012"}, - {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b02b5e1f54c3396c48b665050464803c23c685716eb5d82a1d81bf81b5230da4"}, - {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:1f2d4516c32255782153e858f9a900ca6deadfb217fd3fb21bb2b60b4e04d04d"}, - {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0a3e51c2be472b7867eb0c5d025b91400c2b73a0823b89d4303a9097e2ec6655"}, - {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:df33902464410a1f1a0411a235f0a34e7e129f12cb6340daca0f9d1390f5fe10"}, - {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27828f0227b54804aac6fb077b6bb48e640b5435fdd7fbf0c274093a7b78b69c"}, - {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e2979dc80246e18e348de51246d4c9b410186ffa3c50e77924bec436b1e36cb"}, - {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b28996872b48baf829ee75fa06998b607c66a4847ac838e6fd7473a6b2ab68e7"}, - {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ca55c9671bb637ce13d18ef352fd32ae7aba21b4402f300a63f1fb1fd18e0364"}, - {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:aecd5ed096b0e5d93fb0367fd8f417cef38ea30b786f2501f6c34eabd9062c38"}, - {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:44aaf1a07ad0824e407dafc637a852e9a44d94664293bbe7d8ee549c356c8882"}, - {file = "pydantic_core-2.14.3.tar.gz", hash = "sha256:3ad083df8fe342d4d8d00cc1d3c1a23f0dc84fce416eb301e69f1ddbbe124d3f"}, + {file = "pydantic_core-2.14.5-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:7e88f5696153dc516ba6e79f82cc4747e87027205f0e02390c21f7cb3bd8abfd"}, + {file = "pydantic_core-2.14.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4641e8ad4efb697f38a9b64ca0523b557c7931c5f84e0fd377a9a3b05121f0de"}, + {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:774de879d212db5ce02dfbf5b0da9a0ea386aeba12b0b95674a4ce0593df3d07"}, + {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ebb4e035e28f49b6f1a7032920bb9a0c064aedbbabe52c543343d39341a5b2a3"}, + {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b53e9ad053cd064f7e473a5f29b37fc4cc9dc6d35f341e6afc0155ea257fc911"}, + {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aa1768c151cf562a9992462239dfc356b3d1037cc5a3ac829bb7f3bda7cc1f9"}, + {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eac5c82fc632c599f4639a5886f96867ffced74458c7db61bc9a66ccb8ee3113"}, + {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2ae91f50ccc5810b2f1b6b858257c9ad2e08da70bf890dee02de1775a387c66"}, + {file = "pydantic_core-2.14.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6b9ff467ffbab9110e80e8c8de3bcfce8e8b0fd5661ac44a09ae5901668ba997"}, + {file = "pydantic_core-2.14.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:61ea96a78378e3bd5a0be99b0e5ed00057b71f66115f5404d0dae4819f495093"}, + {file = "pydantic_core-2.14.5-cp310-none-win32.whl", hash = "sha256:bb4c2eda937a5e74c38a41b33d8c77220380a388d689bcdb9b187cf6224c9720"}, + {file = "pydantic_core-2.14.5-cp310-none-win_amd64.whl", hash = "sha256:b7851992faf25eac90bfcb7bfd19e1f5ffa00afd57daec8a0042e63c74a4551b"}, + {file = "pydantic_core-2.14.5-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:4e40f2bd0d57dac3feb3a3aed50f17d83436c9e6b09b16af271b6230a2915459"}, + {file = "pydantic_core-2.14.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab1cdb0f14dc161ebc268c09db04d2c9e6f70027f3b42446fa11c153521c0e88"}, + {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aae7ea3a1c5bb40c93cad361b3e869b180ac174656120c42b9fadebf685d121b"}, + {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:60b7607753ba62cf0739177913b858140f11b8af72f22860c28eabb2f0a61937"}, + {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2248485b0322c75aee7565d95ad0e16f1c67403a470d02f94da7344184be770f"}, + {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:823fcc638f67035137a5cd3f1584a4542d35a951c3cc68c6ead1df7dac825c26"}, + {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96581cfefa9123accc465a5fd0cc833ac4d75d55cc30b633b402e00e7ced00a6"}, + {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a33324437018bf6ba1bb0f921788788641439e0ed654b233285b9c69704c27b4"}, + {file = "pydantic_core-2.14.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9bd18fee0923ca10f9a3ff67d4851c9d3e22b7bc63d1eddc12f439f436f2aada"}, + {file = "pydantic_core-2.14.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:853a2295c00f1d4429db4c0fb9475958543ee80cfd310814b5c0ef502de24dda"}, + {file = "pydantic_core-2.14.5-cp311-none-win32.whl", hash = "sha256:cb774298da62aea5c80a89bd58c40205ab4c2abf4834453b5de207d59d2e1651"}, + {file = "pydantic_core-2.14.5-cp311-none-win_amd64.whl", hash = "sha256:e87fc540c6cac7f29ede02e0f989d4233f88ad439c5cdee56f693cc9c1c78077"}, + {file = "pydantic_core-2.14.5-cp311-none-win_arm64.whl", hash = "sha256:57d52fa717ff445cb0a5ab5237db502e6be50809b43a596fb569630c665abddf"}, + {file = "pydantic_core-2.14.5-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:e60f112ac88db9261ad3a52032ea46388378034f3279c643499edb982536a093"}, + {file = "pydantic_core-2.14.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6e227c40c02fd873c2a73a98c1280c10315cbebe26734c196ef4514776120aeb"}, + {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0cbc7fff06a90bbd875cc201f94ef0ee3929dfbd5c55a06674b60857b8b85ed"}, + {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:103ef8d5b58596a731b690112819501ba1db7a36f4ee99f7892c40da02c3e189"}, + {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c949f04ecad823f81b1ba94e7d189d9dfb81edbb94ed3f8acfce41e682e48cef"}, + {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1452a1acdf914d194159439eb21e56b89aa903f2e1c65c60b9d874f9b950e5d"}, + {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb4679d4c2b089e5ef89756bc73e1926745e995d76e11925e3e96a76d5fa51fc"}, + {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cf9d3fe53b1ee360e2421be95e62ca9b3296bf3f2fb2d3b83ca49ad3f925835e"}, + {file = "pydantic_core-2.14.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:70f4b4851dbb500129681d04cc955be2a90b2248d69273a787dda120d5cf1f69"}, + {file = "pydantic_core-2.14.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:59986de5710ad9613ff61dd9b02bdd2f615f1a7052304b79cc8fa2eb4e336d2d"}, + {file = "pydantic_core-2.14.5-cp312-none-win32.whl", hash = "sha256:699156034181e2ce106c89ddb4b6504c30db8caa86e0c30de47b3e0654543260"}, + {file = "pydantic_core-2.14.5-cp312-none-win_amd64.whl", hash = "sha256:5baab5455c7a538ac7e8bf1feec4278a66436197592a9bed538160a2e7d11e36"}, + {file = "pydantic_core-2.14.5-cp312-none-win_arm64.whl", hash = "sha256:e47e9a08bcc04d20975b6434cc50bf82665fbc751bcce739d04a3120428f3e27"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:af36f36538418f3806048f3b242a1777e2540ff9efaa667c27da63d2749dbce0"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:45e95333b8418ded64745f14574aa9bfc212cb4fbeed7a687b0c6e53b5e188cd"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e47a76848f92529879ecfc417ff88a2806438f57be4a6a8bf2961e8f9ca9ec7"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d81e6987b27bc7d101c8597e1cd2bcaa2fee5e8e0f356735c7ed34368c471550"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34708cc82c330e303f4ce87758828ef6e457681b58ce0e921b6e97937dd1e2a3"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:652c1988019752138b974c28f43751528116bcceadad85f33a258869e641d753"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e4d090e73e0725b2904fdbdd8d73b8802ddd691ef9254577b708d413bf3006e"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5c7d5b5005f177764e96bd584d7bf28d6e26e96f2a541fdddb934c486e36fd59"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a71891847f0a73b1b9eb86d089baee301477abef45f7eaf303495cd1473613e4"}, + {file = "pydantic_core-2.14.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a717aef6971208f0851a2420b075338e33083111d92041157bbe0e2713b37325"}, + {file = "pydantic_core-2.14.5-cp37-none-win32.whl", hash = "sha256:de790a3b5aa2124b8b78ae5faa033937a72da8efe74b9231698b5a1dd9be3405"}, + {file = "pydantic_core-2.14.5-cp37-none-win_amd64.whl", hash = "sha256:6c327e9cd849b564b234da821236e6bcbe4f359a42ee05050dc79d8ed2a91588"}, + {file = "pydantic_core-2.14.5-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ef98ca7d5995a82f43ec0ab39c4caf6a9b994cb0b53648ff61716370eadc43cf"}, + {file = "pydantic_core-2.14.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6eae413494a1c3f89055da7a5515f32e05ebc1a234c27674a6956755fb2236f"}, + {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcf4e6d85614f7a4956c2de5a56531f44efb973d2fe4a444d7251df5d5c4dcfd"}, + {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6637560562134b0e17de333d18e69e312e0458ee4455bdad12c37100b7cad706"}, + {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77fa384d8e118b3077cccfcaf91bf83c31fe4dc850b5e6ee3dc14dc3d61bdba1"}, + {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16e29bad40bcf97aac682a58861249ca9dcc57c3f6be22f506501833ddb8939c"}, + {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531f4b4252fac6ca476fbe0e6f60f16f5b65d3e6b583bc4d87645e4e5ddde331"}, + {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:074f3d86f081ce61414d2dc44901f4f83617329c6f3ab49d2bc6c96948b2c26b"}, + {file = "pydantic_core-2.14.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c2adbe22ab4babbca99c75c5d07aaf74f43c3195384ec07ccbd2f9e3bddaecec"}, + {file = "pydantic_core-2.14.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0f6116a558fd06d1b7c2902d1c4cf64a5bd49d67c3540e61eccca93f41418124"}, + {file = "pydantic_core-2.14.5-cp38-none-win32.whl", hash = "sha256:fe0a5a1025eb797752136ac8b4fa21aa891e3d74fd340f864ff982d649691867"}, + {file = "pydantic_core-2.14.5-cp38-none-win_amd64.whl", hash = "sha256:079206491c435b60778cf2b0ee5fd645e61ffd6e70c47806c9ed51fc75af078d"}, + {file = "pydantic_core-2.14.5-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:a6a16f4a527aae4f49c875da3cdc9508ac7eef26e7977952608610104244e1b7"}, + {file = "pydantic_core-2.14.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:abf058be9517dc877227ec3223f0300034bd0e9f53aebd63cf4456c8cb1e0863"}, + {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49b08aae5013640a3bfa25a8eebbd95638ec3f4b2eaf6ed82cf0c7047133f03b"}, + {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c2d97e906b4ff36eb464d52a3bc7d720bd6261f64bc4bcdbcd2c557c02081ed2"}, + {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3128e0bbc8c091ec4375a1828d6118bc20404883169ac95ffa8d983b293611e6"}, + {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88e74ab0cdd84ad0614e2750f903bb0d610cc8af2cc17f72c28163acfcf372a4"}, + {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c339dabd8ee15f8259ee0f202679b6324926e5bc9e9a40bf981ce77c038553db"}, + {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3387277f1bf659caf1724e1afe8ee7dbc9952a82d90f858ebb931880216ea955"}, + {file = "pydantic_core-2.14.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ba6b6b3846cfc10fdb4c971980a954e49d447cd215ed5a77ec8190bc93dd7bc5"}, + {file = "pydantic_core-2.14.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ca61d858e4107ce5e1330a74724fe757fc7135190eb5ce5c9d0191729f033209"}, + {file = "pydantic_core-2.14.5-cp39-none-win32.whl", hash = "sha256:ec1e72d6412f7126eb7b2e3bfca42b15e6e389e1bc88ea0069d0cc1742f477c6"}, + {file = "pydantic_core-2.14.5-cp39-none-win_amd64.whl", hash = "sha256:c0b97ec434041827935044bbbe52b03d6018c2897349670ff8fe11ed24d1d4ab"}, + {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:79e0a2cdbdc7af3f4aee3210b1172ab53d7ddb6a2d8c24119b5706e622b346d0"}, + {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:678265f7b14e138d9a541ddabbe033012a2953315739f8cfa6d754cc8063e8ca"}, + {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95b15e855ae44f0c6341ceb74df61b606e11f1087e87dcb7482377374aac6abe"}, + {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09b0e985fbaf13e6b06a56d21694d12ebca6ce5414b9211edf6f17738d82b0f8"}, + {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ad873900297bb36e4b6b3f7029d88ff9829ecdc15d5cf20161775ce12306f8a"}, + {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2d0ae0d8670164e10accbeb31d5ad45adb71292032d0fdb9079912907f0085f4"}, + {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d37f8ec982ead9ba0a22a996129594938138a1503237b87318392a48882d50b7"}, + {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:35613015f0ba7e14c29ac6c2483a657ec740e5ac5758d993fdd5870b07a61d8b"}, + {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab4ea451082e684198636565224bbb179575efc1658c48281b2c866bfd4ddf04"}, + {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ce601907e99ea5b4adb807ded3570ea62186b17f88e271569144e8cca4409c7"}, + {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb2ed8b3fe4bf4506d6dab3b93b83bbc22237e230cba03866d561c3577517d18"}, + {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70f947628e074bb2526ba1b151cee10e4c3b9670af4dbb4d73bc8a89445916b5"}, + {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4bc536201426451f06f044dfbf341c09f540b4ebdb9fd8d2c6164d733de5e634"}, + {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f4791cf0f8c3104ac668797d8c514afb3431bc3305f5638add0ba1a5a37e0d88"}, + {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:038c9f763e650712b899f983076ce783175397c848da04985658e7628cbe873b"}, + {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:27548e16c79702f1e03f5628589c6057c9ae17c95b4c449de3c66b589ead0520"}, + {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97bee68898f3f4344eb02fec316db93d9700fb1e6a5b760ffa20d71d9a46ce3"}, + {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9b759b77f5337b4ea024f03abc6464c9f35d9718de01cfe6bae9f2e139c397e"}, + {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:439c9afe34638ace43a49bf72d201e0ffc1a800295bed8420c2a9ca8d5e3dbb3"}, + {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ba39688799094c75ea8a16a6b544eb57b5b0f3328697084f3f2790892510d144"}, + {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ccd4d5702bb90b84df13bd491be8d900b92016c5a455b7e14630ad7449eb03f8"}, + {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:81982d78a45d1e5396819bbb4ece1fadfe5f079335dd28c4ab3427cd95389944"}, + {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:7f8210297b04e53bc3da35db08b7302a6a1f4889c79173af69b72ec9754796b8"}, + {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:8c8a8812fe6f43a3a5b054af6ac2d7b8605c7bcab2804a8a7d68b53f3cd86e00"}, + {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:206ed23aecd67c71daf5c02c3cd19c0501b01ef3cbf7782db9e4e051426b3d0d"}, + {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2027d05c8aebe61d898d4cffd774840a9cb82ed356ba47a90d99ad768f39789"}, + {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40180930807ce806aa71eda5a5a5447abb6b6a3c0b4b3b1b1962651906484d68"}, + {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:615a0a4bff11c45eb3c1996ceed5bdaa2f7b432425253a7c2eed33bb86d80abc"}, + {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5e412d717366e0677ef767eac93566582518fe8be923361a5c204c1a62eaafe"}, + {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:513b07e99c0a267b1d954243845d8a833758a6726a3b5d8948306e3fe14675e3"}, + {file = "pydantic_core-2.14.5.tar.gz", hash = "sha256:6d30226dfc816dd0fdf120cae611dd2215117e4f9b124af8c60ab9093b6e8e71"}, ] [package.dependencies] @@ -2806,13 +2833,13 @@ pydantic = [ [[package]] name = "pygments" -version = "2.17.0" +version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "pygments-2.17.0-py3-none-any.whl", hash = "sha256:cd0c46944b2551af02ecc15961050182ea120d3895000e2676160820f3421527"}, - {file = "pygments-2.17.0.tar.gz", hash = "sha256:edaa0fa2453d055d0ac94449d1f73ec7bc52c5e318204da1377c1392978c4a8d"}, + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [package.extras] @@ -2838,20 +2865,20 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pylint" -version = "3.0.2" +version = "3.0.3" description = "python code static checker" optional = false python-versions = ">=3.8.0" files = [ - {file = "pylint-3.0.2-py3-none-any.whl", hash = "sha256:60ed5f3a9ff8b61839ff0348b3624ceeb9e6c2a92c514d81c9cc273da3b6bcda"}, - {file = "pylint-3.0.2.tar.gz", hash = "sha256:0d4c286ef6d2f66c8bfb527a7f8a629009e42c99707dec821a03e1b51a4c1496"}, + {file = "pylint-3.0.3-py3-none-any.whl", hash = "sha256:7a1585285aefc5165db81083c3e06363a27448f6b467b3b0f30dbd0ac1f73810"}, + {file = "pylint-3.0.3.tar.gz", hash = "sha256:58c2398b0301e049609a8429789ec6edf3aabe9b6c5fec916acd18639c16de8b"}, ] [package.dependencies] astroid = ">=3.0.1,<=3.1.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = {version = ">=0.3.7", markers = "python_version >= \"3.12\""} -isort = ">=4.2.5,<6" +isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" mccabe = ">=0.6,<0.8" platformdirs = ">=2.2.0" tomlkit = ">=0.10.1" @@ -3181,13 +3208,13 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)" [[package]] name = "referencing" -version = "0.31.0" +version = "0.32.0" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.31.0-py3-none-any.whl", hash = "sha256:381b11e53dd93babb55696c71cf42aef2d36b8a150c49bf0bc301e36d536c882"}, - {file = "referencing-0.31.0.tar.gz", hash = "sha256:cc28f2c88fbe7b961a7817a0abc034c09a1e36358f82fedb4ffdf29a25398863"}, + {file = "referencing-0.32.0-py3-none-any.whl", hash = "sha256:bdcd3efb936f82ff86f993093f6da7435c7de69a3b3a5a06678a6050184bee99"}, + {file = "referencing-0.32.0.tar.gz", hash = "sha256:689e64fe121843dcfd57b71933318ef1f91188ffb45367332700a86ac8fd6161"}, ] [package.dependencies] @@ -3272,110 +3299,110 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.13.0" +version = "0.15.2" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.13.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:1758197cc8d7ff383c07405f188253535b4aa7fa745cbc54d221ae84b18e0702"}, - {file = "rpds_py-0.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:715df74cbcef4387d623c917f295352127f4b3e0388038d68fa577b4e4c6e540"}, - {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8a9cec0f49df9bac252d92f138c0d7708d98828e21fd57db78087d8f50b5656"}, - {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5c2545bba02f68abdf398ef4990dc77592cc1e5d29438b35b3a3ca34d171fb4b"}, - {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:95375c44ffb9ea2bc25d67fb66e726ea266ff1572df50b9556fe28a5f3519cd7"}, - {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:54e513df45a8a9419e7952ffd26ac9a5b7b1df97fe72530421794b0de29f9d72"}, - {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a25f514a53927b6b4bd04a9a6a13b55209df54f548660eeed673336c0c946d14"}, - {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1a920fa679ec2758411d66bf68840b0a21317b9954ab0e973742d723bb67709"}, - {file = "rpds_py-0.13.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f9339d1404b87e6d8cb35e485945753be57a99ab9bb389f42629215b2f6bda0f"}, - {file = "rpds_py-0.13.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c99f9dda2c959f7bb69a7125e192c74fcafb7a534a95ccf49313ae3a04807804"}, - {file = "rpds_py-0.13.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bad6758df5f1042b35683bd1811d5432ac1b17700a5a2a51fdc293f7df5f7827"}, - {file = "rpds_py-0.13.0-cp310-none-win32.whl", hash = "sha256:2a29ec68fa9655ce9501bc6ae074b166e8b45c2dfcd2d71d90d1a61758ed8c73"}, - {file = "rpds_py-0.13.0-cp310-none-win_amd64.whl", hash = "sha256:244be953f13f148b0071d67a610f89cd72eb5013a147e517d6ca3f3f3b7e0380"}, - {file = "rpds_py-0.13.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:240279ca0b2afd6d4710afce1c94bf9e75fc161290bf62c0feba64d64780d80b"}, - {file = "rpds_py-0.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:25c9727da2dabc93664a18eda7a70feedf478f0c4c8294e4cdba7f60a479a246"}, - {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:981e46e1e5064f95460381bff4353783b4b5ce351c930e5b507ebe0278c61dac"}, - {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6052bb47ea583646b8ff562acacb9a2ec5ec847267049cbae3919671929e94c6"}, - {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87f591ff8cc834fa01ca5899ab5edcd7ee590492a9cdcf43424ac142e731ce3e"}, - {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:62772259b3381e2aabf274c74fd1e1ac03b0524de0a6593900684becfa8cfe4b"}, - {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4de9d20fe68c16b4d97f551a09920745add0c86430262230528b83c2ed2fe90"}, - {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b70a54fb628c1d6400e351674a31ba63d2912b8c5b707f99b408674a5d8b69ab"}, - {file = "rpds_py-0.13.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2063ab9cd1be7ef6b5ed0f408e2bdf32c060b6f40c097a468f32864731302636"}, - {file = "rpds_py-0.13.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:84f7f3f18d29a1c645729634003d21d84028bd9c2fd78eba9d028998f46fa5aa"}, - {file = "rpds_py-0.13.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f7c7ddc8d1a64623068da5a15e28001fbd0f0aff754aae7a75a4be5042191638"}, - {file = "rpds_py-0.13.0-cp311-none-win32.whl", hash = "sha256:8a33d2b6340261191bb59adb5a453fa6c7d99de85552bd4e8196411f0509c9bf"}, - {file = "rpds_py-0.13.0-cp311-none-win_amd64.whl", hash = "sha256:8b9c1dd90461940315981499df62a627571c4f0992e8bafc5396d33916224cac"}, - {file = "rpds_py-0.13.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:15a2d542de5cbfc6abddc4846d9412b59f8ee9c8dfa0b9c92a29321297c91745"}, - {file = "rpds_py-0.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8dd69e01b29ff45a0062cad5c480d8aa9301c3ef09da471f86337a78eb2d3405"}, - {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efdd02971a02f98492a72b25484f1f6125fb9f2166e48cc4c9bfa563349c851b"}, - {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91ca9aaee7ccdfa66d800b5c4ec634fefca947721bab52d6ad2f6350969a3771"}, - {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afcec1f5b09d0db70aeb2d90528a9164acb61841a3124e28f6ac0137f4c36cb4"}, - {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6824673f66c47f7ee759c21e973bfce3ceaf2c25cb940cb45b41105dc914e8"}, - {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50b6d80925dfeb573fc5e38582fb9517c6912dc462cc858a11c8177b0837127a"}, - {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a1a38512925829784b5dc38591c757b80cfce115c72c594dc59567dab62b9c4"}, - {file = "rpds_py-0.13.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:977c6123c359dcc70ce3161b781ab70b0d342de2666944b776617e01a0a7822a"}, - {file = "rpds_py-0.13.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c472409037e05ed87b99430f97a6b82130328bb977502813547e8ee6a3392502"}, - {file = "rpds_py-0.13.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:28bb22019f4a783ea06a6b81437d5996551869e8a722ee8720b744f7684d97f4"}, - {file = "rpds_py-0.13.0-cp312-none-win32.whl", hash = "sha256:46be9c0685cce2ea02151aa8308f2c1b78581be41a5dd239448a941a210ef5dd"}, - {file = "rpds_py-0.13.0-cp312-none-win_amd64.whl", hash = "sha256:3c5b9ad4d3e05dfcf8629f0d534f92610e9805dbce2fcb9b3c801ddb886431d5"}, - {file = "rpds_py-0.13.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:66eb5aa36e857f768c598d2082fafb733eaf53e06e1169c6b4de65636e04ffd0"}, - {file = "rpds_py-0.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c9f4c2b7d989426e9fe9b720211172cf10eb5f7aa16c63de2e5dc61457abcf35"}, - {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1e37dfffe8959a492b7b331995f291847a41a035b4aad82d6060f38e8378a2b"}, - {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8220321f2dccd9d66f72639185247cb7bbdd90753bf0b6bfca0fa31dba8af23c"}, - {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8f1d466a9747213d3cf7e1afec849cc51edb70d5b4ae9a82eca0f172bfbb6d0"}, - {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c4c4b4ff3de834ec5c1c690e5a18233ca78547d003eb83664668ccf09ef1398"}, - {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:525d19ef0a999229ef0f0a7687ab2c9a00d1b6a47a005006f4d8c4b8975fdcec"}, - {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0982b59d014efb84a57128e7e69399fb29ad8f2da5b0a5bcbfd12e211c00492e"}, - {file = "rpds_py-0.13.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f714dd5b705f1c394d1b361d96486c4981055c434a7eafb1a3147ac75e34a3de"}, - {file = "rpds_py-0.13.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:766b573a964389ef0d91a26bb31e1b59dbc5d06eff7707f3dfcec23d93080ba3"}, - {file = "rpds_py-0.13.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2ed65ad3fc5065d13e31e90794e0b52e405b63ae4fab1080caeaadc10a3439c5"}, - {file = "rpds_py-0.13.0-cp38-none-win32.whl", hash = "sha256:9645f7fe10a68b2396d238250b4b264c2632d2eb6ce2cb90aa0fe08adee194be"}, - {file = "rpds_py-0.13.0-cp38-none-win_amd64.whl", hash = "sha256:42d0ad129c102856a364ccc7d356faec017af86b3543a8539795f22b6cabad11"}, - {file = "rpds_py-0.13.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:95c11647fac2a3515ea2614a79e14b7c75025724ad54c91c7db4a6ea5c25ef19"}, - {file = "rpds_py-0.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9435bf4832555c4f769c6be9401664357be33d5f5d8dc58f5c20fb8d21e2c45d"}, - {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b1d671a74395344239ee3adbcd8c496525f6a2b2e54c40fec69620a31a8dcb"}, - {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:13c8061115f1468de6ffdfb1d31b446e1bd814f1ff6e556862169aacb9fbbc5d"}, - {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a78861123b002725633871a2096c3a4313224aab3d11b953dced87cfba702418"}, - {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97c1be5a018cdad54fa7e5f7d36b9ab45ef941a1d185987f18bdab0a42344012"}, - {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e33b17915c8e4fb2ea8b91bb4c46cba92242c63dd38b87e869ead5ba217e2970"}, - {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:153b6d8cf7ae4b9ffd09de6abeda661e351e3e06eaafd18a8c104ea00099b131"}, - {file = "rpds_py-0.13.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:da2852201e8e00c86be82c43d6893e6c380ef648ae53f337ffd1eaa35e3dfb8a"}, - {file = "rpds_py-0.13.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a2383f400691fd7bd63347d4d75eb2fd525de9d901799a33a4e896c9885609f8"}, - {file = "rpds_py-0.13.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d5bf560634ea6e9a59ceb2181a6cd6195a03f48cef9a400eb15e197e18f14548"}, - {file = "rpds_py-0.13.0-cp39-none-win32.whl", hash = "sha256:fdaef49055cc0c701fb17b9b34a38ef375e5cdb230b3722d4a12baf9b7cbc6d3"}, - {file = "rpds_py-0.13.0-cp39-none-win_amd64.whl", hash = "sha256:26660c74a20fe249fad75ca00bbfcf60e57c3fdbde92971c88a20e07fea1de64"}, - {file = "rpds_py-0.13.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:28324f2f0247d407daabf7ff357ad9f36126075c92a0cf5319396d96ff4e1248"}, - {file = "rpds_py-0.13.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b431c2c0ff1ea56048a2b066d99d0c2d151ae7625b20be159b7e699f3e80390b"}, - {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7472bd60a8293217444bdc6a46e516feb8d168da44d5f3fccea0336e88e3b79a"}, - {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:169063f346b8fd84f47d986c9c48e6094eb38b839c1287e7cb886b8a2b32195d"}, - {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eef7ee7c70f8b8698be468d54f9f5e01804f3a1dd5657e8a96363dbd52b9b5ec"}, - {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:762013dd59df12380c5444f61ccbf9ae1297027cabbd7aa25891f724ebf8c8f7"}, - {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:152570689a27ae0be1d5f50b21dad38d450b9227d0974f23bd400400ea087e88"}, - {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d70a93a40e55da117c511ddc514642bc7d59a95a99137168a5f3f2f876b47962"}, - {file = "rpds_py-0.13.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e6c6fed07d13b9e0fb689356c40c81f1aa92e3c9d91d8fd5816a0348ccd999f7"}, - {file = "rpds_py-0.13.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:cdded3cf9e36840b09ccef714d5fa74a03f4eb6cf81e694226ed9cb5e6f90de0"}, - {file = "rpds_py-0.13.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e1f40faf406c52c7ae7d208b9140377c06397248978ccb03fbfbb30a0571e359"}, - {file = "rpds_py-0.13.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c10326e30c97a95b7e1d75e5200ef0b9827aa0f861e331e43b15dfdfd63e669b"}, - {file = "rpds_py-0.13.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:afde37e3763c602d0385bce5c12f262e7b1dd2a0f323e239fa9d7b2d4d5d8509"}, - {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4084ab6840bd4d79eff3b5f497add847a7db31ce5a0c2d440c90b2d2b7011857"}, - {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c9c9cb48ab77ebfa47db25b753f594d4f44959cfe43b713439ca6e3c9329671"}, - {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:533d728ea5ad5253af3395102723ca8a77b62de47b2295155650c9a88fcdeec8"}, - {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f22cab655b41033d430f20266bf563b35038a7f01c9a099b0ccfd30a7fb9247"}, - {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a0507342c37132813449393e6e6f351bbff376031cfff1ee6e616402ac7908"}, - {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4eb1faf8e2ee9a2de3cb3ae4c8c355914cdc85f2cd7f27edf76444c9550ce1e7"}, - {file = "rpds_py-0.13.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:a61a152d61e3ae26e0bbba7b2f568f6f25ca0abdeb6553eca7e7c45b59d9b1a9"}, - {file = "rpds_py-0.13.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:e499bf2200eb74774a6f85a7465e3bc5273fa8ef0055590d97a88c1e7ea02eea"}, - {file = "rpds_py-0.13.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:1e5becd0de924616ca9a12abeb6458568d1dc8fe5c670d5cdb738402a8a8429d"}, - {file = "rpds_py-0.13.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:70cfe098d915f566eeebcb683f49f9404d2f948432891b6e075354336eda9dfb"}, - {file = "rpds_py-0.13.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:2e73511e88368f93c24efe7c9a20b319eaa828bc7431f8a17713efb9e31a39fa"}, - {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c07cb9bcccd08f9bc2fd05bf586479df4272ea5a6a70fbcb59b018ed48a5a84d"}, - {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c4e84016ba225e09df20fed8befe8c68d14fbeff6078f4a0ff907ae2095e17e"}, - {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ad465e5a70580ca9c1944f43a9a71bca3a7b74554347fc96ca0479eca8981f9"}, - {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:189aebd44a07fa7b7966cf78b85bde8335b0b6c3b1c4ef5589f8c03176830107"}, - {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f50ca0460f1f7a89ab9b8355d83ac993d5998ad4218e76654ecf8afe648d8aa"}, - {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f6c225011467021879c0482316e42d8a28852fc29f0c15d2a435ff457cadccd4"}, - {file = "rpds_py-0.13.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1e63b32b856c0f08a56b76967d61b6ad811d8d330a8aebb9d21afadd82a296f6"}, - {file = "rpds_py-0.13.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7e5fbe9800f09c56967fda88c4d9272955e781699a66102bd098f22511a3f260"}, - {file = "rpds_py-0.13.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:fea99967d4a978ce95dd52310bcb4a943b77c61725393bca631b0908047d6e2f"}, - {file = "rpds_py-0.13.0.tar.gz", hash = "sha256:35cc91cbb0b775705e0feb3362490b8418c408e9e3c3b9cb3b02f6e495f03ee7"}, + {file = "rpds_py-0.15.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:337a8653fb11d2fbe7157c961cc78cb3c161d98cf44410ace9a3dc2db4fad882"}, + {file = "rpds_py-0.15.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:813a65f95bfcb7c8f2a70dd6add9b51e9accc3bdb3e03d0ff7a9e6a2d3e174bf"}, + {file = "rpds_py-0.15.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:082e0e55d73690ffb4da4352d1b5bbe1b5c6034eb9dc8c91aa2a3ee15f70d3e2"}, + {file = "rpds_py-0.15.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5595c80dd03d7e6c6afb73f3594bf3379a7d79fa57164b591d012d4b71d6ac4c"}, + {file = "rpds_py-0.15.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb10bb720348fe1647a94eb605accb9ef6a9b1875d8845f9e763d9d71a706387"}, + {file = "rpds_py-0.15.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53304cc14b1d94487d70086e1cb0cb4c29ec6da994d58ae84a4d7e78c6a6d04d"}, + {file = "rpds_py-0.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d64a657de7aae8db2da60dc0c9e4638a0c3893b4d60101fd564a3362b2bfeb34"}, + {file = "rpds_py-0.15.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ee40206d1d6e95eaa2b7b919195e3689a5cf6ded730632de7f187f35a1b6052c"}, + {file = "rpds_py-0.15.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1607cda6129f815493a3c184492acb5ae4aa6ed61d3a1b3663aa9824ed26f7ac"}, + {file = "rpds_py-0.15.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f3e6e2e502c4043c52a99316d89dc49f416acda5b0c6886e0dd8ea7bb35859e8"}, + {file = "rpds_py-0.15.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:044f6f46d62444800402851afa3c3ae50141f12013060c1a3a0677e013310d6d"}, + {file = "rpds_py-0.15.2-cp310-none-win32.whl", hash = "sha256:c827a931c6b57f50f1bb5de400dcfb00bad8117e3753e80b96adb72d9d811514"}, + {file = "rpds_py-0.15.2-cp310-none-win_amd64.whl", hash = "sha256:3bbc89ce2a219662ea142f0abcf8d43f04a41d5b1880be17a794c39f0d609cb0"}, + {file = "rpds_py-0.15.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:1fd0f0b1ccd7d537b858a56355a250108df692102e08aa2036e1a094fd78b2dc"}, + {file = "rpds_py-0.15.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b414ef79f1f06fb90b5165db8aef77512c1a5e3ed1b4807da8476b7e2c853283"}, + {file = "rpds_py-0.15.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c31272c674f725dfe0f343d73b0abe8c878c646967ec1c6106122faae1efc15b"}, + {file = "rpds_py-0.15.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a6945c2d61c42bb7e818677f43638675b8c1c43e858b67a96df3eb2426a86c9d"}, + {file = "rpds_py-0.15.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02744236ac1895d7be837878e707a5c35fb8edc5137602f253b63623d7ad5c8c"}, + {file = "rpds_py-0.15.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2181e86d4e1cdf49a7320cb72a36c45efcb7670d0a88f09fd2d3a7967c0540fd"}, + {file = "rpds_py-0.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a8ff8e809da81363bffca2b965cb6e4bf6056b495fc3f078467d1f8266fe27f"}, + {file = "rpds_py-0.15.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:97532802f14d383f37d603a56e226909f825a83ff298dc1b6697de00d2243999"}, + {file = "rpds_py-0.15.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:13716e53627ad97babf72ac9e01cf9a7d4af2f75dd5ed7b323a7a9520e948282"}, + {file = "rpds_py-0.15.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:2f1f295a5c28cfa74a7d48c95acc1c8a7acd49d7d9072040d4b694fe11cd7166"}, + {file = "rpds_py-0.15.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8ec464f20fe803ae00419bd1610934e3bda963aeba1e6181dfc9033dc7e8940c"}, + {file = "rpds_py-0.15.2-cp311-none-win32.whl", hash = "sha256:b61d5096e75fd71018b25da50b82dd70ec39b5e15bb2134daf7eb7bbbc103644"}, + {file = "rpds_py-0.15.2-cp311-none-win_amd64.whl", hash = "sha256:9d41ebb471a6f064c0d1c873c4f7dded733d16ca5db7d551fb04ff3805d87802"}, + {file = "rpds_py-0.15.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:13ff62d3561a23c17341b4afc78e8fcfd799ab67c0b1ca32091d71383a98ba4b"}, + {file = "rpds_py-0.15.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b70b45a40ad0798b69748b34d508259ef2bdc84fb2aad4048bc7c9cafb68ddb3"}, + {file = "rpds_py-0.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4ecbba7efd82bd2a4bb88aab7f984eb5470991c1347bdd1f35fb34ea28dba6e"}, + {file = "rpds_py-0.15.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9d38494a8d21c246c535b41ecdb2d562c4b933cf3d68de03e8bc43a0d41be652"}, + {file = "rpds_py-0.15.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:13152dfe7d7c27c40df8b99ac6aab12b978b546716e99f67e8a67a1d441acbc3"}, + {file = "rpds_py-0.15.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:164fcee32f15d04d61568c9cb0d919e37ff3195919cd604039ff3053ada0461b"}, + {file = "rpds_py-0.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a5122b17a4faf5d7a6d91fa67b479736c0cacc7afe791ddebb7163a8550b799"}, + {file = "rpds_py-0.15.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:46b4f3d47d1033db569173be62365fbf7808c2bd3fb742314d251f130d90d44c"}, + {file = "rpds_py-0.15.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c61e42b4ceb9759727045765e87d51c1bb9f89987aca1fcc8a040232138cad1c"}, + {file = "rpds_py-0.15.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d2aa3ca9552f83b0b4fa6ca8c6ce08da6580f37e3e0ab7afac73a1cfdc230c0e"}, + {file = "rpds_py-0.15.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ec19e823b4ccd87bd69e990879acbce9e961fc7aebe150156b8f4418d4b27b7f"}, + {file = "rpds_py-0.15.2-cp312-none-win32.whl", hash = "sha256:afeabb382c1256a7477b739820bce7fe782bb807d82927102cee73e79b41b38b"}, + {file = "rpds_py-0.15.2-cp312-none-win_amd64.whl", hash = "sha256:422b0901878a31ef167435c5ad46560362891816a76cc0d150683f3868a6f0d1"}, + {file = "rpds_py-0.15.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:baf744e5f9d5ee6531deea443be78b36ed1cd36c65a0b95ea4e8d69fa0102268"}, + {file = "rpds_py-0.15.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e072f5da38d6428ba1fc1115d3cc0dae895df671cb04c70c019985e8c7606be"}, + {file = "rpds_py-0.15.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f138f550b83554f5b344d6be35d3ed59348510edc3cb96f75309db6e9bfe8210"}, + {file = "rpds_py-0.15.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b2a4cd924d0e2f4b1a68034abe4cadc73d69ad5f4cf02db6481c0d4d749f548f"}, + {file = "rpds_py-0.15.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5eb05b654a41e0f81ab27a7c3e88b6590425eb3e934e1d533ecec5dc88a6ffff"}, + {file = "rpds_py-0.15.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ee066a64f0d2ba45391cac15b3a70dcb549e968a117bd0500634754cfe0e5fc"}, + {file = "rpds_py-0.15.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c51a899792ee2c696072791e56b2020caff58b275abecbc9ae0cb71af0645c95"}, + {file = "rpds_py-0.15.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac2ac84a4950d627d84b61f082eba61314373cfab4b3c264b62efab02ababe83"}, + {file = "rpds_py-0.15.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:62b292fff4739c6be89e6a0240c02bda5a9066a339d90ab191cf66e9fdbdc193"}, + {file = "rpds_py-0.15.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:98ee201a52a7f65608e5494518932e1473fd43535f12cade0a1b4ab32737fe28"}, + {file = "rpds_py-0.15.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3d40fb3ca22e3d40f494d577441b263026a3bd8c97ae6ce89b2d3c4b39ac9581"}, + {file = "rpds_py-0.15.2-cp38-none-win32.whl", hash = "sha256:30479a9f1fce47df56b07460b520f49fa2115ec2926d3b1303c85c81f8401ed1"}, + {file = "rpds_py-0.15.2-cp38-none-win_amd64.whl", hash = "sha256:2df3d07a16a3bef0917b28cd564778fbb31f3ffa5b5e33584470e2d1b0f248f0"}, + {file = "rpds_py-0.15.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:56b51ba29a18e5f5810224bcf00747ad931c0716e3c09a76b4a1edd3d4aba71f"}, + {file = "rpds_py-0.15.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3c11bc5814554b018f6c5d6ae0969e43766f81e995000b53a5d8c8057055e886"}, + {file = "rpds_py-0.15.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2faa97212b0dc465afeedf49045cdd077f97be1188285e646a9f689cb5dfff9e"}, + {file = "rpds_py-0.15.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:86c01299942b0f4b5b5f28c8701689181ad2eab852e65417172dbdd6c5b3ccc8"}, + {file = "rpds_py-0.15.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd7d3608589072f63078b4063a6c536af832e76b0b3885f1bfe9e892abe6c207"}, + {file = "rpds_py-0.15.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:938518a11780b39998179d07f31a4a468888123f9b00463842cd40f98191f4d3"}, + {file = "rpds_py-0.15.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dccc623725d0b298f557d869a68496a2fd2a9e9c41107f234fa5f7a37d278ac"}, + {file = "rpds_py-0.15.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d46ee458452727a147d7897bb33886981ae1235775e05decae5d5d07f537695a"}, + {file = "rpds_py-0.15.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d9d7ebcd11ea76ba0feaae98485cd8e31467c3d7985210fab46983278214736b"}, + {file = "rpds_py-0.15.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:8a5f574b92b3ee7d254e56d56e37ec0e1416acb1ae357c4956d76a1788dc58fb"}, + {file = "rpds_py-0.15.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3db0c998c92b909d7c90b66c965590d4f3cd86157176a6cf14aa1f867b77b889"}, + {file = "rpds_py-0.15.2-cp39-none-win32.whl", hash = "sha256:bbc7421cbd28b4316d1d017db338039a7943f945c6f2bb15e1439b14b5682d28"}, + {file = "rpds_py-0.15.2-cp39-none-win_amd64.whl", hash = "sha256:1c24e30d720c0009b6fb2e1905b025da56103c70a8b31b99138e4ed1c2a6c5b0"}, + {file = "rpds_py-0.15.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1e6fcd0a0f62f2997107f758bb372397b8d5fd5f39cc6dcb86f7cb98a2172d6c"}, + {file = "rpds_py-0.15.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d800a8e2ac62db1b9ea5d6d1724f1a93c53907ca061de4d05ed94e8dfa79050c"}, + {file = "rpds_py-0.15.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e09d017e3f4d9bd7d17a30d3f59e4d6d9ba2d2ced280eec2425e84112cf623f"}, + {file = "rpds_py-0.15.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b88c3ab98556bc351b36d6208a6089de8c8db14a7f6e1f57f82a334bd2c18f0b"}, + {file = "rpds_py-0.15.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f333bfe782a2d05a67cfaa0cc9cd68b36b39ee6acfe099f980541ed973a7093"}, + {file = "rpds_py-0.15.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b629db53fe17e6ce478a969d30bd1d0e8b53238c46e3a9c9db39e8b65a9ef973"}, + {file = "rpds_py-0.15.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:485fbdd23becb822804ed05622907ee5c8e8a5f43f6f43894a45f463b2217045"}, + {file = "rpds_py-0.15.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:893e38d0f4319dfa70c0f36381a37cc418985c87b11d9784365b1fff4fa6973b"}, + {file = "rpds_py-0.15.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8ffdeb7dbd0160d4e391e1f857477e4762d00aa2199c294eb95dfb9451aa1d9f"}, + {file = "rpds_py-0.15.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:fc33267d58dfbb2361baed52668c5d8c15d24bc0372cecbb79fed77339b55e0d"}, + {file = "rpds_py-0.15.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2e7e5633577b3bd56bf3af2ef6ae3778bbafb83743989d57f0e7edbf6c0980e4"}, + {file = "rpds_py-0.15.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:8b9650f92251fdef843e74fc252cdfd6e3c700157ad686eeb0c6d7fdb2d11652"}, + {file = "rpds_py-0.15.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:07a2e1d78d382f7181789713cdf0c16edbad4fe14fe1d115526cb6f0eef0daa3"}, + {file = "rpds_py-0.15.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03f9c5875515820633bd7709a25c3e60c1ea9ad1c5d4030ce8a8c203309c36fd"}, + {file = "rpds_py-0.15.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:580182fa5b269c2981e9ce9764367cb4edc81982ce289208d4607c203f44ffde"}, + {file = "rpds_py-0.15.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa1e626c524d2c7972c0f3a8a575d654a3a9c008370dc2a97e46abd0eaa749b9"}, + {file = "rpds_py-0.15.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae9d83a81b09ce3a817e2cbb23aabc07f86a3abc664c613cd283ce7a03541e95"}, + {file = "rpds_py-0.15.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9235be95662559141934fced8197de6fee8c58870f36756b0584424b6d708393"}, + {file = "rpds_py-0.15.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a72e00826a2b032dda3eb25aa3e3579c6d6773d22d8446089a57a123481cc46c"}, + {file = "rpds_py-0.15.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ab095edf1d840a6a6a4307e1a5b907a299a94e7b90e75436ee770b8c35d22a25"}, + {file = "rpds_py-0.15.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:3b79c63d29101cbaa53a517683557bb550462394fb91044cc5998dd2acff7340"}, + {file = "rpds_py-0.15.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:911e600e798374c0d86235e7ef19109cf865d1336942d398ff313375a25a93ba"}, + {file = "rpds_py-0.15.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3cd61e759c4075510052d1eca5cddbd297fe1164efec14ef1fce3f09b974dfe4"}, + {file = "rpds_py-0.15.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9d2ae79f31da5143e020a8d4fc74e1f0cbcb8011bdf97453c140aa616db51406"}, + {file = "rpds_py-0.15.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e99d6510c8557510c220b865d966b105464740dcbebf9b79ecd4fbab30a13d9"}, + {file = "rpds_py-0.15.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c43e1b89099279cc03eb1c725c5de12af6edcd2f78e2f8a022569efa639ada3"}, + {file = "rpds_py-0.15.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac7187bee72384b9cfedf09a29a3b2b6e8815cc64c095cdc8b5e6aec81e9fd5f"}, + {file = "rpds_py-0.15.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3423007fc0661827e06f8a185a3792c73dda41f30f3421562f210cf0c9e49569"}, + {file = "rpds_py-0.15.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2974e6dff38afafd5ccf8f41cb8fc94600b3f4fd9b0a98f6ece6e2219e3158d5"}, + {file = "rpds_py-0.15.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:93c18a1696a8e0388ed84b024fe1a188a26ba999b61d1d9a371318cb89885a8c"}, + {file = "rpds_py-0.15.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c7cd0841a586b7105513a7c8c3d5c276f3adc762a072d81ef7fae80632afad1e"}, + {file = "rpds_py-0.15.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:709dc11af2f74ba89c68b1592368c6edcbccdb0a06ba77eb28c8fe08bb6997da"}, + {file = "rpds_py-0.15.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:fc066395e6332da1e7525d605b4c96055669f8336600bef8ac569d5226a7c76f"}, + {file = "rpds_py-0.15.2.tar.gz", hash = "sha256:373b76eeb79e8c14f6d82cb1d4d5293f9e4059baec6c1b16dca7ad13b6131b39"}, ] [[package]] @@ -3394,39 +3421,39 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruff" -version = "0.1.6" +version = "0.1.8" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.1.6-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:88b8cdf6abf98130991cbc9f6438f35f6e8d41a02622cc5ee130a02a0ed28703"}, - {file = "ruff-0.1.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5c549ed437680b6105a1299d2cd30e4964211606eeb48a0ff7a93ef70b902248"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cf5f701062e294f2167e66d11b092bba7af6a057668ed618a9253e1e90cfd76"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:05991ee20d4ac4bb78385360c684e4b417edd971030ab12a4fbd075ff535050e"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87455a0c1f739b3c069e2f4c43b66479a54dea0276dd5d4d67b091265f6fd1dc"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:683aa5bdda5a48cb8266fcde8eea2a6af4e5700a392c56ea5fb5f0d4bfdc0240"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:137852105586dcbf80c1717facb6781555c4e99f520c9c827bd414fac67ddfb6"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd98138a98d48a1c36c394fd6b84cd943ac92a08278aa8ac8c0fdefcf7138f35"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0cd909d25f227ac5c36d4e7e681577275fb74ba3b11d288aff7ec47e3ae745"}, - {file = "ruff-0.1.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e8fd1c62a47aa88a02707b5dd20c5ff20d035d634aa74826b42a1da77861b5ff"}, - {file = "ruff-0.1.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:fd89b45d374935829134a082617954120d7a1470a9f0ec0e7f3ead983edc48cc"}, - {file = "ruff-0.1.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:491262006e92f825b145cd1e52948073c56560243b55fb3b4ecb142f6f0e9543"}, - {file = "ruff-0.1.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:ea284789861b8b5ca9d5443591a92a397ac183d4351882ab52f6296b4fdd5462"}, - {file = "ruff-0.1.6-py3-none-win32.whl", hash = "sha256:1610e14750826dfc207ccbcdd7331b6bd285607d4181df9c1c6ae26646d6848a"}, - {file = "ruff-0.1.6-py3-none-win_amd64.whl", hash = "sha256:4558b3e178145491e9bc3b2ee3c4b42f19d19384eaa5c59d10acf6e8f8b57e33"}, - {file = "ruff-0.1.6-py3-none-win_arm64.whl", hash = "sha256:03910e81df0d8db0e30050725a5802441c2022ea3ae4fe0609b76081731accbc"}, - {file = "ruff-0.1.6.tar.gz", hash = "sha256:1b09f29b16c6ead5ea6b097ef2764b42372aebe363722f1605ecbcd2b9207184"}, + {file = "ruff-0.1.8-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:7de792582f6e490ae6aef36a58d85df9f7a0cfd1b0d4fe6b4fb51803a3ac96fa"}, + {file = "ruff-0.1.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:c8e3255afd186c142eef4ec400d7826134f028a85da2146102a1172ecc7c3696"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff78a7583020da124dd0deb835ece1d87bb91762d40c514ee9b67a087940528b"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd8ee69b02e7bdefe1e5da2d5b6eaaddcf4f90859f00281b2333c0e3a0cc9cd6"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a05b0ddd7ea25495e4115a43125e8a7ebed0aa043c3d432de7e7d6e8e8cd6448"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e6f08ca730f4dc1b76b473bdf30b1b37d42da379202a059eae54ec7fc1fbcfed"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f35960b02df6b827c1b903091bb14f4b003f6cf102705efc4ce78132a0aa5af3"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d076717c67b34c162da7c1a5bda16ffc205e0e0072c03745275e7eab888719f"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6a21ab023124eafb7cef6d038f835cb1155cd5ea798edd8d9eb2f8b84be07d9"}, + {file = "ruff-0.1.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ce697c463458555027dfb194cb96d26608abab920fa85213deb5edf26e026664"}, + {file = "ruff-0.1.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:db6cedd9ffed55548ab313ad718bc34582d394e27a7875b4b952c2d29c001b26"}, + {file = "ruff-0.1.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:05ffe9dbd278965271252704eddb97b4384bf58b971054d517decfbf8c523f05"}, + {file = "ruff-0.1.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5daaeaf00ae3c1efec9742ff294b06c3a2a9db8d3db51ee4851c12ad385cda30"}, + {file = "ruff-0.1.8-py3-none-win32.whl", hash = "sha256:e49fbdfe257fa41e5c9e13c79b9e79a23a79bd0e40b9314bc53840f520c2c0b3"}, + {file = "ruff-0.1.8-py3-none-win_amd64.whl", hash = "sha256:f41f692f1691ad87f51708b823af4bb2c5c87c9248ddd3191c8f088e66ce590a"}, + {file = "ruff-0.1.8-py3-none-win_arm64.whl", hash = "sha256:aa8ee4f8440023b0a6c3707f76cadce8657553655dcbb5fc9b2f9bb9bee389f6"}, + {file = "ruff-0.1.8.tar.gz", hash = "sha256:f7ee467677467526cfe135eab86a40a0e8db43117936ac4f9b469ce9cdb3fb62"}, ] [[package]] name = "selenium" -version = "4.15.2" +version = "4.16.0" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "selenium-4.15.2-py3-none-any.whl", hash = "sha256:9e82cd1ac647fb73cf0d4a6e280284102aaa3c9d94f0fa6e6cc4b5db6a30afbf"}, - {file = "selenium-4.15.2.tar.gz", hash = "sha256:22eab5a1724c73d51b240a69ca702997b717eee4ba1f6065bf5d6b44dba01d48"}, + {file = "selenium-4.16.0-py3-none-any.whl", hash = "sha256:aec71f4e6ed6cb3ec25c9c1b5ed56ae31b6da0a7f17474c7566d303f84e6219f"}, + {file = "selenium-4.16.0.tar.gz", hash = "sha256:b2e987a445306151f7be0e6dfe2aa72a479c2ac6a91b9d5ef2d6dd4e49ad0435"}, ] [package.dependencies] @@ -3437,13 +3464,13 @@ urllib3 = {version = ">=1.26,<3", extras = ["socks"]} [[package]] name = "sentry-sdk" -version = "1.36.0" +version = "1.39.1" description = "Python client for Sentry (https://sentry.io)" optional = false python-versions = "*" files = [ - {file = "sentry-sdk-1.36.0.tar.gz", hash = "sha256:f32dd16547f2f45e1c71a96fd4a48925e629541f7ddfe3d5d25ef7d5e94eb3c8"}, - {file = "sentry_sdk-1.36.0-py2.py3-none-any.whl", hash = "sha256:25d574f94fdf72199e331c2401fdac60d01b5be8f32822174c51c3ff0fc2f8cb"}, + {file = "sentry-sdk-1.39.1.tar.gz", hash = "sha256:320a55cdf9da9097a0bead239c35b7e61f53660ef9878861824fd6d9b2eaf3b5"}, + {file = "sentry_sdk-1.39.1-py2.py3-none-any.whl", hash = "sha256:81b5b9ffdd1a374e9eb0c053b5d2012155db9cbe76393a8585677b753bd5fdc1"}, ] [package.dependencies] @@ -3506,17 +3533,17 @@ tests = ["coverage[toml] (>=5.0.2)", "pytest"] [[package]] name = "setuptools" -version = "68.2.2" +version = "69.0.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, - {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, + {file = "setuptools-69.0.2-py3-none-any.whl", hash = "sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2"}, + {file = "setuptools-69.0.2.tar.gz", hash = "sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] @@ -3640,33 +3667,33 @@ files = [ [[package]] name = "tornado" -version = "6.3.3" +version = "6.4" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false python-versions = ">= 3.8" files = [ - {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:502fba735c84450974fec147340016ad928d29f1e91f49be168c0a4c18181e1d"}, - {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:805d507b1f588320c26f7f097108eb4023bbaa984d63176d1652e184ba24270a"}, - {file = "tornado-6.3.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd19ca6c16882e4d37368e0152f99c099bad93e0950ce55e71daed74045908f"}, - {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ac51f42808cca9b3613f51ffe2a965c8525cb1b00b7b2d56828b8045354f76a"}, - {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71a8db65160a3c55d61839b7302a9a400074c9c753040455494e2af74e2501f2"}, - {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ceb917a50cd35882b57600709dd5421a418c29ddc852da8bcdab1f0db33406b0"}, - {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:7d01abc57ea0dbb51ddfed477dfe22719d376119844e33c661d873bf9c0e4a16"}, - {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9dc4444c0defcd3929d5c1eb5706cbe1b116e762ff3e0deca8b715d14bf6ec17"}, - {file = "tornado-6.3.3-cp38-abi3-win32.whl", hash = "sha256:65ceca9500383fbdf33a98c0087cb975b2ef3bfb874cb35b8de8740cf7f41bd3"}, - {file = "tornado-6.3.3-cp38-abi3-win_amd64.whl", hash = "sha256:22d3c2fa10b5793da13c807e6fc38ff49a4f6e1e3868b0a6f4164768bb8e20f5"}, - {file = "tornado-6.3.3.tar.gz", hash = "sha256:e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe"}, + {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"}, + {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f"}, + {file = "tornado-6.4-cp38-abi3-win32.whl", hash = "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052"}, + {file = "tornado-6.4-cp38-abi3-win_amd64.whl", hash = "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63"}, + {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"}, ] [[package]] name = "trio" -version = "0.23.1" +version = "0.23.2" description = "A friendly Python library for async concurrency and I/O" optional = false python-versions = ">=3.8" files = [ - {file = "trio-0.23.1-py3-none-any.whl", hash = "sha256:bb4abb3f4af23f96679e7c8cdabb8b234520f2498550d2cf63ebfd95f2ce27fe"}, - {file = "trio-0.23.1.tar.gz", hash = "sha256:16f89f7dcc8f7b9dcdec1fcd863e0c039af6d0f9a22f8dfd56f75d75ec73fd48"}, + {file = "trio-0.23.2-py3-none-any.whl", hash = "sha256:5a0b566fa5d50cf231cfd6b08f3b03aa4179ff004b8f3144059587039e2b26d3"}, + {file = "trio-0.23.2.tar.gz", hash = "sha256:da1d35b9a2b17eb32cae2e763b16551f9aa6703634735024e32f325c9285069e"}, ] [package.dependencies] @@ -3694,13 +3721,13 @@ wsproto = ">=0.14" [[package]] name = "twilio" -version = "8.10.2" +version = "8.11.0" description = "Twilio API client and TwiML generator" optional = false python-versions = ">=3.7.0" files = [ - {file = "twilio-8.10.2-py2.py3-none-any.whl", hash = "sha256:40f8bd012f6fb970adfc46d40d39162b46a337be8f1aacec83af8a450363626f"}, - {file = "twilio-8.10.2.tar.gz", hash = "sha256:083449b27eea4fe66f690da8dada3f533d954a0704a74858ea788cf28be69019"}, + {file = "twilio-8.11.0-py2.py3-none-any.whl", hash = "sha256:90fd47f220e597163020d3755a81aed76fd217e116ab36fd241d9bf48d1a0a18"}, + {file = "twilio-8.11.0.tar.gz", hash = "sha256:792509da936c4f47d9fa7071d5f1f3bdc9314aaf96225bac4f0ef28f8688a95b"}, ] [package.dependencies] @@ -3794,13 +3821,13 @@ twisted = ["twisted (>=20.3.0)", "zope.interface (>=5.2.0)"] [[package]] name = "typing-extensions" -version = "4.8.0" +version = "4.9.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, - {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, ] [[package]] @@ -4063,13 +4090,13 @@ anyio = ">=3.0.0" [[package]] name = "wcwidth" -version = "0.2.10" +version = "0.2.12" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.10-py2.py3-none-any.whl", hash = "sha256:aec5179002dd0f0d40c456026e74a729661c9d468e1ed64405e3a6c2176ca36f"}, - {file = "wcwidth-0.2.10.tar.gz", hash = "sha256:390c7454101092a6a5e43baad8f83de615463af459201709556b6e4b1c861f97"}, + {file = "wcwidth-0.2.12-py2.py3-none-any.whl", hash = "sha256:f26ec43d96c8cbfed76a5075dac87680124fa84e0855195a6184da9c187f133c"}, + {file = "wcwidth-0.2.12.tar.gz", hash = "sha256:f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02"}, ] [[package]] @@ -4092,13 +4119,13 @@ pyOpenSSL = ">=23.2.0" [[package]] name = "websocket-client" -version = "1.6.4" +version = "1.7.0" description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.8" files = [ - {file = "websocket-client-1.6.4.tar.gz", hash = "sha256:b3324019b3c28572086c4a319f91d1dcd44e6e11cd340232978c684a7650d0df"}, - {file = "websocket_client-1.6.4-py3-none-any.whl", hash = "sha256:084072e0a7f5f347ef2ac3d8698a5e0b4ffbfcab607628cadabc650fc9a83a24"}, + {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, + {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, ] [package.extras] @@ -4228,85 +4255,101 @@ lxml = ">=3.8" [[package]] name = "yarl" -version = "1.9.2" +version = "1.9.4" description = "Yet another URL library" optional = false python-versions = ">=3.7" files = [ - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, - {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, - {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, - {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, - {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, - {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, - {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, - {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, - {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, - {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, - {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, - {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, - {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, + {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, + {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, + {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, + {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, + {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, + {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, + {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, + {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, + {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, + {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, + {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, + {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, + {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, + {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, + {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, ] [package.dependencies] diff --git a/schema.yml b/schema.yml index d36ee5d28..694eca69c 100644 --- a/schema.yml +++ b/schema.yml @@ -18334,6 +18334,7 @@ paths: - tr - tt - udm + - ug - uk - ur - uz @@ -29205,9 +29206,7 @@ components: path: type: string default: '' - context: - type: object - additionalProperties: {} + context: {} last_applied: type: string format: date-time @@ -29227,8 +29226,6 @@ components: type: string readOnly: true metadata: - type: object - additionalProperties: {} readOnly: true content: type: string @@ -29250,9 +29247,7 @@ components: path: type: string default: '' - context: - type: object - additionalProperties: {} + context: {} enabled: type: boolean content: @@ -29772,10 +29767,24 @@ components: cancel_url: type: string layout: - $ref: '#/components/schemas/LayoutEnum' + $ref: '#/components/schemas/ContextualFlowInfoLayoutEnum' required: - cancel_url - layout + ContextualFlowInfoLayoutEnum: + enum: + - stacked + - content_left + - content_right + - sidebar_left + - sidebar_right + type: string + description: |- + * `stacked` - STACKED + * `content_left` - CONTENT_LEFT + * `content_right` - CONTENT_RIGHT + * `sidebar_left` - SIDEBAR_LEFT + * `sidebar_right` - SIDEBAR_RIGHT Coordinate: type: object description: Coordinates for diagrams @@ -30493,16 +30502,12 @@ components: format: uuid readOnly: true title: Event uuid - user: - type: object - additionalProperties: {} + user: {} action: $ref: '#/components/schemas/EventActions' app: type: string - context: - type: object - additionalProperties: {} + context: {} client_ip: type: string nullable: true @@ -30513,9 +30518,7 @@ components: expires: type: string format: date-time - tenant: - type: object - additionalProperties: {} + tenant: {} required: - action - app @@ -30992,17 +30995,13 @@ components: type: object description: Event Serializer properties: - user: - type: object - additionalProperties: {} + user: {} action: $ref: '#/components/schemas/EventActions' app: type: string minLength: 1 - context: - type: object - additionalProperties: {} + context: {} client_ip: type: string nullable: true @@ -31010,9 +31009,7 @@ components: expires: type: string format: date-time - tenant: - type: object - additionalProperties: {} + tenant: {} required: - action - app @@ -31311,7 +31308,7 @@ components: description: Get export URL for flow readOnly: true layout: - $ref: '#/components/schemas/LayoutEnum' + $ref: '#/components/schemas/FlowLayoutEnum' denied_action: allOf: - $ref: '#/components/schemas/DeniedActionEnum' @@ -31498,6 +31495,20 @@ components: - next_planned_stage - plan_context - session_id + FlowLayoutEnum: + enum: + - stacked + - content_left + - content_right + - sidebar_left + - sidebar_right + type: string + description: |- + * `stacked` - Stacked + * `content_left` - Content Left + * `content_right` - Content Right + * `sidebar_left` - Sidebar Left + * `sidebar_right` - Sidebar Right FlowRequest: type: object description: Flow Serializer @@ -31535,7 +31546,7 @@ components: description: Enable compatibility mode, increases compatibility with password managers on mobile devices. layout: - $ref: '#/components/schemas/LayoutEnum' + $ref: '#/components/schemas/FlowLayoutEnum' denied_action: allOf: - $ref: '#/components/schemas/DeniedActionEnum' @@ -31613,7 +31624,7 @@ components: description: Get export URL for flow readOnly: true layout: - $ref: '#/components/schemas/LayoutEnum' + $ref: '#/components/schemas/FlowLayoutEnum' denied_action: allOf: - $ref: '#/components/schemas/DeniedActionEnum' @@ -31669,7 +31680,7 @@ components: description: Enable compatibility mode, increases compatibility with password managers on mobile devices. layout: - $ref: '#/components/schemas/LayoutEnum' + $ref: '#/components/schemas/FlowLayoutEnum' denied_action: allOf: - $ref: '#/components/schemas/DeniedActionEnum' @@ -32361,8 +32372,6 @@ components: description: Return internal model name readOnly: true kubeconfig: - type: object - additionalProperties: {} description: Paste your kubeconfig here. authentik will automatically use the currently selected context. verify_ssl: @@ -32387,8 +32396,6 @@ components: description: If enabled, use the local connection. Required Docker socket/Kubernetes Integration kubeconfig: - type: object - additionalProperties: {} description: Paste your kubeconfig here. authentik will automatically use the currently selected context. verify_ssl: @@ -33053,20 +33060,6 @@ components: required: - is_running - tasks - LayoutEnum: - enum: - - stacked - - content_left - - content_right - - sidebar_left - - sidebar_right - type: string - description: |- - * `stacked` - STACKED - * `content_left` - CONTENT_LEFT - * `content_right` - CONTENT_RIGHT - * `sidebar_left` - SIDEBAR_LEFT - * `sidebar_right` - SIDEBAR_RIGHT License: type: object description: License Serializer @@ -34052,9 +34045,7 @@ components: type: string oidc_jwks_url: type: string - oidc_jwks: - type: object - additionalProperties: {} + oidc_jwks: {} required: - callback_url - component @@ -34151,9 +34142,7 @@ components: type: string oidc_jwks_url: type: string - oidc_jwks: - type: object - additionalProperties: {} + oidc_jwks: {} required: - consumer_key - consumer_secret @@ -36042,9 +36031,7 @@ components: path: type: string default: '' - context: - type: object - additionalProperties: {} + context: {} enabled: type: boolean content: @@ -36441,17 +36428,13 @@ components: type: object description: Event Serializer properties: - user: - type: object - additionalProperties: {} + user: {} action: $ref: '#/components/schemas/EventActions' app: type: string minLength: 1 - context: - type: object - additionalProperties: {} + context: {} client_ip: type: string nullable: true @@ -36459,9 +36442,7 @@ components: expires: type: string format: date-time - tenant: - type: object - additionalProperties: {} + tenant: {} PatchedExpressionPolicyRequest: type: object description: Group Membership Policy Serializer @@ -36513,7 +36494,7 @@ components: description: Enable compatibility mode, increases compatibility with password managers on mobile devices. layout: - $ref: '#/components/schemas/LayoutEnum' + $ref: '#/components/schemas/FlowLayoutEnum' denied_action: allOf: - $ref: '#/components/schemas/DeniedActionEnum' @@ -36703,8 +36684,6 @@ components: description: If enabled, use the local connection. Required Docker socket/Kubernetes Integration kubeconfig: - type: object - additionalProperties: {} description: Paste your kubeconfig here. authentik will automatically use the currently selected context. verify_ssl: @@ -37165,9 +37144,7 @@ components: type: string oidc_jwks_url: type: string - oidc_jwks: - type: object - additionalProperties: {} + oidc_jwks: {} PatchedOutpostRequest: type: object description: Outpost Serializer @@ -38011,9 +37988,7 @@ components: format: uuid nullable: true description: Web Certificate used by the authentik Core webserver. - attributes: - type: object - additionalProperties: {} + attributes: {} PatchedTokenRequest: type: object description: Token Serializer @@ -39686,9 +39661,7 @@ components: type: string ip: type: string - ip_geo_data: - type: object - additionalProperties: {} + ip_geo_data: {} score: type: integer maximum: 9223372036854775807 @@ -41415,9 +41388,7 @@ components: format: uuid nullable: true description: Web Certificate used by the authentik Core webserver. - attributes: - type: object - additionalProperties: {} + attributes: {} required: - domain - tenant_uuid @@ -41474,9 +41445,7 @@ components: format: uuid nullable: true description: Web Certificate used by the authentik Core webserver. - attributes: - type: object - additionalProperties: {} + attributes: {} required: - domain Token: diff --git a/web/src/admin/flows/FlowForm.ts b/web/src/admin/flows/FlowForm.ts index eb37aa4ca..fcb5f0cb7 100644 --- a/web/src/admin/flows/FlowForm.ts +++ b/web/src/admin/flows/FlowForm.ts @@ -18,8 +18,8 @@ import { DeniedActionEnum, Flow, FlowDesignationEnum, + FlowLayoutEnum, FlowsApi, - LayoutEnum, PolicyEngineMode, } from "@goauthentik/api"; @@ -302,34 +302,34 @@ export class FlowForm extends ModelForm { > diff --git a/web/src/admin/flows/utils.ts b/web/src/admin/flows/utils.ts index 3c5ae8f29..90c123c9a 100644 --- a/web/src/admin/flows/utils.ts +++ b/web/src/admin/flows/utils.ts @@ -1,6 +1,6 @@ import { msg } from "@lit/localize"; -import { Flow, FlowDesignationEnum, LayoutEnum } from "@goauthentik/api"; +import { Flow, FlowDesignationEnum, FlowLayoutEnum } from "@goauthentik/api"; export function RenderFlowOption(flow: Flow): string { return `${flow.slug} (${flow.name})`; @@ -27,19 +27,19 @@ export function DesignationToLabel(designation: FlowDesignationEnum): string { } } -export function LayoutToLabel(layout: LayoutEnum): string { +export function LayoutToLabel(layout: FlowLayoutEnum): string { switch (layout) { - case LayoutEnum.Stacked: + case FlowLayoutEnum.Stacked: return msg("Stacked"); - case LayoutEnum.ContentLeft: + case FlowLayoutEnum.ContentLeft: return msg("Content left"); - case LayoutEnum.ContentRight: + case FlowLayoutEnum.ContentRight: return msg("Content right"); - case LayoutEnum.SidebarLeft: + case FlowLayoutEnum.SidebarLeft: return msg("Sidebar left"); - case LayoutEnum.SidebarRight: + case FlowLayoutEnum.SidebarRight: return msg("Sidebar right"); - case LayoutEnum.UnknownDefaultOpenApi: + case FlowLayoutEnum.UnknownDefaultOpenApi: return msg("Unknown layout"); } } diff --git a/web/src/flow/FlowExecutor.ts b/web/src/flow/FlowExecutor.ts index f7fc80a37..89d62e73a 100644 --- a/web/src/flow/FlowExecutor.ts +++ b/web/src/flow/FlowExecutor.ts @@ -37,8 +37,8 @@ import { ContextualFlowInfo, FlowChallengeResponseRequest, FlowErrorChallenge, + FlowLayoutEnum, FlowsApi, - LayoutEnum, ResponseError, ShellChallenge, UiThemeEnum, @@ -451,7 +451,7 @@ export class FlowExecutor extends Interface implements StageHost { } getLayout(): string { - const prefilledFlow = globalAK()?.flow?.layout || LayoutEnum.Stacked; + const prefilledFlow = globalAK()?.flow?.layout || FlowLayoutEnum.Stacked; if (this.challenge) { return this.challenge?.flowInfo?.layout || prefilledFlow; } @@ -461,11 +461,11 @@ export class FlowExecutor extends Interface implements StageHost { getLayoutClass(): string { const layout = this.getLayout(); switch (layout) { - case LayoutEnum.ContentLeft: + case FlowLayoutEnum.ContentLeft: return "pf-c-login__container"; - case LayoutEnum.ContentRight: + case FlowLayoutEnum.ContentRight: return "pf-c-login__container content-right"; - case LayoutEnum.Stacked: + case FlowLayoutEnum.Stacked: default: return "ak-login-container"; } From df6c78dfa12f0671a960cdcbbde703f2ecaba02c Mon Sep 17 00:00:00 2001 From: "authentik-automation[bot]" <135050075+authentik-automation[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 22:10:00 +0100 Subject: [PATCH 021/131] web: bump API Client version (#7905) Signed-off-by: GitHub Co-authored-by: authentik-automation[bot] <135050075+authentik-automation[bot]@users.noreply.github.com> --- web/package-lock.json | 8 ++++---- web/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 5565fd398..78ec0bff3 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -17,7 +17,7 @@ "@codemirror/theme-one-dark": "^6.1.2", "@formatjs/intl-listformat": "^7.5.3", "@fortawesome/fontawesome-free": "^6.5.1", - "@goauthentik/api": "^2023.10.4-1701882394", + "@goauthentik/api": "^2023.10.4-1702933698", "@lit-labs/context": "^0.4.0", "@lit-labs/task": "^3.1.0", "@lit/localize": "^0.11.4", @@ -2914,9 +2914,9 @@ } }, "node_modules/@goauthentik/api": { - "version": "2023.10.4-1701882394", - "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2023.10.4-1701882394.tgz", - "integrity": "sha512-rYfJRl4IGQN6OGdWy6f+yMuNRPgmPjkPTI+6V1otR5NwgKrvZeEzy/8Vx1tEkz3CIix8rgZCmu3SmJVsep0ggQ==" + "version": "2023.10.4-1702933698", + "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2023.10.4-1702933698.tgz", + "integrity": "sha512-l8kMFG1aI8ueOklocNtyV12goQNfqzy6+pzmERgFWSBRf5iZyeyPUxeYjI85cfpeptW9Hfr27aZoN1MXy3fMXw==" }, "node_modules/@hcaptcha/types": { "version": "1.0.3", diff --git a/web/package.json b/web/package.json index 666077e8f..75e33265a 100644 --- a/web/package.json +++ b/web/package.json @@ -42,7 +42,7 @@ "@codemirror/theme-one-dark": "^6.1.2", "@formatjs/intl-listformat": "^7.5.3", "@fortawesome/fontawesome-free": "^6.5.1", - "@goauthentik/api": "^2023.10.4-1701882394", + "@goauthentik/api": "^2023.10.4-1702933698", "@lit-labs/context": "^0.4.0", "@lit-labs/task": "^3.1.0", "@lit/localize": "^0.11.4", From 2ec979d490b044285989d569cf387f3ec989d741 Mon Sep 17 00:00:00 2001 From: Jens L Date: Mon, 18 Dec 2023 23:00:24 +0100 Subject: [PATCH 022/131] root: make test database name configurable (#7591) * test Signed-off-by: Jens Langhammer * idk attempt to fix flaky test Signed-off-by: Jens Langhammer * oops Signed-off-by: Jens Langhammer --------- Signed-off-by: Jens Langhammer --- .github/workflows/ci-main.yml | 6 ++++++ authentik/api/tests/test_auth.py | 8 +++++++- authentik/lib/default.yml | 2 ++ authentik/root/settings.py | 3 +++ go.mod | 2 -- 5 files changed, 18 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-main.yml b/.github/workflows/ci-main.yml index 8d0e8bc79..282543d96 100644 --- a/.github/workflows/ci-main.yml +++ b/.github/workflows/ci-main.yml @@ -94,6 +94,12 @@ jobs: - name: migrate to latest run: | poetry run python -m lifecycle.migrate + - name: run tests + env: + # Test in the main database that we just migrated from the previous stable version + AUTHENTIK_POSTGRESQL__TEST__NAME: authentik + run: | + poetry run make test test-unittest: name: test-unittest - PostgreSQL ${{ matrix.psql }} runs-on: ubuntu-latest diff --git a/authentik/api/tests/test_auth.py b/authentik/api/tests/test_auth.py index cd23a1835..c09bca5a3 100644 --- a/authentik/api/tests/test_auth.py +++ b/authentik/api/tests/test_auth.py @@ -12,6 +12,8 @@ from authentik.blueprints.tests import reconcile_app from authentik.core.models import Token, TokenIntents, User, UserTypes from authentik.core.tests.utils import create_test_admin_user, create_test_flow from authentik.lib.generators import generate_id +from authentik.outposts.apps import MANAGED_OUTPOST +from authentik.outposts.models import Outpost from authentik.providers.oauth2.constants import SCOPE_AUTHENTIK_API from authentik.providers.oauth2.models import AccessToken, OAuth2Provider @@ -49,8 +51,12 @@ class TestAPIAuth(TestCase): with self.assertRaises(AuthenticationFailed): bearer_auth(f"Bearer {token.key}".encode()) - def test_managed_outpost(self): + @reconcile_app("authentik_outposts") + def test_managed_outpost_fail(self): """Test managed outpost""" + outpost = Outpost.objects.filter(managed=MANAGED_OUTPOST).first() + outpost.user.delete() + outpost.delete() with self.assertRaises(AuthenticationFailed): bearer_auth(f"Bearer {settings.SECRET_KEY}".encode()) diff --git a/authentik/lib/default.yml b/authentik/lib/default.yml index 83bd3c7c9..7573888ae 100644 --- a/authentik/lib/default.yml +++ b/authentik/lib/default.yml @@ -8,6 +8,8 @@ postgresql: password: "env://POSTGRES_PASSWORD" use_pgbouncer: false use_pgpool: false + test: + name: test_authentik listen: listen_http: 0.0.0.0:9000 diff --git a/authentik/root/settings.py b/authentik/root/settings.py index df144431f..08959c127 100644 --- a/authentik/root/settings.py +++ b/authentik/root/settings.py @@ -278,6 +278,9 @@ DATABASES = { "SSLROOTCERT": CONFIG.get("postgresql.sslrootcert"), "SSLCERT": CONFIG.get("postgresql.sslcert"), "SSLKEY": CONFIG.get("postgresql.sslkey"), + "TEST": { + "NAME": CONFIG.get("postgresql.test.name"), + }, } } diff --git a/go.mod b/go.mod index d36876837..c295495c8 100644 --- a/go.mod +++ b/go.mod @@ -82,5 +82,3 @@ require ( gopkg.in/square/go-jose.v2 v2.5.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) - -replace goauthentik.io/api/v3 => ./gen-go-api From 9f59221e3cac991b64640b35adfd27b6aa30ba18 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 01:23:26 +0100 Subject: [PATCH 023/131] core: bump golang.org/x/crypto from 0.16.0 to 0.17.0 (#7908) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index c295495c8..cd87decd4 100644 --- a/go.mod +++ b/go.mod @@ -73,7 +73,7 @@ require ( go.opentelemetry.io/otel v1.17.0 // indirect go.opentelemetry.io/otel/metric v1.17.0 // indirect go.opentelemetry.io/otel/trace v1.17.0 // indirect - golang.org/x/crypto v0.16.0 // indirect + golang.org/x/crypto v0.17.0 // indirect golang.org/x/net v0.19.0 // indirect golang.org/x/sys v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect diff --git a/go.sum b/go.sum index cc21d82de..3ffe0e6cd 100644 --- a/go.sum +++ b/go.sum @@ -320,8 +320,8 @@ golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= -golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= -golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= From ce1d1310f9ebc52ba289544df2957cc0e444433f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 11:20:07 +0100 Subject: [PATCH 024/131] web: bump the eslint group in /tests/wdio with 2 updates (#7916) Bumps the eslint group in /tests/wdio with 2 updates: [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) and [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser). Updates `@typescript-eslint/eslint-plugin` from 6.14.0 to 6.15.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.15.0/packages/eslint-plugin) Updates `@typescript-eslint/parser` from 6.14.0 to 6.15.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.15.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: eslint - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: eslint ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tests/wdio/package-lock.json | 88 ++++++++++++++++++------------------ tests/wdio/package.json | 4 +- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/tests/wdio/package-lock.json b/tests/wdio/package-lock.json index 9e274be9a..b95531928 100644 --- a/tests/wdio/package-lock.json +++ b/tests/wdio/package-lock.json @@ -7,8 +7,8 @@ "name": "@goauthentik/web-tests", "devDependencies": { "@trivago/prettier-plugin-sort-imports": "^4.3.0", - "@typescript-eslint/eslint-plugin": "^6.14.0", - "@typescript-eslint/parser": "^6.14.0", + "@typescript-eslint/eslint-plugin": "^6.15.0", + "@typescript-eslint/parser": "^6.15.0", "@wdio/cli": "^8.26.2", "@wdio/local-runner": "^8.26.2", "@wdio/mocha-framework": "^8.26.2", @@ -946,16 +946,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.14.0.tgz", - "integrity": "sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.15.0.tgz", + "integrity": "sha512-j5qoikQqPccq9QoBAupOP+CBu8BaJ8BLjaXSioDISeTZkVO3ig7oSIKh3H+rEpee7xCXtWwSB4KIL5l6hWZzpg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.14.0", - "@typescript-eslint/type-utils": "6.14.0", - "@typescript-eslint/utils": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0", + "@typescript-eslint/scope-manager": "6.15.0", + "@typescript-eslint/type-utils": "6.15.0", + "@typescript-eslint/utils": "6.15.0", + "@typescript-eslint/visitor-keys": "6.15.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -981,15 +981,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.14.0.tgz", - "integrity": "sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.15.0.tgz", + "integrity": "sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.14.0", - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/typescript-estree": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0", + "@typescript-eslint/scope-manager": "6.15.0", + "@typescript-eslint/types": "6.15.0", + "@typescript-eslint/typescript-estree": "6.15.0", + "@typescript-eslint/visitor-keys": "6.15.0", "debug": "^4.3.4" }, "engines": { @@ -1009,13 +1009,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.14.0.tgz", - "integrity": "sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.15.0.tgz", + "integrity": "sha512-+BdvxYBltqrmgCNu4Li+fGDIkW9n//NrruzG9X1vBzaNK+ExVXPoGB71kneaVw/Jp+4rH/vaMAGC6JfMbHstVg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0" + "@typescript-eslint/types": "6.15.0", + "@typescript-eslint/visitor-keys": "6.15.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1026,13 +1026,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.14.0.tgz", - "integrity": "sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.15.0.tgz", + "integrity": "sha512-CnmHKTfX6450Bo49hPg2OkIm/D/TVYV7jO1MCfPYGwf6x3GO0VU8YMO5AYMn+u3X05lRRxA4fWCz87GFQV6yVQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.14.0", - "@typescript-eslint/utils": "6.14.0", + "@typescript-eslint/typescript-estree": "6.15.0", + "@typescript-eslint/utils": "6.15.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -1053,9 +1053,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.14.0.tgz", - "integrity": "sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.15.0.tgz", + "integrity": "sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1066,13 +1066,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.14.0.tgz", - "integrity": "sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.15.0.tgz", + "integrity": "sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0", + "@typescript-eslint/types": "6.15.0", + "@typescript-eslint/visitor-keys": "6.15.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1093,17 +1093,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.14.0.tgz", - "integrity": "sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.15.0.tgz", + "integrity": "sha512-eF82p0Wrrlt8fQSRL0bGXzK5nWPRV2dYQZdajcfzOD9+cQz9O7ugifrJxclB+xVOvWvagXfqS4Es7vpLP4augw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.14.0", - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/typescript-estree": "6.14.0", + "@typescript-eslint/scope-manager": "6.15.0", + "@typescript-eslint/types": "6.15.0", + "@typescript-eslint/typescript-estree": "6.15.0", "semver": "^7.5.4" }, "engines": { @@ -1118,12 +1118,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.14.0.tgz", - "integrity": "sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.15.0.tgz", + "integrity": "sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.14.0", + "@typescript-eslint/types": "6.15.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { diff --git a/tests/wdio/package.json b/tests/wdio/package.json index 4ae9982d4..7a37a7391 100644 --- a/tests/wdio/package.json +++ b/tests/wdio/package.json @@ -4,8 +4,8 @@ "type": "module", "devDependencies": { "@trivago/prettier-plugin-sort-imports": "^4.3.0", - "@typescript-eslint/eslint-plugin": "^6.14.0", - "@typescript-eslint/parser": "^6.14.0", + "@typescript-eslint/eslint-plugin": "^6.15.0", + "@typescript-eslint/parser": "^6.15.0", "@wdio/cli": "^8.26.2", "@wdio/local-runner": "^8.26.2", "@wdio/mocha-framework": "^8.26.2", From 15c1f9c434f97a5181845b895e561b37fedefc10 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 11:20:18 +0100 Subject: [PATCH 025/131] website: bump prism-react-renderer from 2.3.0 to 2.3.1 in /website (#7915) Bumps [prism-react-renderer](https://github.com/FormidableLabs/prism-react-renderer) from 2.3.0 to 2.3.1. - [Release notes](https://github.com/FormidableLabs/prism-react-renderer/releases) - [Commits](https://github.com/FormidableLabs/prism-react-renderer/compare/prism-react-renderer@2.3.0...prism-react-renderer@2.3.1) --- updated-dependencies: - dependency-name: prism-react-renderer dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- website/package-lock.json | 8 ++++---- website/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/website/package-lock.json b/website/package-lock.json index 009fe65dd..5a0562f33 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -19,7 +19,7 @@ "clsx": "^2.0.0", "disqus-react": "^1.1.5", "postcss": "^8.4.32", - "prism-react-renderer": "^2.3.0", + "prism-react-renderer": "^2.3.1", "rapidoc": "^9.3.4", "react": "^18.2.0", "react-before-after-slider-component": "^1.1.8", @@ -13786,9 +13786,9 @@ } }, "node_modules/prism-react-renderer": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.0.tgz", - "integrity": "sha512-UYRg2TkVIaI6tRVHC5OJ4/BxqPUxJkJvq/odLT/ykpt1zGYXooNperUxQcCvi87LyRnR4nCh81ceOA+e7nrydg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.1.tgz", + "integrity": "sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw==", "dependencies": { "@types/prismjs": "^1.26.0", "clsx": "^2.0.0" diff --git a/website/package.json b/website/package.json index c8c48c25d..418f9e87f 100644 --- a/website/package.json +++ b/website/package.json @@ -26,7 +26,7 @@ "clsx": "^2.0.0", "disqus-react": "^1.1.5", "postcss": "^8.4.32", - "prism-react-renderer": "^2.3.0", + "prism-react-renderer": "^2.3.1", "rapidoc": "^9.3.4", "react-before-after-slider-component": "^1.1.8", "react-dom": "^18.2.0", From 0781659dd6d53e813cc4bc7459dbae5aa753e48b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 11:20:26 +0100 Subject: [PATCH 026/131] web: bump the eslint group in /web with 2 updates (#7913) Bumps the eslint group in /web with 2 updates: [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) and [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser). Updates `@typescript-eslint/eslint-plugin` from 6.14.0 to 6.15.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.15.0/packages/eslint-plugin) Updates `@typescript-eslint/parser` from 6.14.0 to 6.15.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.15.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: eslint - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: eslint ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package-lock.json | 88 +++++++++++++++++++++---------------------- web/package.json | 4 +- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 78ec0bff3..0bfb294e1 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -72,8 +72,8 @@ "@types/chart.js": "^2.9.41", "@types/codemirror": "5.60.15", "@types/grecaptcha": "^3.0.7", - "@typescript-eslint/eslint-plugin": "^6.14.0", - "@typescript-eslint/parser": "^6.14.0", + "@typescript-eslint/eslint-plugin": "^6.15.0", + "@typescript-eslint/parser": "^6.15.0", "babel-plugin-macros": "^3.1.0", "babel-plugin-tsconfig-paths": "^1.0.3", "cross-env": "^7.0.3", @@ -7605,16 +7605,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.14.0.tgz", - "integrity": "sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.15.0.tgz", + "integrity": "sha512-j5qoikQqPccq9QoBAupOP+CBu8BaJ8BLjaXSioDISeTZkVO3ig7oSIKh3H+rEpee7xCXtWwSB4KIL5l6hWZzpg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.14.0", - "@typescript-eslint/type-utils": "6.14.0", - "@typescript-eslint/utils": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0", + "@typescript-eslint/scope-manager": "6.15.0", + "@typescript-eslint/type-utils": "6.15.0", + "@typescript-eslint/utils": "6.15.0", + "@typescript-eslint/visitor-keys": "6.15.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -7673,15 +7673,15 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.14.0.tgz", - "integrity": "sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.15.0.tgz", + "integrity": "sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.14.0", - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/typescript-estree": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0", + "@typescript-eslint/scope-manager": "6.15.0", + "@typescript-eslint/types": "6.15.0", + "@typescript-eslint/typescript-estree": "6.15.0", + "@typescript-eslint/visitor-keys": "6.15.0", "debug": "^4.3.4" }, "engines": { @@ -7701,13 +7701,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.14.0.tgz", - "integrity": "sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.15.0.tgz", + "integrity": "sha512-+BdvxYBltqrmgCNu4Li+fGDIkW9n//NrruzG9X1vBzaNK+ExVXPoGB71kneaVw/Jp+4rH/vaMAGC6JfMbHstVg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0" + "@typescript-eslint/types": "6.15.0", + "@typescript-eslint/visitor-keys": "6.15.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -7718,13 +7718,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.14.0.tgz", - "integrity": "sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.15.0.tgz", + "integrity": "sha512-CnmHKTfX6450Bo49hPg2OkIm/D/TVYV7jO1MCfPYGwf6x3GO0VU8YMO5AYMn+u3X05lRRxA4fWCz87GFQV6yVQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.14.0", - "@typescript-eslint/utils": "6.14.0", + "@typescript-eslint/typescript-estree": "6.15.0", + "@typescript-eslint/utils": "6.15.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -7745,9 +7745,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.14.0.tgz", - "integrity": "sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.15.0.tgz", + "integrity": "sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -7758,13 +7758,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.14.0.tgz", - "integrity": "sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.15.0.tgz", + "integrity": "sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0", + "@typescript-eslint/types": "6.15.0", + "@typescript-eslint/visitor-keys": "6.15.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7818,17 +7818,17 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.14.0.tgz", - "integrity": "sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.15.0.tgz", + "integrity": "sha512-eF82p0Wrrlt8fQSRL0bGXzK5nWPRV2dYQZdajcfzOD9+cQz9O7ugifrJxclB+xVOvWvagXfqS4Es7vpLP4augw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.14.0", - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/typescript-estree": "6.14.0", + "@typescript-eslint/scope-manager": "6.15.0", + "@typescript-eslint/types": "6.15.0", + "@typescript-eslint/typescript-estree": "6.15.0", "semver": "^7.5.4" }, "engines": { @@ -7876,12 +7876,12 @@ "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.14.0.tgz", - "integrity": "sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.15.0.tgz", + "integrity": "sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.14.0", + "@typescript-eslint/types": "6.15.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { diff --git a/web/package.json b/web/package.json index 75e33265a..7c992f3b0 100644 --- a/web/package.json +++ b/web/package.json @@ -97,8 +97,8 @@ "@types/chart.js": "^2.9.41", "@types/codemirror": "5.60.15", "@types/grecaptcha": "^3.0.7", - "@typescript-eslint/eslint-plugin": "^6.14.0", - "@typescript-eslint/parser": "^6.14.0", + "@typescript-eslint/eslint-plugin": "^6.15.0", + "@typescript-eslint/parser": "^6.15.0", "babel-plugin-macros": "^3.1.0", "babel-plugin-tsconfig-paths": "^1.0.3", "cross-env": "^7.0.3", From b560afd35e0a8693a3eb49e59c2285fe1e948914 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 11:20:35 +0100 Subject: [PATCH 027/131] web: bump the esbuild group in /web with 2 updates (#7914) Bumps the esbuild group in /web with 2 updates: [@esbuild/darwin-arm64](https://github.com/evanw/esbuild) and [@esbuild/linux-arm64](https://github.com/evanw/esbuild). Updates `@esbuild/darwin-arm64` from 0.19.9 to 0.19.10 - [Release notes](https://github.com/evanw/esbuild/releases) - [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md) - [Commits](https://github.com/evanw/esbuild/compare/v0.19.9...v0.19.10) Updates `@esbuild/linux-arm64` from 0.19.9 to 0.19.10 - [Release notes](https://github.com/evanw/esbuild/releases) - [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md) - [Commits](https://github.com/evanw/esbuild/compare/v0.19.9...v0.19.10) --- updated-dependencies: - dependency-name: "@esbuild/darwin-arm64" dependency-type: direct:production update-type: version-update:semver-patch dependency-group: esbuild - dependency-name: "@esbuild/linux-arm64" dependency-type: direct:production update-type: version-update:semver-patch dependency-group: esbuild ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package-lock.json | 51 ++++++++++++++++++++++++++++++++++++------- web/package.json | 4 ++-- 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 0bfb294e1..b32de77f7 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -15,6 +15,7 @@ "@codemirror/lang-xml": "^6.0.2", "@codemirror/legacy-modes": "^6.3.3", "@codemirror/theme-one-dark": "^6.1.2", + "@esbuild/linux-arm64": "^0.19.10", "@formatjs/intl-listformat": "^7.5.3", "@fortawesome/fontawesome-free": "^6.5.1", "@goauthentik/api": "^2023.10.4-1702933698", @@ -107,9 +108,9 @@ "node": ">=20" }, "optionalDependencies": { - "@esbuild/darwin-arm64": "^0.19.9", + "@esbuild/darwin-arm64": "^0.19.10", "@esbuild/linux-amd64": "^0.18.11", - "@esbuild/linux-arm64": "^0.19.9" + "@esbuild/linux-arm64": "^0.19.10" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -2434,9 +2435,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.9.tgz", - "integrity": "sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==", + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.10.tgz", + "integrity": "sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==", "cpu": [ "arm64" ], @@ -2513,9 +2514,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.9.tgz", - "integrity": "sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==", + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.10.tgz", + "integrity": "sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==", "cpu": [ "arm64" ], @@ -18397,6 +18398,23 @@ "node": ">=12" } }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.9.tgz", + "integrity": "sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/vite/node_modules/@esbuild/darwin-x64": { "version": "0.19.9", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.9.tgz", @@ -18465,6 +18483,23 @@ "node": ">=12" } }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.9.tgz", + "integrity": "sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/vite/node_modules/@esbuild/linux-ia32": { "version": "0.19.9", "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.9.tgz", diff --git a/web/package.json b/web/package.json index 7c992f3b0..b01b67580 100644 --- a/web/package.json +++ b/web/package.json @@ -129,9 +129,9 @@ "vite-tsconfig-paths": "^4.2.2" }, "optionalDependencies": { - "@esbuild/darwin-arm64": "^0.19.9", + "@esbuild/darwin-arm64": "^0.19.10", "@esbuild/linux-amd64": "^0.18.11", - "@esbuild/linux-arm64": "^0.19.9" + "@esbuild/linux-arm64": "^0.19.10" }, "engines": { "node": ">=20" From 4b8fb139cad44cd65295f7c0a943655f83bdb444 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 11:20:44 +0100 Subject: [PATCH 028/131] core: bump goauthentik.io/api/v3 from 3.2023104.2 to 3.2023104.3 (#7912) Bumps [goauthentik.io/api/v3](https://github.com/goauthentik/client-go) from 3.2023104.2 to 3.2023104.3. - [Release notes](https://github.com/goauthentik/client-go/releases) - [Commits](https://github.com/goauthentik/client-go/compare/v3.2023104.2...v3.2023104.3) --- updated-dependencies: - dependency-name: goauthentik.io/api/v3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index cd87decd4..8823d467a 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,7 @@ require ( github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.8.0 github.com/stretchr/testify v1.8.4 - goauthentik.io/api/v3 v3.2023104.2 + goauthentik.io/api/v3 v3.2023104.3 golang.org/x/exp v0.0.0-20230210204819-062eb4c674ab golang.org/x/oauth2 v0.15.0 golang.org/x/sync v0.5.0 diff --git a/go.sum b/go.sum index 3ffe0e6cd..a94e23a58 100644 --- a/go.sum +++ b/go.sum @@ -309,8 +309,8 @@ go.opentelemetry.io/otel/trace v1.17.0 h1:/SWhSRHmDPOImIAetP1QAeMnZYiQXrTy4fMMYO go.opentelemetry.io/otel/trace v1.17.0/go.mod h1:I/4vKTgFclIsXRVucpH25X0mpFSczM7aHeaz0ZBLWjY= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= -goauthentik.io/api/v3 v3.2023104.2 h1:TV3SdaPGhjVE7If0l1kt+H23xwgEabWUFgX4ijkkeSc= -goauthentik.io/api/v3 v3.2023104.2/go.mod h1:zz+mEZg8rY/7eEjkMGWJ2DnGqk+zqxuybGCGrR2O4Kw= +goauthentik.io/api/v3 v3.2023104.3 h1:MzwdB21Q+G+wACEZiX0T1iVV4l7PjopjaVv6muqJE1M= +goauthentik.io/api/v3 v3.2023104.3/go.mod h1:zz+mEZg8rY/7eEjkMGWJ2DnGqk+zqxuybGCGrR2O4Kw= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= From 0156249123a6b0e1a9c1645c13916056b208ab2b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 11:21:38 +0100 Subject: [PATCH 029/131] web: bump the wdio group in /tests/wdio with 4 updates (#7917) Bumps the wdio group in /tests/wdio with 4 updates: [@wdio/cli](https://github.com/webdriverio/webdriverio/tree/HEAD/packages/wdio-cli), [@wdio/local-runner](https://github.com/webdriverio/webdriverio/tree/HEAD/packages/wdio-local-runner), [@wdio/mocha-framework](https://github.com/webdriverio/webdriverio/tree/HEAD/packages/wdio-mocha-framework) and [@wdio/spec-reporter](https://github.com/webdriverio/webdriverio/tree/HEAD/packages/wdio-spec-reporter). Updates `@wdio/cli` from 8.26.2 to 8.26.3 - [Release notes](https://github.com/webdriverio/webdriverio/releases) - [Changelog](https://github.com/webdriverio/webdriverio/blob/main/CHANGELOG.md) - [Commits](https://github.com/webdriverio/webdriverio/commits/v8.26.3/packages/wdio-cli) Updates `@wdio/local-runner` from 8.26.2 to 8.26.3 - [Release notes](https://github.com/webdriverio/webdriverio/releases) - [Changelog](https://github.com/webdriverio/webdriverio/blob/main/CHANGELOG.md) - [Commits](https://github.com/webdriverio/webdriverio/commits/v8.26.3/packages/wdio-local-runner) Updates `@wdio/mocha-framework` from 8.26.2 to 8.26.3 - [Release notes](https://github.com/webdriverio/webdriverio/releases) - [Changelog](https://github.com/webdriverio/webdriverio/blob/main/CHANGELOG.md) - [Commits](https://github.com/webdriverio/webdriverio/commits/v8.26.3/packages/wdio-mocha-framework) Updates `@wdio/spec-reporter` from 8.26.2 to 8.26.3 - [Release notes](https://github.com/webdriverio/webdriverio/releases) - [Changelog](https://github.com/webdriverio/webdriverio/blob/main/CHANGELOG.md) - [Commits](https://github.com/webdriverio/webdriverio/commits/v8.26.3/packages/wdio-spec-reporter) --- updated-dependencies: - dependency-name: "@wdio/cli" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: wdio - dependency-name: "@wdio/local-runner" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: wdio - dependency-name: "@wdio/mocha-framework" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: wdio - dependency-name: "@wdio/spec-reporter" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: wdio ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tests/wdio/package-lock.json | 146 +++++++++++++++++------------------ tests/wdio/package.json | 8 +- 2 files changed, 77 insertions(+), 77 deletions(-) diff --git a/tests/wdio/package-lock.json b/tests/wdio/package-lock.json index b95531928..11905de2f 100644 --- a/tests/wdio/package-lock.json +++ b/tests/wdio/package-lock.json @@ -9,10 +9,10 @@ "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@typescript-eslint/eslint-plugin": "^6.15.0", "@typescript-eslint/parser": "^6.15.0", - "@wdio/cli": "^8.26.2", - "@wdio/local-runner": "^8.26.2", - "@wdio/mocha-framework": "^8.26.2", - "@wdio/spec-reporter": "^8.26.2", + "@wdio/cli": "^8.26.3", + "@wdio/local-runner": "^8.26.3", + "@wdio/mocha-framework": "^8.26.3", + "@wdio/spec-reporter": "^8.26.3", "eslint": "^8.56.0", "eslint-config-google": "^0.14.0", "eslint-plugin-sonarjs": "^0.23.0", @@ -1141,18 +1141,18 @@ "dev": true }, "node_modules/@wdio/cli": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-8.26.2.tgz", - "integrity": "sha512-Gu9JZHFe1Kd69ip8FsXb8rQpt/dYqOBYj47kF8c/lTObhwf/WYXLwlS5XpNTc81vLK+iiM7p92QLgfG8oOHyIg==", + "version": "8.26.3", + "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-8.26.3.tgz", + "integrity": "sha512-wrq145sNBw4DrsF5GEK8TBxqVWln7GZpNpM5QeDqCcZzVHIqDud4f7nADgZGbR8dJ96NVfC3rby6wbeRQUA+eg==", "dev": true, "dependencies": { "@types/node": "^20.1.1", - "@wdio/config": "8.26.2", - "@wdio/globals": "8.26.2", + "@wdio/config": "8.26.3", + "@wdio/globals": "8.26.3", "@wdio/logger": "8.24.12", "@wdio/protocols": "8.24.12", - "@wdio/types": "8.26.2", - "@wdio/utils": "8.26.2", + "@wdio/types": "8.26.3", + "@wdio/utils": "8.26.3", "async-exit-hook": "^2.0.1", "chalk": "^5.2.0", "chokidar": "^3.5.3", @@ -1167,7 +1167,7 @@ "lodash.union": "^4.6.0", "read-pkg-up": "^10.0.0", "recursive-readdir": "^2.2.3", - "webdriverio": "8.26.2", + "webdriverio": "8.26.3", "yargs": "^17.7.2" }, "bin": { @@ -1190,14 +1190,14 @@ } }, "node_modules/@wdio/config": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.26.2.tgz", - "integrity": "sha512-E7QQ5t5LMLnfytls0SePJ61CGkYiBzN9D0dsNQuEOXjiWXt3Q+1VZnQgbfk85P6gRSxfyp7unB4VRxpsHDCwrw==", + "version": "8.26.3", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.26.3.tgz", + "integrity": "sha512-NWh2JXRSyP4gY+jeC79u0L3hSXW/s3rOWez4M6qAglT91fZTXFbIl1GM8lnZlCq03ye2qFPqYrZ+4tGNQj7YxQ==", "dev": true, "dependencies": { "@wdio/logger": "8.24.12", - "@wdio/types": "8.26.2", - "@wdio/utils": "8.26.2", + "@wdio/types": "8.26.3", + "@wdio/utils": "8.26.3", "decamelize": "^6.0.0", "deepmerge-ts": "^5.0.0", "glob": "^10.2.2", @@ -1208,29 +1208,29 @@ } }, "node_modules/@wdio/globals": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.26.2.tgz", - "integrity": "sha512-ie96SYwvnZTfcTQPYjshxoaNob9yndlG6z29l5bugY6xkpW2YVKOJ7bf8X4S+1M9ATIJiBYh1fpliuxyib2JXQ==", + "version": "8.26.3", + "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.26.3.tgz", + "integrity": "sha512-RW3UsvnUb4DjxVOqIngXQMcDJlbH+QL/LeChznUF0FW+Mqg/mZWukBld5/dDwgQHk9F2TOzc8ctk5FM3s1AoWQ==", "dev": true, "engines": { "node": "^16.13 || >=18" }, "optionalDependencies": { "expect-webdriverio": "^4.6.1", - "webdriverio": "8.26.2" + "webdriverio": "8.26.3" } }, "node_modules/@wdio/local-runner": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-8.26.2.tgz", - "integrity": "sha512-sAgWT2/l1zuCvk7MkNyrSCOj2cF6G//XYlqXiUGyG5O8R2B6GWB/bOrh4GsuOQ8rQ8vnUPnJVUeravHWhVePNA==", + "version": "8.26.3", + "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-8.26.3.tgz", + "integrity": "sha512-YWxTBp6tc8Dlz09rnRhV2GXV4b3w5G0WyYEf81D+kXDI3QxDvYn6QujByr6Q7fQ9yLwJU4ptnT2uL5IbAwVo2A==", "dev": true, "dependencies": { "@types/node": "^20.1.0", "@wdio/logger": "8.24.12", "@wdio/repl": "8.24.12", - "@wdio/runner": "8.26.2", - "@wdio/types": "8.26.2", + "@wdio/runner": "8.26.3", + "@wdio/types": "8.26.3", "async-exit-hook": "^2.0.1", "split2": "^4.1.0", "stream-buffers": "^3.0.2" @@ -1267,16 +1267,16 @@ } }, "node_modules/@wdio/mocha-framework": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@wdio/mocha-framework/-/mocha-framework-8.26.2.tgz", - "integrity": "sha512-VEbkj/R9dOs9WWeO/xCSiGLZSCYEQ6We6MFiedSiTUFyPFbbBqtDE6ENJzstJhyoywwHsr9XuTxIGqakaDmfBw==", + "version": "8.26.3", + "resolved": "https://registry.npmjs.org/@wdio/mocha-framework/-/mocha-framework-8.26.3.tgz", + "integrity": "sha512-r9uHUcXhh6TKFqTBCacnbtQx0nZjFsnV9Pony8CY9qcNCn2q666ucQbrtMfZdjuevhn5N0E710+El4eAvK3jyw==", "dev": true, "dependencies": { "@types/mocha": "^10.0.0", "@types/node": "^20.1.0", "@wdio/logger": "8.24.12", - "@wdio/types": "8.26.2", - "@wdio/utils": "8.26.2", + "@wdio/types": "8.26.3", + "@wdio/utils": "8.26.3", "mocha": "^10.0.0" }, "engines": { @@ -1302,14 +1302,14 @@ } }, "node_modules/@wdio/reporter": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-8.26.2.tgz", - "integrity": "sha512-Fzn8AmYCmeqWyZBgkIgWuHEHb5HQgZXHxYvT1LeG+3B/w1F6OAU3lZSuY/ACoDI0vAYgRTHVDHFwuuhdUjtDew==", + "version": "8.26.3", + "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-8.26.3.tgz", + "integrity": "sha512-F/sF1Hwxp1osM2wto4JydONQGxqkbOhwbLM0o4Y8eHPgK7/m+Kn9uygBDqPVpgQnpf0kUfhpICe9gaZzG4Jt+g==", "dev": true, "dependencies": { "@types/node": "^20.1.0", "@wdio/logger": "8.24.12", - "@wdio/types": "8.26.2", + "@wdio/types": "8.26.3", "diff": "^5.0.0", "object-inspect": "^1.12.0" }, @@ -1318,35 +1318,35 @@ } }, "node_modules/@wdio/runner": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-8.26.2.tgz", - "integrity": "sha512-0eKmAJ1/KqFsEIhfKVCipPL2i3vMjRld6PDQxgZWLaxOsyVXQ38njJ+HHogskWtdGQqWNisosYGUv29QNTJYsw==", + "version": "8.26.3", + "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-8.26.3.tgz", + "integrity": "sha512-mbZGkBbXTRtj1hL5QUbNxpJvhE4rkXvYlUuea1uOVk3e2/+k2dZeGeKPgh1Q7Dt07118dfujCB7pQCYldE/dGg==", "dev": true, "dependencies": { "@types/node": "^20.1.0", - "@wdio/config": "8.26.2", - "@wdio/globals": "8.26.2", + "@wdio/config": "8.26.3", + "@wdio/globals": "8.26.3", "@wdio/logger": "8.24.12", - "@wdio/types": "8.26.2", - "@wdio/utils": "8.26.2", + "@wdio/types": "8.26.3", + "@wdio/utils": "8.26.3", "deepmerge-ts": "^5.0.0", "expect-webdriverio": "^4.6.1", "gaze": "^1.1.2", - "webdriver": "8.26.2", - "webdriverio": "8.26.2" + "webdriver": "8.26.3", + "webdriverio": "8.26.3" }, "engines": { "node": "^16.13 || >=18" } }, "node_modules/@wdio/spec-reporter": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-8.26.2.tgz", - "integrity": "sha512-GysWLoBukPNgxuXyobt7xPI776kW2NBsdvNYn8ECpYXWh7Of+ANSOGgGNWrN70Chct1NbGA5W4WwuDWcMeDDwg==", + "version": "8.26.3", + "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-8.26.3.tgz", + "integrity": "sha512-YfKlBOmxGyJk08BpDnsjPsp85XyhG7Cu2qoAVxtJ8kkJOZaGfUg9TBV9DXDqvdZcxCMnPfDfQIda6LzfkZf58Q==", "dev": true, "dependencies": { - "@wdio/reporter": "8.26.2", - "@wdio/types": "8.26.2", + "@wdio/reporter": "8.26.3", + "@wdio/types": "8.26.3", "chalk": "^5.1.2", "easy-table": "^1.2.0", "pretty-ms": "^7.0.0" @@ -1368,9 +1368,9 @@ } }, "node_modules/@wdio/types": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.26.2.tgz", - "integrity": "sha512-LBaoTr4jrPu9knQBN1/7BD3SLkaGoQPcbE3GKIxeaOu0fRMOtEr22HxoONahOlQDvyPoOBmSoZw8wUvIfwhrRw==", + "version": "8.26.3", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.26.3.tgz", + "integrity": "sha512-WOxvSV4sKJ5QCRNTJHeKCzgO2TZmcK1eDlJ+FObt9Pnt+4pCRy/881eVY/Aj2bozn2hhzq0AK/h6oPAUV/gjCg==", "dev": true, "dependencies": { "@types/node": "^20.1.0" @@ -1380,14 +1380,14 @@ } }, "node_modules/@wdio/utils": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.26.2.tgz", - "integrity": "sha512-QohaDMxsNunn6sWFBBtw2vSsoSfpbbjLAszW+iBLccpNGfRfHnaJ8HZ5gfsphMYnLfQe5lZRliIX5+8sSnjU1Q==", + "version": "8.26.3", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.26.3.tgz", + "integrity": "sha512-LA/iCKgJQemAAXoN6vHyKBtngdkFUWEnjB8Yd1Xm3gUQTvY4GVlvcqOxC2RF5Th7/L2LNxc6TWuErYv/mm5H+w==", "dev": true, "dependencies": { "@puppeteer/browsers": "^1.6.0", "@wdio/logger": "8.24.12", - "@wdio/types": "8.26.2", + "@wdio/types": "8.26.3", "decamelize": "^6.0.0", "deepmerge-ts": "^5.1.0", "edgedriver": "^5.3.5", @@ -2456,9 +2456,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1235375", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1235375.tgz", - "integrity": "sha512-MOMnfplVXEhcP7+W98NK8ZJtgoo2/A+s+FkIu9+TbSgWSZREVK5Ozh2qCQgRN4EPYMxiSJX09OoVJT+hGj4aTw==", + "version": "0.0.1237913", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1237913.tgz", + "integrity": "sha512-Pxtmz2ZIqBkpU82HaIdsvCQBG94yTC4xajrEsWx9p38QKEfBCJktSazsHkrjf9j3dVVNPhg5LR21F6KWeXpjiQ==", "dev": true }, "node_modules/diff": { @@ -8495,18 +8495,18 @@ } }, "node_modules/webdriver": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.26.2.tgz", - "integrity": "sha512-3i+icym2m0EYRyJP9zbjoy2Npw3nNAK8iVC5VVo35lb9bFmyHoLsihxxsHnALgVRyBLahZV0Smh2dnVsePHOvw==", + "version": "8.26.3", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.26.3.tgz", + "integrity": "sha512-vHbMj0BFXPMtKVmJsVIkFVbdOT8eXkjFeJ7LmJL8cMMe1S5Lt44DqRjSBBoGsqYoYgIBmKpqAQcDrHrv9m7smQ==", "dev": true, "dependencies": { "@types/node": "^20.1.0", "@types/ws": "^8.5.3", - "@wdio/config": "8.26.2", + "@wdio/config": "8.26.3", "@wdio/logger": "8.24.12", "@wdio/protocols": "8.24.12", - "@wdio/types": "8.26.2", - "@wdio/utils": "8.26.2", + "@wdio/types": "8.26.3", + "@wdio/utils": "8.26.3", "deepmerge-ts": "^5.1.0", "got": "^12.6.1", "ky": "^0.33.0", @@ -8517,23 +8517,23 @@ } }, "node_modules/webdriverio": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.26.2.tgz", - "integrity": "sha512-kjSl3g6K0ieVt2np6dDJxsIb80kVKlKX6NNcBzQdAVrLcydRt4ibPa5oYalap9X2PgxA9I5Kae+ZTeM+d4f71w==", + "version": "8.26.3", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.26.3.tgz", + "integrity": "sha512-5Ka8MOQoK866EI3whiCvzD1IiKFBq9niWF3lh92uMt6ZjbUZZoe5esWIHhFsHFxT6dOOU8uXR/Gr6qsBJFZReA==", "dev": true, "dependencies": { "@types/node": "^20.1.0", - "@wdio/config": "8.26.2", + "@wdio/config": "8.26.3", "@wdio/logger": "8.24.12", "@wdio/protocols": "8.24.12", "@wdio/repl": "8.24.12", - "@wdio/types": "8.26.2", - "@wdio/utils": "8.26.2", + "@wdio/types": "8.26.3", + "@wdio/utils": "8.26.3", "archiver": "^6.0.0", "aria-query": "^5.0.0", "css-shorthand-properties": "^1.1.1", "css-value": "^0.0.1", - "devtools-protocol": "^0.0.1235375", + "devtools-protocol": "^0.0.1237913", "grapheme-splitter": "^1.0.2", "import-meta-resolve": "^4.0.0", "is-plain-obj": "^4.1.0", @@ -8545,7 +8545,7 @@ "resq": "^1.9.1", "rgb2hex": "0.2.5", "serialize-error": "^11.0.1", - "webdriver": "8.26.2" + "webdriver": "8.26.3" }, "engines": { "node": "^16.13 || >=18" diff --git a/tests/wdio/package.json b/tests/wdio/package.json index 7a37a7391..78b0928fc 100644 --- a/tests/wdio/package.json +++ b/tests/wdio/package.json @@ -6,10 +6,10 @@ "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@typescript-eslint/eslint-plugin": "^6.15.0", "@typescript-eslint/parser": "^6.15.0", - "@wdio/cli": "^8.26.2", - "@wdio/local-runner": "^8.26.2", - "@wdio/mocha-framework": "^8.26.2", - "@wdio/spec-reporter": "^8.26.2", + "@wdio/cli": "^8.26.3", + "@wdio/local-runner": "^8.26.3", + "@wdio/mocha-framework": "^8.26.3", + "@wdio/spec-reporter": "^8.26.3", "eslint": "^8.56.0", "eslint-config-google": "^0.14.0", "eslint-plugin-sonarjs": "^0.23.0", From e86640e9306a57e1f097d7d5c382328334a3d49b Mon Sep 17 00:00:00 2001 From: Jens L Date: Tue, 19 Dec 2023 13:27:39 +0100 Subject: [PATCH 030/131] website/integrations: update azure AD integration (#7922) * website/integrations: update azure AD integration Signed-off-by: Jens Langhammer * Optimised images with calibre/image-actions --------- Signed-off-by: Jens Langhammer Co-authored-by: authentik-automation[bot] <135050075+authentik-automation[bot]@users.noreply.github.com> --- .../sources/azure-ad/authentik_01.png | Bin 60983 -> 90649 bytes .../integrations/sources/azure-ad/index.md | 5 ++--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/website/integrations/sources/azure-ad/authentik_01.png b/website/integrations/sources/azure-ad/authentik_01.png index 55404f98698dd4f1ce29e3b53137489bc8062a51..89d54aee7e67a0a2e908ce9b4e1e1a743dc239f8 100644 GIT binary patch literal 90649 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�$W3I%}1Zs*g7@Vl@FX%D`Udzb?t#Ir&3#4;k+O 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 z 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 Date: Tue, 19 Dec 2023 13:32:10 +0100 Subject: [PATCH 031/131] flows: add "require outpost" authentication_requirement (#7921) * migrate get_client_ip to middleware Signed-off-by: Jens Langhammer * use middleware directly without wrapper Signed-off-by: Jens Langhammer * add require_outpost setting for flows Signed-off-by: Jens Langhammer * fix Signed-off-by: Jens Langhammer * add tests Signed-off-by: Jens Langhammer * update schema Signed-off-by: Jens Langhammer * update web ui Signed-off-by: Jens Langhammer * fixup Signed-off-by: Jens Langhammer * improve fallback Signed-off-by: Jens Langhammer --------- Signed-off-by: Jens Langhammer --- authentik/core/models.py | 5 +- authentik/events/models.py | 5 +- .../migrations/0027_auto_20231028_1424.py | 17 ++- authentik/flows/models.py | 1 + authentik/flows/planner.py | 5 + authentik/flows/tests/test_planner.py | 32 +++++ authentik/lib/tests/test_http.py | 24 ++-- authentik/lib/utils/http.py | 70 ----------- authentik/policies/expression/evaluator.py | 4 +- authentik/policies/reputation/models.py | 4 +- authentik/policies/reputation/signals.py | 4 +- authentik/policies/types.py | 5 +- authentik/root/middleware.py | 112 +++++++++++++++++- authentik/root/settings.py | 1 + .../authenticator_validate/challenge.py | 4 +- authentik/stages/captcha/stage.py | 5 +- authentik/stages/identification/stage.py | 4 +- authentik/stages/user_login/tests.py | 4 +- blueprints/schema.json | 3 +- schema.yml | 5 + web/src/admin/flows/FlowForm.ts | 7 ++ web/xliff/de.xlf | 3 + web/xliff/en.xlf | 3 + web/xliff/es.xlf | 3 + web/xliff/fr.xlf | 3 + web/xliff/pl.xlf | 3 + web/xliff/pseudo-LOCALE.xlf | 3 + web/xliff/tr.xlf | 3 + web/xliff/zh-Hans.xlf | 3 + web/xliff/zh-Hant.xlf | 3 + web/xliff/zh_TW.xlf | 3 + 31 files changed, 244 insertions(+), 107 deletions(-) diff --git a/authentik/core/models.py b/authentik/core/models.py index 7d11af3d6..125d5b0c8 100644 --- a/authentik/core/models.py +++ b/authentik/core/models.py @@ -30,7 +30,6 @@ from authentik.lib.models import ( DomainlessFormattedURLValidator, SerializerModel, ) -from authentik.lib.utils.http import get_client_ip from authentik.policies.models import PolicyBindingModel from authentik.root.install_id import get_install_id @@ -748,12 +747,14 @@ class AuthenticatedSession(ExpiringModel): @staticmethod def from_request(request: HttpRequest, user: User) -> Optional["AuthenticatedSession"]: """Create a new session from a http request""" + from authentik.root.middleware import ClientIPMiddleware + if not hasattr(request, "session") or not request.session.session_key: return None return AuthenticatedSession( session_key=request.session.session_key, user=user, - last_ip=get_client_ip(request), + last_ip=ClientIPMiddleware.get_client_ip(request), last_user_agent=request.META.get("HTTP_USER_AGENT", ""), expires=request.session.get_expiry_date(), ) diff --git a/authentik/events/models.py b/authentik/events/models.py index c43128419..03e9a939c 100644 --- a/authentik/events/models.py +++ b/authentik/events/models.py @@ -36,9 +36,10 @@ from authentik.events.utils import ( ) from authentik.lib.models import DomainlessURLValidator, SerializerModel from authentik.lib.sentry import SentryIgnoredException -from authentik.lib.utils.http import get_client_ip, get_http_session +from authentik.lib.utils.http import get_http_session from authentik.lib.utils.time import timedelta_from_string from authentik.policies.models import PolicyBindingModel +from authentik.root.middleware import ClientIPMiddleware from authentik.stages.email.utils import TemplateEmailMessage from authentik.tenants.models import Tenant from authentik.tenants.utils import DEFAULT_TENANT @@ -244,7 +245,7 @@ class Event(SerializerModel, ExpiringModel): self.user = get_user(request.session[SESSION_KEY_IMPERSONATE_ORIGINAL_USER]) self.user["on_behalf_of"] = get_user(request.session[SESSION_KEY_IMPERSONATE_USER]) # User 255.255.255.255 as fallback if IP cannot be determined - self.client_ip = get_client_ip(request) + self.client_ip = ClientIPMiddleware.get_client_ip(request) # Apply GeoIP Data, when enabled self.with_geoip() # If there's no app set, we get it from the requests too diff --git a/authentik/flows/migrations/0027_auto_20231028_1424.py b/authentik/flows/migrations/0027_auto_20231028_1424.py index 856961a98..70784e6e3 100644 --- a/authentik/flows/migrations/0027_auto_20231028_1424.py +++ b/authentik/flows/migrations/0027_auto_20231028_1424.py @@ -1,7 +1,7 @@ # Generated by Django 4.2.6 on 2023-10-28 14:24 from django.apps.registry import Apps -from django.db import migrations +from django.db import migrations, models from django.db.backends.base.schema import BaseDatabaseSchemaEditor @@ -31,4 +31,19 @@ class Migration(migrations.Migration): operations = [ migrations.RunPython(set_oobe_flow_authentication), + migrations.AlterField( + model_name="flow", + name="authentication", + field=models.TextField( + choices=[ + ("none", "None"), + ("require_authenticated", "Require Authenticated"), + ("require_unauthenticated", "Require Unauthenticated"), + ("require_superuser", "Require Superuser"), + ("require_outpost", "Require Outpost"), + ], + default="none", + help_text="Required level of authentication and authorization to access a flow.", + ), + ), ] diff --git a/authentik/flows/models.py b/authentik/flows/models.py index 67f7f0a9c..7ed744824 100644 --- a/authentik/flows/models.py +++ b/authentik/flows/models.py @@ -31,6 +31,7 @@ class FlowAuthenticationRequirement(models.TextChoices): REQUIRE_AUTHENTICATED = "require_authenticated" REQUIRE_UNAUTHENTICATED = "require_unauthenticated" REQUIRE_SUPERUSER = "require_superuser" + REQUIRE_OUTPOST = "require_outpost" class NotConfiguredAction(models.TextChoices): diff --git a/authentik/flows/planner.py b/authentik/flows/planner.py index f80461490..a74c43275 100644 --- a/authentik/flows/planner.py +++ b/authentik/flows/planner.py @@ -23,6 +23,7 @@ from authentik.flows.models import ( ) from authentik.lib.config import CONFIG from authentik.policies.engine import PolicyEngine +from authentik.root.middleware import ClientIPMiddleware LOGGER = get_logger() PLAN_CONTEXT_PENDING_USER = "pending_user" @@ -141,6 +142,10 @@ class FlowPlanner: and not request.user.is_superuser ): raise FlowNonApplicableException() + if self.flow.authentication == FlowAuthenticationRequirement.REQUIRE_OUTPOST: + outpost_user = ClientIPMiddleware.get_outpost_user(request) + if not outpost_user: + raise FlowNonApplicableException() def plan( self, request: HttpRequest, default_context: Optional[dict[str, Any]] = None diff --git a/authentik/flows/tests/test_planner.py b/authentik/flows/tests/test_planner.py index 790f5bba4..f95462dc5 100644 --- a/authentik/flows/tests/test_planner.py +++ b/authentik/flows/tests/test_planner.py @@ -8,6 +8,7 @@ from django.test import RequestFactory, TestCase from django.urls import reverse from guardian.shortcuts import get_anonymous_user +from authentik.blueprints.tests import reconcile_app from authentik.core.models import User from authentik.core.tests.utils import create_test_admin_user, create_test_flow from authentik.flows.exceptions import EmptyFlowException, FlowNonApplicableException @@ -15,9 +16,12 @@ from authentik.flows.markers import ReevaluateMarker, StageMarker from authentik.flows.models import FlowAuthenticationRequirement, FlowDesignation, FlowStageBinding from authentik.flows.planner import PLAN_CONTEXT_PENDING_USER, FlowPlanner, cache_key from authentik.lib.tests.utils import dummy_get_response +from authentik.outposts.apps import MANAGED_OUTPOST +from authentik.outposts.models import Outpost from authentik.policies.dummy.models import DummyPolicy from authentik.policies.models import PolicyBinding from authentik.policies.types import PolicyResult +from authentik.root.middleware import ClientIPMiddleware from authentik.stages.dummy.models import DummyStage POLICY_RETURN_FALSE = PropertyMock(return_value=PolicyResult(False)) @@ -68,6 +72,34 @@ class TestFlowPlanner(TestCase): planner.allow_empty_flows = True planner.plan(request) + @reconcile_app("authentik_outposts") + def test_authentication_outpost(self): + """Test flow authentication (outpost)""" + flow = create_test_flow() + flow.authentication = FlowAuthenticationRequirement.REQUIRE_OUTPOST + request = self.request_factory.get( + reverse("authentik_api:flow-executor", kwargs={"flow_slug": flow.slug}), + ) + request.user = AnonymousUser() + with self.assertRaises(FlowNonApplicableException): + planner = FlowPlanner(flow) + planner.allow_empty_flows = True + planner.plan(request) + + outpost = Outpost.objects.filter(managed=MANAGED_OUTPOST).first() + request = self.request_factory.get( + reverse("authentik_api:flow-executor", kwargs={"flow_slug": flow.slug}), + HTTP_X_AUTHENTIK_OUTPOST_TOKEN=outpost.token.key, + HTTP_X_AUTHENTIK_REMOTE_IP="1.2.3.4", + ) + request.user = AnonymousUser() + middleware = ClientIPMiddleware(dummy_get_response) + middleware(request) + + planner = FlowPlanner(flow) + planner.allow_empty_flows = True + planner.plan(request) + @patch( "authentik.policies.engine.PolicyEngine.result", POLICY_RETURN_FALSE, diff --git a/authentik/lib/tests/test_http.py b/authentik/lib/tests/test_http.py index e554088cc..92ec5b425 100644 --- a/authentik/lib/tests/test_http.py +++ b/authentik/lib/tests/test_http.py @@ -3,8 +3,8 @@ from django.test import RequestFactory, TestCase from authentik.core.models import Token, TokenIntents, UserTypes from authentik.core.tests.utils import create_test_admin_user -from authentik.lib.utils.http import OUTPOST_REMOTE_IP_HEADER, OUTPOST_TOKEN_HEADER, get_client_ip from authentik.lib.views import bad_request_message +from authentik.root.middleware import ClientIPMiddleware class TestHTTP(TestCase): @@ -22,12 +22,12 @@ class TestHTTP(TestCase): def test_normal(self): """Test normal request""" request = self.factory.get("/") - self.assertEqual(get_client_ip(request), "127.0.0.1") + self.assertEqual(ClientIPMiddleware.get_client_ip(request), "127.0.0.1") def test_forward_for(self): """Test x-forwarded-for request""" request = self.factory.get("/", HTTP_X_FORWARDED_FOR="127.0.0.2") - self.assertEqual(get_client_ip(request), "127.0.0.2") + self.assertEqual(ClientIPMiddleware.get_client_ip(request), "127.0.0.2") def test_fake_outpost(self): """Test faked IP which is overridden by an outpost""" @@ -38,28 +38,28 @@ class TestHTTP(TestCase): request = self.factory.get( "/", **{ - OUTPOST_REMOTE_IP_HEADER: "1.2.3.4", - OUTPOST_TOKEN_HEADER: "abc", + ClientIPMiddleware.outpost_remote_ip_header: "1.2.3.4", + ClientIPMiddleware.outpost_token_header: "abc", }, ) - self.assertEqual(get_client_ip(request), "127.0.0.1") + self.assertEqual(ClientIPMiddleware.get_client_ip(request), "127.0.0.1") # Invalid, user doesn't have permissions request = self.factory.get( "/", **{ - OUTPOST_REMOTE_IP_HEADER: "1.2.3.4", - OUTPOST_TOKEN_HEADER: token.key, + ClientIPMiddleware.outpost_remote_ip_header: "1.2.3.4", + ClientIPMiddleware.outpost_token_header: token.key, }, ) - self.assertEqual(get_client_ip(request), "127.0.0.1") + self.assertEqual(ClientIPMiddleware.get_client_ip(request), "127.0.0.1") # Valid self.user.type = UserTypes.INTERNAL_SERVICE_ACCOUNT self.user.save() request = self.factory.get( "/", **{ - OUTPOST_REMOTE_IP_HEADER: "1.2.3.4", - OUTPOST_TOKEN_HEADER: token.key, + ClientIPMiddleware.outpost_remote_ip_header: "1.2.3.4", + ClientIPMiddleware.outpost_token_header: token.key, }, ) - self.assertEqual(get_client_ip(request), "1.2.3.4") + self.assertEqual(ClientIPMiddleware.get_client_ip(request), "1.2.3.4") diff --git a/authentik/lib/utils/http.py b/authentik/lib/utils/http.py index adb3ec099..3d6638104 100644 --- a/authentik/lib/utils/http.py +++ b/authentik/lib/utils/http.py @@ -1,82 +1,12 @@ """http helpers""" -from typing import Any, Optional - -from django.http import HttpRequest from requests.sessions import Session -from sentry_sdk.hub import Hub from structlog.stdlib import get_logger from authentik import get_full_version -OUTPOST_REMOTE_IP_HEADER = "HTTP_X_AUTHENTIK_REMOTE_IP" -OUTPOST_TOKEN_HEADER = "HTTP_X_AUTHENTIK_OUTPOST_TOKEN" # nosec -DEFAULT_IP = "255.255.255.255" LOGGER = get_logger() -def _get_client_ip_from_meta(meta: dict[str, Any]) -> str: - """Attempt to get the client's IP by checking common HTTP Headers. - Returns none if no IP Could be found - - No additional validation is done here as requests are expected to only arrive here - via the go proxy, which deals with validating these headers for us""" - headers = ( - "HTTP_X_FORWARDED_FOR", - "REMOTE_ADDR", - ) - for _header in headers: - if _header in meta: - ips: list[str] = meta.get(_header).split(",") - return ips[0].strip() - return DEFAULT_IP - - -def _get_outpost_override_ip(request: HttpRequest) -> Optional[str]: - """Get the actual remote IP when set by an outpost. Only - allowed when the request is authenticated, by an outpost internal service account""" - from authentik.core.models import Token, TokenIntents, UserTypes - - if OUTPOST_REMOTE_IP_HEADER not in request.META or OUTPOST_TOKEN_HEADER not in request.META: - return None - fake_ip = request.META[OUTPOST_REMOTE_IP_HEADER] - token = ( - Token.filter_not_expired( - key=request.META.get(OUTPOST_TOKEN_HEADER), intent=TokenIntents.INTENT_API - ) - .select_related("user") - .first() - ) - if not token: - LOGGER.warning("Attempted remote-ip override without token", fake_ip=fake_ip) - return None - user = token.user - if user.type != UserTypes.INTERNAL_SERVICE_ACCOUNT: - LOGGER.warning( - "Remote-IP override: user doesn't have permission", - user=user, - fake_ip=fake_ip, - ) - return None - # Update sentry scope to include correct IP - user = Hub.current.scope._user - if not user: - user = {} - user["ip_address"] = fake_ip - Hub.current.scope.set_user(user) - return fake_ip - - -def get_client_ip(request: Optional[HttpRequest]) -> str: - """Attempt to get the client's IP by checking common HTTP Headers. - Returns none if no IP Could be found""" - if not request: - return DEFAULT_IP - override = _get_outpost_override_ip(request) - if override: - return override - return _get_client_ip_from_meta(request.META) - - def authentik_user_agent() -> str: """Get a common user agent""" return f"authentik@{get_full_version()}" diff --git a/authentik/policies/expression/evaluator.py b/authentik/policies/expression/evaluator.py index 7617efdb3..4cc167f4b 100644 --- a/authentik/policies/expression/evaluator.py +++ b/authentik/policies/expression/evaluator.py @@ -7,9 +7,9 @@ from structlog.stdlib import get_logger from authentik.flows.planner import PLAN_CONTEXT_SSO from authentik.lib.expression.evaluator import BaseEvaluator -from authentik.lib.utils.http import get_client_ip from authentik.policies.exceptions import PolicyException from authentik.policies.types import PolicyRequest, PolicyResult +from authentik.root.middleware import ClientIPMiddleware LOGGER = get_logger() if TYPE_CHECKING: @@ -49,7 +49,7 @@ class PolicyEvaluator(BaseEvaluator): """Update context based on http request""" # update website/docs/expressions/_objects.md # update website/docs/expressions/_functions.md - self._context["ak_client_ip"] = ip_address(get_client_ip(request)) + self._context["ak_client_ip"] = ip_address(ClientIPMiddleware.get_client_ip(request)) self._context["http_request"] = request def handle_error(self, exc: Exception, expression_source: str): diff --git a/authentik/policies/reputation/models.py b/authentik/policies/reputation/models.py index 723614f51..7fccfa11a 100644 --- a/authentik/policies/reputation/models.py +++ b/authentik/policies/reputation/models.py @@ -13,9 +13,9 @@ from structlog import get_logger from authentik.core.models import ExpiringModel from authentik.lib.config import CONFIG from authentik.lib.models import SerializerModel -from authentik.lib.utils.http import get_client_ip from authentik.policies.models import Policy from authentik.policies.types import PolicyRequest, PolicyResult +from authentik.root.middleware import ClientIPMiddleware LOGGER = get_logger() CACHE_KEY_PREFIX = "goauthentik.io/policies/reputation/scores/" @@ -44,7 +44,7 @@ class ReputationPolicy(Policy): return "ak-policy-reputation-form" def passes(self, request: PolicyRequest) -> PolicyResult: - remote_ip = get_client_ip(request.http_request) + remote_ip = ClientIPMiddleware.get_client_ip(request.http_request) query = Q() if self.check_ip: query |= Q(ip=remote_ip) diff --git a/authentik/policies/reputation/signals.py b/authentik/policies/reputation/signals.py index 49b8cf011..5307672d4 100644 --- a/authentik/policies/reputation/signals.py +++ b/authentik/policies/reputation/signals.py @@ -7,9 +7,9 @@ from structlog.stdlib import get_logger from authentik.core.signals import login_failed from authentik.lib.config import CONFIG -from authentik.lib.utils.http import get_client_ip from authentik.policies.reputation.models import CACHE_KEY_PREFIX from authentik.policies.reputation.tasks import save_reputation +from authentik.root.middleware import ClientIPMiddleware from authentik.stages.identification.signals import identification_failed LOGGER = get_logger() @@ -18,7 +18,7 @@ CACHE_TIMEOUT = CONFIG.get_int("cache.timeout_reputation") def update_score(request: HttpRequest, identifier: str, amount: int): """Update score for IP and User""" - remote_ip = get_client_ip(request) + remote_ip = ClientIPMiddleware.get_client_ip(request) try: # We only update the cache here, as its faster than writing to the DB diff --git a/authentik/policies/types.py b/authentik/policies/types.py index 29ac9c3c8..5e59dbbf0 100644 --- a/authentik/policies/types.py +++ b/authentik/policies/types.py @@ -9,7 +9,6 @@ from django.http import HttpRequest from structlog.stdlib import get_logger from authentik.events.geo import GEOIP_READER -from authentik.lib.utils.http import get_client_ip if TYPE_CHECKING: from authentik.core.models import User @@ -38,10 +37,12 @@ class PolicyRequest: def set_http_request(self, request: HttpRequest): # pragma: no cover """Load data from HTTP request, including geoip when enabled""" + from authentik.root.middleware import ClientIPMiddleware + self.http_request = request if not GEOIP_READER.enabled: return - client_ip = get_client_ip(request) + client_ip = ClientIPMiddleware.get_client_ip(request) if not client_ip: return self.context["geoip"] = GEOIP_READER.city(client_ip) diff --git a/authentik/root/middleware.py b/authentik/root/middleware.py index 8f97c3c9e..5eca4a6e5 100644 --- a/authentik/root/middleware.py +++ b/authentik/root/middleware.py @@ -2,7 +2,7 @@ from hashlib import sha512 from time import time from timeit import default_timer -from typing import Callable +from typing import Any, Callable, Optional from django.conf import settings from django.contrib.sessions.backends.base import UpdateError @@ -15,9 +15,10 @@ from django.middleware.csrf import CsrfViewMiddleware as UpstreamCsrfViewMiddlew from django.utils.cache import patch_vary_headers from django.utils.http import http_date from jwt import PyJWTError, decode, encode +from sentry_sdk.hub import Hub from structlog.stdlib import get_logger -from authentik.lib.utils.http import get_client_ip +from authentik.core.models import Token, TokenIntents, User, UserTypes LOGGER = get_logger("authentik.asgi") ACR_AUTHENTIK_SESSION = "goauthentik.io/core/default" @@ -156,6 +157,111 @@ class CsrfViewMiddleware(UpstreamCsrfViewMiddleware): patch_vary_headers(response, ("Cookie",)) +class ClientIPMiddleware: + """Set a "known-good" client IP on the request, by default based off of x-forwarded-for + which is set by the go proxy, but also allowing the remote IP to be overridden by an outpost + for protocols like LDAP""" + + get_response: Callable[[HttpRequest], HttpResponse] + outpost_remote_ip_header = "HTTP_X_AUTHENTIK_REMOTE_IP" + outpost_token_header = "HTTP_X_AUTHENTIK_OUTPOST_TOKEN" # nosec + default_ip = "255.255.255.255" + + request_attr_client_ip = "client_ip" + request_attr_outpost_user = "outpost_user" + + def __init__(self, get_response: Callable[[HttpRequest], HttpResponse]): + self.get_response = get_response + + def _get_client_ip_from_meta(self, meta: dict[str, Any]) -> str: + """Attempt to get the client's IP by checking common HTTP Headers. + Returns none if no IP Could be found + + No additional validation is done here as requests are expected to only arrive here + via the go proxy, which deals with validating these headers for us""" + headers = ( + "HTTP_X_FORWARDED_FOR", + "REMOTE_ADDR", + ) + for _header in headers: + if _header in meta: + ips: list[str] = meta.get(_header).split(",") + return ips[0].strip() + return self.default_ip + + # FIXME: this should probably not be in `root` but rather in a middleware in `outposts` + # but for now it's fine + def _get_outpost_override_ip(self, request: HttpRequest) -> Optional[str]: + """Get the actual remote IP when set by an outpost. Only + allowed when the request is authenticated, by an outpost internal service account""" + if ( + self.outpost_remote_ip_header not in request.META + or self.outpost_token_header not in request.META + ): + return None + delegated_ip = request.META[self.outpost_remote_ip_header] + token = ( + Token.filter_not_expired( + key=request.META.get(self.outpost_token_header), intent=TokenIntents.INTENT_API + ) + .select_related("user") + .first() + ) + if not token: + LOGGER.warning("Attempted remote-ip override without token", delegated_ip=delegated_ip) + return None + user: User = token.user + if user.type != UserTypes.INTERNAL_SERVICE_ACCOUNT: + LOGGER.warning( + "Remote-IP override: user doesn't have permission", + user=user, + delegated_ip=delegated_ip, + ) + return None + # Update sentry scope to include correct IP + user = Hub.current.scope._user + if not user: + user = {} + user["ip_address"] = delegated_ip + Hub.current.scope.set_user(user) + # Set the outpost service account on the request + setattr(request, self.request_attr_outpost_user, user) + return delegated_ip + + def _get_client_ip(self, request: Optional[HttpRequest]) -> str: + """Attempt to get the client's IP by checking common HTTP Headers. + Returns none if no IP Could be found""" + if not request: + return self.default_ip + override = self._get_outpost_override_ip(request) + if override: + return override + return self._get_client_ip_from_meta(request.META) + + @staticmethod + def get_outpost_user(request: HttpRequest) -> Optional[User]: + """Get outpost user that authenticated this request""" + return getattr(request, ClientIPMiddleware.request_attr_outpost_user, None) + + @staticmethod + def get_client_ip(request: HttpRequest) -> str: + """Get correct client IP, including any overrides from outposts that + have the permission to do so""" + if request and not hasattr(request, ClientIPMiddleware.request_attr_client_ip): + ClientIPMiddleware(lambda request: request).set_ip(request) + return getattr( + request, ClientIPMiddleware.request_attr_client_ip, ClientIPMiddleware.default_ip + ) + + def set_ip(self, request: HttpRequest): + """Set the IP""" + setattr(request, self.request_attr_client_ip, self._get_client_ip(request)) + + def __call__(self, request: HttpRequest) -> HttpResponse: + self.set_ip(request) + return self.get_response(request) + + class ChannelsLoggingMiddleware: """Logging middleware for channels""" @@ -201,7 +307,7 @@ class LoggingMiddleware: """Log request""" LOGGER.info( request.get_full_path(), - remote=get_client_ip(request), + remote=ClientIPMiddleware.get_client_ip(request), method=request.method, scheme=request.scheme, status=status_code, diff --git a/authentik/root/settings.py b/authentik/root/settings.py index 08959c127..526cf27ce 100644 --- a/authentik/root/settings.py +++ b/authentik/root/settings.py @@ -217,6 +217,7 @@ MESSAGE_STORAGE = "authentik.root.messages.storage.ChannelsStorage" MIDDLEWARE = [ "authentik.root.middleware.LoggingMiddleware", "django_prometheus.middleware.PrometheusBeforeMiddleware", + "authentik.root.middleware.ClientIPMiddleware", "authentik.root.middleware.SessionMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "authentik.core.middleware.RequestIDMiddleware", diff --git a/authentik/stages/authenticator_validate/challenge.py b/authentik/stages/authenticator_validate/challenge.py index c1b2a7f1c..d883b903a 100644 --- a/authentik/stages/authenticator_validate/challenge.py +++ b/authentik/stages/authenticator_validate/challenge.py @@ -22,7 +22,7 @@ from authentik.core.signals import login_failed from authentik.events.models import Event, EventAction from authentik.flows.stage import StageView from authentik.flows.views.executor import SESSION_KEY_APPLICATION_PRE -from authentik.lib.utils.http import get_client_ip +from authentik.root.middleware import ClientIPMiddleware from authentik.stages.authenticator import match_token from authentik.stages.authenticator.models import Device from authentik.stages.authenticator_duo.models import AuthenticatorDuoStage, DuoDevice @@ -197,7 +197,7 @@ def validate_challenge_duo(device_pk: int, stage_view: StageView, user: User) -> response = stage.auth_client().auth( "auto", user_id=device.duo_user_id, - ipaddr=get_client_ip(stage_view.request), + ipaddr=ClientIPMiddleware.get_client_ip(stage_view.request), type=__( "%(brand_name)s Login request" % { diff --git a/authentik/stages/captcha/stage.py b/authentik/stages/captcha/stage.py index e6782ef78..e0a8c20d6 100644 --- a/authentik/stages/captcha/stage.py +++ b/authentik/stages/captcha/stage.py @@ -12,7 +12,8 @@ from authentik.flows.challenge import ( WithUserInfoChallenge, ) from authentik.flows.stage import ChallengeStageView -from authentik.lib.utils.http import get_client_ip, get_http_session +from authentik.lib.utils.http import get_http_session +from authentik.root.middleware import ClientIPMiddleware from authentik.stages.captcha.models import CaptchaStage @@ -42,7 +43,7 @@ class CaptchaChallengeResponse(ChallengeResponse): data={ "secret": stage.private_key, "response": token, - "remoteip": get_client_ip(self.stage.request), + "remoteip": ClientIPMiddleware.get_client_ip(self.stage.request), }, ) response.raise_for_status() diff --git a/authentik/stages/identification/stage.py b/authentik/stages/identification/stage.py index 568030af8..b71792ff6 100644 --- a/authentik/stages/identification/stage.py +++ b/authentik/stages/identification/stage.py @@ -26,8 +26,8 @@ from authentik.flows.models import FlowDesignation from authentik.flows.planner import PLAN_CONTEXT_PENDING_USER from authentik.flows.stage import PLAN_CONTEXT_PENDING_USER_IDENTIFIER, ChallengeStageView from authentik.flows.views.executor import SESSION_KEY_APPLICATION_PRE, SESSION_KEY_GET -from authentik.lib.utils.http import get_client_ip from authentik.lib.utils.urls import reverse_with_qs +from authentik.root.middleware import ClientIPMiddleware from authentik.sources.oauth.types.apple import AppleLoginChallenge from authentik.sources.plex.models import PlexAuthenticationChallenge from authentik.stages.identification.models import IdentificationStage @@ -103,7 +103,7 @@ class IdentificationChallengeResponse(ChallengeResponse): self.stage.logger.info( "invalid_login", identifier=uid_field, - client_ip=get_client_ip(self.stage.request), + client_ip=ClientIPMiddleware.get_client_ip(self.stage.request), action="invalid_identifier", context={ "stage": sanitize_item(self.stage), diff --git a/authentik/stages/user_login/tests.py b/authentik/stages/user_login/tests.py index fbf92b395..b61f89fd5 100644 --- a/authentik/stages/user_login/tests.py +++ b/authentik/stages/user_login/tests.py @@ -16,8 +16,8 @@ from authentik.flows.tests import FlowTestCase from authentik.flows.tests.test_executor import TO_STAGE_RESPONSE_MOCK from authentik.flows.views.executor import SESSION_KEY_PLAN from authentik.lib.generators import generate_id -from authentik.lib.utils.http import DEFAULT_IP from authentik.lib.utils.time import timedelta_from_string +from authentik.root.middleware import ClientIPMiddleware from authentik.stages.user_login.models import UserLoginStage @@ -76,7 +76,7 @@ class TestUserLoginStage(FlowTestCase): other_session = AuthenticatedSession.objects.create( user=self.user, session_key=key, - last_ip=DEFAULT_IP, + last_ip=ClientIPMiddleware.default_ip, ) cache.set(f"{KEY_PREFIX}{other_session.session_key}", "foo") diff --git a/blueprints/schema.json b/blueprints/schema.json index 423094b60..bf66c94ed 100644 --- a/blueprints/schema.json +++ b/blueprints/schema.json @@ -3167,7 +3167,8 @@ "none", "require_authenticated", "require_unauthenticated", - "require_superuser" + "require_superuser", + "require_outpost" ], "title": "Authentication", "description": "Required level of authentication and authorization to access a flow." diff --git a/schema.yml b/schema.yml index 694eca69c..da1a90a18 100644 --- a/schema.yml +++ b/schema.yml @@ -28328,12 +28328,14 @@ components: - require_authenticated - require_unauthenticated - require_superuser + - require_outpost type: string description: |- * `none` - None * `require_authenticated` - Require Authenticated * `require_unauthenticated` - Require Unauthenticated * `require_superuser` - Require Superuser + * `require_outpost` - Require Outpost AuthenticatorAttachmentEnum: enum: - platform @@ -31328,6 +31330,7 @@ components: * `require_authenticated` - Require Authenticated * `require_unauthenticated` - Require Unauthenticated * `require_superuser` - Require Superuser + * `require_outpost` - Require Outpost required: - background - cache_count @@ -31566,6 +31569,7 @@ components: * `require_authenticated` - Require Authenticated * `require_unauthenticated` - Require Unauthenticated * `require_superuser` - Require Superuser + * `require_outpost` - Require Outpost required: - designation - name @@ -36514,6 +36518,7 @@ components: * `require_authenticated` - Require Authenticated * `require_unauthenticated` - Require Unauthenticated * `require_superuser` - Require Superuser + * `require_outpost` - Require Outpost PatchedFlowStageBindingRequest: type: object description: FlowStageBinding Serializer diff --git a/web/src/admin/flows/FlowForm.ts b/web/src/admin/flows/FlowForm.ts index fcb5f0cb7..1d279070f 100644 --- a/web/src/admin/flows/FlowForm.ts +++ b/web/src/admin/flows/FlowForm.ts @@ -196,6 +196,13 @@ export class FlowForm extends ModelForm { > ${msg("Require superuser.")} +

${msg("Required authentication level for this flow.")} diff --git a/web/xliff/de.xlf b/web/xliff/de.xlf index 85e253602..eab6455a7 100644 --- a/web/xliff/de.xlf +++ b/web/xliff/de.xlf @@ -6117,6 +6117,9 @@ Bindings to groups/users are checked against the user of the event. Event volume + + + Require Outpost (flow can only be executed from an outpost). diff --git a/web/xliff/en.xlf b/web/xliff/en.xlf index 2b236521f..6b64a65bc 100644 --- a/web/xliff/en.xlf +++ b/web/xliff/en.xlf @@ -6394,6 +6394,9 @@ Bindings to groups/users are checked against the user of the event. Event volume + + + Require Outpost (flow can only be executed from an outpost). diff --git a/web/xliff/es.xlf b/web/xliff/es.xlf index d9564b6ad..3b5585585 100644 --- a/web/xliff/es.xlf +++ b/web/xliff/es.xlf @@ -6033,6 +6033,9 @@ Bindings to groups/users are checked against the user of the event. Event volume + + + Require Outpost (flow can only be executed from an outpost). diff --git a/web/xliff/fr.xlf b/web/xliff/fr.xlf index e0976e5e8..b6451ddd5 100644 --- a/web/xliff/fr.xlf +++ b/web/xliff/fr.xlf @@ -8042,6 +8042,9 @@ Les liaisons avec les groupes/utilisateurs sont vérifiées par rapport à l'uti Event volume Volume d'événements + + + Require Outpost (flow can only be executed from an outpost). diff --git a/web/xliff/pl.xlf b/web/xliff/pl.xlf index 7aae5340d..3032efbe7 100644 --- a/web/xliff/pl.xlf +++ b/web/xliff/pl.xlf @@ -6241,6 +6241,9 @@ Bindings to groups/users are checked against the user of the event. Event volume + + + Require Outpost (flow can only be executed from an outpost). diff --git a/web/xliff/pseudo-LOCALE.xlf b/web/xliff/pseudo-LOCALE.xlf index 3839422ba..4ba11cc6a 100644 --- a/web/xliff/pseudo-LOCALE.xlf +++ b/web/xliff/pseudo-LOCALE.xlf @@ -7981,4 +7981,7 @@ Bindings to groups/users are checked against the user of the event. Event volume + + Require Outpost (flow can only be executed from an outpost). + diff --git a/web/xliff/tr.xlf b/web/xliff/tr.xlf index 188474957..798c86b63 100644 --- a/web/xliff/tr.xlf +++ b/web/xliff/tr.xlf @@ -6026,6 +6026,9 @@ Bindings to groups/users are checked against the user of the event. Event volume + + + Require Outpost (flow can only be executed from an outpost). diff --git a/web/xliff/zh-Hans.xlf b/web/xliff/zh-Hans.xlf index efcf25576..3c3e42d2a 100644 --- a/web/xliff/zh-Hans.xlf +++ b/web/xliff/zh-Hans.xlf @@ -8044,6 +8044,9 @@ Bindings to groups/users are checked against the user of the event. Event volume 事件容量 + + + Require Outpost (flow can only be executed from an outpost). diff --git a/web/xliff/zh-Hant.xlf b/web/xliff/zh-Hant.xlf index 1b85d0ee3..63ba2b4ec 100644 --- a/web/xliff/zh-Hant.xlf +++ b/web/xliff/zh-Hant.xlf @@ -6074,6 +6074,9 @@ Bindings to groups/users are checked against the user of the event. Event volume + + + Require Outpost (flow can only be executed from an outpost). diff --git a/web/xliff/zh_TW.xlf b/web/xliff/zh_TW.xlf index 05818f770..376197f66 100644 --- a/web/xliff/zh_TW.xlf +++ b/web/xliff/zh_TW.xlf @@ -7965,6 +7965,9 @@ Bindings to groups/users are checked against the user of the event. Event volume + + + Require Outpost (flow can only be executed from an outpost). From 67b47f42c7283be7523c140ed31ebd1b22158cf6 Mon Sep 17 00:00:00 2001 From: "authentik-automation[bot]" <135050075+authentik-automation[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 12:46:04 +0000 Subject: [PATCH 032/131] web: bump API Client version (#7924) Signed-off-by: GitHub Co-authored-by: authentik-automation[bot] <135050075+authentik-automation[bot]@users.noreply.github.com> --- web/package-lock.json | 9 ++++----- web/package.json | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index b32de77f7..5e7f5a503 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -15,10 +15,9 @@ "@codemirror/lang-xml": "^6.0.2", "@codemirror/legacy-modes": "^6.3.3", "@codemirror/theme-one-dark": "^6.1.2", - "@esbuild/linux-arm64": "^0.19.10", "@formatjs/intl-listformat": "^7.5.3", "@fortawesome/fontawesome-free": "^6.5.1", - "@goauthentik/api": "^2023.10.4-1702933698", + "@goauthentik/api": "^2023.10.4-1702989148", "@lit-labs/context": "^0.4.0", "@lit-labs/task": "^3.1.0", "@lit/localize": "^0.11.4", @@ -2915,9 +2914,9 @@ } }, "node_modules/@goauthentik/api": { - "version": "2023.10.4-1702933698", - "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2023.10.4-1702933698.tgz", - "integrity": "sha512-l8kMFG1aI8ueOklocNtyV12goQNfqzy6+pzmERgFWSBRf5iZyeyPUxeYjI85cfpeptW9Hfr27aZoN1MXy3fMXw==" + "version": "2023.10.4-1702989148", + "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2023.10.4-1702989148.tgz", + "integrity": "sha512-BiCZgS/sw9arpQjjXboqjUrAOhn/m5vKH4jg9gioSD5xFQLBBOvfwP0eLpmZTL60ohKZ16/XikowvRPx0K154A==" }, "node_modules/@hcaptcha/types": { "version": "1.0.3", diff --git a/web/package.json b/web/package.json index b01b67580..786580462 100644 --- a/web/package.json +++ b/web/package.json @@ -42,7 +42,7 @@ "@codemirror/theme-one-dark": "^6.1.2", "@formatjs/intl-listformat": "^7.5.3", "@fortawesome/fontawesome-free": "^6.5.1", - "@goauthentik/api": "^2023.10.4-1702933698", + "@goauthentik/api": "^2023.10.4-1702989148", "@lit-labs/context": "^0.4.0", "@lit-labs/task": "^3.1.0", "@lit/localize": "^0.11.4", From b7532740ef677c57f2e5b5e76cd7a5c239737cb3 Mon Sep 17 00:00:00 2001 From: Jens L Date: Tue, 19 Dec 2023 13:59:53 +0100 Subject: [PATCH 033/131] root: fix static templates (#7925) * root: fix static HTML templates to match flow executor Signed-off-by: Jens Langhammer * remove top margin on smaller viewports Signed-off-by: Jens Langhammer --------- Signed-off-by: Jens Langhammer --- authentik/core/templates/login/base_full.html | 21 +++------------- internal/outpost/proxyv2/templates/error.html | 19 +++------------ web/src/common/styles/authentik.css | 24 +++++++++++++++++++ web/src/flow/FlowExecutor.ts | 6 +++-- 4 files changed, 34 insertions(+), 36 deletions(-) diff --git a/authentik/core/templates/login/base_full.html b/authentik/core/templates/login/base_full.html index c2dcd874b..be6e3a040 100644 --- a/authentik/core/templates/login/base_full.html +++ b/authentik/core/templates/login/base_full.html @@ -44,28 +44,14 @@ {% block body %}

- - - - - - - - - - -
-
diff --git a/web/src/admin/groups/RelatedUserList.ts b/web/src/admin/groups/RelatedUserList.ts index 2474ee2fe..27450fb82 100644 --- a/web/src/admin/groups/RelatedUserList.ts +++ b/web/src/admin/groups/RelatedUserList.ts @@ -10,6 +10,10 @@ import { uiConfig } from "@goauthentik/common/ui/config"; import { first } from "@goauthentik/common/utils"; import "@goauthentik/components/ak-status-label"; import { rootInterface } from "@goauthentik/elements/Base"; +import { + CapabilitiesEnum, + WithCapabilitiesConfig, +} from "@goauthentik/elements/Interface/capabilitiesProvider"; import "@goauthentik/elements/buttons/ActionButton"; import "@goauthentik/elements/buttons/Dropdown"; import "@goauthentik/elements/forms/DeleteBulkForm"; @@ -33,7 +37,6 @@ import PFBanner from "@patternfly/patternfly/components/Banner/banner.css"; import PFDescriptionList from "@patternfly/patternfly/components/DescriptionList/description-list.css"; import { - CapabilitiesEnum, CoreApi, CoreUsersListTypeEnum, Group, @@ -107,7 +110,7 @@ export class RelatedUserAdd extends Form<{ users: number[] }> { } @customElement("ak-user-related-list") -export class RelatedUserList extends Table { +export class RelatedUserList extends WithCapabilitiesConfig(Table) { expandable = true; checkbox = true; @@ -188,8 +191,7 @@ export class RelatedUserList extends Table { row(item: User): TemplateResult[] { const canImpersonate = - rootInterface()?.config?.capabilities.includes(CapabilitiesEnum.CanImpersonate) && - item.pk !== this.me?.user.pk; + this.can(CapabilitiesEnum.CanImpersonate) && item.pk !== this.me?.user.pk; return [ html`
${item.username}
diff --git a/web/src/admin/sources/oauth/OAuthSourceForm.ts b/web/src/admin/sources/oauth/OAuthSourceForm.ts index cf0209fcb..92763bf7b 100644 --- a/web/src/admin/sources/oauth/OAuthSourceForm.ts +++ b/web/src/admin/sources/oauth/OAuthSourceForm.ts @@ -4,9 +4,12 @@ import { BaseSourceForm } from "@goauthentik/admin/sources/BaseSourceForm"; import { UserMatchingModeToLabel } from "@goauthentik/admin/sources/oauth/utils"; import { DEFAULT_CONFIG, config } from "@goauthentik/common/api/config"; import { first } from "@goauthentik/common/utils"; -import { rootInterface } from "@goauthentik/elements/Base"; import "@goauthentik/elements/CodeMirror"; import { CodeMirrorMode } from "@goauthentik/elements/CodeMirror"; +import { + CapabilitiesEnum, + WithCapabilitiesConfig, +} from "@goauthentik/elements/Interface/capabilitiesProvider"; import "@goauthentik/elements/forms/FormGroup"; import "@goauthentik/elements/forms/HorizontalFormElement"; import "@goauthentik/elements/forms/SearchSelect"; @@ -17,7 +20,6 @@ import { customElement, property, state } from "lit/decorators.js"; import { ifDefined } from "lit/directives/if-defined.js"; import { - CapabilitiesEnum, FlowsInstancesListDesignationEnum, OAuthSource, OAuthSourceRequest, @@ -28,7 +30,7 @@ import { } from "@goauthentik/api"; @customElement("ak-source-oauth-form") -export class OAuthSourceForm extends BaseSourceForm { +export class OAuthSourceForm extends WithCapabilitiesConfig(BaseSourceForm) { async loadInstance(pk: string): Promise { const source = await new SourcesApi(DEFAULT_CONFIG).sourcesOauthRetrieve({ slug: pk, @@ -318,7 +320,7 @@ export class OAuthSourceForm extends BaseSourceForm { />

${placeholderHelperText}

- ${rootInterface()?.config?.capabilities.includes(CapabilitiesEnum.CanSaveMedia) + ${this.can(CapabilitiesEnum.CanSaveMedia) ? html` ${this.instance?.icon diff --git a/web/src/admin/sources/plex/PlexSourceForm.ts b/web/src/admin/sources/plex/PlexSourceForm.ts index 8091067ff..8444e1112 100644 --- a/web/src/admin/sources/plex/PlexSourceForm.ts +++ b/web/src/admin/sources/plex/PlexSourceForm.ts @@ -2,10 +2,13 @@ import "@goauthentik/admin/common/ak-flow-search/ak-source-flow-search"; import { iconHelperText, placeholderHelperText } from "@goauthentik/admin/helperText"; import { BaseSourceForm } from "@goauthentik/admin/sources/BaseSourceForm"; import { UserMatchingModeToLabel } from "@goauthentik/admin/sources/oauth/utils"; -import { DEFAULT_CONFIG, config } from "@goauthentik/common/api/config"; +import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { PlexAPIClient, PlexResource, popupCenterScreen } from "@goauthentik/common/helpers/plex"; import { ascii_letters, digits, first, randomString } from "@goauthentik/common/utils"; -import { rootInterface } from "@goauthentik/elements/Base"; +import { + CapabilitiesEnum, + WithCapabilitiesConfig, +} from "@goauthentik/elements/Interface/capabilitiesProvider"; import "@goauthentik/elements/forms/FormGroup"; import "@goauthentik/elements/forms/HorizontalFormElement"; import "@goauthentik/elements/forms/SearchSelect"; @@ -16,7 +19,6 @@ import { customElement, property, state } from "lit/decorators.js"; import { ifDefined } from "lit/directives/if-defined.js"; import { - CapabilitiesEnum, FlowsInstancesListDesignationEnum, PlexSource, SourcesApi, @@ -24,7 +26,7 @@ import { } from "@goauthentik/api"; @customElement("ak-source-plex-form") -export class PlexSourceForm extends BaseSourceForm { +export class PlexSourceForm extends WithCapabilitiesConfig(BaseSourceForm) { async loadInstance(pk: string): Promise { const source = await new SourcesApi(DEFAULT_CONFIG).sourcesPlexRetrieve({ slug: pk, @@ -63,8 +65,7 @@ export class PlexSourceForm extends BaseSourceForm { plexSourceRequest: data, }); } - const c = await config(); - if (c.capabilities.includes(CapabilitiesEnum.CanSaveMedia)) { + if (this.can(CapabilitiesEnum.CanSaveMedia)) { const icon = this.getFormFiles()["icon"]; if (icon || this.clearIcon) { await new SourcesApi(DEFAULT_CONFIG).sourcesAllSetIconCreate({ @@ -255,7 +256,7 @@ export class PlexSourceForm extends BaseSourceForm { />

${placeholderHelperText}

- ${rootInterface()?.config?.capabilities.includes(CapabilitiesEnum.CanSaveMedia) + ${this.can(CapabilitiesEnum.CanSaveMedia) ? html` ${this.instance?.icon diff --git a/web/src/admin/sources/saml/SAMLSourceForm.ts b/web/src/admin/sources/saml/SAMLSourceForm.ts index 76e996322..c969411fb 100644 --- a/web/src/admin/sources/saml/SAMLSourceForm.ts +++ b/web/src/admin/sources/saml/SAMLSourceForm.ts @@ -5,7 +5,10 @@ import { BaseSourceForm } from "@goauthentik/admin/sources/BaseSourceForm"; import { UserMatchingModeToLabel } from "@goauthentik/admin/sources/oauth/utils"; import { DEFAULT_CONFIG, config } from "@goauthentik/common/api/config"; import { first } from "@goauthentik/common/utils"; -import { rootInterface } from "@goauthentik/elements/Base"; +import { + CapabilitiesEnum, + WithCapabilitiesConfig, +} from "@goauthentik/elements/Interface/capabilitiesProvider"; import "@goauthentik/elements/forms/FormGroup"; import "@goauthentik/elements/forms/HorizontalFormElement"; import "@goauthentik/elements/forms/Radio"; @@ -18,7 +21,6 @@ import { ifDefined } from "lit/directives/if-defined.js"; import { BindingTypeEnum, - CapabilitiesEnum, DigestAlgorithmEnum, FlowsInstancesListDesignationEnum, NameIdPolicyEnum, @@ -29,7 +31,7 @@ import { } from "@goauthentik/api"; @customElement("ak-source-saml-form") -export class SAMLSourceForm extends BaseSourceForm { +export class SAMLSourceForm extends WithCapabilitiesConfig(BaseSourceForm) { @state() clearIcon = false; @@ -149,7 +151,7 @@ export class SAMLSourceForm extends BaseSourceForm { - ${rootInterface()?.config?.capabilities.includes(CapabilitiesEnum.CanSaveMedia) + ${this.can(CapabilitiesEnum.CanSaveMedia) ? html` ${this.instance?.icon diff --git a/web/src/admin/users/UserListPage.ts b/web/src/admin/users/UserListPage.ts index 1d861b568..e9d0c6f09 100644 --- a/web/src/admin/users/UserListPage.ts +++ b/web/src/admin/users/UserListPage.ts @@ -12,6 +12,10 @@ import { DefaultUIConfig, uiConfig } from "@goauthentik/common/ui/config"; import { first } from "@goauthentik/common/utils"; import "@goauthentik/components/ak-status-label"; import { rootInterface } from "@goauthentik/elements/Base"; +import { + CapabilitiesEnum, + WithCapabilitiesConfig, +} from "@goauthentik/elements/Interface/capabilitiesProvider"; import { PFSize } from "@goauthentik/elements/Spinner"; import "@goauthentik/elements/TreeView"; import "@goauthentik/elements/buttons/ActionButton"; @@ -33,14 +37,7 @@ import PFAlert from "@patternfly/patternfly/components/Alert/alert.css"; import PFCard from "@patternfly/patternfly/components/Card/card.css"; import PFDescriptionList from "@patternfly/patternfly/components/DescriptionList/description-list.css"; -import { - CapabilitiesEnum, - CoreApi, - ResponseError, - SessionUser, - User, - UserPath, -} from "@goauthentik/api"; +import { CoreApi, ResponseError, SessionUser, User, UserPath } from "@goauthentik/api"; export const requestRecoveryLink = (user: User) => new CoreApi(DEFAULT_CONFIG) @@ -93,7 +90,7 @@ const recoveryButtonStyles = css` `; @customElement("ak-user-list") -export class UserListPage extends TablePage { +export class UserListPage extends WithCapabilitiesConfig(TablePage) { expandable = true; checkbox = true; @@ -244,8 +241,7 @@ export class UserListPage extends TablePage { row(item: User): TemplateResult[] { const canImpersonate = - rootInterface()?.config?.capabilities.includes(CapabilitiesEnum.CanImpersonate) && - item.pk !== this.me?.user.pk; + this.can(CapabilitiesEnum.CanImpersonate) && item.pk !== this.me?.user.pk; return [ html`
${item.username}
diff --git a/web/src/admin/users/UserViewPage.ts b/web/src/admin/users/UserViewPage.ts index 6ef77aa51..ddc9e92ba 100644 --- a/web/src/admin/users/UserViewPage.ts +++ b/web/src/admin/users/UserViewPage.ts @@ -22,8 +22,9 @@ import { import "@goauthentik/components/ak-status-label"; import "@goauthentik/components/events/ObjectChangelog"; import "@goauthentik/components/events/UserEvents"; -import { AKElement, rootInterface } from "@goauthentik/elements/Base"; +import { AKElement } from "@goauthentik/elements/Base"; import "@goauthentik/elements/CodeMirror"; +import { WithCapabilitiesConfig } from "@goauthentik/elements/Interface/capabilitiesProvider"; import "@goauthentik/elements/PageHeader"; import { PFSize } from "@goauthentik/elements/Spinner"; import "@goauthentik/elements/Tabs"; @@ -60,7 +61,7 @@ import { import "./UserDevicesTable"; @customElement("ak-user-view") -export class UserViewPage extends AKElement { +export class UserViewPage extends WithCapabilitiesConfig(AKElement) { @property({ type: Number }) set userId(id: number) { me().then((me) => { @@ -163,8 +164,7 @@ export class UserViewPage extends AKElement { renderActionButtons(user: User) { const canImpersonate = - rootInterface()?.config?.capabilities.includes(CapabilitiesEnum.CanImpersonate) && - user.pk !== this.me?.user.pk; + this.can(CapabilitiesEnum.CanImpersonate) && user.pk !== this.me?.user.pk; return html`
diff --git a/web/src/elements/Base.ts b/web/src/elements/Base.ts index 46c983aad..09a2d2858 100644 --- a/web/src/elements/Base.ts +++ b/web/src/elements/Base.ts @@ -1,20 +1,18 @@ -import { config, tenant } from "@goauthentik/common/api/config"; import { EVENT_THEME_CHANGE } from "@goauthentik/common/constants"; -import { UIConfig, uiConfig } from "@goauthentik/common/ui/config"; +import { UIConfig } from "@goauthentik/common/ui/config"; import { adaptCSS } from "@goauthentik/common/utils"; -import { authentikConfigContext } from "@goauthentik/elements/AuthentikContexts"; +import { ensureCSSStyleSheet } from "@goauthentik/elements/utils/ensureCSSStyleSheet"; -import { ContextProvider } from "@lit-labs/context"; import { localized } from "@lit/localize"; -import { CSSResult, LitElement } from "lit"; -import { state } from "lit/decorators.js"; +import { LitElement } from "lit"; import AKGlobal from "@goauthentik/common/styles/authentik.css"; import ThemeDark from "@goauthentik/common/styles/theme-dark.css"; -import PFBase from "@patternfly/patternfly/patternfly-base.css"; import { Config, CurrentTenant, UiThemeEnum } from "@goauthentik/api"; +import { AdoptedStyleSheetsElement } from "./types"; + type AkInterface = HTMLElement & { getTheme: () => Promise; tenant?: CurrentTenant; @@ -25,13 +23,6 @@ type AkInterface = HTMLElement & { export const rootInterface = (): T | undefined => (document.body.querySelector("[data-ak-interface-root]") as T) ?? undefined; -export function ensureCSSStyleSheet(css: CSSStyleSheet | CSSResult): CSSStyleSheet { - if (css instanceof CSSResult) { - return css.styleSheet!; - } - return css; -} - let css: Promise | undefined; function fetchCustomCSS(): Promise { if (!css) { @@ -52,10 +43,6 @@ function fetchCustomCSS(): Promise { return css; } -export interface AdoptedStyleSheetsElement { - adoptedStyleSheets: readonly CSSStyleSheet[]; -} - const QUERY_MEDIA_COLOR_LIGHT = "(prefers-color-scheme: light)"; @localized() @@ -175,49 +162,3 @@ export class AKElement extends LitElement { this.requestUpdate(); } } - -export class Interface extends AKElement implements AkInterface { - @state() - tenant?: CurrentTenant; - - @state() - uiConfig?: UIConfig; - - _configContext = new ContextProvider(this, { - context: authentikConfigContext, - initialValue: undefined, - }); - - _config?: Config; - - @state() - set config(c: Config) { - this._config = c; - this._configContext.setValue(c); - this.requestUpdate(); - } - - get config(): Config | undefined { - return this._config; - } - - constructor() { - super(); - document.adoptedStyleSheets = [...document.adoptedStyleSheets, ensureCSSStyleSheet(PFBase)]; - tenant().then((tenant) => (this.tenant = tenant)); - config().then((config) => (this.config = config)); - this.dataset.akInterfaceRoot = "true"; - } - - _activateTheme(root: AdoptedStyleSheetsElement, theme: UiThemeEnum): void { - super._activateTheme(root, theme); - super._activateTheme(document, theme); - } - - async getTheme(): Promise { - if (!this.uiConfig) { - this.uiConfig = await uiConfig(); - } - return this.uiConfig.theme?.base || UiThemeEnum.Automatic; - } -} diff --git a/web/src/elements/Interface/Interface.ts b/web/src/elements/Interface/Interface.ts new file mode 100644 index 000000000..744a16095 --- /dev/null +++ b/web/src/elements/Interface/Interface.ts @@ -0,0 +1,67 @@ +import { config, tenant } from "@goauthentik/common/api/config"; +import { UIConfig, uiConfig } from "@goauthentik/common/ui/config"; +import { authentikConfigContext } from "@goauthentik/elements/AuthentikContexts"; +import type { AdoptedStyleSheetsElement } from "@goauthentik/elements/types"; +import { ensureCSSStyleSheet } from "@goauthentik/elements/utils/ensureCSSStyleSheet"; + +import { ContextProvider } from "@lit-labs/context"; +import { state } from "lit/decorators.js"; + +import PFBase from "@patternfly/patternfly/patternfly-base.css"; + +import { Config, CurrentTenant, UiThemeEnum } from "@goauthentik/api"; + +import { AKElement } from "../Base"; + +type AkInterface = HTMLElement & { + getTheme: () => Promise; + tenant?: CurrentTenant; + uiConfig?: UIConfig; + config?: Config; +}; + +export class Interface extends AKElement implements AkInterface { + @state() + tenant?: CurrentTenant; + + @state() + uiConfig?: UIConfig; + + _configContext = new ContextProvider(this, { + context: authentikConfigContext, + initialValue: undefined, + }); + + _config?: Config; + + @state() + set config(c: Config) { + this._config = c; + this._configContext.setValue(c); + this.requestUpdate(); + } + + get config(): Config | undefined { + return this._config; + } + + constructor() { + super(); + document.adoptedStyleSheets = [...document.adoptedStyleSheets, ensureCSSStyleSheet(PFBase)]; + tenant().then((tenant) => (this.tenant = tenant)); + config().then((config) => (this.config = config)); + this.dataset.akInterfaceRoot = "true"; + } + + _activateTheme(root: AdoptedStyleSheetsElement, theme: UiThemeEnum): void { + super._activateTheme(root, theme); + super._activateTheme(document, theme); + } + + async getTheme(): Promise { + if (!this.uiConfig) { + this.uiConfig = await uiConfig(); + } + return this.uiConfig.theme?.base || UiThemeEnum.Automatic; + } +} diff --git a/web/src/elements/Interface/authentikConfigProvider.ts b/web/src/elements/Interface/authentikConfigProvider.ts new file mode 100644 index 000000000..2f2bbcf43 --- /dev/null +++ b/web/src/elements/Interface/authentikConfigProvider.ts @@ -0,0 +1,20 @@ +import { authentikConfigContext } from "@goauthentik/elements/AuthentikContexts"; + +import { consume } from "@lit-labs/context"; +import type { LitElement } from "lit"; + +import type { Config } from "@goauthentik/api"; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type Constructor = new (...args: any[]) => T; + +export function WithAuthentikConfig>( + superclass: T, + subscribe = true, +) { + class WithAkConfigProvider extends superclass { + @consume({ context: authentikConfigContext, subscribe }) + public authentikConfig!: Config; + } + return WithAkConfigProvider; +} diff --git a/web/src/elements/Interface/capabilitiesProvider.ts b/web/src/elements/Interface/capabilitiesProvider.ts new file mode 100644 index 000000000..402653880 --- /dev/null +++ b/web/src/elements/Interface/capabilitiesProvider.ts @@ -0,0 +1,69 @@ +import { authentikConfigContext } from "@goauthentik/elements/AuthentikContexts"; + +import { consume } from "@lit-labs/context"; +import type { LitElement } from "lit"; + +import { CapabilitiesEnum } from "@goauthentik/api"; +import { Config } from "@goauthentik/api"; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type Constructor = abstract new (...args: any[]) => T; + +// Using a unique, lexically scoped, and locally static symbol as the field name for the context +// means that it's inaccessible to any child class looking for it. It's one of the strongest privacy +// guarantees in JavaScript. + +class WCC { + public static readonly capabilitiesConfig: unique symbol = Symbol(); +} + +/** + * withCapabilitiesContext mixes in a single method to any LitElement, `can()`, which takes a + * CapabilitiesEnum and returns true or false. + * + * Usage: + * + * After importing, simply mixin this function: + * + * ``` + * export class AkMyNiftyNewFeature extends withCapabilitiesContext(AKElement) { + * ``` + * + * And then if you need to check on a capability: + * + * ``` + * if (this.can(CapabilitiesEnum.IsEnterprise) { ... } + * ``` + * + * This code re-exports CapabilitiesEnum, so you won't have to import it on a separate line if you + * don't need anything else from the API. + * + * Passing `true` as the second mixin argument will cause the inheriting class to subscribe to the + * configuration context. Should the context be explicitly reset, all active web components that are + * currently active and subscribed to the context will automatically have a `requestUpdate()` + * triggered with the new configuration. + * + */ + +export function WithCapabilitiesConfig>( + superclass: T, + subscribe = true, +) { + abstract class CapabilitiesContext extends superclass { + @consume({ context: authentikConfigContext, subscribe }) + private [WCC.capabilitiesConfig]!: Config; + + can(c: CapabilitiesEnum) { + if (!this[WCC.capabilitiesConfig]) { + throw new Error( + "ConfigContext: Attempted to access site configuration before initialization.", + ); + } + return this[WCC.capabilitiesConfig].capabilities.includes(c); + } + } + + return CapabilitiesContext; +} + +export { CapabilitiesEnum }; diff --git a/web/src/elements/Interface/index.ts b/web/src/elements/Interface/index.ts new file mode 100644 index 000000000..e7d946cf6 --- /dev/null +++ b/web/src/elements/Interface/index.ts @@ -0,0 +1,4 @@ +import { Interface } from "./Interface"; + +export { Interface }; +export default Interface; diff --git a/web/src/elements/types.ts b/web/src/elements/types.ts new file mode 100644 index 000000000..4273ab6f9 --- /dev/null +++ b/web/src/elements/types.ts @@ -0,0 +1,3 @@ +export interface AdoptedStyleSheetsElement { + adoptedStyleSheets: readonly CSSStyleSheet[]; +} diff --git a/web/src/elements/utils/ensureCSSStyleSheet.ts b/web/src/elements/utils/ensureCSSStyleSheet.ts new file mode 100644 index 000000000..26f2ff898 --- /dev/null +++ b/web/src/elements/utils/ensureCSSStyleSheet.ts @@ -0,0 +1,4 @@ +import { CSSResult } from "lit"; + +export const ensureCSSStyleSheet = (css: CSSStyleSheet | CSSResult): CSSStyleSheet => + css instanceof CSSResult ? css.styleSheet! : css; diff --git a/web/src/enterprise/rac/index.ts b/web/src/enterprise/rac/index.ts index 272ba2211..e5a9e04e7 100644 --- a/web/src/enterprise/rac/index.ts +++ b/web/src/enterprise/rac/index.ts @@ -1,5 +1,5 @@ import { TITLE_DEFAULT } from "@goauthentik/app/common/constants"; -import { Interface } from "@goauthentik/elements/Base"; +import { Interface } from "@goauthentik/elements/Interface"; import "@goauthentik/elements/LoadingOverlay"; import Guacamole from "guacamole-common-js"; diff --git a/web/src/flow/FlowExecutor.ts b/web/src/flow/FlowExecutor.ts index bc1dec3a8..e0d31e421 100644 --- a/web/src/flow/FlowExecutor.ts +++ b/web/src/flow/FlowExecutor.ts @@ -8,7 +8,7 @@ import { globalAK } from "@goauthentik/common/global"; import { configureSentry } from "@goauthentik/common/sentry"; import { first } from "@goauthentik/common/utils"; import { WebsocketClient } from "@goauthentik/common/ws"; -import { Interface } from "@goauthentik/elements/Base"; +import { Interface } from "@goauthentik/elements/Interface"; import "@goauthentik/elements/LoadingOverlay"; import "@goauthentik/elements/ak-locale-context"; import "@goauthentik/flow/sources/apple/AppleLoginInit"; diff --git a/web/src/flow/stages/prompt/PromptStage.ts b/web/src/flow/stages/prompt/PromptStage.ts index 877d02119..09cc6959e 100644 --- a/web/src/flow/stages/prompt/PromptStage.ts +++ b/web/src/flow/stages/prompt/PromptStage.ts @@ -1,6 +1,9 @@ -import { rootInterface } from "@goauthentik/elements/Base"; import "@goauthentik/elements/Divider"; import "@goauthentik/elements/EmptyState"; +import { + CapabilitiesEnum, + WithCapabilitiesConfig, +} from "@goauthentik/elements/Interface/capabilitiesProvider"; import { LOCALES } from "@goauthentik/elements/ak-locale-context/definitions"; import "@goauthentik/elements/forms/FormElement"; import { BaseStage } from "@goauthentik/flow/stages/base"; @@ -20,7 +23,6 @@ import PFTitle from "@patternfly/patternfly/components/Title/title.css"; import PFBase from "@patternfly/patternfly/patternfly-base.css"; import { - CapabilitiesEnum, PromptChallenge, PromptChallengeResponseRequest, PromptTypeEnum, @@ -28,7 +30,9 @@ import { } from "@goauthentik/api"; @customElement("ak-stage-prompt") -export class PromptStage extends BaseStage { +export class PromptStage extends WithCapabilitiesConfig( + BaseStage, +) { static get styles(): CSSResult[] { return [ PFBase, @@ -193,10 +197,7 @@ ${prompt.initialValue} `; })}`; case PromptTypeEnum.AkLocale: { - const inDebug = rootInterface()?.config?.capabilities.includes( - CapabilitiesEnum.CanDebug, - ); - const locales = inDebug + const locales = this.can(CapabilitiesEnum.CanDebug) ? LOCALES : LOCALES.filter((locale) => locale.code !== "debug"); const options = locales.map( diff --git a/web/src/standalone/api-browser/index.ts b/web/src/standalone/api-browser/index.ts index b0c5849ed..c6a98159c 100644 --- a/web/src/standalone/api-browser/index.ts +++ b/web/src/standalone/api-browser/index.ts @@ -2,7 +2,7 @@ import { CSRFHeaderName } from "@goauthentik/common/api/middleware"; import { EVENT_THEME_CHANGE } from "@goauthentik/common/constants"; import { globalAK } from "@goauthentik/common/global"; import { first, getCookie } from "@goauthentik/common/utils"; -import { Interface } from "@goauthentik/elements/Base"; +import { Interface } from "@goauthentik/elements/Interface"; import "@goauthentik/elements/ak-locale-context"; import { DefaultTenant } from "@goauthentik/elements/sidebar/SidebarBrand"; import "rapidoc"; diff --git a/web/src/standalone/loading/index.ts b/web/src/standalone/loading/index.ts index 907a05140..24e8c47ef 100644 --- a/web/src/standalone/loading/index.ts +++ b/web/src/standalone/loading/index.ts @@ -1,5 +1,5 @@ import { globalAK } from "@goauthentik/common/global"; -import { Interface } from "@goauthentik/elements/Base"; +import { Interface } from "@goauthentik/elements/Interface"; import { msg } from "@lit/localize"; import { CSSResult, TemplateResult, css, html } from "lit"; diff --git a/web/src/stories/interface.ts b/web/src/stories/interface.ts index c4e2dc03d..1eafc6204 100644 --- a/web/src/stories/interface.ts +++ b/web/src/stories/interface.ts @@ -1,4 +1,4 @@ -import { Interface } from "@goauthentik/app/elements/Base"; +import { Interface } from "@goauthentik/app/elements/Interface"; import { customElement, property } from "lit/decorators.js"; diff --git a/web/src/user/UserInterface.ts b/web/src/user/UserInterface.ts index 09b10d632..aad94e73d 100644 --- a/web/src/user/UserInterface.ts +++ b/web/src/user/UserInterface.ts @@ -9,7 +9,7 @@ import { UserDisplay } from "@goauthentik/common/ui/config"; import { me } from "@goauthentik/common/users"; import { first } from "@goauthentik/common/utils"; import { WebsocketClient } from "@goauthentik/common/ws"; -import { Interface } from "@goauthentik/elements/Base"; +import { Interface } from "@goauthentik/elements/Interface"; import "@goauthentik/elements/ak-locale-context"; import "@goauthentik/elements/buttons/ActionButton"; import "@goauthentik/elements/enterprise/EnterpriseStatusBanner"; From a2dce3fb635266c0d2e85673664a41308b542940 Mon Sep 17 00:00:00 2001 From: Ken Sternberg <133134217+kensternberg-authentik@users.noreply.github.com> Date: Mon, 8 Jan 2024 13:03:00 -0800 Subject: [PATCH 131/131] web: Replace calls to `rootInterface()?.tenant?` with a contextual `this.tenant` object (#7778) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * This commit abstracts access to the object `rootInterface()?.config?` into a single accessor, `authentikConfig`, that can be mixed into any AKElement object that requires access to it. Since access to `rootInterface()?.config?` is _universally_ used for a single (and repetitive) boolean check, a separate accessor has been provided that converts all calls of the form: ``` javascript rootInterface()?.config?.capabilities.includes(CapabilitiesEnum.CanImpersonate) ``` into: ``` javascript this.can(CapabilitiesEnum.CanImpersonate) ``` It does this via a Mixin, `WithCapabilitiesConfig`, which understands that these calls only make sense in the context of a running, fully configured authentik instance, and that their purpose is to inform authentik components of a user’s capabilities. The latter is why I don’t feel uncomfortable turning a function call into a method; we should make it explicit that this is a relationship between components. The mixin has a single single field, `[WCC.capabilitiesConfig]`, where its association with the upper-level configuration is made. If that syntax looks peculiar to you, good! I’ve used an explict unique symbol as the field name; it is inaccessable an innumerable in the object list. The debugger shows it only as: Symbol(): { cacheTimeout: 300 cacheTimeoutFlows: 300 cacheTimeoutPolicies: 300 cacheTimeoutReputation: 300 capabilities: (5) ['can_save_media', 'can_geo_ip', 'can_impersonate', 'can_debug', 'is_enterprise'] } Since you can’t reference it by identity, you can’t write to it. Until every browser supports actual private fields, this is the best we can do; it does guarantee that field name collisions are impossible, which is a win. The mixin takes a second optional boolean; setting this to true will cause any web component using the mixin to automatically schedule a re-render if the capabilities list changes. The mixin is also generic; despite the "...into a Lit-Context" in the title, the internals of the Mixin can be replaced with anything so long as the signature of `.can()` is preserved. Because this work builds off the work I did to give the Sidebar access to the configuration without ad-hoc retrieval or prop-drilling, it wasn’t necessary to create a new context for it. That will be necessary for the following: TODO: ``` javascript rootInterface()?.uiConfig; rootInterface()?.tenant; me(); ``` * This commit abstracts access to the object `rootInterface()?.tenant?` into a single accessor, `tenant`, that can be mixed into any AKElement object that requires access to it. Like `WithCapabilitiesConfig` and `WithAuthentikConfig`, this one is named `WithTenantConfig`. TODO: ``` javascript rootInterface()?.uiConfig; me(); ``` * web: Added a README with a description of the applications' "mental model," essentially an architectural description. * web: prettier did a thing * web: prettier had opinions about the README * web: Jens requested that subscription be by default, and it's the right call. * web: Jens requested that the default subscription state for contexts be , and it's the right call. * web: prettier having opinions after merging with dependent branch * web: prettier still having opinions. --- ...plication-wizard-authentication-by-ldap.ts | 6 ++--- ...ication-wizard-authentication-by-radius.ts | 6 ++--- web/src/admin/groups/RelatedUserList.ts | 6 ++--- .../admin/providers/ldap/LDAPProviderForm.ts | 6 ++--- .../providers/radius/RadiusProviderForm.ts | 6 ++--- web/src/admin/users/UserListPage.ts | 5 ++-- web/src/elements/AuthentikContexts.ts | 6 ++++- web/src/elements/Interface/Interface.ts | 26 ++++++++++++++++--- .../Interface/authentikConfigProvider.ts | 2 +- web/src/elements/Interface/tenantProvider.ts | 20 ++++++++++++++ web/src/elements/PageHeader.ts | 8 +++--- web/src/elements/sidebar/SidebarBrand.ts | 11 +++----- .../details/UserSettingsFlowExecutor.ts | 15 +++++------ 13 files changed, 81 insertions(+), 42 deletions(-) create mode 100644 web/src/elements/Interface/tenantProvider.ts diff --git a/web/src/admin/applications/wizard/methods/ldap/ak-application-wizard-authentication-by-ldap.ts b/web/src/admin/applications/wizard/methods/ldap/ak-application-wizard-authentication-by-ldap.ts index a99384171..6e1554196 100644 --- a/web/src/admin/applications/wizard/methods/ldap/ak-application-wizard-authentication-by-ldap.ts +++ b/web/src/admin/applications/wizard/methods/ldap/ak-application-wizard-authentication-by-ldap.ts @@ -7,7 +7,7 @@ import "@goauthentik/components/ak-number-input"; import "@goauthentik/components/ak-radio-input"; import "@goauthentik/components/ak-switch-input"; import "@goauthentik/components/ak-text-input"; -import { rootInterface } from "@goauthentik/elements/Base"; +import { WithTenantConfig } from "@goauthentik/elements/Interface/tenantProvider"; import "@goauthentik/elements/forms/FormGroup"; import "@goauthentik/elements/forms/HorizontalFormElement"; @@ -32,7 +32,7 @@ import { } from "./LDAPOptionsAndHelp"; @customElement("ak-application-wizard-authentication-by-ldap") -export class ApplicationWizardApplicationDetails extends BaseProviderPanel { +export class ApplicationWizardApplicationDetails extends WithTenantConfig(BaseProviderPanel) { render() { const provider = this.wizard.provider as LDAPProvider | undefined; const errors = this.wizard.errors.provider; @@ -57,7 +57,7 @@ export class ApplicationWizardApplicationDetails extends BaseProviderPanel {

diff --git a/web/src/admin/applications/wizard/methods/radius/ak-application-wizard-authentication-by-radius.ts b/web/src/admin/applications/wizard/methods/radius/ak-application-wizard-authentication-by-radius.ts index cadbd94ad..44f452037 100644 --- a/web/src/admin/applications/wizard/methods/radius/ak-application-wizard-authentication-by-radius.ts +++ b/web/src/admin/applications/wizard/methods/radius/ak-application-wizard-authentication-by-radius.ts @@ -3,7 +3,7 @@ import "@goauthentik/admin/common/ak-crypto-certificate-search"; import "@goauthentik/admin/common/ak-flow-search/ak-tenanted-flow-search"; import { ascii_letters, digits, first, randomString } from "@goauthentik/common/utils"; import "@goauthentik/components/ak-text-input"; -import { rootInterface } from "@goauthentik/elements/Base"; +import { WithTenantConfig } from "@goauthentik/elements/Interface/tenantProvider"; import "@goauthentik/elements/forms/FormGroup"; import "@goauthentik/elements/forms/HorizontalFormElement"; @@ -17,7 +17,7 @@ import { FlowsInstancesListDesignationEnum, RadiusProvider } from "@goauthentik/ import BaseProviderPanel from "../BaseProviderPanel"; @customElement("ak-application-wizard-authentication-by-radius") -export class ApplicationWizardAuthenticationByRadius extends BaseProviderPanel { +export class ApplicationWizardAuthenticationByRadius extends WithTenantConfig(BaseProviderPanel) { render() { const provider = this.wizard.provider as RadiusProvider | undefined; const errors = this.wizard.errors.provider; @@ -42,7 +42,7 @@ export class ApplicationWizardAuthenticationByRadius extends BaseProviderPanel {

diff --git a/web/src/admin/groups/RelatedUserList.ts b/web/src/admin/groups/RelatedUserList.ts index 27450fb82..5e2c6b952 100644 --- a/web/src/admin/groups/RelatedUserList.ts +++ b/web/src/admin/groups/RelatedUserList.ts @@ -9,11 +9,11 @@ import { MessageLevel } from "@goauthentik/common/messages"; import { uiConfig } from "@goauthentik/common/ui/config"; import { first } from "@goauthentik/common/utils"; import "@goauthentik/components/ak-status-label"; -import { rootInterface } from "@goauthentik/elements/Base"; import { CapabilitiesEnum, WithCapabilitiesConfig, } from "@goauthentik/elements/Interface/capabilitiesProvider"; +import { WithTenantConfig } from "@goauthentik/elements/Interface/tenantProvider"; import "@goauthentik/elements/buttons/ActionButton"; import "@goauthentik/elements/buttons/Dropdown"; import "@goauthentik/elements/forms/DeleteBulkForm"; @@ -110,7 +110,7 @@ export class RelatedUserAdd extends Form<{ users: number[] }> { } @customElement("ak-user-related-list") -export class RelatedUserList extends WithCapabilitiesConfig(Table) { +export class RelatedUserList extends WithTenantConfig(WithCapabilitiesConfig(Table)) { expandable = true; checkbox = true; @@ -295,7 +295,7 @@ export class RelatedUserList extends WithCapabilitiesConfig(Table) { ${msg("Set password")} - ${rootInterface()?.tenant?.flowRecovery + ${this.tenant?.flowRecovery ? html` { +export class LDAPProviderFormPage extends WithTenantConfig(BaseProviderForm) { async loadInstance(pk: number): Promise { return new ProvidersApi(DEFAULT_CONFIG).providersLdapRetrieve({ id: pk, @@ -68,7 +68,7 @@ export class LDAPProviderFormPage extends BaseProviderForm {

${msg("Flow used for users to authenticate.")}

diff --git a/web/src/admin/providers/radius/RadiusProviderForm.ts b/web/src/admin/providers/radius/RadiusProviderForm.ts index 269a5ee95..f37c865d5 100644 --- a/web/src/admin/providers/radius/RadiusProviderForm.ts +++ b/web/src/admin/providers/radius/RadiusProviderForm.ts @@ -1,7 +1,7 @@ import { BaseProviderForm } from "@goauthentik/admin/providers/BaseProviderForm"; import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { ascii_letters, digits, first, randomString } from "@goauthentik/common/utils"; -import { rootInterface } from "@goauthentik/elements/Base"; +import { WithTenantConfig } from "@goauthentik/elements/Interface/tenantProvider"; import "@goauthentik/elements/forms/FormGroup"; import "@goauthentik/elements/forms/HorizontalFormElement"; import "@goauthentik/elements/forms/SearchSelect"; @@ -14,7 +14,7 @@ import { customElement } from "lit/decorators.js"; import { FlowsInstancesListDesignationEnum, ProvidersApi, RadiusProvider } from "@goauthentik/api"; @customElement("ak-provider-radius-form") -export class RadiusProviderFormPage extends BaseProviderForm { +export class RadiusProviderFormPage extends WithTenantConfig(BaseProviderForm) { loadInstance(pk: number): Promise { return new ProvidersApi(DEFAULT_CONFIG).providersRadiusRetrieve({ id: pk, @@ -57,7 +57,7 @@ export class RadiusProviderFormPage extends BaseProviderForm {

${msg("Flow used for users to authenticate.")}

diff --git a/web/src/admin/users/UserListPage.ts b/web/src/admin/users/UserListPage.ts index e9d0c6f09..afb88f3f6 100644 --- a/web/src/admin/users/UserListPage.ts +++ b/web/src/admin/users/UserListPage.ts @@ -16,6 +16,7 @@ import { CapabilitiesEnum, WithCapabilitiesConfig, } from "@goauthentik/elements/Interface/capabilitiesProvider"; +import { WithTenantConfig } from "@goauthentik/elements/Interface/tenantProvider"; import { PFSize } from "@goauthentik/elements/Spinner"; import "@goauthentik/elements/TreeView"; import "@goauthentik/elements/buttons/ActionButton"; @@ -90,7 +91,7 @@ const recoveryButtonStyles = css` `; @customElement("ak-user-list") -export class UserListPage extends WithCapabilitiesConfig(TablePage) { +export class UserListPage extends WithTenantConfig(WithCapabilitiesConfig(TablePage)) { expandable = true; checkbox = true; @@ -351,7 +352,7 @@ export class UserListPage extends WithCapabilitiesConfig(TablePage) { ${msg("Set password")}
- ${rootInterface()?.tenant?.flowRecovery + ${this.tenant.flowRecovery ? html` (Symbol("authentik-config-context")); +export const authentikTenantContext = createContext( + Symbol("authentik-tenant-context"), +); + export default authentikConfigContext; diff --git a/web/src/elements/Interface/Interface.ts b/web/src/elements/Interface/Interface.ts index 744a16095..b2470cfd2 100644 --- a/web/src/elements/Interface/Interface.ts +++ b/web/src/elements/Interface/Interface.ts @@ -1,6 +1,9 @@ import { config, tenant } from "@goauthentik/common/api/config"; import { UIConfig, uiConfig } from "@goauthentik/common/ui/config"; -import { authentikConfigContext } from "@goauthentik/elements/AuthentikContexts"; +import { + authentikConfigContext, + authentikTenantContext, +} from "@goauthentik/elements/AuthentikContexts"; import type { AdoptedStyleSheetsElement } from "@goauthentik/elements/types"; import { ensureCSSStyleSheet } from "@goauthentik/elements/utils/ensureCSSStyleSheet"; @@ -21,9 +24,6 @@ type AkInterface = HTMLElement & { }; export class Interface extends AKElement implements AkInterface { - @state() - tenant?: CurrentTenant; - @state() uiConfig?: UIConfig; @@ -45,6 +45,24 @@ export class Interface extends AKElement implements AkInterface { return this._config; } + _tenantContext = new ContextProvider(this, { + context: authentikTenantContext, + initialValue: undefined, + }); + + _tenant?: CurrentTenant; + + @state() + set tenant(c: CurrentTenant) { + this._tenant = c; + this._tenantContext.setValue(c); + this.requestUpdate(); + } + + get tenant(): CurrentTenant | undefined { + return this._tenant; + } + constructor() { super(); document.adoptedStyleSheets = [...document.adoptedStyleSheets, ensureCSSStyleSheet(PFBase)]; diff --git a/web/src/elements/Interface/authentikConfigProvider.ts b/web/src/elements/Interface/authentikConfigProvider.ts index 2f2bbcf43..5b2027fd0 100644 --- a/web/src/elements/Interface/authentikConfigProvider.ts +++ b/web/src/elements/Interface/authentikConfigProvider.ts @@ -12,7 +12,7 @@ export function WithAuthentikConfig>( superclass: T, subscribe = true, ) { - class WithAkConfigProvider extends superclass { + abstract class WithAkConfigProvider extends superclass { @consume({ context: authentikConfigContext, subscribe }) public authentikConfig!: Config; } diff --git a/web/src/elements/Interface/tenantProvider.ts b/web/src/elements/Interface/tenantProvider.ts new file mode 100644 index 000000000..63d389048 --- /dev/null +++ b/web/src/elements/Interface/tenantProvider.ts @@ -0,0 +1,20 @@ +import { authentikTenantContext } from "@goauthentik/elements/AuthentikContexts"; + +import { consume } from "@lit-labs/context"; +import type { LitElement } from "lit"; + +import type { CurrentTenant } from "@goauthentik/api"; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type Constructor = abstract new (...args: any[]) => T; + +export function WithTenantConfig>( + superclass: T, + subscribe = true, +) { + abstract class WithTenantProvider extends superclass { + @consume({ context: authentikTenantContext, subscribe }) + public tenant!: CurrentTenant; + } + return WithTenantProvider; +} diff --git a/web/src/elements/PageHeader.ts b/web/src/elements/PageHeader.ts index fcdbbeffc..7be55996d 100644 --- a/web/src/elements/PageHeader.ts +++ b/web/src/elements/PageHeader.ts @@ -8,7 +8,8 @@ import { } from "@goauthentik/common/constants"; import { currentInterface } from "@goauthentik/common/sentry"; import { me } from "@goauthentik/common/users"; -import { AKElement, rootInterface } from "@goauthentik/elements/Base"; +import { AKElement } from "@goauthentik/elements/Base"; +import { WithTenantConfig } from "@goauthentik/elements/Interface/tenantProvider"; import "@patternfly/elements/pf-tooltip/pf-tooltip.js"; import { msg } from "@lit/localize"; @@ -23,7 +24,7 @@ import PFBase from "@patternfly/patternfly/patternfly-base.css"; import { EventsApi } from "@goauthentik/api"; @customElement("ak-page-header") -export class PageHeader extends AKElement { +export class PageHeader extends WithTenantConfig(AKElement) { @property() icon?: string; @@ -35,9 +36,8 @@ export class PageHeader extends AKElement { @property() set header(value: string) { - const tenant = rootInterface()?.tenant; const currentIf = currentInterface(); - let title = tenant?.brandingTitle || TITLE_DEFAULT; + let title = this.tenant?.brandingTitle || TITLE_DEFAULT; if (currentIf === "admin") { title = `${msg("Admin")} - ${title}`; } diff --git a/web/src/elements/sidebar/SidebarBrand.ts b/web/src/elements/sidebar/SidebarBrand.ts index fa442b36c..b57d336f7 100644 --- a/web/src/elements/sidebar/SidebarBrand.ts +++ b/web/src/elements/sidebar/SidebarBrand.ts @@ -1,6 +1,6 @@ import { EVENT_SIDEBAR_TOGGLE } from "@goauthentik/common/constants"; -import { first } from "@goauthentik/common/utils"; -import { AKElement, rootInterface } from "@goauthentik/elements/Base"; +import { AKElement } from "@goauthentik/elements/Base"; +import { WithTenantConfig } from "@goauthentik/elements/Interface/tenantProvider"; import { CSSResult, TemplateResult, css, html } from "lit"; import { customElement } from "lit/decorators.js"; @@ -27,7 +27,7 @@ export const DefaultTenant: CurrentTenant = { }; @customElement("ak-sidebar-brand") -export class SidebarBrand extends AKElement { +export class SidebarBrand extends WithTenantConfig(AKElement) { static get styles(): CSSResult[] { return [ PFBase, @@ -85,10 +85,7 @@ export class SidebarBrand extends AKElement {
authentik Logo diff --git a/web/src/user/user-settings/details/UserSettingsFlowExecutor.ts b/web/src/user/user-settings/details/UserSettingsFlowExecutor.ts index e7aa36343..f4252f58b 100644 --- a/web/src/user/user-settings/details/UserSettingsFlowExecutor.ts +++ b/web/src/user/user-settings/details/UserSettingsFlowExecutor.ts @@ -2,14 +2,15 @@ import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { EVENT_REFRESH } from "@goauthentik/common/constants"; import { MessageLevel } from "@goauthentik/common/messages"; import { refreshMe } from "@goauthentik/common/users"; -import { AKElement, rootInterface } from "@goauthentik/elements/Base"; +import { AKElement } from "@goauthentik/elements/Base"; +import { WithTenantConfig } from "@goauthentik/elements/Interface/tenantProvider"; import { showMessage } from "@goauthentik/elements/messages/MessageContainer"; import { StageHost } from "@goauthentik/flow/stages/base"; import "@goauthentik/user/user-settings/details/stages/prompt/PromptStage"; import { msg } from "@lit/localize"; import { CSSResult, TemplateResult, html } from "lit"; -import { customElement, property, state } from "lit/decorators.js"; +import { customElement, property } from "lit/decorators.js"; import { unsafeHTML } from "lit/directives/unsafe-html.js"; import PFButton from "@patternfly/patternfly/components/Button/button.css"; @@ -21,7 +22,6 @@ import PFBase from "@patternfly/patternfly/patternfly-base.css"; import { ChallengeChoices, ChallengeTypes, - CurrentTenant, FlowChallengeResponseRequest, FlowErrorChallenge, FlowsApi, @@ -31,13 +31,13 @@ import { } from "@goauthentik/api"; @customElement("ak-user-settings-flow-executor") -export class UserSettingsFlowExecutor extends AKElement implements StageHost { +export class UserSettingsFlowExecutor + extends WithTenantConfig(AKElement, true) + implements StageHost +{ @property() flowSlug?: string; - @state() - tenant?: CurrentTenant; - private _challenge?: ChallengeTypes; @property({ attribute: false }) @@ -87,7 +87,6 @@ export class UserSettingsFlowExecutor extends AKElement implements StageHost { } firstUpdated(): void { - this.tenant = rootInterface()?.tenant; this.flowSlug = this.tenant?.flowUserSettings; if (!this.flowSlug) { return;