From cc148bd552dd785156a5f8365650531dd6f76b41 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jun 2024 17:27:09 +0200 Subject: [PATCH 01/15] core: bump bandit from 1.7.8 to 1.7.9 (#10094) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6d45f04b20f3..03e051f744ed 100644 --- a/poetry.lock +++ b/poetry.lock @@ -353,13 +353,13 @@ msal-extensions = ">=0.3.0" [[package]] name = "bandit" -version = "1.7.8" +version = "1.7.9" description = "Security oriented static analyser for python code." optional = false python-versions = ">=3.8" files = [ - {file = "bandit-1.7.8-py3-none-any.whl", hash = "sha256:509f7af645bc0cd8fd4587abc1a038fc795636671ee8204d502b933aee44f381"}, - {file = "bandit-1.7.8.tar.gz", hash = "sha256:36de50f720856ab24a24dbaa5fee2c66050ed97c1477e0a1159deab1775eab6b"}, + {file = "bandit-1.7.9-py3-none-any.whl", hash = "sha256:52077cb339000f337fb25f7e045995c4ad01511e716e5daac37014b9752de8ec"}, + {file = "bandit-1.7.9.tar.gz", hash = "sha256:7c395a436743018f7be0a4cbb0a4ea9b902b6d87264ddecf8cfdc73b4f78ff61"}, ] [package.dependencies] From cd93de11410d4f760bb4a63372f7e397ddb85252 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jun 2024 15:47:13 +0000 Subject: [PATCH 02/15] core: bump pydantic from 2.7.3 to 2.7.4 (#10093) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 03e051f744ed..bb02bbeb016d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3376,13 +3376,13 @@ files = [ [[package]] name = "pydantic" -version = "2.7.3" +version = "2.7.4" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.7.3-py3-none-any.whl", hash = "sha256:ea91b002777bf643bb20dd717c028ec43216b24a6001a280f83877fd2655d0b4"}, - {file = "pydantic-2.7.3.tar.gz", hash = "sha256:c46c76a40bb1296728d7a8b99aa73dd70a48c3510111ff290034f860c99c419e"}, + {file = "pydantic-2.7.4-py3-none-any.whl", hash = "sha256:ee8538d41ccb9c0a9ad3e0e5f07bf15ed8015b481ced539a1759d8cc89ae90d0"}, + {file = "pydantic-2.7.4.tar.gz", hash = "sha256:0c84efd9548d545f63ac0060c1e4d39bb9b14db8b3c0652338aecc07b5adec52"}, ] [package.dependencies] From ba1b86efa117f37a64d69c3bd4b9a6391a3427b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 15:31:05 +0900 Subject: [PATCH 03/15] core: bump github.com/gorilla/websocket from 1.5.2 to 1.5.3 (#10103) Bumps [github.com/gorilla/websocket](https://github.com/gorilla/websocket) from 1.5.2 to 1.5.3. - [Release notes](https://github.com/gorilla/websocket/releases) - [Commits](https://github.com/gorilla/websocket/compare/v1.5.2...v1.5.3) --- updated-dependencies: - dependency-name: github.com/gorilla/websocket 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 edc3b80a98ff..0f6e35a8fea8 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/gorilla/mux v1.8.1 github.com/gorilla/securecookie v1.1.2 github.com/gorilla/sessions v1.2.2 - github.com/gorilla/websocket v1.5.2 + github.com/gorilla/websocket v1.5.3 github.com/jellydator/ttlcache/v3 v3.2.0 github.com/mitchellh/mapstructure v1.5.0 github.com/nmcclain/asn1-ber v0.0.0-20170104154839-2661553a0484 diff --git a/go.sum b/go.sum index e70cf3c6717b..60171f728876 100644 --- a/go.sum +++ b/go.sum @@ -176,8 +176,8 @@ github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/z github.com/gorilla/sessions v1.2.2 h1:lqzMYz6bOfvn2WriPUjNByzeXIlVzURcPmgMczkmTjY= github.com/gorilla/sessions v1.2.2/go.mod h1:ePLdVu+jbEgHH+KWw8I1z2wqd0BAdAQh/8LRvBeoNcQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.2 h1:qoW6V1GT3aZxybsbC6oLnailWnB+qTMVwMreOso9XUw= -github.com/gorilla/websocket v1.5.2/go.mod h1:0n9H61RBAcf5/38py2MCYbxzPIY9rOkpvvMT24Rqs30= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= From d95220be0eb2dd2124a691b75b3dbf3a1dddf954 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 15:31:16 +0900 Subject: [PATCH 04/15] web: bump the storybook group across 1 directory with 7 updates (#10102) Bumps the storybook group with 6 updates in the /web directory: | Package | From | To | | --- | --- | --- | | [@storybook/addon-essentials](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials) | `8.1.6` | `8.1.9` | | [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links) | `8.1.6` | `8.1.9` | | [@storybook/manager-api](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/manager-api) | `8.1.6` | `8.1.9` | | [@storybook/web-components](https://github.com/storybookjs/storybook/tree/HEAD/code/renderers/web-components) | `8.1.6` | `8.1.9` | | [@storybook/web-components-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/web-components-vite) | `8.1.6` | `8.1.9` | | [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/cli) | `8.1.6` | `8.1.9` | Updates `@storybook/addon-essentials` from 8.1.6 to 8.1.9 - [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/v8.1.9/code/addons/essentials) Updates `@storybook/addon-links` from 8.1.6 to 8.1.9 - [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/v8.1.9/code/addons/links) Updates `@storybook/blocks` from 8.1.6 to 8.1.9 - [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/v8.1.9/code/ui/blocks) Updates `@storybook/manager-api` from 8.1.6 to 8.1.9 - [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/v8.1.9/code/lib/manager-api) Updates `@storybook/web-components` from 8.1.6 to 8.1.9 - [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/v8.1.9/code/renderers/web-components) Updates `@storybook/web-components-vite` from 8.1.6 to 8.1.9 - [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/v8.1.9/code/frameworks/web-components-vite) Updates `storybook` from 8.1.6 to 8.1.9 - [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/v8.1.9/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/blocks" 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 | 964 +++++++++++++++++++++--------------------- web/package.json | 12 +- 2 files changed, 488 insertions(+), 488 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 1a055b74cd39..c2a0358f882c 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -60,13 +60,13 @@ "@lit/localize-tools": "^0.7.2", "@rollup/plugin-replace": "^5.0.7", "@spotlightjs/spotlight": "^1.2.17", - "@storybook/addon-essentials": "^8.1.6", - "@storybook/addon-links": "^8.1.6", + "@storybook/addon-essentials": "^8.1.9", + "@storybook/addon-links": "^8.1.9", "@storybook/api": "^7.6.17", "@storybook/blocks": "^8.0.8", - "@storybook/manager-api": "^8.1.6", - "@storybook/web-components": "^8.1.6", - "@storybook/web-components-vite": "^8.1.6", + "@storybook/manager-api": "^8.1.9", + "@storybook/web-components": "^8.1.9", + "@storybook/web-components-vite": "^8.1.9", "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@types/chart.js": "^2.9.41", "@types/codemirror": "5.60.15", @@ -96,7 +96,7 @@ "react-dom": "^18.3.1", "rollup-plugin-modify": "^3.0.0", "rollup-plugin-postcss-lit": "^2.1.0", - "storybook": "^8.1.6", + "storybook": "^8.1.9", "storybook-addon-mock": "^5.0.0", "ts-lit-plugin": "^2.0.2", "tslib": "^2.6.3", @@ -4783,12 +4783,12 @@ } }, "node_modules/@storybook/addon-actions": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.1.6.tgz", - "integrity": "sha512-EbiAdbtXN/UM4by3+qisbrQmElaIfahgNqffbst6GiCTmUCVE5if6geL1mzKd/u/rZOzx5g0EG76x8N9yDjOtg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.1.9.tgz", + "integrity": "sha512-7ZefE9AER42htn4McqMXcL2RDnflesIf4SxY7pCHpL7rUoldxfZ1DGGRgyKen00H6vx1LGzLRBN9fhBUf9XqCA==", "dev": true, "dependencies": { - "@storybook/core-events": "8.1.6", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "@types/uuid": "^9.0.1", "dequal": "^2.0.2", @@ -4801,9 +4801,9 @@ } }, "node_modules/@storybook/addon-actions/node_modules/@storybook/core-events": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.9.tgz", + "integrity": "sha512-c8MnBqUtTvIBNoDBBQQrFEy8pNAagcDryh5FM+T1SPBsH6j3fRSZwXMc6vvW2BYkQxJ67kpd7xrH7uapqhNEcg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -4815,9 +4815,9 @@ } }, "node_modules/@storybook/addon-backgrounds": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.1.6.tgz", - "integrity": "sha512-mrBG5mkcMg6vpRUtNxyYaseD4ucrG+mZiqZnXcx8LWzwDMOd4mOODvap286z+Si0Fl1etbGDDhPU9+hV+o1arw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.1.9.tgz", + "integrity": "sha512-k2s7PNwy1ND7eJ7N2DnG508fztuXNH5Jq6Vbk8aoXPPRXfwybel299WRb4WJl7ZvZKcGtBoZ+mciopPkho3Lpg==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -4830,12 +4830,12 @@ } }, "node_modules/@storybook/addon-controls": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.1.6.tgz", - "integrity": "sha512-hDMsu4yRP/ySb/G7hbd7nSFhVNz+F9hnizJGJX4XGuiSx7rAEYjvfKQKkawxTP+VeAw6iZPj1fukvOrMCQ0xxQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.1.9.tgz", + "integrity": "sha512-B5+UFAnlu82QHX8bOHj022f3zi9rbqGxBqgLnx54ebl6ZgMEe9IGaOnGWyHjpFofy9yBX2Ti5+7ClvFhmyjAig==", "dev": true, "dependencies": { - "@storybook/blocks": "8.1.6", + "@storybook/blocks": "8.1.9", "dequal": "^2.0.2", "lodash": "^4.17.21", "ts-dedent": "^2.0.0" @@ -4846,24 +4846,24 @@ } }, "node_modules/@storybook/addon-docs": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.1.6.tgz", - "integrity": "sha512-ejTbjDhaHn6IeTma/pwn8OutDzIqbMJKNhZx24W4FE/qvYInZIK/9gYPU9/oLKZ7FImqP3s1e4+RxDBgsq21lA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.1.9.tgz", + "integrity": "sha512-dRSG54gSVn4qQc6u9ROYeDu4B0wJkr+fpS2AGwav2+KAM5kNw2ecsyhyreUhc4e/AwhAhGc49d7iQ3rjOHR//A==", "dev": true, "dependencies": { "@babel/core": "^7.24.4", "@mdx-js/react": "^3.0.0", - "@storybook/blocks": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/components": "8.1.6", - "@storybook/csf-plugin": "8.1.6", - "@storybook/csf-tools": "8.1.6", + "@storybook/blocks": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/components": "8.1.9", + "@storybook/csf-plugin": "8.1.9", + "@storybook/csf-tools": "8.1.9", "@storybook/global": "^5.0.0", - "@storybook/node-logger": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/react-dom-shim": "8.1.6", - "@storybook/theming": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/node-logger": "8.1.9", + "@storybook/preview-api": "8.1.9", + "@storybook/react-dom-shim": "8.1.9", + "@storybook/theming": "8.1.9", + "@storybook/types": "8.1.9", "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", "fs-extra": "^11.1.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0", @@ -4878,13 +4878,13 @@ } }, "node_modules/@storybook/addon-docs/node_modules/@storybook/channels": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", - "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.9.tgz", + "integrity": "sha512-7dvzoHBJQDvG1PMJVLnsPw3xuQ6KMZBSOgzVrkFWi4f3j6zXjs7ADVo/uqIoLq8inziupz2himWFnUtl5moIUw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" @@ -4895,9 +4895,9 @@ } }, "node_modules/@storybook/addon-docs/node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -4908,19 +4908,19 @@ } }, "node_modules/@storybook/addon-docs/node_modules/@storybook/components": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.1.6.tgz", - "integrity": "sha512-RDcSj2gBVhK/klfcXQgINtvWe5hpJ1CYUv8hrAon3fWtZmX1+IrTJTorsdISvdHQ99o0WHZ+Ouz42O0yJnHzRg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.1.9.tgz", + "integrity": "sha512-YGDYTJfobtNDBJrvXNgmExX3LGnb9jGPGdroS4uHewLFaqEI3Fqu3RiFLaJf40TlZ27uWLprysdLRol8j+wYEw==", "dev": true, "dependencies": { "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-slot": "^1.0.2", - "@storybook/client-logger": "8.1.6", + "@storybook/client-logger": "8.1.9", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.5", - "@storybook/theming": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/theming": "8.1.9", + "@storybook/types": "8.1.9", "memoizerific": "^1.11.3", "util-deprecate": "^1.0.2" }, @@ -4934,9 +4934,9 @@ } }, "node_modules/@storybook/addon-docs/node_modules/@storybook/core-events": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.9.tgz", + "integrity": "sha512-c8MnBqUtTvIBNoDBBQQrFEy8pNAagcDryh5FM+T1SPBsH6j3fRSZwXMc6vvW2BYkQxJ67kpd7xrH7uapqhNEcg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -4948,17 +4948,17 @@ } }, "node_modules/@storybook/addon-docs/node_modules/@storybook/preview-api": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.6.tgz", - "integrity": "sha512-g9EvVg/DYqmjMh1uivJBJnSIvURyuK4LLabYicQNmYdQJscAeXX2bpMcA4aeci9BBm9B2RP7JbSnq7DbXZaJYA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.9.tgz", + "integrity": "sha512-deZoKsTHMbpzGOhboVdT/MHhafPKQyxo2tj1Zrb0GFfpabAUnJzVXRr93P5qCOKCuPQEwQyZx0ScW5qzY2JTrQ==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", - "@storybook/types": "8.1.6", + "@storybook/types": "8.1.9", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -4974,13 +4974,13 @@ } }, "node_modules/@storybook/addon-docs/node_modules/@storybook/theming": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.1.6.tgz", - "integrity": "sha512-0Cl/7/0z2WSfXhZ9XSw6rgEjb0fXac7jfktieX0vYo1YckrNpWFRQP9NCpVPAcYZaFLlRSOqYark6CLoutEsIg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.1.9.tgz", + "integrity": "sha512-CVM3F4Fa9cIFL4u/BhbANWytShBFeFBZeCFwvcJizJUL+nSgVlxeYilxwQB/1AxyJn/+OprW3nCw5aSbui/EEA==", "dev": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@storybook/client-logger": "8.1.6", + "@storybook/client-logger": "8.1.9", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -5002,12 +5002,12 @@ } }, "node_modules/@storybook/addon-docs/node_modules/@storybook/types": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", - "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.9.tgz", + "integrity": "sha512-temr7cNoBwu/+EF0jZ7aIfHtqwMqyevPLRfl/emkZM2t751NxbTkP1kxvfk9I0L8wF7mvVHXWn2iIM3QBqzWDw==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", + "@storybook/channels": "8.1.9", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -5031,24 +5031,24 @@ } }, "node_modules/@storybook/addon-essentials": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.1.6.tgz", - "integrity": "sha512-8ve9eM9dL6JsC5hV98unXtADvwyhIZoa3iWSeTicxWab49tvAfIM9ExwcWmUyPaB4m5q45jBSBXg66bzW2+TFw==", - "dev": true, - "dependencies": { - "@storybook/addon-actions": "8.1.6", - "@storybook/addon-backgrounds": "8.1.6", - "@storybook/addon-controls": "8.1.6", - "@storybook/addon-docs": "8.1.6", - "@storybook/addon-highlight": "8.1.6", - "@storybook/addon-measure": "8.1.6", - "@storybook/addon-outline": "8.1.6", - "@storybook/addon-toolbars": "8.1.6", - "@storybook/addon-viewport": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/manager-api": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/preview-api": "8.1.6", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.1.9.tgz", + "integrity": "sha512-VpEG+qmj7vKPMUSPKsGFwZgbm4QVM2bTqZEbW9zvPOFIbTKtrGaq/n/O0LhMramPkoQZKYKs/0i7OsEoZaOybQ==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "8.1.9", + "@storybook/addon-backgrounds": "8.1.9", + "@storybook/addon-controls": "8.1.9", + "@storybook/addon-docs": "8.1.9", + "@storybook/addon-highlight": "8.1.9", + "@storybook/addon-measure": "8.1.9", + "@storybook/addon-outline": "8.1.9", + "@storybook/addon-toolbars": "8.1.9", + "@storybook/addon-viewport": "8.1.9", + "@storybook/core-common": "8.1.9", + "@storybook/manager-api": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/preview-api": "8.1.9", "ts-dedent": "^2.0.0" }, "funding": { @@ -5057,13 +5057,13 @@ } }, "node_modules/@storybook/addon-essentials/node_modules/@storybook/channels": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", - "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.9.tgz", + "integrity": "sha512-7dvzoHBJQDvG1PMJVLnsPw3xuQ6KMZBSOgzVrkFWi4f3j6zXjs7ADVo/uqIoLq8inziupz2himWFnUtl5moIUw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" @@ -5074,9 +5074,9 @@ } }, "node_modules/@storybook/addon-essentials/node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -5087,9 +5087,9 @@ } }, "node_modules/@storybook/addon-essentials/node_modules/@storybook/core-events": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.9.tgz", + "integrity": "sha512-c8MnBqUtTvIBNoDBBQQrFEy8pNAagcDryh5FM+T1SPBsH6j3fRSZwXMc6vvW2BYkQxJ67kpd7xrH7uapqhNEcg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -5101,17 +5101,17 @@ } }, "node_modules/@storybook/addon-essentials/node_modules/@storybook/preview-api": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.6.tgz", - "integrity": "sha512-g9EvVg/DYqmjMh1uivJBJnSIvURyuK4LLabYicQNmYdQJscAeXX2bpMcA4aeci9BBm9B2RP7JbSnq7DbXZaJYA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.9.tgz", + "integrity": "sha512-deZoKsTHMbpzGOhboVdT/MHhafPKQyxo2tj1Zrb0GFfpabAUnJzVXRr93P5qCOKCuPQEwQyZx0ScW5qzY2JTrQ==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", - "@storybook/types": "8.1.6", + "@storybook/types": "8.1.9", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -5127,12 +5127,12 @@ } }, "node_modules/@storybook/addon-essentials/node_modules/@storybook/types": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", - "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.9.tgz", + "integrity": "sha512-temr7cNoBwu/+EF0jZ7aIfHtqwMqyevPLRfl/emkZM2t751NxbTkP1kxvfk9I0L8wF7mvVHXWn2iIM3QBqzWDw==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", + "@storybook/channels": "8.1.9", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -5142,9 +5142,9 @@ } }, "node_modules/@storybook/addon-highlight": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.1.6.tgz", - "integrity": "sha512-QT95TS4OT0SJJVz/1m038COUdS2yWukQOwyq2rCgSM6nU3OHOPf/CldDK4Sdch7Z4jV9kRdRS0Pu4FB5SV+uOw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.1.9.tgz", + "integrity": "sha512-7jcjepeP/Z6XhKXKIfMqrM72tsTwo3wAaytuVWG9mHeNTTphepqO0YXZphaEh5EhupaT0DOYWT6jVxOkiw+xpA==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -5155,9 +5155,9 @@ } }, "node_modules/@storybook/addon-links": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.1.6.tgz", - "integrity": "sha512-EuSXoK+tpApjW08ZiC4yE9ePdJkIu36AFPJHA6FVierVU31klW+cbFqps88JpmALZkrlf+pzKf3uBIGLrkBSAw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.1.9.tgz", + "integrity": "sha512-gawakQHokGDLEDIyyJzxHB0d5AJi2sSLzoNc0cvewEE55i6T7jvpXpVqTu6/ZtVFZ+3x3gLIQ6Q3krNNIz6W2A==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -5178,9 +5178,9 @@ } }, "node_modules/@storybook/addon-measure": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.1.6.tgz", - "integrity": "sha512-afG6XzClrkBQ9ZUZQs0rI9z/RYB+qhebG5k1NTCGYJnj7K4c+jso9nQ9vmypOBqlYKwTT2ZG+9xSK1/IhudEvg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.1.9.tgz", + "integrity": "sha512-YHU4XQkpA1WxAOLeqnHdX9g0ubuHHDIqLkVjixt/BHejDwLcLzfSyKiX6o4xy+0MUilFDQD2Q/psiDHkLrvnVQ==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5192,9 +5192,9 @@ } }, "node_modules/@storybook/addon-outline": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.1.6.tgz", - "integrity": "sha512-YjH3L4kxln0fLF77oDGJ2KF1I0RNrBQ9FRtqZkGMUbplxwYU0BBrguSgVeGxTLN1q/69LmL6wjFP4nLzqZARhA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.1.9.tgz", + "integrity": "sha512-Y1jgsVtW87qBQfKFMFk8vinsjQq7/yOGygtj2PHIgZO4foOaqwVDq7ioHCogmrdOycfpeByCtT3nUFAXxZxMsw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5206,9 +5206,9 @@ } }, "node_modules/@storybook/addon-toolbars": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.1.6.tgz", - "integrity": "sha512-d1GciLzD2ZRqh7+b8+JGuCdx8x/MAobhTy+jKeK79d+QKNtPhqZ1OvyUbwObgD6XLF8B/3DvyP3r52lmYMwlnQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.1.9.tgz", + "integrity": "sha512-aW+HsuC0iWjPSbJtxdbdGdCLXzV0dxPp8e4TPugT084ImTp+i+77xXUTl+PCylld8a51ulEssOxARewGN/QMsw==", "dev": true, "funding": { "type": "opencollective", @@ -5216,9 +5216,9 @@ } }, "node_modules/@storybook/addon-viewport": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.1.6.tgz", - "integrity": "sha512-4EpEkJW1fPqlHIqG7OQtnAaHh9DPj7k+guXpzWjVwHfF6AE0fXIg7Yx6iVDGPyKkRaagPw6nL8DOr2U8YwK4rQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.1.9.tgz", + "integrity": "sha512-ZCoqzNWp2w9TLJL8RC0fjv1RQcuGhwI64jjlGvszZm7TxP82C1SS71X/jbx5LWc2Dyl5xMt1/yOGFXvkAB2SUg==", "dev": true, "dependencies": { "memoizerific": "^1.11.3" @@ -5345,23 +5345,23 @@ } }, "node_modules/@storybook/blocks": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.1.6.tgz", - "integrity": "sha512-HBp80G9puOejqlBA0iNlV3gUxc7TkBlNIVG2rmhjcvPZUueldxTUGIGvEfTLdEM6nqzNVZT+duXwqeHHnDcynA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.1.9.tgz", + "integrity": "sha512-AB7icCijK2rft5kmzFF7bHuTdVIf6u5r26r4auqYxxVsHV87+k12kLvC8AyEssVIKMo+2vzImmdlhIScpCjrdQ==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/components": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/components": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", - "@storybook/docs-tools": "8.1.6", + "@storybook/docs-tools": "8.1.9", "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.5", - "@storybook/manager-api": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/theming": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/manager-api": "8.1.9", + "@storybook/preview-api": "8.1.9", + "@storybook/theming": "8.1.9", + "@storybook/types": "8.1.9", "@types/lodash": "^4.14.167", "color-convert": "^2.0.1", "dequal": "^2.0.2", @@ -5393,13 +5393,13 @@ } }, "node_modules/@storybook/blocks/node_modules/@storybook/channels": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", - "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.9.tgz", + "integrity": "sha512-7dvzoHBJQDvG1PMJVLnsPw3xuQ6KMZBSOgzVrkFWi4f3j6zXjs7ADVo/uqIoLq8inziupz2himWFnUtl5moIUw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" @@ -5410,9 +5410,9 @@ } }, "node_modules/@storybook/blocks/node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -5423,19 +5423,19 @@ } }, "node_modules/@storybook/blocks/node_modules/@storybook/components": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.1.6.tgz", - "integrity": "sha512-RDcSj2gBVhK/klfcXQgINtvWe5hpJ1CYUv8hrAon3fWtZmX1+IrTJTorsdISvdHQ99o0WHZ+Ouz42O0yJnHzRg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.1.9.tgz", + "integrity": "sha512-YGDYTJfobtNDBJrvXNgmExX3LGnb9jGPGdroS4uHewLFaqEI3Fqu3RiFLaJf40TlZ27uWLprysdLRol8j+wYEw==", "dev": true, "dependencies": { "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-slot": "^1.0.2", - "@storybook/client-logger": "8.1.6", + "@storybook/client-logger": "8.1.9", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.5", - "@storybook/theming": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/theming": "8.1.9", + "@storybook/types": "8.1.9", "memoizerific": "^1.11.3", "util-deprecate": "^1.0.2" }, @@ -5449,9 +5449,9 @@ } }, "node_modules/@storybook/blocks/node_modules/@storybook/core-events": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.9.tgz", + "integrity": "sha512-c8MnBqUtTvIBNoDBBQQrFEy8pNAagcDryh5FM+T1SPBsH6j3fRSZwXMc6vvW2BYkQxJ67kpd7xrH7uapqhNEcg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -5463,17 +5463,17 @@ } }, "node_modules/@storybook/blocks/node_modules/@storybook/preview-api": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.6.tgz", - "integrity": "sha512-g9EvVg/DYqmjMh1uivJBJnSIvURyuK4LLabYicQNmYdQJscAeXX2bpMcA4aeci9BBm9B2RP7JbSnq7DbXZaJYA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.9.tgz", + "integrity": "sha512-deZoKsTHMbpzGOhboVdT/MHhafPKQyxo2tj1Zrb0GFfpabAUnJzVXRr93P5qCOKCuPQEwQyZx0ScW5qzY2JTrQ==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", - "@storybook/types": "8.1.6", + "@storybook/types": "8.1.9", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -5489,13 +5489,13 @@ } }, "node_modules/@storybook/blocks/node_modules/@storybook/theming": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.1.6.tgz", - "integrity": "sha512-0Cl/7/0z2WSfXhZ9XSw6rgEjb0fXac7jfktieX0vYo1YckrNpWFRQP9NCpVPAcYZaFLlRSOqYark6CLoutEsIg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.1.9.tgz", + "integrity": "sha512-CVM3F4Fa9cIFL4u/BhbANWytShBFeFBZeCFwvcJizJUL+nSgVlxeYilxwQB/1AxyJn/+OprW3nCw5aSbui/EEA==", "dev": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@storybook/client-logger": "8.1.6", + "@storybook/client-logger": "8.1.9", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -5517,12 +5517,12 @@ } }, "node_modules/@storybook/blocks/node_modules/@storybook/types": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", - "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.9.tgz", + "integrity": "sha512-temr7cNoBwu/+EF0jZ7aIfHtqwMqyevPLRfl/emkZM2t751NxbTkP1kxvfk9I0L8wF7mvVHXWn2iIM3QBqzWDw==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", + "@storybook/channels": "8.1.9", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -5532,15 +5532,15 @@ } }, "node_modules/@storybook/builder-manager": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-8.1.6.tgz", - "integrity": "sha512-Y5d+dikKnUuCYyh4VLEF6A+AbWughEgtipVkDKOddSTzn04trClIOKqfhQqEUObydCpgvvfdjGXJa/zDRV/UQA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-8.1.9.tgz", + "integrity": "sha512-CmDXVrx3moUde6VWmdb49eCYHNu4e2wxeANKSsW1yEC0OLysQ9N6W9B5CuVWeoV3axVX/tKDqC83YY/008/4Qg==", "dev": true, "dependencies": { "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "8.1.6", - "@storybook/manager": "8.1.6", - "@storybook/node-logger": "8.1.6", + "@storybook/core-common": "8.1.9", + "@storybook/manager": "8.1.9", + "@storybook/node-logger": "8.1.9", "@types/ejs": "^3.1.1", "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", "browser-assert": "^1.2.1", @@ -5978,20 +5978,20 @@ } }, "node_modules/@storybook/builder-vite": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.1.6.tgz", - "integrity": "sha512-xbGxI7aVMNuLcAB41Z+Vjr+M1Kznvw/jJ8HP9cfmUl1cO7ysF8R9opVG1C+kMIXUIQAVeND+DUZgmUg2zGzH6A==", - "dev": true, - "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/csf-plugin": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/preview": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/types": "8.1.6", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.1.9.tgz", + "integrity": "sha512-OqjJne7x3l8yPMB3VTc9zbKYN5+9Yw/8cW9vK3N0rMObQa6be76JfJAgTFUGujp/GdVjYEiFI1Pu3b1wf5loWQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-common": "8.1.9", + "@storybook/core-events": "8.1.9", + "@storybook/csf-plugin": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/preview": "8.1.9", + "@storybook/preview-api": "8.1.9", + "@storybook/types": "8.1.9", "@types/find-cache-dir": "^3.2.1", "browser-assert": "^1.2.1", "es-module-lexer": "^1.5.0", @@ -6024,13 +6024,13 @@ } }, "node_modules/@storybook/builder-vite/node_modules/@storybook/channels": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", - "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.9.tgz", + "integrity": "sha512-7dvzoHBJQDvG1PMJVLnsPw3xuQ6KMZBSOgzVrkFWi4f3j6zXjs7ADVo/uqIoLq8inziupz2himWFnUtl5moIUw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" @@ -6041,9 +6041,9 @@ } }, "node_modules/@storybook/builder-vite/node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -6054,9 +6054,9 @@ } }, "node_modules/@storybook/builder-vite/node_modules/@storybook/core-events": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.9.tgz", + "integrity": "sha512-c8MnBqUtTvIBNoDBBQQrFEy8pNAagcDryh5FM+T1SPBsH6j3fRSZwXMc6vvW2BYkQxJ67kpd7xrH7uapqhNEcg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -6068,17 +6068,17 @@ } }, "node_modules/@storybook/builder-vite/node_modules/@storybook/preview-api": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.6.tgz", - "integrity": "sha512-g9EvVg/DYqmjMh1uivJBJnSIvURyuK4LLabYicQNmYdQJscAeXX2bpMcA4aeci9BBm9B2RP7JbSnq7DbXZaJYA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.9.tgz", + "integrity": "sha512-deZoKsTHMbpzGOhboVdT/MHhafPKQyxo2tj1Zrb0GFfpabAUnJzVXRr93P5qCOKCuPQEwQyZx0ScW5qzY2JTrQ==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", - "@storybook/types": "8.1.6", + "@storybook/types": "8.1.9", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -6094,12 +6094,12 @@ } }, "node_modules/@storybook/builder-vite/node_modules/@storybook/types": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", - "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.9.tgz", + "integrity": "sha512-temr7cNoBwu/+EF0jZ7aIfHtqwMqyevPLRfl/emkZM2t751NxbTkP1kxvfk9I0L8wF7mvVHXWn2iIM3QBqzWDw==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", + "@storybook/channels": "8.1.9", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -6142,22 +6142,22 @@ } }, "node_modules/@storybook/cli": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-8.1.6.tgz", - "integrity": "sha512-xsFdBoAbo+2h/UCWuVXiH4Tu49iQ6d+3R1J8F2n4N6rAKxMqAb6fzYnH1GeRYeZk0HGqb2iNc4kBkxj0jW0rKw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-8.1.9.tgz", + "integrity": "sha512-+4DQJf5yrdmKrAs8sx0WvKu/ja49oOLQU2MxRPKhXW3bxDFjkTYvWuCKwSbMwUa7Npt96CK3bwAPP53jz/+mXA==", "dev": true, "dependencies": { "@babel/core": "^7.24.4", "@babel/types": "^7.24.0", "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/core-server": "8.1.6", - "@storybook/csf-tools": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/telemetry": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/codemod": "8.1.9", + "@storybook/core-common": "8.1.9", + "@storybook/core-events": "8.1.9", + "@storybook/core-server": "8.1.9", + "@storybook/csf-tools": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/telemetry": "8.1.9", + "@storybook/types": "8.1.9", "@types/semver": "^7.3.4", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", @@ -6194,13 +6194,13 @@ } }, "node_modules/@storybook/cli/node_modules/@storybook/channels": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", - "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.9.tgz", + "integrity": "sha512-7dvzoHBJQDvG1PMJVLnsPw3xuQ6KMZBSOgzVrkFWi4f3j6zXjs7ADVo/uqIoLq8inziupz2himWFnUtl5moIUw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" @@ -6211,9 +6211,9 @@ } }, "node_modules/@storybook/cli/node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -6224,9 +6224,9 @@ } }, "node_modules/@storybook/cli/node_modules/@storybook/core-events": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.9.tgz", + "integrity": "sha512-c8MnBqUtTvIBNoDBBQQrFEy8pNAagcDryh5FM+T1SPBsH6j3fRSZwXMc6vvW2BYkQxJ67kpd7xrH7uapqhNEcg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -6238,12 +6238,12 @@ } }, "node_modules/@storybook/cli/node_modules/@storybook/types": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", - "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.9.tgz", + "integrity": "sha512-temr7cNoBwu/+EF0jZ7aIfHtqwMqyevPLRfl/emkZM2t751NxbTkP1kxvfk9I0L8wF7mvVHXWn2iIM3QBqzWDw==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", + "@storybook/channels": "8.1.9", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -6398,18 +6398,18 @@ } }, "node_modules/@storybook/codemod": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.1.6.tgz", - "integrity": "sha512-N5JeimfscAOcME7FIrTCmxcsXxow11vtmPTjYWoeLYokBodaH5RyWcyyQ5KS1ACtt+dHYoX8lepSZA5SBEzYog==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.1.9.tgz", + "integrity": "sha512-thTdwiAO/eUUyiCzgkyGjA4fE3BAdXqf3WdTRjH4Vqk4yby9EalwcBitkj/M6bCDGjdoxU2q2ByUDD9opwyMiw==", "dev": true, "dependencies": { "@babel/core": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/types": "^7.24.0", "@storybook/csf": "^0.1.7", - "@storybook/csf-tools": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/csf-tools": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/types": "8.1.9", "@types/cross-spawn": "^6.0.2", "cross-spawn": "^7.0.3", "globby": "^14.0.1", @@ -6425,13 +6425,13 @@ } }, "node_modules/@storybook/codemod/node_modules/@storybook/channels": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", - "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.9.tgz", + "integrity": "sha512-7dvzoHBJQDvG1PMJVLnsPw3xuQ6KMZBSOgzVrkFWi4f3j6zXjs7ADVo/uqIoLq8inziupz2himWFnUtl5moIUw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" @@ -6442,9 +6442,9 @@ } }, "node_modules/@storybook/codemod/node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -6455,9 +6455,9 @@ } }, "node_modules/@storybook/codemod/node_modules/@storybook/core-events": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.9.tgz", + "integrity": "sha512-c8MnBqUtTvIBNoDBBQQrFEy8pNAagcDryh5FM+T1SPBsH6j3fRSZwXMc6vvW2BYkQxJ67kpd7xrH7uapqhNEcg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -6469,12 +6469,12 @@ } }, "node_modules/@storybook/codemod/node_modules/@storybook/types": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", - "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.9.tgz", + "integrity": "sha512-temr7cNoBwu/+EF0jZ7aIfHtqwMqyevPLRfl/emkZM2t751NxbTkP1kxvfk9I0L8wF7mvVHXWn2iIM3QBqzWDw==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", + "@storybook/channels": "8.1.9", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -6556,15 +6556,15 @@ } }, "node_modules/@storybook/core-common": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.6.tgz", - "integrity": "sha512-OTlfJFaTOB588ibXrrFm0TAXam6E5xV1VXSjNXL+fIifx8Kjln2HNSy1JKjvcblQneYiV4J1xPCVnAIe0EGHDg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.9.tgz", + "integrity": "sha512-+KReoo41FUknTxk3fbnoul995SnZdKAVSK6MuqKOQnC9PH6bh864k6i1LShVZx/wk3n25h9xorD3UgyRI6sZ0w==", "dev": true, "dependencies": { - "@storybook/core-events": "8.1.6", - "@storybook/csf-tools": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/core-events": "8.1.9", + "@storybook/csf-tools": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/types": "8.1.9", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", "chalk": "^4.1.0", @@ -6973,13 +6973,13 @@ } }, "node_modules/@storybook/core-common/node_modules/@storybook/channels": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", - "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.9.tgz", + "integrity": "sha512-7dvzoHBJQDvG1PMJVLnsPw3xuQ6KMZBSOgzVrkFWi4f3j6zXjs7ADVo/uqIoLq8inziupz2himWFnUtl5moIUw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" @@ -6990,9 +6990,9 @@ } }, "node_modules/@storybook/core-common/node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -7003,9 +7003,9 @@ } }, "node_modules/@storybook/core-common/node_modules/@storybook/core-events": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.9.tgz", + "integrity": "sha512-c8MnBqUtTvIBNoDBBQQrFEy8pNAagcDryh5FM+T1SPBsH6j3fRSZwXMc6vvW2BYkQxJ67kpd7xrH7uapqhNEcg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -7017,12 +7017,12 @@ } }, "node_modules/@storybook/core-common/node_modules/@storybook/types": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", - "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.9.tgz", + "integrity": "sha512-temr7cNoBwu/+EF0jZ7aIfHtqwMqyevPLRfl/emkZM2t751NxbTkP1kxvfk9I0L8wF7mvVHXWn2iIM3QBqzWDw==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", + "@storybook/channels": "8.1.9", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -7162,29 +7162,29 @@ } }, "node_modules/@storybook/core-server": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.1.6.tgz", - "integrity": "sha512-rgkeTG8V4emzhPqjlhchsjLay0WtgK7SrXNf1X40oTJIwmbgbReLJ5EmOXBe9rhWSXJ13aKL3l6JuTLAoptSkg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.1.9.tgz", + "integrity": "sha512-bn3M264vr3GY9kgAdRRIUdVV4PcUqtYvttQ/h6XDVJWC1UYUQW49zQNxQLQUXSQo4KLISnvTKHmP5qgbY6BASQ==", "dev": true, "dependencies": { "@aw-web-design/x-default-browser": "1.4.126", "@babel/core": "^7.24.4", "@babel/parser": "^7.24.4", "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "8.1.6", - "@storybook/channels": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/builder-manager": "8.1.9", + "@storybook/channels": "8.1.9", + "@storybook/core-common": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", - "@storybook/csf-tools": "8.1.6", + "@storybook/csf-tools": "8.1.9", "@storybook/docs-mdx": "3.1.0-next.0", "@storybook/global": "^5.0.0", - "@storybook/manager": "8.1.6", - "@storybook/manager-api": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/telemetry": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/manager": "8.1.9", + "@storybook/manager-api": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/preview-api": "8.1.9", + "@storybook/telemetry": "8.1.9", + "@storybook/types": "8.1.9", "@types/detect-port": "^1.3.0", "@types/diff": "^5.0.9", "@types/node": "^18.0.0", @@ -7219,13 +7219,13 @@ } }, "node_modules/@storybook/core-server/node_modules/@storybook/channels": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", - "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.9.tgz", + "integrity": "sha512-7dvzoHBJQDvG1PMJVLnsPw3xuQ6KMZBSOgzVrkFWi4f3j6zXjs7ADVo/uqIoLq8inziupz2himWFnUtl5moIUw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" @@ -7236,9 +7236,9 @@ } }, "node_modules/@storybook/core-server/node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -7249,9 +7249,9 @@ } }, "node_modules/@storybook/core-server/node_modules/@storybook/core-events": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.9.tgz", + "integrity": "sha512-c8MnBqUtTvIBNoDBBQQrFEy8pNAagcDryh5FM+T1SPBsH6j3fRSZwXMc6vvW2BYkQxJ67kpd7xrH7uapqhNEcg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -7263,17 +7263,17 @@ } }, "node_modules/@storybook/core-server/node_modules/@storybook/preview-api": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.6.tgz", - "integrity": "sha512-g9EvVg/DYqmjMh1uivJBJnSIvURyuK4LLabYicQNmYdQJscAeXX2bpMcA4aeci9BBm9B2RP7JbSnq7DbXZaJYA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.9.tgz", + "integrity": "sha512-deZoKsTHMbpzGOhboVdT/MHhafPKQyxo2tj1Zrb0GFfpabAUnJzVXRr93P5qCOKCuPQEwQyZx0ScW5qzY2JTrQ==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", - "@storybook/types": "8.1.6", + "@storybook/types": "8.1.9", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -7289,12 +7289,12 @@ } }, "node_modules/@storybook/core-server/node_modules/@storybook/types": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", - "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.9.tgz", + "integrity": "sha512-temr7cNoBwu/+EF0jZ7aIfHtqwMqyevPLRfl/emkZM2t751NxbTkP1kxvfk9I0L8wF7mvVHXWn2iIM3QBqzWDw==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", + "@storybook/channels": "8.1.9", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -7444,12 +7444,12 @@ } }, "node_modules/@storybook/csf-plugin": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.1.6.tgz", - "integrity": "sha512-y2OW84leoWsqfBXb7EoRy2QUmtsI3gpqYqpyD/d5K+vQ+E9CBel2WB8RPrwcYm2L88WPDaufQQDzqyB7aMx4fQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.1.9.tgz", + "integrity": "sha512-OC3Z7lx5Tt3iNqVpfAykCKhmHyWXwjPvK0C0RubmKLRWdH66aKp2SzvqJSFppRGZySWKKJqSBGtjB/AsG/Do4Q==", "dev": true, "dependencies": { - "@storybook/csf-tools": "8.1.6", + "@storybook/csf-tools": "8.1.9", "unplugin": "^1.3.1" }, "funding": { @@ -7458,9 +7458,9 @@ } }, "node_modules/@storybook/csf-tools": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.6.tgz", - "integrity": "sha512-jrKfHFNhiLBhWWW4/fm2wgKEVg55e6QuYUHY16KGd7PdPuzm+2Pt7jIl5V9yIj6a59YbjeMpT6jWPKbFx2TuCw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.9.tgz", + "integrity": "sha512-nCYGNJOoBZjAdD1blTgS8/O0HwXaZ4cwUd8G9pQbsyt/cSW65clATeEV1rTTcR+G9JHnZBQ3jLAnH2dbFY0c8w==", "dev": true, "dependencies": { "@babel/generator": "^7.24.4", @@ -7468,7 +7468,7 @@ "@babel/traverse": "^7.24.1", "@babel/types": "^7.24.0", "@storybook/csf": "^0.1.7", - "@storybook/types": "8.1.6", + "@storybook/types": "8.1.9", "fs-extra": "^11.1.0", "recast": "^0.23.5", "ts-dedent": "^2.0.0" @@ -7479,13 +7479,13 @@ } }, "node_modules/@storybook/csf-tools/node_modules/@storybook/channels": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", - "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.9.tgz", + "integrity": "sha512-7dvzoHBJQDvG1PMJVLnsPw3xuQ6KMZBSOgzVrkFWi4f3j6zXjs7ADVo/uqIoLq8inziupz2himWFnUtl5moIUw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" @@ -7496,9 +7496,9 @@ } }, "node_modules/@storybook/csf-tools/node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -7509,9 +7509,9 @@ } }, "node_modules/@storybook/csf-tools/node_modules/@storybook/core-events": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.9.tgz", + "integrity": "sha512-c8MnBqUtTvIBNoDBBQQrFEy8pNAagcDryh5FM+T1SPBsH6j3fRSZwXMc6vvW2BYkQxJ67kpd7xrH7uapqhNEcg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -7523,12 +7523,12 @@ } }, "node_modules/@storybook/csf-tools/node_modules/@storybook/types": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", - "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.9.tgz", + "integrity": "sha512-temr7cNoBwu/+EF0jZ7aIfHtqwMqyevPLRfl/emkZM2t751NxbTkP1kxvfk9I0L8wF7mvVHXWn2iIM3QBqzWDw==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", + "@storybook/channels": "8.1.9", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -7558,15 +7558,15 @@ "dev": true }, "node_modules/@storybook/docs-tools": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.1.6.tgz", - "integrity": "sha512-IhqQHSJ5nEBEJ162P/6/6c45toLinWpAkB7pwbAoP00djZSzfHNdQ4HfpZSGfD4GUJIvzsqMzUlyqCKLAoRPPA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.1.9.tgz", + "integrity": "sha512-ZGtlldQARXG+v8KtNq5dxtAfPLsaLFuV4gJQ4MHXcspQSKtQ6fq5k2IkxhKhDg4EEQ/lhSl8vUxws+W79xWbbg==", "dev": true, "dependencies": { - "@storybook/core-common": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/core-common": "8.1.9", + "@storybook/core-events": "8.1.9", + "@storybook/preview-api": "8.1.9", + "@storybook/types": "8.1.9", "@types/doctrine": "^0.0.3", "assert": "^2.1.0", "doctrine": "^3.0.0", @@ -7578,13 +7578,13 @@ } }, "node_modules/@storybook/docs-tools/node_modules/@storybook/channels": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", - "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.9.tgz", + "integrity": "sha512-7dvzoHBJQDvG1PMJVLnsPw3xuQ6KMZBSOgzVrkFWi4f3j6zXjs7ADVo/uqIoLq8inziupz2himWFnUtl5moIUw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" @@ -7595,9 +7595,9 @@ } }, "node_modules/@storybook/docs-tools/node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -7608,9 +7608,9 @@ } }, "node_modules/@storybook/docs-tools/node_modules/@storybook/core-events": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.9.tgz", + "integrity": "sha512-c8MnBqUtTvIBNoDBBQQrFEy8pNAagcDryh5FM+T1SPBsH6j3fRSZwXMc6vvW2BYkQxJ67kpd7xrH7uapqhNEcg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -7622,17 +7622,17 @@ } }, "node_modules/@storybook/docs-tools/node_modules/@storybook/preview-api": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.6.tgz", - "integrity": "sha512-g9EvVg/DYqmjMh1uivJBJnSIvURyuK4LLabYicQNmYdQJscAeXX2bpMcA4aeci9BBm9B2RP7JbSnq7DbXZaJYA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.9.tgz", + "integrity": "sha512-deZoKsTHMbpzGOhboVdT/MHhafPKQyxo2tj1Zrb0GFfpabAUnJzVXRr93P5qCOKCuPQEwQyZx0ScW5qzY2JTrQ==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", - "@storybook/types": "8.1.6", + "@storybook/types": "8.1.9", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -7648,12 +7648,12 @@ } }, "node_modules/@storybook/docs-tools/node_modules/@storybook/types": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", - "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.9.tgz", + "integrity": "sha512-temr7cNoBwu/+EF0jZ7aIfHtqwMqyevPLRfl/emkZM2t751NxbTkP1kxvfk9I0L8wF7mvVHXWn2iIM3QBqzWDw==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", + "@storybook/channels": "8.1.9", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -7683,9 +7683,9 @@ } }, "node_modules/@storybook/manager": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-8.1.6.tgz", - "integrity": "sha512-B7xc09FYHqC1sknJoWkGHBBCMQlfg7hF+4x42cGhAyYed4TeYAf7b1PDniq8L/PLbUgzTw+A62UC1fMurCcVDQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-8.1.9.tgz", + "integrity": "sha512-sp1N7ZgOtGK5uhCgwuPQlJ4JYKr3TyNeahotwAf2FUb5n70YyXDzqoqO8q8H0y9NarX+EcP1gJ4GmpT9+qTxsQ==", "dev": true, "funding": { "type": "opencollective", @@ -7693,20 +7693,20 @@ } }, "node_modules/@storybook/manager-api": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.1.6.tgz", - "integrity": "sha512-L/s1FdFh/P+eFmQwLtFtJHwFJrGD9H7nauaQlKJOrU3GeXfjBjtlAZQF0Q6B4ZTGxwZjQrzShpt/0yKc6gymtw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.1.9.tgz", + "integrity": "sha512-iafn/C9Bg9UHae7FoL5rNLCeQQnzvm+kKRlQzP5iVSJurnaYnajzej4baoZmF/eZJTFLdyp8klsqcl+NLJh8iA==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.5", - "@storybook/router": "8.1.6", - "@storybook/theming": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/router": "8.1.9", + "@storybook/theming": "8.1.9", + "@storybook/types": "8.1.9", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", @@ -7720,13 +7720,13 @@ } }, "node_modules/@storybook/manager-api/node_modules/@storybook/channels": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", - "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.9.tgz", + "integrity": "sha512-7dvzoHBJQDvG1PMJVLnsPw3xuQ6KMZBSOgzVrkFWi4f3j6zXjs7ADVo/uqIoLq8inziupz2himWFnUtl5moIUw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" @@ -7737,9 +7737,9 @@ } }, "node_modules/@storybook/manager-api/node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -7750,9 +7750,9 @@ } }, "node_modules/@storybook/manager-api/node_modules/@storybook/core-events": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.9.tgz", + "integrity": "sha512-c8MnBqUtTvIBNoDBBQQrFEy8pNAagcDryh5FM+T1SPBsH6j3fRSZwXMc6vvW2BYkQxJ67kpd7xrH7uapqhNEcg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -7764,13 +7764,13 @@ } }, "node_modules/@storybook/manager-api/node_modules/@storybook/theming": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.1.6.tgz", - "integrity": "sha512-0Cl/7/0z2WSfXhZ9XSw6rgEjb0fXac7jfktieX0vYo1YckrNpWFRQP9NCpVPAcYZaFLlRSOqYark6CLoutEsIg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.1.9.tgz", + "integrity": "sha512-CVM3F4Fa9cIFL4u/BhbANWytShBFeFBZeCFwvcJizJUL+nSgVlxeYilxwQB/1AxyJn/+OprW3nCw5aSbui/EEA==", "dev": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@storybook/client-logger": "8.1.6", + "@storybook/client-logger": "8.1.9", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -7792,12 +7792,12 @@ } }, "node_modules/@storybook/manager-api/node_modules/@storybook/types": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", - "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.9.tgz", + "integrity": "sha512-temr7cNoBwu/+EF0jZ7aIfHtqwMqyevPLRfl/emkZM2t751NxbTkP1kxvfk9I0L8wF7mvVHXWn2iIM3QBqzWDw==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", + "@storybook/channels": "8.1.9", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -7807,9 +7807,9 @@ } }, "node_modules/@storybook/node-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.6.tgz", - "integrity": "sha512-IZEiTLFHu8Oom/vdEGpisSw5CfU+cw6/fTaX1P3EVClFOWVuy8/3X5MPu4wJH3jPym6E2DBduIUFeRsiuq61gA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.9.tgz", + "integrity": "sha512-X5YGkJOui+m3TXqbf7HODzrf4VdzamtlUXlD08Qm36JJD/qJJZVhSivzkQR4uom/VW+ejChM2ETgw41SrK0vJA==", "dev": true, "funding": { "type": "opencollective", @@ -7817,9 +7817,9 @@ } }, "node_modules/@storybook/preview": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-8.1.6.tgz", - "integrity": "sha512-o9OgOmO10GyX1ZC7WiapYqGdst4TOCPLqWSu3H2nL4ZT7BQLUQfCy30kyoMO7KyxCgc5K5rcqG7qZ/N0tfUgRg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-8.1.9.tgz", + "integrity": "sha512-yLwe9RJRlF+h9D73pyo4fUXFxN/krTgLKT08IoyWwq7/onzVlujYdDl56EsM+Aw5OktBuwAvTiaw0WCdiFP4sA==", "dev": true, "funding": { "type": "opencollective", @@ -7855,9 +7855,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.1.6.tgz", - "integrity": "sha512-qP5nkAmpGFy/gshO+bVjRo1rgo/6UVDElgOd2dlUtYnfdPONiOfWko2XGYKKfxa6Cp7KU35JlZz/kHGqWG31zQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.1.9.tgz", + "integrity": "sha512-nRpw1SxkSCf8+MrsgL37lpihcr0fwtG0tHShW6F2+Lrx0nlzaOTH/VOvAwZJLNYpqddqln6vQ6Yk7Wxvw2IIkw==", "dev": true, "funding": { "type": "opencollective", @@ -7869,12 +7869,12 @@ } }, "node_modules/@storybook/router": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-8.1.6.tgz", - "integrity": "sha512-tvuhB2uXHEKK640Epm1SqVzPhQ9lXYfF7FX6FleJgVYEvZpJpNTD4RojedQoLI6SUUSXNy1Vs2QV26VM0XIPHQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-8.1.9.tgz", + "integrity": "sha512-b7e/pnqfYLD3oxdStnAZI+Gxp0Bodk3q5Jo9FUoiSNZaa3Pu8conq+jsyyXT19uDZtWwOursBKVvDM2/dtHGLg==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", + "@storybook/client-logger": "8.1.9", "memoizerific": "^1.11.3", "qs": "^6.10.0" }, @@ -7884,9 +7884,9 @@ } }, "node_modules/@storybook/router/node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -7897,14 +7897,14 @@ } }, "node_modules/@storybook/telemetry": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-8.1.6.tgz", - "integrity": "sha512-qNWjQPF6ufRvLCAavulhNYoqldDIeBvioFuCjLlwbw3BZw3ck7pwh1vZg4AJ0SAfzbnpnXPGrHe31gnxV0D6tw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-8.1.9.tgz", + "integrity": "sha512-ayNt4g6MKIQCj5fPmB2WhYbEEH+AMVswUOedFp2DtPojeDnVJMp38lSFykTbjaq+/HrDpnoZn6fG4pd+05N+dg==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/csf-tools": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-common": "8.1.9", + "@storybook/csf-tools": "8.1.9", "chalk": "^4.1.0", "detect-package-manager": "^2.0.1", "fetch-retry": "^5.0.2", @@ -7917,9 +7917,9 @@ } }, "node_modules/@storybook/telemetry/node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -8034,17 +8034,17 @@ } }, "node_modules/@storybook/web-components": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/web-components/-/web-components-8.1.6.tgz", - "integrity": "sha512-wpRapZVXjoKyXl66/v/dFP697ttPpmyIi+vwratYTYLEx+3K1Ovuc2BLg44GlYRLhU9NW5YuJe51bh02M/z+Rw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/web-components/-/web-components-8.1.9.tgz", + "integrity": "sha512-d22EWC43IcmiSlyyB8xPcYUtum2n22b4NwWWTvpMm0bPS+OuSLrWVJawR6/H2jGtv2J+vGIwbVgn2BrDSUo6OA==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/docs-tools": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/docs-tools": "8.1.9", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/manager-api": "8.1.9", + "@storybook/preview-api": "8.1.9", + "@storybook/types": "8.1.9", "tiny-invariant": "^1.3.1", "ts-dedent": "^2.0.0" }, @@ -8060,16 +8060,16 @@ } }, "node_modules/@storybook/web-components-vite": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/web-components-vite/-/web-components-vite-8.1.6.tgz", - "integrity": "sha512-9IwcV+QqbetJckcuhB5tRxynwlPMnlDN1fw+oOO/lLG+4tRESuJi99lpRybtB9vVvvUD1kn3FEC2Hx3FcsrCcA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/web-components-vite/-/web-components-vite-8.1.9.tgz", + "integrity": "sha512-NTmUg+erJg9onmRkG7WwShIsuhRh57h5DmS60yO2oLrcRHLp4UekklZ5eRuIN2d/BlXIOlz4TJG/5rEyZyDHfg==", "dev": true, "dependencies": { - "@storybook/builder-vite": "8.1.6", - "@storybook/core-server": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/types": "8.1.6", - "@storybook/web-components": "8.1.6", + "@storybook/builder-vite": "8.1.9", + "@storybook/core-server": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/types": "8.1.9", + "@storybook/web-components": "8.1.9", "magic-string": "^0.30.0" }, "engines": { @@ -8081,13 +8081,13 @@ } }, "node_modules/@storybook/web-components-vite/node_modules/@storybook/channels": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", - "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.9.tgz", + "integrity": "sha512-7dvzoHBJQDvG1PMJVLnsPw3xuQ6KMZBSOgzVrkFWi4f3j6zXjs7ADVo/uqIoLq8inziupz2himWFnUtl5moIUw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" @@ -8098,9 +8098,9 @@ } }, "node_modules/@storybook/web-components-vite/node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -8111,9 +8111,9 @@ } }, "node_modules/@storybook/web-components-vite/node_modules/@storybook/core-events": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.9.tgz", + "integrity": "sha512-c8MnBqUtTvIBNoDBBQQrFEy8pNAagcDryh5FM+T1SPBsH6j3fRSZwXMc6vvW2BYkQxJ67kpd7xrH7uapqhNEcg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -8125,12 +8125,12 @@ } }, "node_modules/@storybook/web-components-vite/node_modules/@storybook/types": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", - "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.9.tgz", + "integrity": "sha512-temr7cNoBwu/+EF0jZ7aIfHtqwMqyevPLRfl/emkZM2t751NxbTkP1kxvfk9I0L8wF7mvVHXWn2iIM3QBqzWDw==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", + "@storybook/channels": "8.1.9", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -8140,13 +8140,13 @@ } }, "node_modules/@storybook/web-components/node_modules/@storybook/channels": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", - "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.9.tgz", + "integrity": "sha512-7dvzoHBJQDvG1PMJVLnsPw3xuQ6KMZBSOgzVrkFWi4f3j6zXjs7ADVo/uqIoLq8inziupz2himWFnUtl5moIUw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" @@ -8157,9 +8157,9 @@ } }, "node_modules/@storybook/web-components/node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -8170,9 +8170,9 @@ } }, "node_modules/@storybook/web-components/node_modules/@storybook/core-events": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.9.tgz", + "integrity": "sha512-c8MnBqUtTvIBNoDBBQQrFEy8pNAagcDryh5FM+T1SPBsH6j3fRSZwXMc6vvW2BYkQxJ67kpd7xrH7uapqhNEcg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -8184,17 +8184,17 @@ } }, "node_modules/@storybook/web-components/node_modules/@storybook/preview-api": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.6.tgz", - "integrity": "sha512-g9EvVg/DYqmjMh1uivJBJnSIvURyuK4LLabYicQNmYdQJscAeXX2bpMcA4aeci9BBm9B2RP7JbSnq7DbXZaJYA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.9.tgz", + "integrity": "sha512-deZoKsTHMbpzGOhboVdT/MHhafPKQyxo2tj1Zrb0GFfpabAUnJzVXRr93P5qCOKCuPQEwQyZx0ScW5qzY2JTrQ==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", - "@storybook/types": "8.1.6", + "@storybook/types": "8.1.9", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -8210,12 +8210,12 @@ } }, "node_modules/@storybook/web-components/node_modules/@storybook/types": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", - "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.9.tgz", + "integrity": "sha512-temr7cNoBwu/+EF0jZ7aIfHtqwMqyevPLRfl/emkZM2t751NxbTkP1kxvfk9I0L8wF7mvVHXWn2iIM3QBqzWDw==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", + "@storybook/channels": "8.1.9", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -13353,9 +13353,9 @@ "license": "ISC" }, "node_modules/flow-parser": { - "version": "0.237.2", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.237.2.tgz", - "integrity": "sha512-mvI/kdfr3l1waaPbThPA8dJa77nHXrfZIun+SWvFwSwDjmeByU7mGJGRmv1+7guU6ccyLV8e1lqZA1lD4iMGnQ==", + "version": "0.238.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.238.0.tgz", + "integrity": "sha512-VE7XSv1epljsIN2YeBnxCmGJihpNIAnLLu/pPOdA+Gkso7qDltJwUi6vfHjgxdBbjSdAuPGnhuOHJUQG+yYwIg==", "dev": true, "engines": { "node": ">=0.4.0" @@ -19050,12 +19050,12 @@ "license": "MIT" }, "node_modules/storybook": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.1.6.tgz", - "integrity": "sha512-qouQEB+sSb9ktE6fGVoBy6CLEUq4NOqDUpt/EhnITaWqzUeAZSQXTcoHg9DXhTMiynnbfqsUcZuK9PZOjgt7/w==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.1.9.tgz", + "integrity": "sha512-Jymrfn299+MJBIZVDYPJlIGJMZM33udFCjbeRdOHIXF2BfpqOSS2FoEfmlp3zya3gwyZDq/BE7uiBc7HIVZa4g==", "dev": true, "dependencies": { - "@storybook/cli": "8.1.6" + "@storybook/cli": "8.1.9" }, "bin": { "sb": "index.js", diff --git a/web/package.json b/web/package.json index f536e55cc394..6b6d00d2560e 100644 --- a/web/package.json +++ b/web/package.json @@ -81,13 +81,13 @@ "@lit/localize-tools": "^0.7.2", "@rollup/plugin-replace": "^5.0.7", "@spotlightjs/spotlight": "^1.2.17", - "@storybook/addon-essentials": "^8.1.6", - "@storybook/addon-links": "^8.1.6", + "@storybook/addon-essentials": "^8.1.9", + "@storybook/addon-links": "^8.1.9", "@storybook/api": "^7.6.17", "@storybook/blocks": "^8.0.8", - "@storybook/manager-api": "^8.1.6", - "@storybook/web-components": "^8.1.6", - "@storybook/web-components-vite": "^8.1.6", + "@storybook/manager-api": "^8.1.9", + "@storybook/web-components": "^8.1.9", + "@storybook/web-components-vite": "^8.1.9", "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@types/chart.js": "^2.9.41", "@types/codemirror": "5.60.15", @@ -117,7 +117,7 @@ "react-dom": "^18.3.1", "rollup-plugin-modify": "^3.0.0", "rollup-plugin-postcss-lit": "^2.1.0", - "storybook": "^8.1.6", + "storybook": "^8.1.9", "storybook-addon-mock": "^5.0.0", "ts-lit-plugin": "^2.0.2", "tslib": "^2.6.3", From a35f9fdd7b504dfe1b43c5cc3d4392316409469d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 15:31:30 +0900 Subject: [PATCH 05/15] web: bump ts-pattern from 5.1.2 to 5.2.0 in /web (#10098) Bumps [ts-pattern](https://github.com/gvergnaud/ts-pattern) from 5.1.2 to 5.2.0. - [Release notes](https://github.com/gvergnaud/ts-pattern/releases) - [Commits](https://github.com/gvergnaud/ts-pattern/compare/v5.1.2...v5.2.0) --- updated-dependencies: - dependency-name: ts-pattern dependency-type: direct:production 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 | 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 c2a0358f882c..9e2e19bdf4ba 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -42,7 +42,7 @@ "rapidoc": "^9.3.4", "showdown": "^2.1.0", "style-mod": "^4.1.2", - "ts-pattern": "^5.1.2", + "ts-pattern": "^5.2.0", "webcomponent-qr-code": "^1.2.0", "yaml": "^2.4.5" }, @@ -19954,9 +19954,9 @@ "license": "MIT" }, "node_modules/ts-pattern": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/ts-pattern/-/ts-pattern-5.1.2.tgz", - "integrity": "sha512-u+ElKUIWnqisjpRBhv6Y89yNq7Pmz6xL0v7pTSckrVZ0+5Vf32oh/3jmxWl80rAOGcnbBa7fCyeqNdP4yXzWWg==" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ts-pattern/-/ts-pattern-5.2.0.tgz", + "integrity": "sha512-aGaSpOlDcns7ZoeG/OMftWyQG1KqPVhgplhJxNCvyIXqWrumM5uIoOSarw/hmmi/T1PnuQ/uD8NaFHvLpHicDg==" }, "node_modules/ts-simple-type": { "version": "2.0.0-next.0", diff --git a/web/package.json b/web/package.json index 6b6d00d2560e..b28a6f03f1ab 100644 --- a/web/package.json +++ b/web/package.json @@ -63,7 +63,7 @@ "rapidoc": "^9.3.4", "showdown": "^2.1.0", "style-mod": "^4.1.2", - "ts-pattern": "^5.1.2", + "ts-pattern": "^5.2.0", "webcomponent-qr-code": "^1.2.0", "yaml": "^2.4.5" }, From b704388c2f522bfe87270e66b0ee759b7a640572 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 15:52:07 +0900 Subject: [PATCH 06/15] web: bump the sentry group across 1 directory with 2 updates (#10101) --- web/package-lock.json | 114 +++++++++++++++++++++--------------------- web/package.json | 4 +- 2 files changed, 59 insertions(+), 59 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 9e2e19bdf4ba..f19249b1e6f1 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -25,7 +25,7 @@ "@open-wc/lit-helpers": "^0.7.0", "@patternfly/elements": "^3.0.1", "@patternfly/patternfly": "^4.224.2", - "@sentry/browser": "^8.9.1", + "@sentry/browser": "^8.9.2", "@webcomponents/webcomponentsjs": "^2.8.0", "base64-js": "^1.5.1", "chart.js": "^4.4.3", @@ -59,7 +59,7 @@ "@jeysal/storybook-addon-css-user-preferences": "^0.2.0", "@lit/localize-tools": "^0.7.2", "@rollup/plugin-replace": "^5.0.7", - "@spotlightjs/spotlight": "^1.2.17", + "@spotlightjs/spotlight": "^2.0.0", "@storybook/addon-essentials": "^8.1.9", "@storybook/addon-links": "^8.1.9", "@storybook/api": "^7.6.17", @@ -4640,102 +4640,102 @@ "peer": true }, "node_modules/@sentry-internal/browser-utils": { - "version": "8.9.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.9.1.tgz", - "integrity": "sha512-jt2AC8yMhh9E8NBMgcyqLZDCeZq5RCOpHQ8MQxUfg3wFOg8+lRC/xQqCE32eWX0RCv7lhwlM9JsCGA/4TfJ4Zw==", + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.9.2.tgz", + "integrity": "sha512-2A0A6TnfzFDvYCRWS9My3t+JKG6KlslhyaN35BTiOTlYDauEekyJP7BFFyeTJXCHm2BQgI8aRZhBKm+oR9QuYw==", "dependencies": { - "@sentry/core": "8.9.1", - "@sentry/types": "8.9.1", - "@sentry/utils": "8.9.1" + "@sentry/core": "8.9.2", + "@sentry/types": "8.9.2", + "@sentry/utils": "8.9.2" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/feedback": { - "version": "8.9.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.9.1.tgz", - "integrity": "sha512-hJjxyeXc6y9Q6ad1WktsQ1cLRuLtROn1+hBpakrd5CyBep3MXMyYqDqe3BSZd/lxnL+uT7kE5No7NsQM0jPksQ==", + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.9.2.tgz", + "integrity": "sha512-v04Q+08ohwautwmiDfK5hI+nFW2B/IYhBz7pZM9x1srkwmNA69XOFyo5u34TeVHhYOPbMM2Ubs0uNEcSWHgbbQ==", "dependencies": { - "@sentry/core": "8.9.1", - "@sentry/types": "8.9.1", - "@sentry/utils": "8.9.1" + "@sentry/core": "8.9.2", + "@sentry/types": "8.9.2", + "@sentry/utils": "8.9.2" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay": { - "version": "8.9.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.9.1.tgz", - "integrity": "sha512-JQlJz8tVmkxI4X5K+GysYmXfZ9x6tn7Wpq3z3zuWQSPRstJiWyNOanVCv92E+Z5k3wjEih9FRP5qfliLzS6VJQ==", + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.9.2.tgz", + "integrity": "sha512-YPnrnXJd6mJpJspJ8pI8hd1KTMOxw+BARP5twiDwXlij1RTotwnNoX9UGaSm+ZPTexPD++6Zyp6xQf4vKKP3yg==", "dependencies": { - "@sentry-internal/browser-utils": "8.9.1", - "@sentry/core": "8.9.1", - "@sentry/types": "8.9.1", - "@sentry/utils": "8.9.1" + "@sentry-internal/browser-utils": "8.9.2", + "@sentry/core": "8.9.2", + "@sentry/types": "8.9.2", + "@sentry/utils": "8.9.2" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay-canvas": { - "version": "8.9.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.9.1.tgz", - "integrity": "sha512-9j3DB+R7UuKSi0iFFL6fb91/B7+/7dTNRNoW7RGt9DRFx6X283ZaCKyTGkzYtj0tpCpcRbrE+daINsG4yf/R8g==", + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.9.2.tgz", + "integrity": "sha512-vu9TssSjO+XbZjnoyYxMrBI4KgXG+zyqw3ThfPqG6o7O0BGa54fFwtZiMdGq/BHz017FuNiEz4fgtzuDd4gZJQ==", "dependencies": { - "@sentry-internal/replay": "8.9.1", - "@sentry/core": "8.9.1", - "@sentry/types": "8.9.1", - "@sentry/utils": "8.9.1" + "@sentry-internal/replay": "8.9.2", + "@sentry/core": "8.9.2", + "@sentry/types": "8.9.2", + "@sentry/utils": "8.9.2" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/browser": { - "version": "8.9.1", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.9.1.tgz", - "integrity": "sha512-UCD/cQZHCFjIMmAtG7dcIRK8VmjU93QgYeI84lAf4DnKPU+/Xp+3kVJvpD3xiilpgiBz2q1RFfbjCAypJUTCYA==", + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.9.2.tgz", + "integrity": "sha512-jI5XY4j8Sa+YteokI+4SW+A/ErZxPDnspjvV3dm5pIPWvEFhvDyXWZSepqaoqwo3L7fdkRMzXY8Bi4T7qDVMWg==", "dependencies": { - "@sentry-internal/browser-utils": "8.9.1", - "@sentry-internal/feedback": "8.9.1", - "@sentry-internal/replay": "8.9.1", - "@sentry-internal/replay-canvas": "8.9.1", - "@sentry/core": "8.9.1", - "@sentry/types": "8.9.1", - "@sentry/utils": "8.9.1" + "@sentry-internal/browser-utils": "8.9.2", + "@sentry-internal/feedback": "8.9.2", + "@sentry-internal/replay": "8.9.2", + "@sentry-internal/replay-canvas": "8.9.2", + "@sentry/core": "8.9.2", + "@sentry/types": "8.9.2", + "@sentry/utils": "8.9.2" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/core": { - "version": "8.9.1", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.9.1.tgz", - "integrity": "sha512-7Q1yB4ZMJoNT6LsBVx1EyTsVemqYuKZoyEDEzZOYZsa/W438oF7M6g0JqK6TJG8JIZN50Lj5MrJOs6FAu51CCw==", + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.9.2.tgz", + "integrity": "sha512-ixm8NISFlPlEo3FjSaqmq4nnd13BRHoafwJ5MG+okCz6BKGZ1SexEggP42/QpGvDprUUHnfncG6WUMgcarr1zA==", "dependencies": { - "@sentry/types": "8.9.1", - "@sentry/utils": "8.9.1" + "@sentry/types": "8.9.2", + "@sentry/utils": "8.9.2" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/types": { - "version": "8.9.1", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.9.1.tgz", - "integrity": "sha512-V+TkaDVhakH/oW6f1KQiRbvHcczQLEzdwlH2lAP5Flh+wESS5VaSPqj+esLg53GFF8q0tw7QH1tSUGXWeGoJ5g==", + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.9.2.tgz", + "integrity": "sha512-+LFOyQGl+zk5SZRGZD2MEURf7i5RHgP/mt3s85Rza+vz8M211WJ0YsjkIGUJFSY842nged5QLx4JysLaBlLymg==", "engines": { "node": ">=14.18" } }, "node_modules/@sentry/utils": { - "version": "8.9.1", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.9.1.tgz", - "integrity": "sha512-9TROyW7PbyokwVO41wIhQRenhW+kPg2ws2nzz21aFbLCrwXvF2nNsZ67roeXOiu9n2Oy/O1yEksPOcT4zFcesQ==", + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.9.2.tgz", + "integrity": "sha512-A4srR9mEBFdVXwSEKjQ94msUbVkMr8JeFiEj9ouOFORw/Y/ux/WV2bWVD/ZI9wq0TcTNK8L1wBgU8UMS5lIq3A==", "dependencies": { - "@sentry/types": "8.9.1" + "@sentry/types": "8.9.2" }, "engines": { "node": ">=14.18" @@ -4754,9 +4754,9 @@ } }, "node_modules/@spotlightjs/overlay": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@spotlightjs/overlay/-/overlay-1.8.3.tgz", - "integrity": "sha512-6b5tBspOOEd6Gj0l4xgdUwR4Ydn2dNX9lqJ/WSzIu1lqkI96w2lqf69IGzEo6jb9aPtfTtu8nx5K2SD6JXH2SA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@spotlightjs/overlay/-/overlay-2.0.0.tgz", + "integrity": "sha512-6P2Kwko9NPxat+Z5/QxWHr9+PLZtbXb/Bi2bdFmKc1yWTBVTJcbvntU9Xy+Qd8L4tFFFfqSORiXg7L4Bk6z4Jw==", "dev": true }, "node_modules/@spotlightjs/sidecar": { @@ -4770,12 +4770,12 @@ } }, "node_modules/@spotlightjs/spotlight": { - "version": "1.2.17", - "resolved": "https://registry.npmjs.org/@spotlightjs/spotlight/-/spotlight-1.2.17.tgz", - "integrity": "sha512-91qtnLspMl2e1olBTeWoZcupwwTzQs8clQgTF8wv2Ib18zce7YYLvWpnDhNIVNQlbKIjGhYum6UY/KCfUCXQYg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@spotlightjs/spotlight/-/spotlight-2.0.0.tgz", + "integrity": "sha512-V06WN7DxaihaAXp815DGdMINZEA2+Te3eeYdXJpXfJKiv57e8rwyyD7dqtQsTiTlbcCqXwNgaZp4fwTyuOyJCA==", "dev": true, "dependencies": { - "@spotlightjs/overlay": "1.8.3", + "@spotlightjs/overlay": "2.0.0", "@spotlightjs/sidecar": "1.4.0" }, "bin": { diff --git a/web/package.json b/web/package.json index b28a6f03f1ab..cfb9568aec33 100644 --- a/web/package.json +++ b/web/package.json @@ -46,7 +46,7 @@ "@open-wc/lit-helpers": "^0.7.0", "@patternfly/elements": "^3.0.1", "@patternfly/patternfly": "^4.224.2", - "@sentry/browser": "^8.9.1", + "@sentry/browser": "^8.9.2", "@webcomponents/webcomponentsjs": "^2.8.0", "base64-js": "^1.5.1", "chart.js": "^4.4.3", @@ -80,7 +80,7 @@ "@jeysal/storybook-addon-css-user-preferences": "^0.2.0", "@lit/localize-tools": "^0.7.2", "@rollup/plugin-replace": "^5.0.7", - "@spotlightjs/spotlight": "^1.2.17", + "@spotlightjs/spotlight": "^2.0.0", "@storybook/addon-essentials": "^8.1.9", "@storybook/addon-links": "^8.1.9", "@storybook/api": "^7.6.17", From ae86184511089cd817b09f3bac5dca30adf65d6a Mon Sep 17 00:00:00 2001 From: Marc 'risson' Schmitt Date: Fri, 14 Jun 2024 12:04:00 +0200 Subject: [PATCH 07/15] root: add configuration option to enable fips (#10088) --- authentik/lib/default.yml | 3 +++ lifecycle/gunicorn.conf.py | 5 +---- manage.py | 6 ++---- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/authentik/lib/default.yml b/authentik/lib/default.yml index 183ad8341c30..5ca7a83756ff 100644 --- a/authentik/lib/default.yml +++ b/authentik/lib/default.yml @@ -116,6 +116,9 @@ events: context_processors: geoip: "/geoip/GeoLite2-City.mmdb" asn: "/geoip/GeoLite2-ASN.mmdb" +compliance: + fips: + enabled: false cert_discovery_dir: /certs diff --git a/lifecycle/gunicorn.conf.py b/lifecycle/gunicorn.conf.py index c1586806972b..a3ffe7489a53 100644 --- a/lifecycle/gunicorn.conf.py +++ b/lifecycle/gunicorn.conf.py @@ -7,7 +7,6 @@ from tempfile import gettempdir from typing import TYPE_CHECKING -from cryptography.exceptions import InternalError from cryptography.hazmat.backends.openssl.backend import backend from defusedxml import defuse_stdlib from prometheus_client.values import MultiProcessValue @@ -30,10 +29,8 @@ defuse_stdlib() -try: +if CONFIG.get_bool("compliance.fips.enabled", False): backend._enable_fips() -except InternalError: - pass wait_for_db() diff --git a/manage.py b/manage.py index 4c5120225a8a..09d065e91929 100755 --- a/manage.py +++ b/manage.py @@ -4,7 +4,7 @@ import sys import warnings -from cryptography.exceptions import InternalError +from authentik.lib.config import CONFIG from cryptography.hazmat.backends.openssl.backend import backend from defusedxml import defuse_stdlib from django.utils.autoreload import DJANGO_AUTORELOAD_ENV @@ -24,10 +24,8 @@ defuse_stdlib() -try: +if CONFIG.get_bool("compliance.fips.enabled", False): backend._enable_fips() -except InternalError: - pass if __name__ == "__main__": From b8cbdcae2281323c50c24d05781ab9d03ea27ba7 Mon Sep 17 00:00:00 2001 From: Marc 'risson' Schmitt Date: Fri, 14 Jun 2024 12:52:24 +0200 Subject: [PATCH 08/15] admin: system api: do not show FIPS status if no valid license (#10091) * admin: system api: do not show FIPS status if no valid license Signed-off-by: Marc 'risson' Schmitt * also for outposts Signed-off-by: Marc 'risson' Schmitt * black Signed-off-by: Marc 'risson' Schmitt --------- Signed-off-by: Marc 'risson' Schmitt --- authentik/admin/api/system.py | 7 +++++-- authentik/outposts/api/outposts.py | 11 +++++++++-- schema.yml | 3 +++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/authentik/admin/api/system.py b/authentik/admin/api/system.py index b0e7f074fdca..5b2e91ce53c4 100644 --- a/authentik/admin/api/system.py +++ b/authentik/admin/api/system.py @@ -16,6 +16,7 @@ from authentik import get_full_version from authentik.core.api.utils import PassiveSerializer +from authentik.enterprise.license import LicenseKey from authentik.lib.config import CONFIG from authentik.lib.utils.reflection import get_env from authentik.outposts.apps import MANAGED_OUTPOST @@ -32,7 +33,7 @@ class RuntimeDict(TypedDict): platform: str uname: str openssl_version: str - openssl_fips_mode: bool + openssl_fips_mode: bool | None authentik_version: str @@ -71,7 +72,9 @@ def get_runtime(self, request: Request) -> RuntimeDict: "architecture": platform.machine(), "authentik_version": get_full_version(), "environment": get_env(), - "openssl_fips_enabled": backend._fips_enabled, + "openssl_fips_enabled": ( + backend._fips_enabled if LicenseKey.get_total().is_valid() else None + ), "openssl_version": OPENSSL_VERSION, "platform": platform.platform(), "python_version": python_version, diff --git a/authentik/outposts/api/outposts.py b/authentik/outposts/api/outposts.py index f5bde93c778d..f3e697b090ef 100644 --- a/authentik/outposts/api/outposts.py +++ b/authentik/outposts/api/outposts.py @@ -6,7 +6,7 @@ from django_filters.filterset import FilterSet from drf_spectacular.utils import extend_schema from rest_framework.decorators import action -from rest_framework.fields import BooleanField, CharField, DateTimeField +from rest_framework.fields import BooleanField, CharField, DateTimeField, SerializerMethodField from rest_framework.relations import PrimaryKeyRelatedField from rest_framework.request import Request from rest_framework.response import Response @@ -18,6 +18,7 @@ from authentik.core.api.used_by import UsedByMixin from authentik.core.api.utils import JSONDictField, PassiveSerializer from authentik.core.models import Provider +from authentik.enterprise.license import LicenseKey from authentik.enterprise.providers.rac.models import RACProvider from authentik.outposts.api.service_connections import ServiceConnectionSerializer from authentik.outposts.apps import MANAGED_OUTPOST, MANAGED_OUTPOST_NAME @@ -120,7 +121,7 @@ class OutpostHealthSerializer(PassiveSerializer): golang_version = CharField(read_only=True) openssl_enabled = BooleanField(read_only=True) openssl_version = CharField(read_only=True) - fips_enabled = BooleanField(read_only=True) + fips_enabled = SerializerMethodField() version_should = CharField(read_only=True) version_outdated = BooleanField(read_only=True) @@ -130,6 +131,12 @@ class OutpostHealthSerializer(PassiveSerializer): hostname = CharField(read_only=True, required=False) + def get_fips_enabled(self, obj: dict) -> bool | None: + """Get FIPS enabled""" + if not LicenseKey.get_total().is_valid(): + return None + return obj["fips_enabled"] + class OutpostFilter(FilterSet): """Filter for Outposts""" diff --git a/schema.yml b/schema.yml index 822318ad11f9..d356a2129e9a 100644 --- a/schema.yml +++ b/schema.yml @@ -39547,6 +39547,8 @@ components: readOnly: true fips_enabled: type: boolean + nullable: true + description: Get FIPS enabled readOnly: true version_should: type: string @@ -47406,6 +47408,7 @@ components: type: string openssl_fips_mode: type: boolean + nullable: true authentik_version: type: string required: From a5ab8a618ef9a006425d4a2d67e57f6f653c5ce5 Mon Sep 17 00:00:00 2001 From: "authentik-automation[bot]" <135050075+authentik-automation[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 11:15:08 +0000 Subject: [PATCH 09/15] web: bump API Client version (#10107) Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> 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 f19249b1e6f1..7d2000c1afc9 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.7", "@fortawesome/fontawesome-free": "^6.5.2", - "@goauthentik/api": "^2024.4.2-1717645682", + "@goauthentik/api": "^2024.4.2-1718362364", "@lit-labs/task": "^3.1.0", "@lit/context": "^1.1.2", "@lit/localize": "^0.12.1", @@ -2977,9 +2977,9 @@ } }, "node_modules/@goauthentik/api": { - "version": "2024.4.2-1717645682", - "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2024.4.2-1717645682.tgz", - "integrity": "sha512-fYDZANTDDmxhhqKapNeV4+exqzorlEIEgjjp96OwRzpMOff7p5HAJ1pjwLaVbs0cxP4cM0N8w21O+s0fXCIePw==" + "version": "2024.4.2-1718362364", + "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2024.4.2-1718362364.tgz", + "integrity": "sha512-Ds1Xm71/8zs1TLDPc/tmOL+xqZ0BbSAV24xMOzinSNQQB3cEqOdyJHFH27TEt86RgYM37d7xmedCZXJU6Oy/vg==" }, "node_modules/@hcaptcha/types": { "version": "1.0.3", diff --git a/web/package.json b/web/package.json index cfb9568aec33..4e3bd503f1e0 100644 --- a/web/package.json +++ b/web/package.json @@ -38,7 +38,7 @@ "@codemirror/theme-one-dark": "^6.1.2", "@formatjs/intl-listformat": "^7.5.7", "@fortawesome/fontawesome-free": "^6.5.2", - "@goauthentik/api": "^2024.4.2-1717645682", + "@goauthentik/api": "^2024.4.2-1718362364", "@lit-labs/task": "^3.1.0", "@lit/context": "^1.1.2", "@lit/localize": "^0.12.1", From eb08214f0e93d7f9c00b5359a1e461f50a87a6a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 13:21:57 +0200 Subject: [PATCH 10/15] core: bump github.com/getsentry/sentry-go from 0.28.0 to 0.28.1 (#10095) 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 0f6e35a8fea8..3a2864567a7d 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.22.2 require ( beryju.io/ldap v0.1.0 github.com/coreos/go-oidc v2.2.1+incompatible - github.com/getsentry/sentry-go v0.28.0 + github.com/getsentry/sentry-go v0.28.1 github.com/go-http-utils/etag v0.0.0-20161124023236-513ea8f21eb1 github.com/go-ldap/ldap/v3 v3.4.8 github.com/go-openapi/runtime v0.28.0 diff --git a/go.sum b/go.sum index 60171f728876..eb8647a959c2 100644 --- a/go.sum +++ b/go.sum @@ -69,8 +69,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/getsentry/sentry-go v0.28.0 h1:7Rqx9M3ythTKy2J6uZLHmc8Sz9OGgIlseuO1iBX/s0M= -github.com/getsentry/sentry-go v0.28.0/go.mod h1:1fQZ+7l7eeJ3wYi82q5Hg8GqAPgefRq+FP/QhafYVgg= +github.com/getsentry/sentry-go v0.28.1 h1:zzaSm/vHmGllRM6Tpx1492r0YDzauArdBfkJRtY6P5k= +github.com/getsentry/sentry-go v0.28.1/go.mod h1:1fQZ+7l7eeJ3wYi82q5Hg8GqAPgefRq+FP/QhafYVgg= github.com/go-asn1-ber/asn1-ber v1.5.5 h1:MNHlNMBDgEKD4TcKr36vQN68BA00aDfjIt3/bD50WnA= github.com/go-asn1-ber/asn1-ber v1.5.5/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= From 31e94a2814324f769d1c037d114d6a430aa3918e Mon Sep 17 00:00:00 2001 From: Ken Sternberg <133134217+kensternberg-authentik@users.noreply.github.com> Date: Fri, 14 Jun 2024 04:38:48 -0700 Subject: [PATCH 11/15] web: Add enterprise / FIPS notification to the AdminOverviewPage (#10090) Co-authored-by: Marc 'risson' Schmitt --- web/package.json | 2 +- .../admin/admin-overview/AdminOverviewPage.ts | 139 ++++++++++-------- .../admin-overview/cards/FipsStatusCard.ts | 56 +++++++ 3 files changed, 137 insertions(+), 60 deletions(-) create mode 100644 web/src/admin/admin-overview/cards/FipsStatusCard.ts diff --git a/web/package.json b/web/package.json index 4e3bd503f1e0..51716ce9d015 100644 --- a/web/package.json +++ b/web/package.json @@ -15,7 +15,7 @@ "build-proxy": "run-s build-locales esbuild:build-proxy", "watch": "run-s build-locales esbuild:watch", "lint": "cross-env NODE_OPTIONS='--max_old_space_size=65536' eslint . --max-warnings 0 --fix", - "lint:precommit": "cross-env NODE_OPTIONS='--max_old_space_size=65536' node scripts/eslint-precommit.mjs", + "lint:precommit": "bun scripts/eslint-precommit.mjs", "lint:spelling": "node scripts/check-spelling.mjs", "lit-analyse": "lit-analyzer src", "precommit": "npm-run-all --parallel tsc lit-analyse lint:spelling --sequential lint:precommit prettier", diff --git a/web/src/admin/admin-overview/AdminOverviewPage.ts b/web/src/admin/admin-overview/AdminOverviewPage.ts index d24d17814dbb..f361d11ac10b 100644 --- a/web/src/admin/admin-overview/AdminOverviewPage.ts +++ b/web/src/admin/admin-overview/AdminOverviewPage.ts @@ -1,5 +1,6 @@ import "@goauthentik/admin/admin-overview/TopApplicationsTable"; import "@goauthentik/admin/admin-overview/cards/AdminStatusCard"; +import "@goauthentik/admin/admin-overview/cards/FipsStatusCard"; import "@goauthentik/admin/admin-overview/cards/RecentEventsCard"; import "@goauthentik/admin/admin-overview/cards/SystemStatusCard"; import "@goauthentik/admin/admin-overview/cards/VersionStatusCard"; @@ -10,13 +11,17 @@ import "@goauthentik/admin/admin-overview/charts/SyncStatusChart"; import { VERSION } from "@goauthentik/common/constants"; import { me } from "@goauthentik/common/users"; import { AKElement } from "@goauthentik/elements/Base"; +import { WithLicenseSummary } from "@goauthentik/elements/Interface/licenseSummaryProvider.js"; import "@goauthentik/elements/PageHeader"; import "@goauthentik/elements/cards/AggregatePromiseCard"; import { paramURL } from "@goauthentik/elements/router/RouterOutlet"; import { msg, str } from "@lit/localize"; -import { CSSResult, TemplateResult, css, html } from "lit"; +import { CSSResult, TemplateResult, css, html, nothing } from "lit"; import { customElement, state } from "lit/decorators.js"; +import { classMap } from "lit/directives/class-map.js"; +import { map } from "lit/directives/map.js"; +import { when } from "lit/directives/when.js"; import PFContent from "@patternfly/patternfly/components/Content/content.css"; import PFDivider from "@patternfly/patternfly/components/Divider/divider.css"; @@ -33,8 +38,12 @@ export function versionFamily(): string { return parts.join("."); } +const AdminOverviewBase = WithLicenseSummary(AKElement); + +type Renderer = () => TemplateResult | typeof nothing; + @customElement("ak-admin-overview") -export class AdminOverviewPage extends AKElement { +export class AdminOverviewPage extends AdminOverviewBase { static get styles(): CSSResult[] { return [ PFBase, @@ -73,6 +82,7 @@ export class AdminOverviewPage extends AKElement { render(): TemplateResult { const name = this.user?.user.name ?? this.user?.user.username; + return html` ${msg(str`Welcome, ${name}.`)} @@ -89,48 +99,7 @@ export class AdminOverviewPage extends AKElement { .isCenter=${false} > @@ -153,21 +122,7 @@ export class AdminOverviewPage extends AKElement {

-
- -
-
- -
-
- -
+ ${this.renderCards()}
@@ -201,4 +156,70 @@ export class AdminOverviewPage extends AKElement {
`; } + + renderCards() { + const isEnterprise = this.hasEnterpriseLicense; + const classes = { + "card-container": true, + "pf-l-grid__item": true, + "pf-m-6-col": true, + "pf-m-4-col-on-md": !isEnterprise, + "pf-m-4-col-on-xl": !isEnterprise, + "pf-m-3-col-on-md": isEnterprise, + "pf-m-3-col-on-xl": isEnterprise, + }; + + return html`
+ +
+
+ +
+
+ +
+ ${isEnterprise + ? html`
+ +
` + : nothing} `; + } + + renderActions() { + const release = `${versionFamily()}#fixed-in-${VERSION.replaceAll(".", "")}`; + + const quickActions: [string, string][] = [ + [msg("Create a new application"), paramURL("/core/applications", { createForm: true })], + [msg("Check the logs"), paramURL("/events/log")], + [msg("Explore integrations"), "https://goauthentik.io/integrations/"], + [msg("Manage users"), paramURL("/identity/users")], + [msg("Check the release notes"), `https://goauthentik.io/docs/releases/${release}`], + ]; + + const action = ([label, url]: [string, string]) => { + const isExternal = url.startsWith("https://"); + const ex = (truecase: Renderer, falsecase: Renderer) => + when(isExternal, truecase, falsecase); + + const content = html`${label}${ex( + () => html``, + () => nothing, + )}`; + + return html`
  • + ${ex( + () => html`${content}`, + () => html`${content}`, + )} +
  • `; + }; + + return html`${map(quickActions, action)}`; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ak-admin-overview": AdminOverviewPage; + } } diff --git a/web/src/admin/admin-overview/cards/FipsStatusCard.ts b/web/src/admin/admin-overview/cards/FipsStatusCard.ts new file mode 100644 index 000000000000..5f9e4168bac3 --- /dev/null +++ b/web/src/admin/admin-overview/cards/FipsStatusCard.ts @@ -0,0 +1,56 @@ +import { + AdminStatus, + AdminStatusCard, +} from "@goauthentik/admin/admin-overview/cards/AdminStatusCard"; +import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; + +import { msg } from "@lit/localize"; +import { TemplateResult, html } from "lit"; +import { customElement, state } from "lit/decorators.js"; + +import { AdminApi, SystemInfo } from "@goauthentik/api"; + +type StatusContent = { icon: string; message: TemplateResult }; + +@customElement("ak-admin-fips-status-system") +export class FipsStatusCard extends AdminStatusCard { + icon = "pf-icon pf-icon-server"; + + @state() + statusSummary?: string; + + async getPrimaryValue(): Promise { + return await new AdminApi(DEFAULT_CONFIG).adminSystemRetrieve(); + } + + setStatus(summary: string, content: StatusContent): Promise { + this.statusSummary = summary; + return Promise.resolve(content); + } + + getStatus(value: SystemInfo): Promise { + return value.runtime.opensslFipsMode + ? this.setStatus(msg("OK"), { + icon: "fa fa-check-circle pf-m-success", + message: html`${msg("FIPS compliance: passing")}`, + }) + : this.setStatus(msg("Unverified"), { + icon: "fa fa-info-circle pf-m-warning", + message: html`${msg("FIPS compliance: unverified")}`, + }); + } + + renderHeader(): TemplateResult { + return html`${msg("FIPS Status")}`; + } + + renderValue(): TemplateResult { + return html`${this.statusSummary}`; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ak-admin-fips-status-system": FipsStatusCard; + } +} From dc332ec7b0c92de6f1c55feba3c236b8778c04bb Mon Sep 17 00:00:00 2001 From: "authentik-automation[bot]" <135050075+authentik-automation[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 12:11:55 +0000 Subject: [PATCH 12/15] core, web: update translations (#10108) Co-authored-by: rissson <18313093+rissson@users.noreply.github.com> --- web/xliff/de.xlf | 12 ++++++++++++ web/xliff/en.xlf | 12 ++++++++++++ web/xliff/es.xlf | 12 ++++++++++++ web/xliff/fr.xlf | 12 ++++++++++++ web/xliff/ko.xlf | 12 ++++++++++++ web/xliff/nl.xlf | 12 ++++++++++++ web/xliff/pl.xlf | 12 ++++++++++++ web/xliff/pseudo-LOCALE.xlf | 12 ++++++++++++ web/xliff/tr.xlf | 12 ++++++++++++ web/xliff/zh-CN.xlf | 12 ++++++++++++ web/xliff/zh-Hans.xlf | 12 ++++++++++++ web/xliff/zh-Hant.xlf | 12 ++++++++++++ web/xliff/zh_TW.xlf | 12 ++++++++++++ 13 files changed, 156 insertions(+) diff --git a/web/xliff/de.xlf b/web/xliff/de.xlf index bfab48518367..81cbcff507c2 100644 --- a/web/xliff/de.xlf +++ b/web/xliff/de.xlf @@ -6677,6 +6677,18 @@ Bindings to groups/users are checked against the user of the event. SCIM User(s) + + + FIPS compliance: passing + + + Unverified + + + FIPS compliance: unverified + + + FIPS Status diff --git a/web/xliff/en.xlf b/web/xliff/en.xlf index af92462cf42a..69272fe4287a 100644 --- a/web/xliff/en.xlf +++ b/web/xliff/en.xlf @@ -6943,6 +6943,18 @@ Bindings to groups/users are checked against the user of the event. SCIM User(s) + + + FIPS compliance: passing + + + Unverified + + + FIPS compliance: unverified + + + FIPS Status diff --git a/web/xliff/es.xlf b/web/xliff/es.xlf index e15d03257b81..9b3bf4c055fa 100644 --- a/web/xliff/es.xlf +++ b/web/xliff/es.xlf @@ -6594,6 +6594,18 @@ Bindings to groups/users are checked against the user of the event. SCIM User(s) + + + FIPS compliance: passing + + + Unverified + + + FIPS compliance: unverified + + + FIPS Status diff --git a/web/xliff/fr.xlf b/web/xliff/fr.xlf index 3fb7f34c82a0..10ba83019e1d 100644 --- a/web/xliff/fr.xlf +++ b/web/xliff/fr.xlf @@ -8789,6 +8789,18 @@ Les liaisons avec les groupes/utilisateurs sont vérifiées par rapport à l'uti SCIM User(s) Utilisateur(s) du fournisseur SCIM + + + FIPS compliance: passing + + + Unverified + + + FIPS compliance: unverified + + + FIPS Status diff --git a/web/xliff/ko.xlf b/web/xliff/ko.xlf index 6de290c03bd1..b4540585217a 100644 --- a/web/xliff/ko.xlf +++ b/web/xliff/ko.xlf @@ -8523,6 +8523,18 @@ Bindings to groups/users are checked against the user of the event. SCIM User(s) + + + FIPS compliance: passing + + + Unverified + + + FIPS compliance: unverified + + + FIPS Status diff --git a/web/xliff/nl.xlf b/web/xliff/nl.xlf index 1eb73306a190..1237462609b9 100644 --- a/web/xliff/nl.xlf +++ b/web/xliff/nl.xlf @@ -8367,6 +8367,18 @@ Bindingen naar groepen/gebruikers worden gecontroleerd tegen de gebruiker van de SCIM User(s) + + + FIPS compliance: passing + + + Unverified + + + FIPS compliance: unverified + + + FIPS Status diff --git a/web/xliff/pl.xlf b/web/xliff/pl.xlf index b43baa31a3e0..4243719e4375 100644 --- a/web/xliff/pl.xlf +++ b/web/xliff/pl.xlf @@ -8793,6 +8793,18 @@ PowiÄ…zania z grupami/użytkownikami sÄ… sprawdzane wzglÄ™dem użytkownika zdarz SCIM User(s) Użytkowni(k/cy) SCIM + + + FIPS compliance: passing + + + Unverified + + + FIPS compliance: unverified + + + FIPS Status diff --git a/web/xliff/pseudo-LOCALE.xlf b/web/xliff/pseudo-LOCALE.xlf index a0bc15978fb4..881dfcca0936 100644 --- a/web/xliff/pseudo-LOCALE.xlf +++ b/web/xliff/pseudo-LOCALE.xlf @@ -8638,4 +8638,16 @@ Bindings to groups/users are checked against the user of the event. SCIM User(s) + + FIPS compliance: passing + + + Unverified + + + FIPS compliance: unverified + + + FIPS Status + diff --git a/web/xliff/tr.xlf b/web/xliff/tr.xlf index bf2b990bfb79..8dbe1dd14a0d 100644 --- a/web/xliff/tr.xlf +++ b/web/xliff/tr.xlf @@ -6587,6 +6587,18 @@ Bindings to groups/users are checked against the user of the event. SCIM User(s) + + + FIPS compliance: passing + + + Unverified + + + FIPS compliance: unverified + + + FIPS Status diff --git a/web/xliff/zh-CN.xlf b/web/xliff/zh-CN.xlf index f14b19eb7bdb..50d09f655c32 100644 --- a/web/xliff/zh-CN.xlf +++ b/web/xliff/zh-CN.xlf @@ -5509,6 +5509,18 @@ Bindings to groups/users are checked against the user of the event. SCIM User(s) + + FIPS compliance: passing + + + Unverified + + + FIPS compliance: unverified + + + FIPS Status + diff --git a/web/xliff/zh-Hans.xlf b/web/xliff/zh-Hans.xlf index 610d8aee1b1b..fe5b172b420b 100644 --- a/web/xliff/zh-Hans.xlf +++ b/web/xliff/zh-Hans.xlf @@ -8791,6 +8791,18 @@ Bindings to groups/users are checked against the user of the event. SCIM User(s) SCIM 用户 + + + FIPS compliance: passing + + + Unverified + + + FIPS compliance: unverified + + + FIPS Status diff --git a/web/xliff/zh-Hant.xlf b/web/xliff/zh-Hant.xlf index 07d5cb30932e..7ecc3bb331af 100644 --- a/web/xliff/zh-Hant.xlf +++ b/web/xliff/zh-Hant.xlf @@ -6635,6 +6635,18 @@ Bindings to groups/users are checked against the user of the event. SCIM User(s) + + + FIPS compliance: passing + + + Unverified + + + FIPS compliance: unverified + + + FIPS Status diff --git a/web/xliff/zh_TW.xlf b/web/xliff/zh_TW.xlf index 2aac04938db9..9475019839fc 100644 --- a/web/xliff/zh_TW.xlf +++ b/web/xliff/zh_TW.xlf @@ -8484,6 +8484,18 @@ Bindings to groups/users are checked against the user of the event. SCIM User(s) + + + FIPS compliance: passing + + + Unverified + + + FIPS compliance: unverified + + + FIPS Status From 6d7bebbcc372bc7fcdbd2837924e4331f9d8219e Mon Sep 17 00:00:00 2001 From: Jens L Date: Fri, 14 Jun 2024 22:34:33 +0900 Subject: [PATCH 13/15] providers/enterprise: import user/group data when manually linking objects (#10089) * providers/enterprise: import user/group data when manually linking objects Signed-off-by: Jens Langhammer * select immutable ID Signed-off-by: Jens Langhammer * generalize and implement for all Signed-off-by: Jens Langhammer * fix Signed-off-by: Jens Langhammer * fix more Signed-off-by: Jens Langhammer --------- Signed-off-by: Jens Langhammer --- .../providers/google_workspace/api/groups.py | 2 + .../providers/google_workspace/api/users.py | 2 + .../google_workspace/clients/groups.py | 4 + .../google_workspace/clients/users.py | 4 + .../providers/google_workspace/models.py | 111 +++++++++--------- .../providers/microsoft_entra/api/groups.py | 2 + .../providers/microsoft_entra/api/users.py | 2 + .../microsoft_entra/clients/groups.py | 4 + .../microsoft_entra/clients/users.py | 47 +++++++- .../providers/microsoft_entra/models.py | 111 +++++++++--------- .../microsoft_entra/tests/test_users.py | 49 +++++++- authentik/lib/sync/outgoing/api.py | 15 +++ authentik/lib/sync/outgoing/base.py | 5 + authentik/providers/scim/api/groups.py | 2 + authentik/providers/scim/api/users.py | 2 + authentik/providers/scim/models.py | 90 +++++++------- 16 files changed, 289 insertions(+), 163 deletions(-) diff --git a/authentik/enterprise/providers/google_workspace/api/groups.py b/authentik/enterprise/providers/google_workspace/api/groups.py index db54b4820fa5..cd8799df8e95 100644 --- a/authentik/enterprise/providers/google_workspace/api/groups.py +++ b/authentik/enterprise/providers/google_workspace/api/groups.py @@ -7,6 +7,7 @@ from authentik.core.api.used_by import UsedByMixin from authentik.core.api.users import UserGroupSerializer from authentik.enterprise.providers.google_workspace.models import GoogleWorkspaceProviderGroup +from authentik.lib.sync.outgoing.api import OutgoingSyncConnectionCreateMixin class GoogleWorkspaceProviderGroupSerializer(ModelSerializer): @@ -30,6 +31,7 @@ class Meta: class GoogleWorkspaceProviderGroupViewSet( mixins.CreateModelMixin, + OutgoingSyncConnectionCreateMixin, mixins.RetrieveModelMixin, mixins.DestroyModelMixin, UsedByMixin, diff --git a/authentik/enterprise/providers/google_workspace/api/users.py b/authentik/enterprise/providers/google_workspace/api/users.py index de794e135b81..9b8926209e58 100644 --- a/authentik/enterprise/providers/google_workspace/api/users.py +++ b/authentik/enterprise/providers/google_workspace/api/users.py @@ -7,6 +7,7 @@ from authentik.core.api.groups import GroupMemberSerializer from authentik.core.api.used_by import UsedByMixin from authentik.enterprise.providers.google_workspace.models import GoogleWorkspaceProviderUser +from authentik.lib.sync.outgoing.api import OutgoingSyncConnectionCreateMixin class GoogleWorkspaceProviderUserSerializer(ModelSerializer): @@ -30,6 +31,7 @@ class Meta: class GoogleWorkspaceProviderUserViewSet( mixins.CreateModelMixin, + OutgoingSyncConnectionCreateMixin, mixins.RetrieveModelMixin, mixins.DestroyModelMixin, UsedByMixin, diff --git a/authentik/enterprise/providers/google_workspace/clients/groups.py b/authentik/enterprise/providers/google_workspace/clients/groups.py index 7cb841dcc879..de85d96c59c1 100644 --- a/authentik/enterprise/providers/google_workspace/clients/groups.py +++ b/authentik/enterprise/providers/google_workspace/clients/groups.py @@ -214,3 +214,7 @@ def _discover_single_group(self, group: dict): google_id=google_id, attributes=group, ) + + def update_single_attribute(self, connection: GoogleWorkspaceProviderUser): + group = self.directory_service.groups().get(connection.google_id) + connection.attributes = group diff --git a/authentik/enterprise/providers/google_workspace/clients/users.py b/authentik/enterprise/providers/google_workspace/clients/users.py index b8316f476bbc..3c6206a4ec2c 100644 --- a/authentik/enterprise/providers/google_workspace/clients/users.py +++ b/authentik/enterprise/providers/google_workspace/clients/users.py @@ -119,3 +119,7 @@ def _discover_single_user(self, user: dict): google_id=email, attributes=user, ) + + def update_single_attribute(self, connection: GoogleWorkspaceProviderUser): + user = self.directory_service.users().get(connection.google_id) + connection.attributes = user diff --git a/authentik/enterprise/providers/google_workspace/models.py b/authentik/enterprise/providers/google_workspace/models.py index 9628da2fb2b9..e3396a2e71ad 100644 --- a/authentik/enterprise/providers/google_workspace/models.py +++ b/authentik/enterprise/providers/google_workspace/models.py @@ -31,6 +31,58 @@ def default_scopes() -> list[str]: ] +class GoogleWorkspaceProviderUser(SerializerModel): + """Mapping of a user and provider to a Google user ID""" + + id = models.UUIDField(primary_key=True, editable=False, default=uuid4) + google_id = models.TextField() + user = models.ForeignKey(User, on_delete=models.CASCADE) + provider = models.ForeignKey("GoogleWorkspaceProvider", on_delete=models.CASCADE) + attributes = models.JSONField(default=dict) + + @property + def serializer(self) -> type[Serializer]: + from authentik.enterprise.providers.google_workspace.api.users import ( + GoogleWorkspaceProviderUserSerializer, + ) + + return GoogleWorkspaceProviderUserSerializer + + class Meta: + verbose_name = _("Google Workspace Provider User") + verbose_name_plural = _("Google Workspace Provider Users") + unique_together = (("google_id", "user", "provider"),) + + def __str__(self) -> str: + return f"Google Workspace Provider User {self.user_id} to {self.provider_id}" + + +class GoogleWorkspaceProviderGroup(SerializerModel): + """Mapping of a group and provider to a Google group ID""" + + id = models.UUIDField(primary_key=True, editable=False, default=uuid4) + google_id = models.TextField() + group = models.ForeignKey(Group, on_delete=models.CASCADE) + provider = models.ForeignKey("GoogleWorkspaceProvider", on_delete=models.CASCADE) + attributes = models.JSONField(default=dict) + + @property + def serializer(self) -> type[Serializer]: + from authentik.enterprise.providers.google_workspace.api.groups import ( + GoogleWorkspaceProviderGroupSerializer, + ) + + return GoogleWorkspaceProviderGroupSerializer + + class Meta: + verbose_name = _("Google Workspace Provider Group") + verbose_name_plural = _("Google Workspace Provider Groups") + unique_together = (("google_id", "group", "provider"),) + + def __str__(self) -> str: + return f"Google Workspace Provider Group {self.group_id} to {self.provider_id}" + + class GoogleWorkspaceProvider(OutgoingSyncProvider, BackchannelProvider): """Sync users from authentik into Google Workspace.""" @@ -59,15 +111,16 @@ class GoogleWorkspaceProvider(OutgoingSyncProvider, BackchannelProvider): ) def client_for_model( - self, model: type[User | Group] + self, + model: type[User | Group | GoogleWorkspaceProviderUser | GoogleWorkspaceProviderGroup], ) -> BaseOutgoingSyncClient[User | Group, Any, Any, Self]: - if issubclass(model, User): + if issubclass(model, User | GoogleWorkspaceProviderUser): from authentik.enterprise.providers.google_workspace.clients.users import ( GoogleWorkspaceUserClient, ) return GoogleWorkspaceUserClient(self) - if issubclass(model, Group): + if issubclass(model, Group | GoogleWorkspaceProviderGroup): from authentik.enterprise.providers.google_workspace.clients.groups import ( GoogleWorkspaceGroupClient, ) @@ -144,55 +197,3 @@ def __str__(self): class Meta: verbose_name = _("Google Workspace Provider Mapping") verbose_name_plural = _("Google Workspace Provider Mappings") - - -class GoogleWorkspaceProviderUser(SerializerModel): - """Mapping of a user and provider to a Google user ID""" - - id = models.UUIDField(primary_key=True, editable=False, default=uuid4) - google_id = models.TextField() - user = models.ForeignKey(User, on_delete=models.CASCADE) - provider = models.ForeignKey(GoogleWorkspaceProvider, on_delete=models.CASCADE) - attributes = models.JSONField(default=dict) - - @property - def serializer(self) -> type[Serializer]: - from authentik.enterprise.providers.google_workspace.api.users import ( - GoogleWorkspaceProviderUserSerializer, - ) - - return GoogleWorkspaceProviderUserSerializer - - class Meta: - verbose_name = _("Google Workspace Provider User") - verbose_name_plural = _("Google Workspace Provider Users") - unique_together = (("google_id", "user", "provider"),) - - def __str__(self) -> str: - return f"Google Workspace Provider User {self.user_id} to {self.provider_id}" - - -class GoogleWorkspaceProviderGroup(SerializerModel): - """Mapping of a group and provider to a Google group ID""" - - id = models.UUIDField(primary_key=True, editable=False, default=uuid4) - google_id = models.TextField() - group = models.ForeignKey(Group, on_delete=models.CASCADE) - provider = models.ForeignKey(GoogleWorkspaceProvider, on_delete=models.CASCADE) - attributes = models.JSONField(default=dict) - - @property - def serializer(self) -> type[Serializer]: - from authentik.enterprise.providers.google_workspace.api.groups import ( - GoogleWorkspaceProviderGroupSerializer, - ) - - return GoogleWorkspaceProviderGroupSerializer - - class Meta: - verbose_name = _("Google Workspace Provider Group") - verbose_name_plural = _("Google Workspace Provider Groups") - unique_together = (("google_id", "group", "provider"),) - - def __str__(self) -> str: - return f"Google Workspace Provider Group {self.group_id} to {self.provider_id}" diff --git a/authentik/enterprise/providers/microsoft_entra/api/groups.py b/authentik/enterprise/providers/microsoft_entra/api/groups.py index 6be035e4c2cf..ac3876483118 100644 --- a/authentik/enterprise/providers/microsoft_entra/api/groups.py +++ b/authentik/enterprise/providers/microsoft_entra/api/groups.py @@ -7,6 +7,7 @@ from authentik.core.api.used_by import UsedByMixin from authentik.core.api.users import UserGroupSerializer from authentik.enterprise.providers.microsoft_entra.models import MicrosoftEntraProviderGroup +from authentik.lib.sync.outgoing.api import OutgoingSyncConnectionCreateMixin class MicrosoftEntraProviderGroupSerializer(ModelSerializer): @@ -30,6 +31,7 @@ class Meta: class MicrosoftEntraProviderGroupViewSet( mixins.CreateModelMixin, + OutgoingSyncConnectionCreateMixin, mixins.RetrieveModelMixin, mixins.DestroyModelMixin, UsedByMixin, diff --git a/authentik/enterprise/providers/microsoft_entra/api/users.py b/authentik/enterprise/providers/microsoft_entra/api/users.py index da0203ed94b4..c30dc647f2a8 100644 --- a/authentik/enterprise/providers/microsoft_entra/api/users.py +++ b/authentik/enterprise/providers/microsoft_entra/api/users.py @@ -7,6 +7,7 @@ from authentik.core.api.groups import GroupMemberSerializer from authentik.core.api.used_by import UsedByMixin from authentik.enterprise.providers.microsoft_entra.models import MicrosoftEntraProviderUser +from authentik.lib.sync.outgoing.api import OutgoingSyncConnectionCreateMixin class MicrosoftEntraProviderUserSerializer(ModelSerializer): @@ -29,6 +30,7 @@ class Meta: class MicrosoftEntraProviderUserViewSet( + OutgoingSyncConnectionCreateMixin, mixins.CreateModelMixin, mixins.RetrieveModelMixin, mixins.DestroyModelMixin, diff --git a/authentik/enterprise/providers/microsoft_entra/clients/groups.py b/authentik/enterprise/providers/microsoft_entra/clients/groups.py index f826ae67fd6c..2cb135822f20 100644 --- a/authentik/enterprise/providers/microsoft_entra/clients/groups.py +++ b/authentik/enterprise/providers/microsoft_entra/clients/groups.py @@ -226,3 +226,7 @@ def _discover_single_group(self, group: MSGroup): microsoft_id=group.id, attributes=self.entity_as_dict(group), ) + + def update_single_attribute(self, connection: MicrosoftEntraProviderGroup): + data = self._request(self.client.groups.by_group_id(connection.microsoft_id).get()) + connection.attributes = self.entity_as_dict(data) diff --git a/authentik/enterprise/providers/microsoft_entra/clients/users.py b/authentik/enterprise/providers/microsoft_entra/clients/users.py index 7371cb3f4db7..a650b42a5205 100644 --- a/authentik/enterprise/providers/microsoft_entra/clients/users.py +++ b/authentik/enterprise/providers/microsoft_entra/clients/users.py @@ -66,6 +66,26 @@ def delete(self, obj: User): microsoft_user.delete() return response + def get_select_fields(self) -> list[str]: + """All fields that should be selected when we fetch user data.""" + # TODO: Make this customizable in the future + return [ + # Default fields + "businessPhones", + "displayName", + "givenName", + "jobTitle", + "mail", + "mobilePhone", + "officeLocation", + "preferredLanguage", + "surname", + "userPrincipalName", + "id", + # Required for logging into M365 using authentik + "onPremisesImmutableId", + ] + def create(self, user: User): """Create user from scratch and create a connection object""" microsoft_user = self.to_schema(user, None) @@ -75,12 +95,12 @@ def create(self, user: User): response = self._request(self.client.users.post(microsoft_user)) except ObjectExistsSyncException: # user already exists in microsoft entra, so we can connect them manually - query_params = UsersRequestBuilder.UsersRequestBuilderGetQueryParameters()( - filter=f"mail eq '{microsoft_user.mail}'", - ) request_configuration = ( UsersRequestBuilder.UsersRequestBuilderGetRequestConfiguration( - query_parameters=query_params, + query_parameters=UsersRequestBuilder.UsersRequestBuilderGetQueryParameters( + filter=f"mail eq '{microsoft_user.mail}'", + select=self.get_select_fields(), + ), ) ) user_data = self._request(self.client.users.get(request_configuration)) @@ -99,7 +119,6 @@ def create(self, user: User): except TransientSyncException as exc: raise exc else: - print(self.entity_as_dict(response)) return MicrosoftEntraProviderUser.objects.create( provider=self.provider, user=user, @@ -120,7 +139,12 @@ def update(self, user: User, connection: MicrosoftEntraProviderUser): def discover(self): """Iterate through all users and connect them with authentik users if possible""" - users = self._request(self.client.users.get()) + request_configuration = UsersRequestBuilder.UsersRequestBuilderGetRequestConfiguration( + query_parameters=UsersRequestBuilder.UsersRequestBuilderGetQueryParameters( + select=self.get_select_fields(), + ), + ) + users = self._request(self.client.users.get(request_configuration)) next_link = True while next_link: for user in users.value: @@ -141,3 +165,14 @@ def _discover_single_user(self, user: MSUser): microsoft_id=user.id, attributes=self.entity_as_dict(user), ) + + def update_single_attribute(self, connection: MicrosoftEntraProviderUser): + request_configuration = UsersRequestBuilder.UsersRequestBuilderGetRequestConfiguration( + query_parameters=UsersRequestBuilder.UsersRequestBuilderGetQueryParameters( + select=self.get_select_fields(), + ), + ) + data = self._request( + self.client.users.by_user_id(connection.microsoft_id).get(request_configuration) + ) + connection.attributes = self.entity_as_dict(data) diff --git a/authentik/enterprise/providers/microsoft_entra/models.py b/authentik/enterprise/providers/microsoft_entra/models.py index 079519f615f8..a9092a76d2f9 100644 --- a/authentik/enterprise/providers/microsoft_entra/models.py +++ b/authentik/enterprise/providers/microsoft_entra/models.py @@ -22,6 +22,58 @@ from authentik.lib.sync.outgoing.models import OutgoingSyncDeleteAction, OutgoingSyncProvider +class MicrosoftEntraProviderUser(SerializerModel): + """Mapping of a user and provider to a Microsoft user ID""" + + id = models.UUIDField(primary_key=True, editable=False, default=uuid4) + microsoft_id = models.TextField() + user = models.ForeignKey(User, on_delete=models.CASCADE) + provider = models.ForeignKey("MicrosoftEntraProvider", on_delete=models.CASCADE) + attributes = models.JSONField(default=dict) + + @property + def serializer(self) -> type[Serializer]: + from authentik.enterprise.providers.microsoft_entra.api.users import ( + MicrosoftEntraProviderUserSerializer, + ) + + return MicrosoftEntraProviderUserSerializer + + class Meta: + verbose_name = _("Microsoft Entra Provider User") + verbose_name_plural = _("Microsoft Entra Provider User") + unique_together = (("microsoft_id", "user", "provider"),) + + def __str__(self) -> str: + return f"Microsoft Entra Provider User {self.user_id} to {self.provider_id}" + + +class MicrosoftEntraProviderGroup(SerializerModel): + """Mapping of a group and provider to a Microsoft group ID""" + + id = models.UUIDField(primary_key=True, editable=False, default=uuid4) + microsoft_id = models.TextField() + group = models.ForeignKey(Group, on_delete=models.CASCADE) + provider = models.ForeignKey("MicrosoftEntraProvider", on_delete=models.CASCADE) + attributes = models.JSONField(default=dict) + + @property + def serializer(self) -> type[Serializer]: + from authentik.enterprise.providers.microsoft_entra.api.groups import ( + MicrosoftEntraProviderGroupSerializer, + ) + + return MicrosoftEntraProviderGroupSerializer + + class Meta: + verbose_name = _("Microsoft Entra Provider Group") + verbose_name_plural = _("Microsoft Entra Provider Groups") + unique_together = (("microsoft_id", "group", "provider"),) + + def __str__(self) -> str: + return f"Microsoft Entra Provider Group {self.group_id} to {self.provider_id}" + + class MicrosoftEntraProvider(OutgoingSyncProvider, BackchannelProvider): """Sync users from authentik into Microsoft Entra.""" @@ -48,15 +100,16 @@ class MicrosoftEntraProvider(OutgoingSyncProvider, BackchannelProvider): ) def client_for_model( - self, model: type[User | Group] + self, + model: type[User | Group | MicrosoftEntraProviderUser | MicrosoftEntraProviderGroup], ) -> BaseOutgoingSyncClient[User | Group, Any, Any, Self]: - if issubclass(model, User): + if issubclass(model, User | MicrosoftEntraProviderUser): from authentik.enterprise.providers.microsoft_entra.clients.users import ( MicrosoftEntraUserClient, ) return MicrosoftEntraUserClient(self) - if issubclass(model, Group): + if issubclass(model, Group | MicrosoftEntraProviderGroup): from authentik.enterprise.providers.microsoft_entra.clients.groups import ( MicrosoftEntraGroupClient, ) @@ -133,55 +186,3 @@ def __str__(self): class Meta: verbose_name = _("Microsoft Entra Provider Mapping") verbose_name_plural = _("Microsoft Entra Provider Mappings") - - -class MicrosoftEntraProviderUser(SerializerModel): - """Mapping of a user and provider to a Microsoft user ID""" - - id = models.UUIDField(primary_key=True, editable=False, default=uuid4) - microsoft_id = models.TextField() - user = models.ForeignKey(User, on_delete=models.CASCADE) - provider = models.ForeignKey(MicrosoftEntraProvider, on_delete=models.CASCADE) - attributes = models.JSONField(default=dict) - - @property - def serializer(self) -> type[Serializer]: - from authentik.enterprise.providers.microsoft_entra.api.users import ( - MicrosoftEntraProviderUserSerializer, - ) - - return MicrosoftEntraProviderUserSerializer - - class Meta: - verbose_name = _("Microsoft Entra Provider User") - verbose_name_plural = _("Microsoft Entra Provider User") - unique_together = (("microsoft_id", "user", "provider"),) - - def __str__(self) -> str: - return f"Microsoft Entra Provider User {self.user_id} to {self.provider_id}" - - -class MicrosoftEntraProviderGroup(SerializerModel): - """Mapping of a group and provider to a Microsoft group ID""" - - id = models.UUIDField(primary_key=True, editable=False, default=uuid4) - microsoft_id = models.TextField() - group = models.ForeignKey(Group, on_delete=models.CASCADE) - provider = models.ForeignKey(MicrosoftEntraProvider, on_delete=models.CASCADE) - attributes = models.JSONField(default=dict) - - @property - def serializer(self) -> type[Serializer]: - from authentik.enterprise.providers.microsoft_entra.api.groups import ( - MicrosoftEntraProviderGroupSerializer, - ) - - return MicrosoftEntraProviderGroupSerializer - - class Meta: - verbose_name = _("Microsoft Entra Provider Group") - verbose_name_plural = _("Microsoft Entra Provider Groups") - unique_together = (("microsoft_id", "group", "provider"),) - - def __str__(self) -> str: - return f"Microsoft Entra Provider Group {self.group_id} to {self.provider_id}" diff --git a/authentik/enterprise/providers/microsoft_entra/tests/test_users.py b/authentik/enterprise/providers/microsoft_entra/tests/test_users.py index 7a00213efc35..aa491f703c80 100644 --- a/authentik/enterprise/providers/microsoft_entra/tests/test_users.py +++ b/authentik/enterprise/providers/microsoft_entra/tests/test_users.py @@ -3,16 +3,18 @@ from unittest.mock import AsyncMock, MagicMock, patch from azure.identity.aio import ClientSecretCredential -from django.test import TestCase +from django.urls import reverse from msgraph.generated.models.group_collection_response import GroupCollectionResponse from msgraph.generated.models.organization import Organization from msgraph.generated.models.organization_collection_response import OrganizationCollectionResponse from msgraph.generated.models.user import User as MSUser from msgraph.generated.models.user_collection_response import UserCollectionResponse from msgraph.generated.models.verified_domain import VerifiedDomain +from rest_framework.test import APITestCase from authentik.blueprints.tests import apply_blueprint from authentik.core.models import Application, Group, User +from authentik.core.tests.utils import create_test_admin_user from authentik.enterprise.providers.microsoft_entra.models import ( MicrosoftEntraProvider, MicrosoftEntraProviderMapping, @@ -25,11 +27,12 @@ from authentik.tenants.models import Tenant -class MicrosoftEntraUserTests(TestCase): +class MicrosoftEntraUserTests(APITestCase): """Microsoft Entra User tests""" @apply_blueprint("system/providers-microsoft-entra.yaml") def setUp(self) -> None: + # Delete all users and groups as the mocked HTTP responses only return one ID # which will cause errors with multiple users Tenant.objects.update(avatars="none") @@ -371,3 +374,45 @@ def test_sync_task(self): ) self.assertFalse(Event.objects.filter(action=EventAction.SYSTEM_EXCEPTION).exists()) user_list.assert_called_once() + + def test_connect_manual(self): + """test manual user connection""" + uid = generate_id() + self.app.backchannel_providers.remove(self.provider) + admin = create_test_admin_user() + different_user = User.objects.create( + username=uid, + email=f"{uid}@goauthentik.io", + ) + self.app.backchannel_providers.add(self.provider) + with ( + patch( + "authentik.enterprise.providers.microsoft_entra.models.MicrosoftEntraProvider.microsoft_credentials", + MagicMock(return_value={"credentials": self.creds}), + ), + patch( + "msgraph.generated.organization.organization_request_builder.OrganizationRequestBuilder.get", + AsyncMock( + return_value=OrganizationCollectionResponse( + value=[ + Organization(verified_domains=[VerifiedDomain(name="goauthentik.io")]) + ] + ) + ), + ), + patch( + "authentik.enterprise.providers.microsoft_entra.clients.users.MicrosoftEntraUserClient.update_single_attribute", + MagicMock(), + ) as user_get, + ): + self.client.force_login(admin) + response = self.client.post( + reverse("authentik_api:microsoftentraprovideruser-list"), + data={ + "microsoft_id": generate_id(), + "user": different_user.pk, + "provider": self.provider.pk, + }, + ) + self.assertEqual(response.status_code, 201) + user_get.assert_called_once() diff --git a/authentik/lib/sync/outgoing/api.py b/authentik/lib/sync/outgoing/api.py index 03f31ecc5b3f..6b496efc612b 100644 --- a/authentik/lib/sync/outgoing/api.py +++ b/authentik/lib/sync/outgoing/api.py @@ -7,6 +7,7 @@ from rest_framework.fields import BooleanField from rest_framework.request import Request from rest_framework.response import Response +from rest_framework.serializers import ModelSerializer from authentik.core.api.utils import PassiveSerializer from authentik.events.api.tasks import SystemTaskSerializer @@ -54,3 +55,17 @@ def sync_status(self, request: Request, pk: int) -> Response: "is_running": not lock_acquired, } return Response(SyncStatusSerializer(status).data) + + +class OutgoingSyncConnectionCreateMixin: + """Mixin for connection objects that fetches remote data upon creation""" + + def perform_create(self, serializer: ModelSerializer): + super().perform_create(serializer) + try: + instance = serializer.instance + client = instance.provider.client_for_model(instance.__class__) + client.update_single_attribute(instance) + instance.save() + except NotImplementedError: + pass diff --git a/authentik/lib/sync/outgoing/base.py b/authentik/lib/sync/outgoing/base.py index 52e7da145be3..47c2accf9fcf 100644 --- a/authentik/lib/sync/outgoing/base.py +++ b/authentik/lib/sync/outgoing/base.py @@ -114,3 +114,8 @@ def discover(self): pre-link any users/groups in the remote system with the respective object in authentik based on a common identifier""" raise NotImplementedError() + + def update_single_attribute(self, connection: TConnection): + """Update connection attributes on a connection object, when the connection + is manually created""" + raise NotImplementedError diff --git a/authentik/providers/scim/api/groups.py b/authentik/providers/scim/api/groups.py index f9fd697e4732..9bb36c8337ef 100644 --- a/authentik/providers/scim/api/groups.py +++ b/authentik/providers/scim/api/groups.py @@ -6,6 +6,7 @@ from authentik.core.api.used_by import UsedByMixin from authentik.core.api.users import UserGroupSerializer +from authentik.lib.sync.outgoing.api import OutgoingSyncConnectionCreateMixin from authentik.providers.scim.models import SCIMProviderGroup @@ -28,6 +29,7 @@ class Meta: class SCIMProviderGroupViewSet( mixins.CreateModelMixin, + OutgoingSyncConnectionCreateMixin, mixins.RetrieveModelMixin, mixins.DestroyModelMixin, UsedByMixin, diff --git a/authentik/providers/scim/api/users.py b/authentik/providers/scim/api/users.py index 632421f02485..5d58d3fdacbc 100644 --- a/authentik/providers/scim/api/users.py +++ b/authentik/providers/scim/api/users.py @@ -6,6 +6,7 @@ from authentik.core.api.groups import GroupMemberSerializer from authentik.core.api.used_by import UsedByMixin +from authentik.lib.sync.outgoing.api import OutgoingSyncConnectionCreateMixin from authentik.providers.scim.models import SCIMProviderUser @@ -28,6 +29,7 @@ class Meta: class SCIMProviderUserViewSet( mixins.CreateModelMixin, + OutgoingSyncConnectionCreateMixin, mixins.RetrieveModelMixin, mixins.DestroyModelMixin, UsedByMixin, diff --git a/authentik/providers/scim/models.py b/authentik/providers/scim/models.py index 735d3a1ca399..e00543207b1a 100644 --- a/authentik/providers/scim/models.py +++ b/authentik/providers/scim/models.py @@ -15,6 +15,48 @@ from authentik.lib.sync.outgoing.models import OutgoingSyncProvider +class SCIMProviderUser(SerializerModel): + """Mapping of a user and provider to a SCIM user ID""" + + id = models.UUIDField(primary_key=True, editable=False, default=uuid4) + scim_id = models.TextField() + user = models.ForeignKey(User, on_delete=models.CASCADE) + provider = models.ForeignKey("SCIMProvider", on_delete=models.CASCADE) + + @property + def serializer(self) -> type[Serializer]: + from authentik.providers.scim.api.users import SCIMProviderUserSerializer + + return SCIMProviderUserSerializer + + class Meta: + unique_together = (("scim_id", "user", "provider"),) + + def __str__(self) -> str: + return f"SCIM Provider User {self.user_id} to {self.provider_id}" + + +class SCIMProviderGroup(SerializerModel): + """Mapping of a group and provider to a SCIM user ID""" + + id = models.UUIDField(primary_key=True, editable=False, default=uuid4) + scim_id = models.TextField() + group = models.ForeignKey(Group, on_delete=models.CASCADE) + provider = models.ForeignKey("SCIMProvider", on_delete=models.CASCADE) + + @property + def serializer(self) -> type[Serializer]: + from authentik.providers.scim.api.groups import SCIMProviderGroupSerializer + + return SCIMProviderGroupSerializer + + class Meta: + unique_together = (("scim_id", "group", "provider"),) + + def __str__(self) -> str: + return f"SCIM Provider Group {self.group_id} to {self.provider_id}" + + class SCIMProvider(OutgoingSyncProvider, BackchannelProvider): """SCIM 2.0 provider to create users and groups in external applications""" @@ -39,13 +81,13 @@ def icon_url(self) -> str | None: return static("authentik/sources/scim.png") def client_for_model( - self, model: type[User | Group] + self, model: type[User | Group | SCIMProviderUser | SCIMProviderGroup] ) -> BaseOutgoingSyncClient[User | Group, Any, Any, Self]: - if issubclass(model, User): + if issubclass(model, User | SCIMProviderUser): from authentik.providers.scim.clients.users import SCIMUserClient return SCIMUserClient(self) - if issubclass(model, Group): + if issubclass(model, Group | SCIMProviderGroup): from authentik.providers.scim.clients.groups import SCIMGroupClient return SCIMGroupClient(self) @@ -105,45 +147,3 @@ def __str__(self): class Meta: verbose_name = _("SCIM Mapping") verbose_name_plural = _("SCIM Mappings") - - -class SCIMProviderUser(SerializerModel): - """Mapping of a user and provider to a SCIM user ID""" - - id = models.UUIDField(primary_key=True, editable=False, default=uuid4) - scim_id = models.TextField() - user = models.ForeignKey(User, on_delete=models.CASCADE) - provider = models.ForeignKey(SCIMProvider, on_delete=models.CASCADE) - - @property - def serializer(self) -> type[Serializer]: - from authentik.providers.scim.api.users import SCIMProviderUserSerializer - - return SCIMProviderUserSerializer - - class Meta: - unique_together = (("scim_id", "user", "provider"),) - - def __str__(self) -> str: - return f"SCIM Provider User {self.user_id} to {self.provider_id}" - - -class SCIMProviderGroup(SerializerModel): - """Mapping of a group and provider to a SCIM user ID""" - - id = models.UUIDField(primary_key=True, editable=False, default=uuid4) - scim_id = models.TextField() - group = models.ForeignKey(Group, on_delete=models.CASCADE) - provider = models.ForeignKey(SCIMProvider, on_delete=models.CASCADE) - - @property - def serializer(self) -> type[Serializer]: - from authentik.providers.scim.api.groups import SCIMProviderGroupSerializer - - return SCIMProviderGroupSerializer - - class Meta: - unique_together = (("scim_id", "group", "provider"),) - - def __str__(self) -> str: - return f"SCIM Provider Group {self.group_id} to {self.provider_id}" From 30e39c75ff9ddcdbb1eb95d3620c519338a51429 Mon Sep 17 00:00:00 2001 From: Marc 'risson' Schmitt Date: Fri, 14 Jun 2024 15:34:43 +0200 Subject: [PATCH 14/15] policies/reputation: save to database directly (#10059) * policies/reputation: save to database directly Signed-off-by: Marc 'risson' Schmitt * makemigrations Signed-off-by: Marc 'risson' Schmitt * fix settings Signed-off-by: Marc 'risson' Schmitt * also update expiry Signed-off-by: Marc 'risson' Schmitt * lint? Signed-off-by: Marc 'risson' Schmitt --------- Signed-off-by: Marc 'risson' Schmitt --- authentik/lib/default.yml | 1 - authentik/policies/reputation/apps.py | 2 -- ...authentik_p_identif_9434d7_idx_and_more.py | 25 +++++++++++++++ authentik/policies/reputation/models.py | 5 +++ authentik/policies/reputation/settings.py | 11 ------- authentik/policies/reputation/signals.py | 31 ++++++++---------- authentik/policies/reputation/tasks.py | 32 ------------------- authentik/policies/reputation/tests.py | 19 ----------- 8 files changed, 43 insertions(+), 83 deletions(-) create mode 100644 authentik/policies/reputation/migrations/0007_reputation_authentik_p_identif_9434d7_idx_and_more.py delete mode 100644 authentik/policies/reputation/settings.py delete mode 100644 authentik/policies/reputation/tasks.py diff --git a/authentik/lib/default.yml b/authentik/lib/default.yml index 5ca7a83756ff..cf6ca74f2cc5 100644 --- a/authentik/lib/default.yml +++ b/authentik/lib/default.yml @@ -50,7 +50,6 @@ cache: timeout: 300 timeout_flows: 300 timeout_policies: 300 - timeout_reputation: 300 # channel: # url: "" diff --git a/authentik/policies/reputation/apps.py b/authentik/policies/reputation/apps.py index 60b2c77b05d6..4a1b1509fc27 100644 --- a/authentik/policies/reputation/apps.py +++ b/authentik/policies/reputation/apps.py @@ -2,8 +2,6 @@ from authentik.blueprints.apps import ManagedAppConfig -CACHE_KEY_PREFIX = "goauthentik.io/policies/reputation/scores/" - class AuthentikPolicyReputationConfig(ManagedAppConfig): """Authentik reputation app config""" diff --git a/authentik/policies/reputation/migrations/0007_reputation_authentik_p_identif_9434d7_idx_and_more.py b/authentik/policies/reputation/migrations/0007_reputation_authentik_p_identif_9434d7_idx_and_more.py new file mode 100644 index 000000000000..5395223e2bb3 --- /dev/null +++ b/authentik/policies/reputation/migrations/0007_reputation_authentik_p_identif_9434d7_idx_and_more.py @@ -0,0 +1,25 @@ +# Generated by Django 5.0.6 on 2024-06-11 08:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("authentik_policies_reputation", "0006_reputation_ip_asn_data"), + ] + + operations = [ + migrations.AddIndex( + model_name="reputation", + index=models.Index(fields=["identifier"], name="authentik_p_identif_9434d7_idx"), + ), + migrations.AddIndex( + model_name="reputation", + index=models.Index(fields=["ip"], name="authentik_p_ip_7ad0df_idx"), + ), + migrations.AddIndex( + model_name="reputation", + index=models.Index(fields=["ip", "identifier"], name="authentik_p_ip_d779aa_idx"), + ), + ] diff --git a/authentik/policies/reputation/models.py b/authentik/policies/reputation/models.py index abcddac2cc0c..c3c7ab1ebfdb 100644 --- a/authentik/policies/reputation/models.py +++ b/authentik/policies/reputation/models.py @@ -96,3 +96,8 @@ class Meta: verbose_name = _("Reputation Score") verbose_name_plural = _("Reputation Scores") unique_together = ("identifier", "ip") + indexes = [ + models.Index(fields=["identifier"]), + models.Index(fields=["ip"]), + models.Index(fields=["ip", "identifier"]), + ] diff --git a/authentik/policies/reputation/settings.py b/authentik/policies/reputation/settings.py deleted file mode 100644 index 72abd27cf7fd..000000000000 --- a/authentik/policies/reputation/settings.py +++ /dev/null @@ -1,11 +0,0 @@ -"""Reputation Settings""" - -from celery.schedules import crontab - -CELERY_BEAT_SCHEDULE = { - "policies_reputation_save": { - "task": "authentik.policies.reputation.tasks.save_reputation", - "schedule": crontab(minute="1-59/5"), - "options": {"queue": "authentik_scheduled"}, - }, -} diff --git a/authentik/policies/reputation/signals.py b/authentik/policies/reputation/signals.py index 583014337204..31042f8406bb 100644 --- a/authentik/policies/reputation/signals.py +++ b/authentik/policies/reputation/signals.py @@ -1,40 +1,35 @@ """authentik reputation request signals""" from django.contrib.auth.signals import user_logged_in -from django.core.cache import cache from django.dispatch import receiver from django.http import HttpRequest from structlog.stdlib import get_logger from authentik.core.signals import login_failed -from authentik.lib.config import CONFIG -from authentik.policies.reputation.apps import CACHE_KEY_PREFIX -from authentik.policies.reputation.tasks import save_reputation +from authentik.events.context_processors.asn import ASN_CONTEXT_PROCESSOR +from authentik.events.context_processors.geoip import GEOIP_CONTEXT_PROCESSOR +from authentik.policies.reputation.models import Reputation, reputation_expiry from authentik.root.middleware import ClientIPMiddleware from authentik.stages.identification.signals import identification_failed LOGGER = get_logger() -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 = ClientIPMiddleware.get_client_ip(request) - try: - # We only update the cache here, as its faster than writing to the DB - score = cache.get_or_set( - CACHE_KEY_PREFIX + remote_ip + "/" + identifier, - {"ip": remote_ip, "identifier": identifier, "score": 0}, - CACHE_TIMEOUT, - ) - score["score"] += amount - cache.set(CACHE_KEY_PREFIX + remote_ip + "/" + identifier, score) - except ValueError as exc: - LOGGER.warning("failed to set reputation", exc=exc) - + Reputation.objects.update_or_create( + ip=remote_ip, + identifier=identifier, + defaults={ + "score": amount, + "ip_geo_data": GEOIP_CONTEXT_PROCESSOR.city_dict(remote_ip) or {}, + "ip_asn_data": ASN_CONTEXT_PROCESSOR.asn_dict(remote_ip) or {}, + "expires": reputation_expiry(), + }, + ) LOGGER.debug("Updated score", amount=amount, for_user=identifier, for_ip=remote_ip) - save_reputation.delay() @receiver(login_failed) diff --git a/authentik/policies/reputation/tasks.py b/authentik/policies/reputation/tasks.py deleted file mode 100644 index fcdceaa7e442..000000000000 --- a/authentik/policies/reputation/tasks.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Reputation tasks""" - -from django.core.cache import cache -from structlog.stdlib import get_logger - -from authentik.events.context_processors.asn import ASN_CONTEXT_PROCESSOR -from authentik.events.context_processors.geoip import GEOIP_CONTEXT_PROCESSOR -from authentik.events.models import TaskStatus -from authentik.events.system_tasks import SystemTask, prefill_task -from authentik.policies.reputation.apps import CACHE_KEY_PREFIX -from authentik.policies.reputation.models import Reputation -from authentik.root.celery import CELERY_APP - -LOGGER = get_logger() - - -@CELERY_APP.task(bind=True, base=SystemTask) -@prefill_task -def save_reputation(self: SystemTask): - """Save currently cached reputation to database""" - objects_to_update = [] - for _, score in cache.get_many(cache.keys(CACHE_KEY_PREFIX + "*")).items(): - rep, _ = Reputation.objects.get_or_create( - ip=score["ip"], - identifier=score["identifier"], - ) - rep.ip_geo_data = GEOIP_CONTEXT_PROCESSOR.city_dict(score["ip"]) or {} - rep.ip_asn_data = ASN_CONTEXT_PROCESSOR.asn_dict(score["ip"]) or {} - rep.score = score["score"] - objects_to_update.append(rep) - Reputation.objects.bulk_update(objects_to_update, ["score", "ip_geo_data"]) - self.set_status(TaskStatus.SUCCESSFUL, "Successfully updated Reputation") diff --git a/authentik/policies/reputation/tests.py b/authentik/policies/reputation/tests.py index 534d808bf745..7d4e33fb7947 100644 --- a/authentik/policies/reputation/tests.py +++ b/authentik/policies/reputation/tests.py @@ -1,14 +1,11 @@ """test reputation signals and policy""" -from django.core.cache import cache from django.test import RequestFactory, TestCase from authentik.core.models import User from authentik.lib.generators import generate_id from authentik.policies.reputation.api import ReputationPolicySerializer -from authentik.policies.reputation.apps import CACHE_KEY_PREFIX from authentik.policies.reputation.models import Reputation, ReputationPolicy -from authentik.policies.reputation.tasks import save_reputation from authentik.policies.types import PolicyRequest from authentik.stages.password import BACKEND_INBUILT from authentik.stages.password.stage import authenticate @@ -22,8 +19,6 @@ def setUp(self): self.request = self.request_factory.get("/") self.test_ip = "127.0.0.1" self.test_username = "test" - keys = cache.keys(CACHE_KEY_PREFIX + "*") - cache.delete_many(keys) # We need a user for the one-to-one in userreputation self.user = User.objects.create(username=self.test_username) self.backends = [BACKEND_INBUILT] @@ -34,13 +29,6 @@ def test_ip_reputation(self): authenticate( self.request, self.backends, username=self.test_username, password=self.test_username ) - # Test value in cache - self.assertEqual( - cache.get(CACHE_KEY_PREFIX + self.test_ip + "/" + self.test_username), - {"ip": "127.0.0.1", "identifier": "test", "score": -1}, - ) - # Save cache and check db values - save_reputation.delay().get() self.assertEqual(Reputation.objects.get(ip=self.test_ip).score, -1) def test_user_reputation(self): @@ -49,13 +37,6 @@ def test_user_reputation(self): authenticate( self.request, self.backends, username=self.test_username, password=self.test_username ) - # Test value in cache - self.assertEqual( - cache.get(CACHE_KEY_PREFIX + self.test_ip + "/" + self.test_username), - {"ip": "127.0.0.1", "identifier": "test", "score": -1}, - ) - # Save cache and check db values - save_reputation.delay().get() self.assertEqual(Reputation.objects.get(identifier=self.test_username).score, -1) def test_policy(self): From 0c604ceba4984eb7a6ca598456105b702b7928e6 Mon Sep 17 00:00:00 2001 From: Jens L Date: Fri, 14 Jun 2024 22:38:21 +0900 Subject: [PATCH 15/15] website/docs: release notes for 2024.6 (#9812) Co-authored-by: Tana M Berry Co-authored-by: Marc 'risson' Schmitt --- website/docs/releases/2024/v2024.6.md | 1248 ++++++++++++++++++++++ website/docs/releases/2024/v2024.next.md | 54 - website/sidebars.js | 5 +- 3 files changed, 1251 insertions(+), 56 deletions(-) create mode 100644 website/docs/releases/2024/v2024.6.md delete mode 100644 website/docs/releases/2024/v2024.next.md diff --git a/website/docs/releases/2024/v2024.6.md b/website/docs/releases/2024/v2024.6.md new file mode 100644 index 000000000000..5ef12d27e8b1 --- /dev/null +++ b/website/docs/releases/2024/v2024.6.md @@ -0,0 +1,1248 @@ +--- +title: Release 2024.6 +slug: /releases/2024.6 +--- + +:::::note +2024.6 has not been released yet! We're publishing these release notes as a preview of what's to come, and for our awesome beta testers trying out release candidates. + +To try out the release candidate, replace your Docker image tag with the latest release candidate number, such as 2024.6.0-rc1. You can find the latest one in [the latest releases on GitHub](https://github.com/goauthentik/authentik/releases). If you don't find any, it means we haven't released one yet. +::::: + +## Highlights + +- **PostgreSQL read-replica** Optimize database query routing by using read-replicas to balance the load +- **New Enterprise providers** Enterprise Preview Google Workspace and Microsoft Entra ID providers allows for user synchronization with authentik +- **Improved CAPTCHA stage** Allows configurable dynamic use of CAPTCHAs + +## Breaking changes + +### PostgreSQL minimum supported version upgrade + +With this release, authentik now requires PostgreSQL version 14 or later. We recommend upgrading to the latest version if you are running an older version. + +The provided Helm chart defaults to PostgreSQL 15. If you are using the Helm chart with the default values, no action is required. + +The provided Compose file was updated with PostgreSQL 16. You can follow the procedure [here](../../troubleshooting/postgres/upgrade_docker.md) to upgrade. + +## New features + +- **Google Workspace Provider** Enterprise Preview + + With the Google Workspace provider, authentik serves as the single source of truth for all users and groups, when using Google products like Gmail. + + For details refer to the [Google Workspace Provider documentation](../../providers/gws/index.md) + +- **Microsoft Entra ID Provider** Enterprise Preview + + With the Microsoft Entra ID provider, authentik serves as the single source of truth for all users and groups. Configuring Entra ID as a provider allows for auto-discovery of user and group accounts, on-going synchronization of user data such as email address, name, and status, and integrated data mapping of field names and values. + + For details refer to the [Microsoft Entra ID documentation](../../providers/entra/index.md) + +- **Read-replica DB support** + + Multiple read-only databases can be configured to route read-only requests to the non-primary database instance so that the main database can be reserved to write requests. + + For details refer to the [PostgreSQL configuration](../../installation/configuration.mdx#postgresql-settings) + +- **Improved CAPTCHA stage** + + Thresholds can now be configured on the CAPTCHA stage to customize its result. Additionally, the stage can be configured to continue the flow if the CAPTCHA score is outside of those thresholds for further decision making via expression policies. + + For details refer to the [CAPTCHA stage](../../flow/stages/captcha/index.md) + +- **Optimize sync and property mapping execution** + + The synchronization process from sources has been optimized to avoid unnecessary operations. Additionally, the Python compilation of property mappings is now cached so that it only happens once per sync. + +- **Wizards now use a grid layout** + + The provider and source creation wizards now use a grid layout showing logos and descriptions of available protocols and services. + +## Fixes + +- **Reworked proxy provider redirect** + + Following-up on a [highly requested issue](https://github.com/goauthentik/authentik/issues/6886), we've reworked our [Proxy provider](../../providers/proxy/index.md) to avoid invalid user-facing redirects. + +## Upgrading + +With this release, authentik now requires PostgreSQL version 14 or later. We recommend upgrading to the latest version if needed. Follow the instructions [here](../../troubleshooting/postgres/upgrade_docker.md) if you need to upgrade PostgreSQL with docker-compose. + +### Docker Compose + +To upgrade, download the new `docker-compose.yml` file and update the Docker stack with the new version, using these commands: + +```shell +wget -O docker-compose.yml https://goauthentik.io/version/2024.6/docker-compose.yml +docker compose up -d +``` + +The `-O` flag retains the downloaded file's name, overwriting any existing local file with the same name. + +### Kubernetes + +Upgrade the Helm Chart to the new version, using the following commands: + +```shell +helm repo update +helm upgrade authentik authentik/authentik -f values.yaml --version ^2024.6 +``` + +## Minor changes/fixes + +- admin: system api: do not show FIPS status if no valid license (#10091) +- core: FIPS (#9683) +- core: add include_users flag to single group retrieval (#9721) +- core: add option to select group for property mapping testing (#9834) +- core: fix auth_method and auth_method_args being overwritten by password stage (#9782) +- core: fix condition in task clean_expiring_models (#9603) +- core: fix logic for token expiration (#9426) +- core: fix source flow_manager not always appending save stage (#9659) +- core: fix source_flow_manager saving user-source connection too early (#9559) +- core: fix task clean_expiring_models removing valid sessions with using database storage (#9598) +- core: groups api: always prefetch users (#9974) +- core: groups: optimize recursive children query (#9931) +- core: only prefetch related objects when required (#9476) +- crypto: update fingerprint at same time as certificate (#10036) +- enterprise/audit: fix audit logging with m2m relations (#9571) +- enterprise/providers/google: initial account sync to google workspace (#9384) +- enterprise/providers/google_workspace: ensure no group is created when no property mappings are set (#9783) +- enterprise/providers/microsoft_entra: fix error when updating connection attributes (#10039) +- enterprise/providers/microsoft_entra: initial account sync to microsoft entra (#9632) +- enterprise/stages/source: fix error when creating source stage from blueprint (#9810) +- events: ensure all models' **str** can be called without any further lookups (#9480) +- events: fix geoip enrich context not converting to json-seriazable data (#9885) +- flows: fix execute API endpoint (#9478) +- lib/providers/sync: improve outgoing sync (#9835) +- lib/providers/sync: multiple minor fixes (#9667) +- lib/sync/outgoing, sources/ldap: fix sync status endpoint (#9855) +- lib/sync: fix json error (#9827) +- lifecycle/migrate: only acquire lock once (#9856) +- lifecycle: always try custom redis URL (#9441) +- lifecycle: close database connection after migrating (#9516) +- lifecycle: fix ak test-all command +- policies: fix ak_call_policy failing when used in testing (#9853) +- providers/oauth2: don't handle api scope as special scope (#9910) +- providers/proxy: rework redirect mechanism (#8594) +- providers/rac: bump guacd to 1.5.5 (#9514) +- providers/saml: fix ecdsa support (#9537) +- providers/scim, sources/ldap: switch to using postgres advisory locks instead of redis locks (#9511) +- providers/scim: fix SCIM ID incorrectly used as primary key (#9557) +- providers/scim: fix time_limit not set correctly (#9546) +- providers/scim: optimize PropertyMapping fetching and execution (#9689) +- providers/sync: improve v3 (#9966) +- providers/sync: update attributes on update (#10012) +- rbac: filters: fix missing attribute for unauthenticated requests (#10061) +- rbac: fix some rough edges and inconsistencies (#9771) +- root: add configuration option to enable fips (#10088) +- root: add primary-replica db router (#9479) +- root: bump blueprint schema version +- root: docker-compose: remove version top level element (#9631) +- root: handle asgi exception (#10085) +- root: include task_id in events and logs (#9749) +- sources/oauth: ensure all UI sources return a valid source (#9401) +- sources/oauth: fix OAuth Client sending token request incorrectly (#9474) +- sources/oauth: modernizes discord icon (#9817) +- sources/saml: fix FlowPlanner error due to pickle (#9708) +- sources/scim: fix duplicate groups and invalid schema (#9466) +- sources/scim: fix service account user path (#9463) +- stages/authenticator_validate: fix priority of auth_method being set to auth_webauthn_pwl (#9909) +- stages/authenticator_webauthn: migrate device type import to systemtask and schedule (#9958) +- stages/authenticator_webauthn: optimize device types creation (#9932) +- stages/captcha: rework (#9959) +- stages/email: fix sanitization of email addresses (#9999) +- stages/identification: don't check source component (#9410) +- stages/user_login: fix non-json-serializable being used (#9886) +- tenants: fix scheduled tasks not running on default tenant (#9583) +- web/admin: add link to enterprise docs on license page (#9811) +- web/admin: fix disabled button color with dark theme (#9465) +- web/admin: fix document title for admin interface (#9362) +- web/admin: fix entra provider mapping form (#9767) +- web/admin: fix scim provider user list (#10028) +- web/admin: only show non-backchannel providers in application provider select (#9658) +- web/admin: rework initial wizard pages and add grid layout (#9668) +- web/admin: show user internal service account as disabled (#9464) +- web/admin: use chips to display permissions/scopes (#9912) +- web/common: fix locale detection for user-set locale (#9436) +- web/flows: fix error when enrolling multiple WebAuthn devices consecutively (#9545) +- web/flows: fix error when using consecutive webauthn validator stages (#9629) +- web/flows: fix missing fallback for flow logo (#9487) +- web: Add enterprise / FIPS notification to the AdminOverviewPage (#10090) +- web: Add missing integrity hashes to package-lock.json (#9527) +- web: Add resolved and integrity fields back to package-lock.json (#9419) +- web: clean up some repetitive types (#9241) +- web: clean up the options rendering in PromptForm (#9564) +- web: fix value handling inside controlled components (#9648) +- web: markdown: display markdown even when frontmatter is missing (#9404) + +## API Changes + +#### What's New + +--- + +##### `GET` /propertymappings/provider/google_workspace/ + +##### `POST` /propertymappings/provider/google_workspace/ + +##### `GET` /propertymappings/provider/google_workspace/{#123;pm_uuid}#125;/ + +##### `PUT` /propertymappings/provider/google_workspace/{#123;pm_uuid}#125;/ + +##### `DELETE` /propertymappings/provider/google_workspace/{#123;pm_uuid}#125;/ + +##### `PATCH` /propertymappings/provider/google_workspace/{#123;pm_uuid}#125;/ + +##### `GET` /propertymappings/provider/google_workspace/{#123;pm_uuid}#125;/used_by/ + +##### `GET` /propertymappings/provider/microsoft_entra/ + +##### `POST` /propertymappings/provider/microsoft_entra/ + +##### `GET` /propertymappings/provider/microsoft_entra/{#123;pm_uuid}#125;/ + +##### `PUT` /propertymappings/provider/microsoft_entra/{#123;pm_uuid}#125;/ + +##### `DELETE` /propertymappings/provider/microsoft_entra/{#123;pm_uuid}#125;/ + +##### `PATCH` /propertymappings/provider/microsoft_entra/{#123;pm_uuid}#125;/ + +##### `GET` /propertymappings/provider/microsoft_entra/{#123;pm_uuid}#125;/used_by/ + +##### `GET` /providers/google_workspace/ + +##### `POST` /providers/google_workspace/ + +##### `GET` /providers/google_workspace/{#123;id}#125;/ + +##### `PUT` /providers/google_workspace/{#123;id}#125;/ + +##### `DELETE` /providers/google_workspace/{#123;id}#125;/ + +##### `PATCH` /providers/google_workspace/{#123;id}#125;/ + +##### `GET` /providers/google_workspace/{#123;id}#125;/sync/status/ + +##### `GET` /providers/google_workspace/{#123;id}#125;/used_by/ + +##### `GET` /providers/google_workspace_groups/ + +##### `POST` /providers/google_workspace_groups/ + +##### `GET` /providers/google_workspace_groups/{#123;id}#125;/ + +##### `DELETE` /providers/google_workspace_groups/{#123;id}#125;/ + +##### `GET` /providers/google_workspace_groups/{#123;id}#125;/used_by/ + +##### `GET` /providers/google_workspace_users/ + +##### `POST` /providers/google_workspace_users/ + +##### `GET` /providers/google_workspace_users/{#123;id}#125;/ + +##### `DELETE` /providers/google_workspace_users/{#123;id}#125;/ + +##### `GET` /providers/google_workspace_users/{#123;id}#125;/used_by/ + +##### `GET` /providers/microsoft_entra/ + +##### `POST` /providers/microsoft_entra/ + +##### `GET` /providers/microsoft_entra/{#123;id}#125;/ + +##### `PUT` /providers/microsoft_entra/{#123;id}#125;/ + +##### `DELETE` /providers/microsoft_entra/{#123;id}#125;/ + +##### `PATCH` /providers/microsoft_entra/{#123;id}#125;/ + +##### `GET` /providers/microsoft_entra/{#123;id}#125;/sync/status/ + +##### `GET` /providers/microsoft_entra/{#123;id}#125;/used_by/ + +##### `GET` /providers/microsoft_entra_groups/ + +##### `POST` /providers/microsoft_entra_groups/ + +##### `GET` /providers/microsoft_entra_groups/{#123;id}#125;/ + +##### `DELETE` /providers/microsoft_entra_groups/{#123;id}#125;/ + +##### `GET` /providers/microsoft_entra_groups/{#123;id}#125;/used_by/ + +##### `GET` /providers/microsoft_entra_users/ + +##### `POST` /providers/microsoft_entra_users/ + +##### `GET` /providers/microsoft_entra_users/{#123;id}#125;/ + +##### `DELETE` /providers/microsoft_entra_users/{#123;id}#125;/ + +##### `GET` /providers/microsoft_entra_users/{#123;id}#125;/used_by/ + +##### `GET` /providers/scim/{#123;id}#125;/sync/status/ + +##### `GET` /providers/scim_groups/ + +##### `POST` /providers/scim_groups/ + +##### `GET` /providers/scim_groups/{#123;id}#125;/ + +##### `DELETE` /providers/scim_groups/{#123;id}#125;/ + +##### `GET` /providers/scim_groups/{#123;id}#125;/used_by/ + +##### `GET` /providers/scim_users/ + +##### `POST` /providers/scim_users/ + +##### `GET` /providers/scim_users/{#123;id}#125;/ + +##### `DELETE` /providers/scim_users/{#123;id}#125;/ + +##### `GET` /providers/scim_users/{#123;id}#125;/used_by/ + +##### `GET` /sources/ldap/{#123;slug}#125;/sync/status/ + +#### What's Deleted + +--- + +##### `GET` /providers/scim/{#123;id}#125;/sync_status/ + +##### `GET` /sources/ldap/{#123;slug}#125;/sync_status/ + +#### What's Changed + +--- + +##### `GET` /admin/system/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `runtime` (object) + + > Get versions + + New required properties: + + - `authentik_version` + - `openssl_fips_mode` + - `openssl_version` + + New optional properties: + + - `gunicorn_version` + + * Added property `openssl_version` (string) + + * Added property `openssl_fips_mode` (boolean) + + * Added property `authentik_version` (string) + + * Deleted property `gunicorn_version` (string) + +##### `POST` /admin/system/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `runtime` (object) + + > Get versions + + New required properties: + + - `authentik_version` + - `openssl_fips_mode` + - `openssl_version` + + New optional properties: + + - `gunicorn_version` + + * Added property `openssl_version` (string) + + * Added property `openssl_fips_mode` (boolean) + + * Added property `authentik_version` (string) + + * Deleted property `gunicorn_version` (string) + +##### `GET` /events/events/actions/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + Changed items (object): > Types of an object that can be created + + - Added property `icon_url` (string) + +##### `GET` /outposts/instances/{#123;uuid}#125;/health/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + Changed items (object): > Outpost health status + + New required properties: + + - `fips_enabled` + - `golang_version` + - `openssl_enabled` + - `openssl_version` + + * Added property `golang_version` (string) + + * Added property `openssl_enabled` (boolean) + + * Added property `openssl_version` (string) + + * Added property `fips_enabled` (boolean) + > Get FIPS enabled + +##### `GET` /outposts/service_connections/all/types/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + Changed items (object): > Types of an object that can be created + + - Added property `icon_url` (string) + +##### `GET` /policies/all/types/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + Changed items (object): > Types of an object that can be created + + - Added property `icon_url` (string) + +##### `GET` /policies/event_matcher/{#123;policy_uuid}#125;/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `app` (string) + + > Match events created by selected application. When left empty, all applications are matched. + + Added enum values: + + - `authentik.enterprise.providers.google_workspace` + - `authentik.enterprise.providers.microsoft_entra` + + - Changed property `model` (string) + + > Match events created by selected model. When left empty, all models are matched. When an app is selected, all the application's models are matched. + + Added enum values: + + - `authentik_providers_google_workspace.googleworkspaceprovider` + - `authentik_providers_google_workspace.googleworkspaceprovidermapping` + - `authentik_providers_microsoft_entra.microsoftentraprovider` + - `authentik_providers_microsoft_entra.microsoftentraprovidermapping` + +##### `PUT` /policies/event_matcher/{#123;policy_uuid}#125;/ + +###### Request: + +Changed content type : `application/json` + +- Changed property `app` (string) + + > Match events created by selected application. When left empty, all applications are matched. + + Added enum values: + + - `authentik.enterprise.providers.google_workspace` + - `authentik.enterprise.providers.microsoft_entra` + +- Changed property `model` (string) + + > Match events created by selected model. When left empty, all models are matched. When an app is selected, all the application's models are matched. + + Added enum values: + + - `authentik_providers_google_workspace.googleworkspaceprovider` + - `authentik_providers_google_workspace.googleworkspaceprovidermapping` + - `authentik_providers_microsoft_entra.microsoftentraprovider` + - `authentik_providers_microsoft_entra.microsoftentraprovidermapping` + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `app` (string) + + > Match events created by selected application. When left empty, all applications are matched. + + Added enum values: + + - `authentik.enterprise.providers.google_workspace` + - `authentik.enterprise.providers.microsoft_entra` + + - Changed property `model` (string) + + > Match events created by selected model. When left empty, all models are matched. When an app is selected, all the application's models are matched. + + Added enum values: + + - `authentik_providers_google_workspace.googleworkspaceprovider` + - `authentik_providers_google_workspace.googleworkspaceprovidermapping` + - `authentik_providers_microsoft_entra.microsoftentraprovider` + - `authentik_providers_microsoft_entra.microsoftentraprovidermapping` + +##### `PATCH` /policies/event_matcher/{#123;policy_uuid}#125;/ + +###### Request: + +Changed content type : `application/json` + +- Changed property `app` (string) + + > Match events created by selected application. When left empty, all applications are matched. + + Added enum values: + + - `authentik.enterprise.providers.google_workspace` + - `authentik.enterprise.providers.microsoft_entra` + +- Changed property `model` (string) + + > Match events created by selected model. When left empty, all models are matched. When an app is selected, all the application's models are matched. + + Added enum values: + + - `authentik_providers_google_workspace.googleworkspaceprovider` + - `authentik_providers_google_workspace.googleworkspaceprovidermapping` + - `authentik_providers_microsoft_entra.microsoftentraprovider` + - `authentik_providers_microsoft_entra.microsoftentraprovidermapping` + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `app` (string) + + > Match events created by selected application. When left empty, all applications are matched. + + Added enum values: + + - `authentik.enterprise.providers.google_workspace` + - `authentik.enterprise.providers.microsoft_entra` + + - Changed property `model` (string) + + > Match events created by selected model. When left empty, all models are matched. When an app is selected, all the application's models are matched. + + Added enum values: + + - `authentik_providers_google_workspace.googleworkspaceprovider` + - `authentik_providers_google_workspace.googleworkspaceprovidermapping` + - `authentik_providers_microsoft_entra.microsoftentraprovider` + - `authentik_providers_microsoft_entra.microsoftentraprovidermapping` + +##### `POST` /propertymappings/all/{#123;pm_uuid}#125;/test/ + +###### Request: + +Changed content type : `application/json` + +New optional properties: + +- `user` + +* Added property `group` (string) + +##### `GET` /propertymappings/all/types/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + Changed items (object): > Types of an object that can be created + + - Added property `icon_url` (string) + +##### `GET` /providers/all/types/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + Changed items (object): > Types of an object that can be created + + - Added property `icon_url` (string) + +##### `GET` /sources/all/types/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + Changed items (object): > Types of an object that can be created + + - Added property `icon_url` (string) + +##### `GET` /stages/all/types/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + Changed items (object): > Types of an object that can be created + + - Added property `icon_url` (string) + +##### `GET` /stages/email/templates/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + Changed items (object): > Types of an object that can be created + + - Added property `icon_url` (string) + +##### `GET` /core/groups/{#123;group_uuid}#125;/ + +###### Parameters: + +Added: `include_users` in `query` + +##### `POST` /policies/event_matcher/ + +###### Request: + +Changed content type : `application/json` + +- Changed property `app` (string) + + > Match events created by selected application. When left empty, all applications are matched. + + Added enum values: + + - `authentik.enterprise.providers.google_workspace` + - `authentik.enterprise.providers.microsoft_entra` + +- Changed property `model` (string) + + > Match events created by selected model. When left empty, all models are matched. When an app is selected, all the application's models are matched. + + Added enum values: + + - `authentik_providers_google_workspace.googleworkspaceprovider` + - `authentik_providers_google_workspace.googleworkspaceprovidermapping` + - `authentik_providers_microsoft_entra.microsoftentraprovider` + - `authentik_providers_microsoft_entra.microsoftentraprovidermapping` + +###### Return Type: + +Changed response : **201 Created** + +- Changed content type : `application/json` + + - Changed property `app` (string) + + > Match events created by selected application. When left empty, all applications are matched. + + Added enum values: + + - `authentik.enterprise.providers.google_workspace` + - `authentik.enterprise.providers.microsoft_entra` + + - Changed property `model` (string) + + > Match events created by selected model. When left empty, all models are matched. When an app is selected, all the application's models are matched. + + Added enum values: + + - `authentik_providers_google_workspace.googleworkspaceprovider` + - `authentik_providers_google_workspace.googleworkspaceprovidermapping` + - `authentik_providers_microsoft_entra.microsoftentraprovider` + - `authentik_providers_microsoft_entra.microsoftentraprovidermapping` + +##### `GET` /policies/event_matcher/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `results` (array) + + Changed items (object): > Event Matcher Policy Serializer + + - Changed property `app` (string) + + > Match events created by selected application. When left empty, all applications are matched. + + Added enum values: + + - `authentik.enterprise.providers.google_workspace` + - `authentik.enterprise.providers.microsoft_entra` + + - Changed property `model` (string) + + > Match events created by selected model. When left empty, all models are matched. When an app is selected, all the application's models are matched. + + Added enum values: + + - `authentik_providers_google_workspace.googleworkspaceprovider` + - `authentik_providers_google_workspace.googleworkspaceprovidermapping` + - `authentik_providers_microsoft_entra.microsoftentraprovider` + - `authentik_providers_microsoft_entra.microsoftentraprovidermapping` + +##### `GET` /providers/all/ + +###### Parameters: + +Added: `backchannel` in `query` + +> When not set all providers are returned. When set to true, only backchannel providers are returned. When set to false, backchannel providers are excluded + +Deleted: `backchannel_only` in `query` + +##### `POST` /rbac/permissions/assigned_by_roles/{#123;uuid}#125;/assign/ + +###### Request: + +Changed content type : `application/json` + +- Changed property `model` (string) + + Added enum values: + + - `authentik_providers_google_workspace.googleworkspaceprovider` + - `authentik_providers_google_workspace.googleworkspaceprovidermapping` + - `authentik_providers_microsoft_entra.microsoftentraprovider` + - `authentik_providers_microsoft_entra.microsoftentraprovidermapping` + +##### `PATCH` /rbac/permissions/assigned_by_roles/{#123;uuid}#125;/unassign/ + +###### Request: + +Changed content type : `application/json` + +- Changed property `model` (string) + + Added enum values: + + - `authentik_providers_google_workspace.googleworkspaceprovider` + - `authentik_providers_google_workspace.googleworkspaceprovidermapping` + - `authentik_providers_microsoft_entra.microsoftentraprovider` + - `authentik_providers_microsoft_entra.microsoftentraprovidermapping` + +##### `POST` /rbac/permissions/assigned_by_users/{#123;id}#125;/assign/ + +###### Request: + +Changed content type : `application/json` + +- Changed property `model` (string) + + Added enum values: + + - `authentik_providers_google_workspace.googleworkspaceprovider` + - `authentik_providers_google_workspace.googleworkspaceprovidermapping` + - `authentik_providers_microsoft_entra.microsoftentraprovider` + - `authentik_providers_microsoft_entra.microsoftentraprovidermapping` + +##### `PATCH` /rbac/permissions/assigned_by_users/{#123;id}#125;/unassign/ + +###### Request: + +Changed content type : `application/json` + +- Changed property `model` (string) + + Added enum values: + + - `authentik_providers_google_workspace.googleworkspaceprovider` + - `authentik_providers_google_workspace.googleworkspaceprovidermapping` + - `authentik_providers_microsoft_entra.microsoftentraprovider` + - `authentik_providers_microsoft_entra.microsoftentraprovidermapping` + +##### `GET` /sources/ldap/{#123;slug}#125;/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `icon` (string) + +##### `PUT` /sources/ldap/{#123;slug}#125;/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `icon` (string) + +##### `PATCH` /sources/ldap/{#123;slug}#125;/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `icon` (string) + +##### `GET` /sources/oauth/{#123;slug}#125;/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `icon` (string) + +##### `PUT` /sources/oauth/{#123;slug}#125;/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `icon` (string) + +##### `PATCH` /sources/oauth/{#123;slug}#125;/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `icon` (string) + +##### `GET` /sources/plex/{#123;slug}#125;/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `icon` (string) + +##### `PUT` /sources/plex/{#123;slug}#125;/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `icon` (string) + +##### `PATCH` /sources/plex/{#123;slug}#125;/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `icon` (string) + +##### `GET` /sources/saml/{#123;slug}#125;/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `icon` (string) + +##### `PUT` /sources/saml/{#123;slug}#125;/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `icon` (string) + +##### `PATCH` /sources/saml/{#123;slug}#125;/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `icon` (string) + +##### `GET` /events/system_tasks/{#123;uuid}#125;/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Added property `expires` (string) + + - Added property `expiring` (boolean) + +##### `GET` /rbac/permissions/assigned_by_roles/ + +###### Parameters: + +Changed: `model` in `query` + +##### `GET` /rbac/permissions/assigned_by_users/ + +###### Parameters: + +Changed: `model` in `query` + +##### `POST` /sources/ldap/ + +###### Return Type: + +Changed response : **201 Created** + +- Changed content type : `application/json` + + - Changed property `icon` (string) + +##### `GET` /sources/ldap/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `results` (array) + + Changed items (object): > LDAP Source Serializer + + - Changed property `icon` (string) + +##### `POST` /sources/oauth/ + +###### Return Type: + +Changed response : **201 Created** + +- Changed content type : `application/json` + + - Changed property `icon` (string) + +##### `GET` /sources/oauth/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `results` (array) + + Changed items (object): > OAuth Source Serializer + + - Changed property `icon` (string) + +##### `POST` /sources/plex/ + +###### Return Type: + +Changed response : **201 Created** + +- Changed content type : `application/json` + + - Changed property `icon` (string) + +##### `GET` /sources/plex/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `results` (array) + + Changed items (object): > Plex Source Serializer + + - Changed property `icon` (string) + +##### `POST` /sources/saml/ + +###### Return Type: + +Changed response : **201 Created** + +- Changed content type : `application/json` + + - Changed property `icon` (string) + +##### `GET` /sources/saml/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `results` (array) + + Changed items (object): > SAMLSource Serializer + + - Changed property `icon` (string) + +##### `GET` /stages/captcha/{#123;stage_uuid}#125;/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Added property `score_min_threshold` (number) + + - Added property `score_max_threshold` (number) + + - Added property `error_on_invalid_score` (boolean) + > When enabled and the received captcha score is outside of the given threshold, the stage will show an error message. When not enabled, the flow will continue, but the data from the captcha will be available in the context for policy decisions + +##### `PUT` /stages/captcha/{#123;stage_uuid}#125;/ + +###### Request: + +Changed content type : `application/json` + +- Added property `score_min_threshold` (number) + +- Added property `score_max_threshold` (number) + +- Added property `error_on_invalid_score` (boolean) + > When enabled and the received captcha score is outside of the given threshold, the stage will show an error message. When not enabled, the flow will continue, but the data from the captcha will be available in the context for policy decisions + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Added property `score_min_threshold` (number) + + - Added property `score_max_threshold` (number) + + - Added property `error_on_invalid_score` (boolean) + > When enabled and the received captcha score is outside of the given threshold, the stage will show an error message. When not enabled, the flow will continue, but the data from the captcha will be available in the context for policy decisions + +##### `PATCH` /stages/captcha/{#123;stage_uuid}#125;/ + +###### Request: + +Changed content type : `application/json` + +- Added property `score_min_threshold` (number) + +- Added property `score_max_threshold` (number) + +- Added property `error_on_invalid_score` (boolean) + > When enabled and the received captcha score is outside of the given threshold, the stage will show an error message. When not enabled, the flow will continue, but the data from the captcha will be available in the context for policy decisions + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Added property `score_min_threshold` (number) + + - Added property `score_max_threshold` (number) + + - Added property `error_on_invalid_score` (boolean) + > When enabled and the received captcha score is outside of the given threshold, the stage will show an error message. When not enabled, the flow will continue, but the data from the captcha will be available in the context for policy decisions + +##### `PUT` /core/transactional/applications/ + +###### Request: + +Changed content type : `application/json` + +- Changed property `provider_model` (string) + + Added enum values: + + - `authentik_providers_google_workspace.googleworkspaceprovider` + - `authentik_providers_microsoft_entra.microsoftentraprovider` + +- Changed property `provider` (object) + + Added 'authentik_providers_google_workspace.googleworkspaceprovider' provider_model: + + - Property `name` (string) + + - Property `property_mappings` (array) + + Items (string): + + - Property `property_mappings_group` (array) + + > Property mappings used for group creation/updating. + + Items (string): + + - Property `delegated_subject` (string) + + - Property `credentials` (object) + + - Property `scopes` (string) + + - Property `exclude_users_service_account` (boolean) + + - Property `filter_group` (string) + + - Property `user_delete_action` (string) + + Enum values: + + - `do_nothing` + - `delete` + - `suspend` + + - Property `group_delete_action` (string) + + - Property `default_group_email_domain` (string) + + Added 'authentik_providers_microsoft_entra.microsoftentraprovider' provider_model: + + - Property `name` (string) + + - Property `property_mappings` (array) + + - Property `property_mappings_group` (array) + + > Property mappings used for group creation/updating. + + - Property `client_id` (string) + + - Property `client_secret` (string) + + - Property `tenant_id` (string) + + - Property `exclude_users_service_account` (boolean) + + - Property `filter_group` (string) + + - Property `user_delete_action` (string) + + - Property `group_delete_action` (string) + +##### `GET` /events/system_tasks/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `results` (array) + + Changed items (object): > Serialize TaskInfo and TaskResult + + - Added property `expires` (string) + + - Added property `expiring` (boolean) + +##### `POST` /stages/captcha/ + +###### Request: + +Changed content type : `application/json` + +- Added property `score_min_threshold` (number) + +- Added property `score_max_threshold` (number) + +- Added property `error_on_invalid_score` (boolean) + > When enabled and the received captcha score is outside of the given threshold, the stage will show an error message. When not enabled, the flow will continue, but the data from the captcha will be available in the context for policy decisions + +###### Return Type: + +Changed response : **201 Created** + +- Changed content type : `application/json` + + - Added property `score_min_threshold` (number) + + - Added property `score_max_threshold` (number) + + - Added property `error_on_invalid_score` (boolean) + > When enabled and the received captcha score is outside of the given threshold, the stage will show an error message. When not enabled, the flow will continue, but the data from the captcha will be available in the context for policy decisions + +##### `GET` /stages/captcha/ + +###### Return Type: + +Changed response : **200 OK** + +- Changed content type : `application/json` + + - Changed property `results` (array) + + Changed items (object): > CaptchaStage Serializer + + - Added property `score_min_threshold` (number) + + - Added property `score_max_threshold` (number) + + - Added property `error_on_invalid_score` (boolean) + > When enabled and the received captcha score is outside of the given threshold, the stage will show an error message. When not enabled, the flow will continue, but the data from the captcha will be available in the context for policy decisions diff --git a/website/docs/releases/2024/v2024.next.md b/website/docs/releases/2024/v2024.next.md deleted file mode 100644 index 00824ed7714d..000000000000 --- a/website/docs/releases/2024/v2024.next.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Release 2024.next -slug: "/releases/2024.next" ---- - -:::::note -2024.next has not been released yet! We're publishing these release notes as a preview of what's to come, and for our awesome beta testers trying out release candidates. - -To try out the release candidate, replace your Docker image tag with the latest release candidate number, such as 2024.next.0-rc1. You can find the latest one in [the latest releases on GitHub](https://github.com/goauthentik/authentik/releases). If you don't find any, it means we haven't released one yet. -::::: - -## Breaking changes - -### PostgreSQL minimum supported version upgrade - -authentik now requires PostgreSQL version 14 or later. We recommend upgrading to the latest version if you are running an older version. - -The provided Helm chart defaults to PostgreSQL 15. If you are using the Helm chart with the default values, no action is required. - -The provided Compose file was updated with PostgreSQL 16. You can follow the procedure [here](../../troubleshooting/postgres/upgrade_docker.md) to upgrade. - -## New features - -## Upgrading - -authentik now requires PostgreSQL version 14 or later. We recommend upgrading to the latest version if needed. Follow the instructions [here](../../troubleshooting/postgres/upgrade_docker.md) if you need to upgrade PostgreSQL with docker-compose. - -### Docker Compose - -To upgrade, download the new Compose file and update the Docker stack with the new version, using these commands: - -```shell -wget -O docker-compose.yml https://goauthentik.io/version/2024.next/docker-compose.yml -docker compose up -d -``` - -The `-O` flag retains the downloaded file's name, overwriting any existing local file with the same name. - -### Kubernetes - -Upgrade the Helm Chart to the new version, using the following commands: - -```shell -helm repo update -helm upgrade authentik authentik/authentik -f values.yaml --version ^2024.next -``` - -## Minor changes/fixes - - - -## API Changes - - diff --git a/website/sidebars.js b/website/sidebars.js index 736f0c69f799..4230093a8665 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -409,16 +409,17 @@ const docsSidebar = { type: "generated-index", title: "Releases", slug: "releases", - description: "Release notes for recent authentik versions", + description: "Release Notes for recent authentik versions", }, items: [ + "releases/2024/v2024.6", "releases/2024/v2024.4", "releases/2024/v2024.2", - "releases/2023/v2023.10", { type: "category", label: "Previous versions", items: [ + "releases/2023/v2023.10", "releases/2023/v2023.8", "releases/2023/v2023.6", "releases/2023/v2023.5",