From 089c0e818bb919d2f8f605e4391834c3d3119174 Mon Sep 17 00:00:00 2001 From: Okke Harsta Date: Mon, 9 Mar 2026 10:41:14 +0100 Subject: [PATCH 01/17] WIP for #627 --- manage-gui/package.json | 3 +- manage-gui/src/pages/StepupManagement.jsx | 47 ++++++++++ manage-gui/src/pages/StepupManagement.scss | 36 ++++++++ .../metadata_configuration/sfo.schema.json | 88 +++++++++++++++++++ .../metadata_templates/sfo.template.json | 12 +++ 5 files changed, 185 insertions(+), 1 deletion(-) create mode 100644 manage-gui/src/pages/StepupManagement.jsx create mode 100644 manage-gui/src/pages/StepupManagement.scss create mode 100644 manage-server/src/main/resources/metadata_configuration/sfo.schema.json create mode 100644 manage-server/src/main/resources/metadata_templates/sfo.template.json diff --git a/manage-gui/package.json b/manage-gui/package.json index 423d1395..4bf8cdd0 100644 --- a/manage-gui/package.json +++ b/manage-gui/package.json @@ -52,7 +52,8 @@ "resolutions": { "semver": "^7.5.4", "yaml": "^2.3.1", - "dom-serializer": "^2.0.0" + "dom-serializer": "^2.0.0", + "minimatch": "10.2.4" }, "scripts": { "dev": "vite", diff --git a/manage-gui/src/pages/StepupManagement.jsx b/manage-gui/src/pages/StepupManagement.jsx new file mode 100644 index 00000000..6ef3c26a --- /dev/null +++ b/manage-gui/src/pages/StepupManagement.jsx @@ -0,0 +1,47 @@ +import React from "react"; +import I18n from "i18n-js"; +import {stop} from "../utils/Utils"; +import "./StepupManagement.scss"; +import PolicyPlayground from "../components/PolicyPlaygound"; +import withRouterHooks from "../utils/RouterBackwardCompatability"; +import PolicyConflicts from "../components/PolicyConflicts"; +import {useParams} from "react-router-dom"; + +export const StepupManagement = ({configuration}) => { + const {tab = ""} = useParams(); + const [currentTab, setCurrentTab] = useState(tab); + const navigate = useNavigate(); + const tabs = ["sfo","institutions"] + + const switchTab = tab => e => { + stop(e); + setCurrentTab(tab) + navigate(`/policies/${tab}`); + }; + + const renderTab = (tab, selectedTab) => + + {I18n.t(`stepupManagement.${tab}`)} + ; + + const renderCurrentTab = selectedTab => { + switch (selectedTab) { + case "sfo" : + return ; + case "institutions" : + return ; + } + }; + + return ( +
+
+ {tabs.map(tab => renderTab(tab, currentTab))} +
+ {renderCurrentTab(currentTab)} +
+ ); + +} diff --git a/manage-gui/src/pages/StepupManagement.scss b/manage-gui/src/pages/StepupManagement.scss new file mode 100644 index 00000000..7f3ca8c6 --- /dev/null +++ b/manage-gui/src/pages/StepupManagement.scss @@ -0,0 +1,36 @@ +@use "../stylesheets/vars.scss"; +@use "../stylesheets/mixins.scss"; + +.mod-stepup-management { + @include mixins.page; + + section.tabs { + display: flex; + margin-top: 15px; + padding: 0; + + span { + text-align: center; + cursor: pointer; + padding: 15px 25px; + background-color: vars.$light-grey; + color: vars.$dark-grey; + text-transform: uppercase; + border-right: 1px solid white; + + &.active { + background-color: white; + color: vars.$darker-blue; + border-top: 2px solid vars.$blue; + border-right: none; + font-weight: bold; + } + + &:last-child { + border-right: none; + } + } + } + +} + diff --git a/manage-server/src/main/resources/metadata_configuration/sfo.schema.json b/manage-server/src/main/resources/metadata_configuration/sfo.schema.json new file mode 100644 index 00000000..9aca7fc5 --- /dev/null +++ b/manage-server/src/main/resources/metadata_configuration/sfo.schema.json @@ -0,0 +1,88 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "sfo", + "order": 10, + "type": "object", + "properties": { + "eid": { + "type": "number" + }, + "entityid": { + "type": "string", + "minLength": 1 + }, + "public_key": { + "type": "string", + "format": "certificate", + "info": "The supplied public certificate of the institution. This must be a PEM encoded certificate. DER, CRT or CER are not supported.", + }, + "acs": { + "type": "array", + "items": { + "type": "string", + "format": "url" + }, + "info": "The ACS locations of this institution." + }, + "loa": { + "type": "array", + "items": { + "type": "object", + "properties": { + "__default__": { + "type": "string", + "enum": [ + "http://test.surfconext.nl/assurance/loa1.5", + "http://test.surfconext.nl/assurance/loa2", + "http://test.surfconext.nl/assurance/loa3" + ], + "default": "http://test.surfconext.nl/assurance/loa2" + } + }, + "additionalProperties": false + } + }, + "assertion_encryption_enabled": { + "type": "boolean" + }, + "second_factor_only": { + "type": "boolean" + }, + "second_factor_only_nameid_patterns": { + "type": "array", + "items": { + "type": "string" + } + }, + "revisionid": { + "type": "number" + }, + "created": { + "type": [ + "string", + "null" + ] + }, + "revisionnote": { + "type": "string" + }, + "notes": { + "type": [ + "string", + "null" + ] + }, + "metaDataFields": { + "type": "object", + "properties": {}, + "patternProperties": {}, + "required": [], + "additionalProperties": false + } + }, + "required": [ + "entityid" + ], + "additionalProperties": false, + "indexes": [] +} diff --git a/manage-server/src/main/resources/metadata_templates/sfo.template.json b/manage-server/src/main/resources/metadata_templates/sfo.template.json new file mode 100644 index 00000000..d2383580 --- /dev/null +++ b/manage-server/src/main/resources/metadata_templates/sfo.template.json @@ -0,0 +1,12 @@ +{ + "entity_id": "", + "public_key": "", + "acs": [], + "loa": { + "__default__": "http://test.surfconext.nl/assurance/loa2" + }, + "assertion_encryption_enabled": false, + "second_factor_only": true, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [] +} From 9710e19af78bb2318468d59ab648f6210f42951b Mon Sep 17 00:00:00 2001 From: Okke Harsta Date: Mon, 9 Mar 2026 10:47:32 +0100 Subject: [PATCH 02/17] WIP for #627 --- manage-gui/package.json | 24 +- manage-gui/yarn.lock | 2529 +++++++++++++++++++-------------------- 2 files changed, 1222 insertions(+), 1331 deletions(-) diff --git a/manage-gui/package.json b/manage-gui/package.json index 4bf8cdd0..ab6d543f 100644 --- a/manage-gui/package.json +++ b/manage-gui/package.json @@ -13,38 +13,40 @@ "js-cookie": "^3.0.5", "lodash.merge": "^4.6.2", "papaparse": "^5.5.3", - "react": "^18.3.1", - "react-dom": "^18.3.1", + "react": "^19.2.4", + "react-dom": "^19.2.4", "react-json-view": "^1.21.3", + "semver": "^7.5.4", "source-map-explorer": "^2.5.3", "typeface-roboto": "^1.1.13", - "xml-formatter": "^3.6.7" + "xml-formatter": "^3.6.7", + "yaml": "^2.3.1" }, "devDependencies": { "@vitejs/plugin-react": "^5.1.2", - "codemirror": "^5.65.1", - "eslint": "^9.39.2", + "codemirror": "^6.0.2", + "eslint": "^10.0.3", "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^7.0.1", "events": "^3.3.0", "globals": "^17.2.0", - "i18n-js": "^3.8.0", - "jsondiffpatch": "^0.4.1", + "i18n-js": "^4.5.3", + "jsondiffpatch": "^0.7.3", "lodash.clonedeep": "^4.5.0", "lodash.debounce": "^4.0.8", "lodash.escape": "^4.0.1", "prop-types": "^15.8.1", "react-codemirror": "^1.0.0", "react-copy-to-clipboard": "^5.0.4", - "react-highlight": "^0.14.0", + "react-highlight": "^0.15.0", "react-json-pretty": "^2.2.0", "react-modal": "^3.14.4", - "react-router-dom": "^6.30.3", + "react-router-dom": "^7.13.1", "react-select": "^5.2.2", - "react-tooltip": "^4.2.21", + "react-tooltip": "^5.30.0", "sass": "^1.97.3", "scroll-into-view": "^1.16.0", - "spin.js": "^2.3.2", + "spin.js": "^4.1.2", "urijs": "^1.19.11", "vite": "^7.3.1", "vitest": "^4.0.18" diff --git a/manage-gui/yarn.lock b/manage-gui/yarn.lock index 6eb8ce26..3d5d86a9 100644 --- a/manage-gui/yarn.lock +++ b/manage-gui/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": version "7.29.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c" integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== @@ -16,7 +16,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.0.tgz#00d03e8c0ac24dd9be942c5370990cbe1f17d88d" integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg== -"@babel/core@^7.24.4", "@babel/core@^7.28.5": +"@babel/core@^7.24.4", "@babel/core@^7.29.0": version "7.29.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.29.0.tgz#5286ad785df7f79d656e88ce86e650d16ca5f322" integrity sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA== @@ -38,9 +38,9 @@ semver "^6.3.1" "@babel/generator@^7.29.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.0.tgz#4cba5a76b3c71d8be31761b03329d5dc7768447f" - integrity sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ== + version "7.29.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.1.tgz#d09876290111abbb00ef962a7b83a5307fba0d50" + integrity sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw== dependencies: "@babel/parser" "^7.29.0" "@babel/types" "^7.29.0" @@ -64,7 +64,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== -"@babel/helper-module-imports@^7.28.6": +"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.28.6": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz#60632cbd6ffb70b22823187201116762a03e2d5c" integrity sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw== @@ -91,11 +91,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - "@babel/helper-validator-identifier@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" @@ -114,12 +109,7 @@ "@babel/template" "^7.28.6" "@babel/types" "^7.28.6" -"@babel/parser@^7.1.0": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0" - integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA== - -"@babel/parser@^7.20.7", "@babel/parser@^7.24.4", "@babel/parser@^7.28.6", "@babel/parser@^7.29.0": +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.24.4", "@babel/parser@^7.28.6", "@babel/parser@^7.29.0": version "7.29.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.0.tgz#669ef345add7d057e92b7ed15f0bac07611831b6" integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww== @@ -140,12 +130,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.6", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.6", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": - version "7.26.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.10.tgz#a07b4d8fa27af131a633d7b3524db803eb4764c2" - integrity sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw== - dependencies: - regenerator-runtime "^0.14.0" +"@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.6.tgz#d267a43cb1836dc4d182cce93ae75ba954ef6d2b" + integrity sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA== "@babel/template@^7.28.6": version "7.28.6" @@ -169,15 +157,7 @@ "@babel/types" "^7.29.0" debug "^4.3.1" -"@babel/types@^7.0.0", "@babel/types@^7.3.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" - integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - -"@babel/types@^7.20.7", "@babel/types@^7.28.6", "@babel/types@^7.29.0": +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.28.2", "@babel/types@^7.28.6", "@babel/types@^7.29.0": version "7.29.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7" integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== @@ -186,9 +166,9 @@ "@babel/helper-validator-identifier" "^7.28.5" "@codemirror/autocomplete@^6.0.0": - version "6.13.0" - resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.13.0.tgz#fa7df3b2809863df0da4556f72ac4263ea4d7adb" - integrity sha512-SuDrho1klTINfbcMPnyro1ZxU9xJtwDMtb62R8TjL/tOl71IoOsvBo1a9x+hDvHhIzkTcJHy2VC+rmpGgYkRSw== + version "6.20.1" + resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.20.1.tgz#4cfbc8b2e1e25f890ec34a081037e58b4e44143e" + integrity sha512-1cvg3Vz1dSSToCNlJfRA2WSI4ht3K+WplO0UMOgmUYPivCyy2oueZY6Lx7M9wThm7SDUBViRmuT+OG/i8+ON9A== dependencies: "@codemirror/language" "^6.0.0" "@codemirror/state" "^6.0.0" @@ -196,13 +176,13 @@ "@lezer/common" "^1.0.0" "@codemirror/commands@^6.0.0", "@codemirror/commands@^6.1.0": - version "6.3.3" - resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.3.3.tgz#03face5bf5f3de0fc4e09b177b3c91eda2ceb7e9" - integrity sha512-dO4hcF0fGT9tu1Pj1D2PvGvxjeGkbC6RGcZw6Qs74TH+Ed1gw98jmUgd2axWvIZEqTeTuFrg1lEB1KV6cK9h1A== + version "6.10.2" + resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.10.2.tgz#338bf53ab146de7bb26da4a1d32c6a6ff4d36b39" + integrity sha512-vvX1fsih9HledO1c9zdotZYUZnE4xV0m6i3m25s5DIfXofuprk6cRcLUZvSk3CASUbwjQX21tOGbkY2BH8TpnQ== dependencies: "@codemirror/language" "^6.0.0" "@codemirror/state" "^6.4.0" - "@codemirror/view" "^6.0.0" + "@codemirror/view" "^6.27.0" "@lezer/common" "^1.1.0" "@codemirror/lang-json@^6.0.2": @@ -214,253 +194,284 @@ "@lezer/json" "^1.0.0" "@codemirror/language@^6.0.0": - version "6.10.1" - resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.10.1.tgz#428c932a158cb75942387acfe513c1ece1090b05" - integrity sha512-5GrXzrhq6k+gL5fjkAwt90nYDmjlzTIJV8THnxNFtNKWotMIlzzN+CpqxqwXOECnUdOndmSeWntVrVcv5axWRQ== + version "6.12.2" + resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.12.2.tgz#7db5a46757411cf251e8f450474c05710c27d42c" + integrity sha512-jEPmz2nGGDxhRTg3lTpzmIyGKxz3Gp3SJES4b0nAuE5SWQoKdT5GoQ69cwMmFd+wvFUhYirtDTr0/DRHpQAyWg== dependencies: "@codemirror/state" "^6.0.0" "@codemirror/view" "^6.23.0" - "@lezer/common" "^1.1.0" + "@lezer/common" "^1.5.0" "@lezer/highlight" "^1.0.0" "@lezer/lr" "^1.0.0" style-mod "^4.0.0" "@codemirror/lint@^6.0.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.5.0.tgz#ea43b6e653dcc5bcd93456b55e9fe62e63f326d9" - integrity sha512-+5YyicIaaAZKU8K43IQi8TBy6mF6giGeWAH7N96Z5LC30Wm5JMjqxOYIE9mxwMG1NbhT2mA3l9hA4uuKUM3E5g== + version "6.9.5" + resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.9.5.tgz#c7da006f3335a33014799a7375c82df558e89f90" + integrity sha512-GElsbU9G7QT9xXhpUg1zWGmftA/7jamh+7+ydKRuT0ORpWS3wOSP0yT1FOlIZa7mIJjpVPipErsyvVqB9cfTFA== dependencies: "@codemirror/state" "^6.0.0" - "@codemirror/view" "^6.0.0" + "@codemirror/view" "^6.35.0" crelt "^1.0.5" "@codemirror/search@^6.0.0": - version "6.5.6" - resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.5.6.tgz#8f858b9e678d675869112e475f082d1e8488db93" - integrity sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q== + version "6.6.0" + resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.6.0.tgz#3b83a1e35391e1575a83a3b485e3f95263ddaa0b" + integrity sha512-koFuNXcDvyyotWcgOnZGmY7LZqEOXZaaxD/j6n18TCLx2/9HieZJ5H6hs1g8FiRxBD0DNfs0nXn17g872RmYdw== dependencies: "@codemirror/state" "^6.0.0" - "@codemirror/view" "^6.0.0" + "@codemirror/view" "^6.37.0" crelt "^1.0.5" -"@codemirror/state@^6.0.0", "@codemirror/state@^6.1.1", "@codemirror/state@^6.4.0": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.4.1.tgz#da57143695c056d9a3c38705ed34136e2b68171b" - integrity sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A== +"@codemirror/state@^6.0.0", "@codemirror/state@^6.1.1", "@codemirror/state@^6.4.0", "@codemirror/state@^6.5.0": + version "6.5.4" + resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.5.4.tgz#f5be4b8c0d2310180d5f15a9f641c21ca69faf19" + integrity sha512-8y7xqG/hpB53l25CIoit9/ngxdfoG+fx+V3SHBrinnhOtLvKHRyAJJuHzkWrR4YXXLX8eXBsejgAAxHUOdW1yw== + dependencies: + "@marijn/find-cluster-break" "^1.0.0" "@codemirror/theme-one-dark@^6.0.0": - version "6.1.2" - resolved "https://registry.yarnpkg.com/@codemirror/theme-one-dark/-/theme-one-dark-6.1.2.tgz#fcef9f9cfc17a07836cb7da17c9f6d7231064df8" - integrity sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA== + version "6.1.3" + resolved "https://registry.yarnpkg.com/@codemirror/theme-one-dark/-/theme-one-dark-6.1.3.tgz#1dbb73f6e73c53c12ad2aed9f48c263c4e63ea37" + integrity sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA== dependencies: "@codemirror/language" "^6.0.0" "@codemirror/state" "^6.0.0" "@codemirror/view" "^6.0.0" "@lezer/highlight" "^1.0.0" -"@codemirror/view@^6.0.0", "@codemirror/view@^6.17.0", "@codemirror/view@^6.23.0": - version "6.25.1" - resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.25.1.tgz#826ea345fd757dbeeab6a6165c1823e851c67d16" - integrity sha512-2LXLxsQnHDdfGzDvjzAwZh2ZviNJm7im6tGpa0IONIDnFd8RZ80D2SNi8PDi6YjKcMoMRK20v6OmKIdsrwsyoQ== +"@codemirror/view@^6.0.0", "@codemirror/view@^6.17.0", "@codemirror/view@^6.23.0", "@codemirror/view@^6.27.0", "@codemirror/view@^6.35.0", "@codemirror/view@^6.37.0": + version "6.39.16" + resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.39.16.tgz#e9d876aba20b31df7858abd7c2a845319c70b302" + integrity sha512-m6S22fFpKtOWhq8HuhzsI1WzUP/hB9THbDj0Tl5KX4gbO6Y91hwBl7Yky33NdvB6IffuRFiBxf1R8kJMyXmA4Q== dependencies: - "@codemirror/state" "^6.4.0" + "@codemirror/state" "^6.5.0" + crelt "^1.0.6" style-mod "^4.1.0" w3c-keyname "^2.2.4" -"@emotion/cache@^11.4.0", "@emotion/cache@^11.7.1": - version "11.7.1" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.7.1.tgz#08d080e396a42e0037848214e8aa7bf879065539" - integrity sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A== - dependencies: - "@emotion/memoize" "^0.7.4" - "@emotion/sheet" "^1.1.0" - "@emotion/utils" "^1.0.0" - "@emotion/weak-memoize" "^0.2.5" - stylis "4.0.13" - -"@emotion/hash@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" - integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== - -"@emotion/memoize@^0.7.4": - version "0.7.5" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50" - integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== - -"@emotion/react@^11.1.1": - version "11.7.1" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.7.1.tgz#3f800ce9b20317c13e77b8489ac4a0b922b2fe07" - integrity sha512-DV2Xe3yhkF1yT4uAUoJcYL1AmrnO5SVsdfvu+fBuS7IbByDeTVx9+wFmvx9Idzv7/78+9Mgx2Hcmr7Fex3tIyw== - dependencies: - "@babel/runtime" "^7.13.10" - "@emotion/cache" "^11.7.1" - "@emotion/serialize" "^1.0.2" - "@emotion/sheet" "^1.1.0" - "@emotion/utils" "^1.0.0" - "@emotion/weak-memoize" "^0.2.5" +"@dmsnell/diff-match-patch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@dmsnell/diff-match-patch/-/diff-match-patch-1.1.0.tgz#5bac00243fa2583fa970d9865609f632dcd90e32" + integrity sha512-yejLPmM5pjsGvxS9gXablUSbInW7H976c/FJ4iQxWIm7/38xBySRemTPDe34lhg1gVLbJntX0+sH0jYfU+PN9A== + +"@emotion/babel-plugin@^11.13.5": + version "11.13.5" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz#eab8d65dbded74e0ecfd28dc218e75607c4e7bc0" + integrity sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/serialize" "^1.3.3" + babel-plugin-macros "^3.1.0" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.2.0" + +"@emotion/cache@^11.14.0", "@emotion/cache@^11.4.0": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" + integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== + dependencies: + "@emotion/memoize" "^0.9.0" + "@emotion/sheet" "^1.4.0" + "@emotion/utils" "^1.4.2" + "@emotion/weak-memoize" "^0.4.0" + stylis "4.2.0" + +"@emotion/hash@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" + integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== + +"@emotion/memoize@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" + integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== + +"@emotion/react@^11.8.1": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.14.0.tgz#cfaae35ebc67dd9ef4ea2e9acc6cd29e157dd05d" + integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.13.5" + "@emotion/cache" "^11.14.0" + "@emotion/serialize" "^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks" "^1.2.0" + "@emotion/utils" "^1.4.2" + "@emotion/weak-memoize" "^0.4.0" hoist-non-react-statics "^3.3.1" -"@emotion/serialize@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.2.tgz#77cb21a0571c9f68eb66087754a65fa97bfcd965" - integrity sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A== +"@emotion/serialize@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" + integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA== dependencies: - "@emotion/hash" "^0.8.0" - "@emotion/memoize" "^0.7.4" - "@emotion/unitless" "^0.7.5" - "@emotion/utils" "^1.0.0" + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/unitless" "^0.10.0" + "@emotion/utils" "^1.4.2" csstype "^3.0.2" -"@emotion/sheet@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.0.tgz#56d99c41f0a1cda2726a05aa6a20afd4c63e58d2" - integrity sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g== +"@emotion/sheet@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" + integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== -"@emotion/unitless@^0.7.5": - version "0.7.5" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" - integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== +"@emotion/unitless@^0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" + integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== -"@emotion/utils@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.0.0.tgz#abe06a83160b10570816c913990245813a2fd6af" - integrity sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA== - -"@emotion/weak-memoize@^0.2.5": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" - integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== - -"@esbuild/aix-ppc64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz#521cbd968dcf362094034947f76fa1b18d2d403c" - integrity sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw== - -"@esbuild/android-arm64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz#61ea550962d8aa12a9b33194394e007657a6df57" - integrity sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA== - -"@esbuild/android-arm@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.2.tgz#554887821e009dd6d853f972fde6c5143f1de142" - integrity sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA== - -"@esbuild/android-x64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.2.tgz#a7ce9d0721825fc578f9292a76d9e53334480ba2" - integrity sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A== - -"@esbuild/darwin-arm64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz#2cb7659bd5d109803c593cfc414450d5430c8256" - integrity sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg== - -"@esbuild/darwin-x64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz#e741fa6b1abb0cd0364126ba34ca17fd5e7bf509" - integrity sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA== - -"@esbuild/freebsd-arm64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz#2b64e7116865ca172d4ce034114c21f3c93e397c" - integrity sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g== - -"@esbuild/freebsd-x64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz#e5252551e66f499e4934efb611812f3820e990bb" - integrity sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA== - -"@esbuild/linux-arm64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz#dc4acf235531cd6984f5d6c3b13dbfb7ddb303cb" - integrity sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw== - -"@esbuild/linux-arm@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz#56a900e39240d7d5d1d273bc053daa295c92e322" - integrity sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw== - -"@esbuild/linux-ia32@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz#d4a36d473360f6870efcd19d52bbfff59a2ed1cc" - integrity sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w== - -"@esbuild/linux-loong64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz#fcf0ab8c3eaaf45891d0195d4961cb18b579716a" - integrity sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg== - -"@esbuild/linux-mips64el@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz#598b67d34048bb7ee1901cb12e2a0a434c381c10" - integrity sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw== - -"@esbuild/linux-ppc64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz#3846c5df6b2016dab9bc95dde26c40f11e43b4c0" - integrity sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ== - -"@esbuild/linux-riscv64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz#173d4475b37c8d2c3e1707e068c174bb3f53d07d" - integrity sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA== - -"@esbuild/linux-s390x@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz#f7a4790105edcab8a5a31df26fbfac1aa3dacfab" - integrity sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w== - -"@esbuild/linux-x64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz#2ecc1284b1904aeb41e54c9ddc7fcd349b18f650" - integrity sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA== - -"@esbuild/netbsd-arm64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz#e2863c2cd1501845995cb11adf26f7fe4be527b0" - integrity sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw== - -"@esbuild/netbsd-x64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz#93f7609e2885d1c0b5a1417885fba8d1fcc41272" - integrity sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA== - -"@esbuild/openbsd-arm64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz#a1985604a203cdc325fd47542e106fafd698f02e" - integrity sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA== - -"@esbuild/openbsd-x64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz#8209e46c42f1ffbe6e4ef77a32e1f47d404ad42a" - integrity sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg== - -"@esbuild/openharmony-arm64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz#8fade4441893d9cc44cbd7dcf3776f508ab6fb2f" - integrity sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag== - -"@esbuild/sunos-x64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz#980d4b9703a16f0f07016632424fc6d9a789dfc2" - integrity sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg== - -"@esbuild/win32-arm64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz#1c09a3633c949ead3d808ba37276883e71f6111a" - integrity sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg== - -"@esbuild/win32-ia32@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz#1b1e3a63ad4bef82200fef4e369e0fff7009eee5" - integrity sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ== - -"@esbuild/win32-x64@0.27.2": - version "0.27.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz#9e585ab6086bef994c6e8a5b3a0481219ada862b" - integrity sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ== +"@emotion/use-insertion-effect-with-fallbacks@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz#8a8cb77b590e09affb960f4ff1e9a89e532738bf" + integrity sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg== + +"@emotion/utils@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" + integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA== + +"@emotion/weak-memoize@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" + integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== + +"@esbuild/aix-ppc64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz#815b39267f9bffd3407ea6c376ac32946e24f8d2" + integrity sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg== + +"@esbuild/android-arm64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz#19b882408829ad8e12b10aff2840711b2da361e8" + integrity sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg== + +"@esbuild/android-arm@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.3.tgz#90be58de27915efa27b767fcbdb37a4470627d7b" + integrity sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA== + +"@esbuild/android-x64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.3.tgz#d7dcc976f16e01a9aaa2f9b938fbec7389f895ac" + integrity sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ== + +"@esbuild/darwin-arm64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz#9f6cac72b3a8532298a6a4493ed639a8988e8abd" + integrity sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg== + +"@esbuild/darwin-x64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz#ac61d645faa37fd650340f1866b0812e1fb14d6a" + integrity sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg== + +"@esbuild/freebsd-arm64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz#b8625689d73cf1830fe58c39051acdc12474ea1b" + integrity sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w== + +"@esbuild/freebsd-x64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz#07be7dd3c9d42fe0eccd2ab9f9ded780bc53bead" + integrity sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA== + +"@esbuild/linux-arm64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz#bf31918fe5c798586460d2b3d6c46ed2c01ca0b6" + integrity sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg== + +"@esbuild/linux-arm@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz#28493ee46abec1dc3f500223cd9f8d2df08f9d11" + integrity sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw== + +"@esbuild/linux-ia32@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz#750752a8b30b43647402561eea764d0a41d0ee29" + integrity sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg== + +"@esbuild/linux-loong64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz#a5a92813a04e71198c50f05adfaf18fc1e95b9ed" + integrity sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA== + +"@esbuild/linux-mips64el@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz#deb45d7fd2d2161eadf1fbc593637ed766d50bb1" + integrity sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw== + +"@esbuild/linux-ppc64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz#6f39ae0b8c4d3d2d61a65b26df79f6e12a1c3d78" + integrity sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA== + +"@esbuild/linux-riscv64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz#4c5c19c3916612ec8e3915187030b9df0b955c1d" + integrity sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ== + +"@esbuild/linux-s390x@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz#9ed17b3198fa08ad5ccaa9e74f6c0aff7ad0156d" + integrity sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw== + +"@esbuild/linux-x64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz#12383dcbf71b7cf6513e58b4b08d95a710bf52a5" + integrity sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA== + +"@esbuild/netbsd-arm64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz#dd0cb2fa543205fcd931df44f4786bfcce6df7d7" + integrity sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA== + +"@esbuild/netbsd-x64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz#028ad1807a8e03e155153b2d025b506c3787354b" + integrity sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA== + +"@esbuild/openbsd-arm64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz#e3c16ff3490c9b59b969fffca87f350ffc0e2af5" + integrity sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw== + +"@esbuild/openbsd-x64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz#c5a4693fcb03d1cbecbf8b422422468dfc0d2a8b" + integrity sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ== + +"@esbuild/openharmony-arm64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz#082082444f12db564a0775a41e1991c0e125055e" + integrity sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g== + +"@esbuild/sunos-x64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz#5ab036c53f929e8405c4e96e865a424160a1b537" + integrity sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA== + +"@esbuild/win32-arm64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz#38de700ef4b960a0045370c171794526e589862e" + integrity sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA== + +"@esbuild/win32-ia32@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz#451b93dc03ec5d4f38619e6cd64d9f9eff06f55c" + integrity sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q== + +"@esbuild/win32-x64@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz#0eaf705c941a218a43dba8e09f1df1d6cd2f1f17" + integrity sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA== "@eslint-community/eslint-utils@^4.8.0": version "4.9.1" @@ -469,66 +480,66 @@ dependencies: eslint-visitor-keys "^3.4.3" -"@eslint-community/regexpp@^4.12.1": +"@eslint-community/regexpp@^4.12.2": version "4.12.2" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== -"@eslint/config-array@^0.21.1": - version "0.21.1" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.1.tgz#7d1b0060fea407f8301e932492ba8c18aff29713" - integrity sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA== +"@eslint/config-array@^0.23.3": + version "0.23.3" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.23.3.tgz#3f4a93dd546169c09130cbd10f2415b13a20a219" + integrity sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw== dependencies: - "@eslint/object-schema" "^2.1.7" + "@eslint/object-schema" "^3.0.3" debug "^4.3.1" - minimatch "^3.1.2" + minimatch "^10.2.4" -"@eslint/config-helpers@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda" - integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw== +"@eslint/config-helpers@^0.5.2": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.5.3.tgz#721fe6bbb90d74b0c80d6ff2428e5bbcb002becb" + integrity sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw== dependencies: - "@eslint/core" "^0.17.0" + "@eslint/core" "^1.1.1" -"@eslint/core@^0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c" - integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ== +"@eslint/core@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-1.1.1.tgz#450f3d2be2d463ccd51119544092256b4e88df32" + integrity sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ== dependencies: "@types/json-schema" "^7.0.15" -"@eslint/eslintrc@^3.3.1": - version "3.3.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.3.tgz#26393a0806501b5e2b6a43aa588a4d8df67880ac" - integrity sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^10.0.1" - globals "^14.0.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.1" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" +"@eslint/object-schema@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-3.0.3.tgz#5bf671e52e382e4adc47a9906f2699374637db6b" + integrity sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ== -"@eslint/js@9.39.2": - version "9.39.2" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.2.tgz#2d4b8ec4c3ea13c1b3748e0c97ecd766bdd80599" - integrity sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA== +"@eslint/plugin-kit@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz#eb9e6689b56ce8bc1855bb33090e63f3fc115e8e" + integrity sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ== + dependencies: + "@eslint/core" "^1.1.1" + levn "^0.4.1" -"@eslint/object-schema@^2.1.7": - version "2.1.7" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" - integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== +"@floating-ui/core@^1.7.5": + version "1.7.5" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.5.tgz#d4af157a03330af5a60e69da7a4692507ada0622" + integrity sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ== + dependencies: + "@floating-ui/utils" "^0.2.11" -"@eslint/plugin-kit@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2" - integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA== +"@floating-ui/dom@^1.0.1", "@floating-ui/dom@^1.6.1": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.6.tgz#f915bba5abbb177e1f227cacee1b4d0634b187bf" + integrity sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ== dependencies: - "@eslint/core" "^0.17.0" - levn "^0.4.1" + "@floating-ui/core" "^1.7.5" + "@floating-ui/utils" "^0.2.11" + +"@floating-ui/utils@^0.2.11": + version "0.2.11" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.11.tgz#a269e055e40e2f45873bae9d1a2fdccbd314ea3f" + integrity sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg== "@fortawesome/fontawesome-free@^7.2.0": version "7.2.0" @@ -558,7 +569,7 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== -"@jridgewell/gen-mapping@^0.3.12": +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": version "0.3.13" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== @@ -566,15 +577,6 @@ "@jridgewell/sourcemap-codec" "^1.5.0" "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - "@jridgewell/remapping@^2.3.5": version "2.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" @@ -584,39 +586,16 @@ "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": version "1.5.5" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== -"@jridgewell/trace-mapping@^0.3.24": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jridgewell/trace-mapping@^0.3.28": +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28": version "0.3.31" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== @@ -624,34 +603,39 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@lezer/common@^1.0.0", "@lezer/common@^1.1.0", "@lezer/common@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.2.1.tgz#198b278b7869668e1bebbe687586e12a42731049" - integrity sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ== +"@lezer/common@^1.0.0", "@lezer/common@^1.1.0", "@lezer/common@^1.2.0", "@lezer/common@^1.3.0", "@lezer/common@^1.5.0": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.5.1.tgz#6e8c114ff5d36a41148e146a253734d3bb8807d3" + integrity sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw== "@lezer/highlight@^1.0.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@lezer/highlight/-/highlight-1.2.0.tgz#e5898c3644208b4b589084089dceeea2966f7780" - integrity sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA== + version "1.2.3" + resolved "https://registry.yarnpkg.com/@lezer/highlight/-/highlight-1.2.3.tgz#a20f324b71148a2ea9ba6ff42e58bbfaec702857" + integrity sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g== dependencies: - "@lezer/common" "^1.0.0" + "@lezer/common" "^1.3.0" "@lezer/json@^1.0.0": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@lezer/json/-/json-1.0.2.tgz#bdc849e174113e2d9a569a5e6fb1a27e2f703eaf" - integrity sha512-xHT2P4S5eeCYECyKNPhr4cbEL9tc8w83SPwRC373o9uEdrvGKTZoJVAGxpOsZckMlEh9W23Pc72ew918RWQOBQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@lezer/json/-/json-1.0.3.tgz#e773a012ad0088fbf07ce49cfba875cc9e5bc05f" + integrity sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ== dependencies: "@lezer/common" "^1.2.0" "@lezer/highlight" "^1.0.0" "@lezer/lr" "^1.0.0" "@lezer/lr@^1.0.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.4.0.tgz#ed52a75dbbfbb0d1eb63710ea84c35ee647cb67e" - integrity sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg== + version "1.4.8" + resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.4.8.tgz#333de9bc9346057323ff09beb4cda47ccc38a498" + integrity sha512-bPWa0Pgx69ylNlMlPvBPryqeLYQjyJjqPx+Aupm5zydLIF3NE+6MMLT8Yi23Bd9cif9VS00aUebn+6fDIGBcDA== dependencies: "@lezer/common" "^1.0.0" +"@marijn/find-cluster-break@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz#775374306116d51c0c500b8c4face0f9a04752d8" + integrity sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g== + "@parcel/watcher-android-arm64@2.5.6": version "2.5.6" resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz#5f32e0dba356f4ac9a11068d2a5c134ca3ba6564" @@ -741,15 +725,10 @@ "@parcel/watcher-win32-ia32" "2.5.6" "@parcel/watcher-win32-x64" "2.5.6" -"@remix-run/router@1.23.2": - version "1.23.2" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.23.2.tgz#156c4b481c0bee22a19f7924728a67120de06971" - integrity sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w== - -"@rolldown/pluginutils@1.0.0-beta.53": - version "1.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz#c57a5234ae122671aff6fe72e673a7ed90f03f87" - integrity sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ== +"@rolldown/pluginutils@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz#8a88cc92a0f741befc7bc109cb1a4c6b9408e1c5" + integrity sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q== "@rollup/rollup-android-arm-eabi@4.59.0": version "4.59.0" @@ -893,26 +872,26 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" - integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74" + integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q== dependencies: - "@babel/types" "^7.3.0" + "@babel/types" "^7.28.2" "@types/chai@^5.2.2": version "5.2.3" @@ -923,9 +902,9 @@ assertion-error "^2.0.1" "@types/debug@^4.0.0": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" - integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== dependencies: "@types/ms" "*" @@ -934,46 +913,41 @@ resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== +"@types/esrecurse@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@types/esrecurse/-/esrecurse-4.3.1.tgz#6f636af962fbe6191b830bd676ba5986926bccec" + integrity sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw== + "@types/estree-jsx@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.3.tgz#f8aa833ec986d82b8271a294a92ed1565bf2c66a" - integrity sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w== + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" + integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== dependencies: "@types/estree" "*" -"@types/estree@*": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - -"@types/estree@1.0.8", "@types/estree@^1.0.6": +"@types/estree@*", "@types/estree@1.0.8", "@types/estree@^1.0.0", "@types/estree@^1.0.6", "@types/estree@^1.0.8": version "1.0.8" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== -"@types/estree@^1.0.0": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - "@types/hast@^2.0.0": - version "2.3.4" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" - integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== + version "2.3.10" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.10.tgz#5c9d9e0b304bbb8879b857225c5ebab2d81d7643" + integrity sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw== dependencies: - "@types/unist" "*" + "@types/unist" "^2" "@types/hast@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.3.tgz#7f75e6b43bc3f90316046a287d9ad3888309f7e1" - integrity sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== dependencies: "@types/unist" "*" "@types/http-proxy@^1.17.15": - version "1.17.15" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.15.tgz#12118141ce9775a6499ecb4c01d02f90fc839d36" - integrity sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ== + version "1.17.17" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.17.tgz#d9e2c4571fe3507343cb210cd41790375e59a533" + integrity sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw== dependencies: "@types/node" "*" @@ -983,72 +957,58 @@ integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/mdast@^4.0.0": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.3.tgz#1e011ff013566e919a4232d1701ad30d70cab333" - integrity sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg== + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== dependencies: "@types/unist" "*" "@types/ms@*": - version "0.7.31" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" - integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" + integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@*": - version "17.0.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.18.tgz#3b4fed5cfb58010e3a2be4b6e74615e4847f1074" - integrity sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA== + version "25.3.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.3.5.tgz#beccb5915561f7a9970ace547ad44d6cdbf39b46" + integrity sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA== + dependencies: + undici-types "~7.18.0" -"@types/prismjs@^1.0.0": - version "1.26.3" - resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.3.tgz#47fe8e784c2dee24fe636cab82e090d3da9b7dec" - integrity sha512-A0D0aTXvjlqJ5ZILMz3rNfDBOx9hHxLZYv2by47Sm/pqW35zzjusrZTryatjN/Rf8Us2gZrJD+KeHbUSTux1Cw== +"@types/parse-json@^4.0.0": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== -"@types/prop-types@*": - version "15.7.4" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" - integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== +"@types/prismjs@^1.0.0": + version "1.26.6" + resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.6.tgz#6ea27c126d645319ae4f7055eda63a9e835c0187" + integrity sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw== "@types/react-transition-group@^4.4.0": - version "4.4.4" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.4.tgz#acd4cceaa2be6b757db61ed7b432e103242d163e" - integrity sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "17.0.39" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.39.tgz#d0f4cde092502a6db00a1cded6e6bf2abb7633ce" - integrity sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + version "4.4.12" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" + integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== "@types/trusted-types@^2.0.7": version "2.0.7" resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== -"@types/unist@*", "@types/unist@^2.0.0": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" - integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== +"@types/unist@*", "@types/unist@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== -"@types/unist@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.2.tgz#6dd61e43ef60b34086287f83683a5c1b2dc53d20" - integrity sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ== +"@types/unist@^2", "@types/unist@^2.0.0": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" + integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== -"@uiw/codemirror-extensions-basic-setup@4.25.4": - version "4.25.4" - resolved "https://registry.yarnpkg.com/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.25.4.tgz#f48fbb9b575f7a653c8bfae30aab57e36135e871" - integrity sha512-YzNwkm0AbPv1EXhCHYR5v0nqfemG2jEB0Z3Att4rBYqKrlG7AA9Rhjc3IyBaOzsBu18wtrp9/+uhTyu7TXSRng== +"@uiw/codemirror-extensions-basic-setup@4.25.8": + version "4.25.8" + resolved "https://registry.yarnpkg.com/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.25.8.tgz#a3848e6e8ea13cec56cfe698e39701d4210ac0f7" + integrity sha512-9Rr+liiBmK4xzZHszL+twNRJApthqmITBwDP3emNTtTrkBFN4gHlqfp+nodKmoVt1+bUH1qQCtyqt+7dbDTHiw== dependencies: "@codemirror/autocomplete" "^6.0.0" "@codemirror/commands" "^6.0.0" @@ -1059,26 +1019,26 @@ "@codemirror/view" "^6.0.0" "@uiw/copy-to-clipboard@~1.0.12": - version "1.0.16" - resolved "https://registry.yarnpkg.com/@uiw/copy-to-clipboard/-/copy-to-clipboard-1.0.16.tgz#38f7689be319b1f35dbf24254ec8eaec7158dcff" - integrity sha512-IXR+N363nLTR3ilklmM+B0nk774jVE/muOrBYt4Rdww/Pf3uP9XHyv2x6YZrbDh29F7w9BkzQyB8QF6WDShmJA== + version "1.0.20" + resolved "https://registry.yarnpkg.com/@uiw/copy-to-clipboard/-/copy-to-clipboard-1.0.20.tgz#380c62c1edabaa8acebadee2149865379fcb826d" + integrity sha512-IFQhS62CLNon1YgYJTEzXR2N3WVXg7V1FaBRDLMlzU6JY5X6Hr3OPAcw4WNoKcz2XcFD6XCgwEjlsmj+JA0mWA== "@uiw/react-codemirror@^4.25.4": - version "4.25.4" - resolved "https://registry.yarnpkg.com/@uiw/react-codemirror/-/react-codemirror-4.25.4.tgz#f362e13013f281dad717f0f83dca6f96c4cdf79d" - integrity sha512-ipO067oyfUw+DVaXhQCxkB0ZD9b7RnY+ByrprSYSKCHaULvJ3sqWYC/Zen6zVQ8/XC4o5EPBfatGiX20kC7XGA== + version "4.25.8" + resolved "https://registry.yarnpkg.com/@uiw/react-codemirror/-/react-codemirror-4.25.8.tgz#40e8ab9df1955052365520a785372d9097d5924b" + integrity sha512-A0aLOuJZm2yJ+U9GlMFwxwFciztjd5LhcAG4SMqFxdD58wH+sCQXuY4UU5J2hqgS390qAlShtUgREvJPUonbuQ== dependencies: "@babel/runtime" "^7.18.6" "@codemirror/commands" "^6.1.0" "@codemirror/state" "^6.1.1" "@codemirror/theme-one-dark" "^6.0.0" - "@uiw/codemirror-extensions-basic-setup" "4.25.4" + "@uiw/codemirror-extensions-basic-setup" "4.25.8" codemirror "^6.0.0" "@uiw/react-markdown-preview@^5.0.6": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@uiw/react-markdown-preview/-/react-markdown-preview-5.0.7.tgz#a38eb374ea35411b82d4890031b130b73b83a3e1" - integrity sha512-EmNI3LPM5Ff5ikcHJHcoZW268gpeAUPISfIwQaPjjHf/ET4aHNyo8sFBGV0+ycAaS52fXl2cvF+k/JweuMVVeQ== + version "5.1.5" + resolved "https://registry.yarnpkg.com/@uiw/react-markdown-preview/-/react-markdown-preview-5.1.5.tgz#c8fa17c7e88be826ff376cb7b48eff0ffb296a2c" + integrity sha512-DNOqx1a6gJR7Btt57zpGEKTfHRlb7rWbtctMRO2f82wWcuoJsxPBrM+JWebDdOD0LfD8oe2CQvW2ICQJKHQhZg== dependencies: "@babel/runtime" "^7.17.2" "@uiw/copy-to-clipboard" "~1.0.12" @@ -1091,6 +1051,7 @@ rehype-rewrite "~4.0.0" rehype-slug "~6.0.0" remark-gfm "~4.0.0" + remark-github-blockquote-alert "^1.0.0" unist-util-visit "^5.0.0" "@uiw/react-md-editor@^4.0.11": @@ -1104,19 +1065,19 @@ rehype-prism-plus "~2.0.0" "@ungap/structured-clone@^1.0.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== "@vitejs/plugin-react@^5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz#46f47be184c05a18839cb8705d79578b469ac6eb" - integrity sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ== + version "5.1.4" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-5.1.4.tgz#5b477e060bf612a7394c4febacc5de33a219b0e4" + integrity sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA== dependencies: - "@babel/core" "^7.28.5" + "@babel/core" "^7.29.0" "@babel/plugin-transform-react-jsx-self" "^7.27.1" "@babel/plugin-transform-react-jsx-source" "^7.27.1" - "@rolldown/pluginutils" "1.0.0-beta.53" + "@rolldown/pluginutils" "1.0.0-rc.3" "@types/babel__core" "^7.20.5" react-refresh "^0.18.0" @@ -1183,32 +1144,25 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.15.0: - version "8.15.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" - integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== +acorn@^8.16.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== +ajv@^6.14.0: + version "6.14.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.14.0.tgz#fd067713e228210636ebb08c60bd3765d6dbe73a" + integrity sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" @@ -1217,11 +1171,6 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" @@ -1303,7 +1252,7 @@ arraybuffer.prototype.slice@^1.0.4: asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== assertion-error@^2.0.1: version "2.0.1" @@ -1315,10 +1264,10 @@ async-function@^1.0.0: resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== -async@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" - integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== +async@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== available-typed-arrays@^1.0.7: version "1.0.7" @@ -1327,50 +1276,56 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" +babel-plugin-macros@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== + dependencies: + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" + bail@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +balanced-match@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a" + integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== base16@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" - integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= + integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== baseline-browser-mapping@^2.9.0: - version "2.9.19" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz#3e508c43c46d961eb4d7d2e5b8d1dd0f9ee4f488" - integrity sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg== + version "2.10.0" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz#5b09935025bf8a80e29130251e337c6a7fc8cbb9" + integrity sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA== bcp-47-match@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/bcp-47-match/-/bcp-47-match-2.0.1.tgz#aa8e045386dd4356be07b1fd79d614c108459f4e" - integrity sha512-+8o7axFDN/h8xATDM87FhnU1eod87dX0eZz1+cW3gggcicBqrmkZc33KBPWoE49qt5Asi5OhcxSOMOzp3opTfg== + version "2.0.3" + resolved "https://registry.yarnpkg.com/bcp-47-match/-/bcp-47-match-2.0.3.tgz#603226f6e5d3914a581408be33b28a53144b09d0" + integrity sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ== + +bignumber.js@*: + version "10.0.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-10.0.2.tgz#19087206c0630074023619230be46727b09c1c0f" + integrity sha512-E8Wp9O06QA6lneJ4aRUXKYf/1GIomqUEmUMwtIOMtDxf1U52ffJY+y7JBk/8wRafA8qOIqLnXQGqonYXZdBnFQ== boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== +brace-expansion@^5.0.2: + version "5.0.4" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.4.tgz#614daaecd0a688f660bbbc909a8748c3d80d4336" + integrity sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg== dependencies: - balanced-match "^1.0.0" + balanced-match "^4.0.2" braces@^3.0.3: version "3.0.3" @@ -1427,9 +1382,9 @@ callsites@^3.0.0: integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== caniuse-lite@^1.0.30001759: - version "1.0.30001766" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz#b6f6b55cb25a2d888d9393104d14751c6a7d6f7a" - integrity sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA== + version "1.0.30001777" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001777.tgz#028f21e4b2718d138b55e692583e6810ccf60691" + integrity sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ== ccount@^2.0.0: version "2.0.1" @@ -1441,16 +1396,7 @@ chai@^6.2.1: resolved "https://registry.yarnpkg.com/chai/-/chai-6.2.2.tgz#ae41b52c9aca87734505362717f3255facda360e" integrity sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg== -chalk@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0: +chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1469,9 +1415,9 @@ character-entities-legacy@^3.0.0: integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== character-entities@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.1.tgz#98724833e1e27990dee0bd0f2b8a859c3476aac7" - integrity sha512-OzmutCf2Kmc+6DrFrrPS8/tDh2+DpnrfzdICHWhcVC9eOd0N1PXmQEE1a8iM4IziIAG+8tmTq3K+oo0ubH6RRQ== + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== character-reference-invalid@^2.0.0: version "2.0.1" @@ -1485,10 +1431,10 @@ chokidar@^4.0.0: dependencies: readdirp "^4.0.1" -classnames@^2.2.5: - version "2.2.6" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" - integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== +classnames@^2.2.5, classnames@^2.3.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== cliui@^7.0.2: version "7.0.4" @@ -1499,15 +1445,15 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -codemirror@^5.18.2, codemirror@^5.65.1: - version "5.65.1" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.1.tgz#5988a812c974c467f964bcc1a00c944e373de502" - integrity sha512-s6aac+DD+4O2u1aBmdxhB7yz2XU7tG3snOyQ05Kxifahz7hoxnfxIRHxiCSEv3TUC38dIVH8G+lZH9UWSfGQxA== +codemirror@^5.18.2: + version "5.65.21" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.21.tgz#cacf320606c5450ad3b3da34bb9c666afec21068" + integrity sha512-6teYk0bA0nR3QP0ihGMoxuKzpl5W80FpnHpBJpgy66NK3cZv5b/d/HY8PnRvfSsCG1MTfr92u2WUl+wT0E40mQ== -codemirror@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-6.0.1.tgz#62b91142d45904547ee3e0e0e4c1a79158035a29" - integrity sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg== +codemirror@^6.0.0, codemirror@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-6.0.2.tgz#4d3fea1ad60b6753f97ca835f2f48c6936a8946e" + integrity sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw== dependencies: "@codemirror/autocomplete" "^6.0.0" "@codemirror/commands" "^6.0.0" @@ -1517,13 +1463,6 @@ codemirror@^6.0.0: "@codemirror/state" "^6.0.0" "@codemirror/view" "^6.0.0" -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -1531,27 +1470,17 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== comma-separated-tokens@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz#d4c25abb679b7751c880be623c1179780fe1dd98" - integrity sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + version "2.0.3" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== -convert-source-map@^1.7.0: +convert-source-map@^1.5.0, convert-source-map@^1.7.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== @@ -1561,38 +1490,48 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -copy-to-clipboard@^3: - version "3.3.1" - resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" - integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== +cookie@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.1.1.tgz#3bb9bdfc82369db9c2f69c93c9c3ceb310c88b3c" + integrity sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ== + +copy-to-clipboard@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" + integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== dependencies: toggle-selection "^1.0.6" -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= +cosmiconfig@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" create-react-class@^15.5.1: - version "15.6.3" - resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" - integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg== + version "15.7.0" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.7.0.tgz#7499d7ca2e69bb51d13faf59bd04f0c65a1d6c1e" + integrity sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng== dependencies: - fbjs "^0.8.9" loose-envify "^1.3.1" object-assign "^4.1.1" -crelt@^1.0.5: +crelt@^1.0.5, crelt@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72" integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g== cross-fetch@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + version "3.2.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" + integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== dependencies: - node-fetch "2.6.7" + node-fetch "^2.7.0" cross-spawn@^7.0.6: version "7.0.6" @@ -1604,14 +1543,14 @@ cross-spawn@^7.0.6: which "^2.0.1" css-selector-parser@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-3.0.4.tgz#1cabd23f3d83ebd5a752c1c9e72a2f37f6d904fa" - integrity sha512-pnmS1dbKsz6KA4EW4BznyPL2xxkNDRg62hcD0v8g6DEw2W7hxOln5M953jsp9hmw5Dg57S6o/A8GOn37mbAgcQ== + version "3.3.0" + resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-3.3.0.tgz#1a34220d76762c929ae99993df5a60721f505082" + integrity sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g== csstype@^3.0.2: - version "3.0.10" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" - integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== + version "3.2.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" + integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== data-view-buffer@^1.0.2: version "1.0.2" @@ -1640,14 +1579,7 @@ data-view-byte-offset@^1.0.1: es-errors "^1.3.0" is-data-view "^1.0.1" -debug@^4.0.0, debug@^4.1.0, debug@^4.3.6: - version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== - dependencies: - ms "^2.1.3" - -debug@^4.3.1, debug@^4.3.2: +debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.6: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -1655,9 +1587,9 @@ debug@^4.3.1, debug@^4.3.2: ms "^2.1.3" decode-named-character-reference@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.1.tgz#57b2bd9112659cacbc449d3577d7dadb8e1f3d1b" - integrity sha512-YV/0HQHreRwKb7uBopyIkLG17jG6Sv2qUchk9qSoVJ2f+flwRsPNBO0hAnjt6mTNYUT+vw9Gy2ihXg4sUWPi2w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz#3e40603760874c2e5867691b599d73a7da25b53f" + integrity sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q== dependencies: character-entities "^2.0.0" @@ -1685,9 +1617,9 @@ define-properties@^1.1.3, define-properties@^1.2.1: object-keys "^1.1.1" dequal@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d" - integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug== + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== detect-libc@^2.0.3: version "2.1.2" @@ -1701,11 +1633,6 @@ devlop@^1.0.0, devlop@^1.1.0: dependencies: dequal "^2.0.0" -diff-match-patch@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37" - integrity sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw== - direction@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/direction/-/direction-2.0.1.tgz#71800dd3c4fa102406502905d3866e65bdebb985" @@ -1748,9 +1675,9 @@ domhandler@^5.0.2: domelementtype "^2.3.0" dompurify@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.3.1.tgz#c7e1ddebfe3301eacd6c0c12a4af284936dbbb86" - integrity sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q== + version "3.3.2" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.3.2.tgz#58c515d0f8508b8749452a028aa589ad80b36325" + integrity sha512-6obghkliLdmKa56xdbLOpUZ43pAR6xFy1uOrxBaIDjT+yaRuuybLjGS9eVBoSR/UPU5fq3OXClEHLJNGvbxKpQ== optionalDependencies: "@types/trusted-types" "^2.0.7" @@ -1776,27 +1703,32 @@ ejs@^3.1.5: jake "^10.8.5" electron-to-chromium@^1.5.263: - version "1.5.283" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.283.tgz#51d492c37c2d845a0dccb113fe594880c8616de8" - integrity sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w== + version "1.5.307" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz#09f8973100c39fb0d003b890393cd1d58932b1c8" + integrity sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -encoding@^0.1.11: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -entities@^4.2.0, entities@^4.4.0: +entities@^4.2.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== +entities@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" + integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== + +error-ex@^1.3.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== + dependencies: + is-arrayish "^0.2.1" + es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9, es-abstract@^1.24.0, es-abstract@^1.24.1: version "1.24.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.1.tgz#f0c131ed5ea1bb2411134a8dd94def09c46c7899" @@ -1928,43 +1860,38 @@ es-to-primitive@^1.3.0: is-symbol "^1.0.4" esbuild@^0.27.0: - version "0.27.2" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.27.2.tgz#d83ed2154d5813a5367376bb2292a9296fc83717" - integrity sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw== + version "0.27.3" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.27.3.tgz#5859ca8e70a3af956b26895ce4954d7e73bd27a8" + integrity sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg== optionalDependencies: - "@esbuild/aix-ppc64" "0.27.2" - "@esbuild/android-arm" "0.27.2" - "@esbuild/android-arm64" "0.27.2" - "@esbuild/android-x64" "0.27.2" - "@esbuild/darwin-arm64" "0.27.2" - "@esbuild/darwin-x64" "0.27.2" - "@esbuild/freebsd-arm64" "0.27.2" - "@esbuild/freebsd-x64" "0.27.2" - "@esbuild/linux-arm" "0.27.2" - "@esbuild/linux-arm64" "0.27.2" - "@esbuild/linux-ia32" "0.27.2" - "@esbuild/linux-loong64" "0.27.2" - "@esbuild/linux-mips64el" "0.27.2" - "@esbuild/linux-ppc64" "0.27.2" - "@esbuild/linux-riscv64" "0.27.2" - "@esbuild/linux-s390x" "0.27.2" - "@esbuild/linux-x64" "0.27.2" - "@esbuild/netbsd-arm64" "0.27.2" - "@esbuild/netbsd-x64" "0.27.2" - "@esbuild/openbsd-arm64" "0.27.2" - "@esbuild/openbsd-x64" "0.27.2" - "@esbuild/openharmony-arm64" "0.27.2" - "@esbuild/sunos-x64" "0.27.2" - "@esbuild/win32-arm64" "0.27.2" - "@esbuild/win32-ia32" "0.27.2" - "@esbuild/win32-x64" "0.27.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escalade@^3.2.0: + "@esbuild/aix-ppc64" "0.27.3" + "@esbuild/android-arm" "0.27.3" + "@esbuild/android-arm64" "0.27.3" + "@esbuild/android-x64" "0.27.3" + "@esbuild/darwin-arm64" "0.27.3" + "@esbuild/darwin-x64" "0.27.3" + "@esbuild/freebsd-arm64" "0.27.3" + "@esbuild/freebsd-x64" "0.27.3" + "@esbuild/linux-arm" "0.27.3" + "@esbuild/linux-arm64" "0.27.3" + "@esbuild/linux-ia32" "0.27.3" + "@esbuild/linux-loong64" "0.27.3" + "@esbuild/linux-mips64el" "0.27.3" + "@esbuild/linux-ppc64" "0.27.3" + "@esbuild/linux-riscv64" "0.27.3" + "@esbuild/linux-s390x" "0.27.3" + "@esbuild/linux-x64" "0.27.3" + "@esbuild/netbsd-arm64" "0.27.3" + "@esbuild/netbsd-x64" "0.27.3" + "@esbuild/openbsd-arm64" "0.27.3" + "@esbuild/openbsd-x64" "0.27.3" + "@esbuild/openharmony-arm64" "0.27.3" + "@esbuild/sunos-x64" "0.27.3" + "@esbuild/win32-arm64" "0.27.3" + "@esbuild/win32-ia32" "0.27.3" + "@esbuild/win32-x64" "0.27.3" + +escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== @@ -1972,12 +1899,7 @@ escalade@^3.2.0: escape-html@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^4.0.0: version "4.0.0" @@ -2024,11 +1946,13 @@ eslint-plugin-react@^7.37.5: string.prototype.matchall "^4.0.12" string.prototype.repeat "^1.0.0" -eslint-scope@^8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" - integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== +eslint-scope@^9.1.2: + version "9.1.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-9.1.2.tgz#b9de6ace2fab1cff24d2e58d85b74c8fcea39802" + integrity sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ== dependencies: + "@types/esrecurse" "^4.3.1" + "@types/estree" "^1.0.8" esrecurse "^4.3.0" estraverse "^5.2.0" @@ -2037,37 +1961,34 @@ eslint-visitor-keys@^3.4.3: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint-visitor-keys@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" - integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== +eslint-visitor-keys@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz#9e3c9489697824d2d4ce3a8ad12628f91e9f59be" + integrity sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA== -eslint@^9.39.2: - version "9.39.2" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.2.tgz#cb60e6d16ab234c0f8369a3fe7cc87967faf4b6c" - integrity sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw== +eslint@^10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-10.0.3.tgz#360a7de7f2706eb8a32caa17ca983f0089efe694" + integrity sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ== dependencies: "@eslint-community/eslint-utils" "^4.8.0" - "@eslint-community/regexpp" "^4.12.1" - "@eslint/config-array" "^0.21.1" - "@eslint/config-helpers" "^0.4.2" - "@eslint/core" "^0.17.0" - "@eslint/eslintrc" "^3.3.1" - "@eslint/js" "9.39.2" - "@eslint/plugin-kit" "^0.4.1" + "@eslint-community/regexpp" "^4.12.2" + "@eslint/config-array" "^0.23.3" + "@eslint/config-helpers" "^0.5.2" + "@eslint/core" "^1.1.1" + "@eslint/plugin-kit" "^0.6.1" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.4.2" "@types/estree" "^1.0.6" - ajv "^6.12.4" - chalk "^4.0.0" + ajv "^6.14.0" cross-spawn "^7.0.6" debug "^4.3.2" escape-string-regexp "^4.0.0" - eslint-scope "^8.4.0" - eslint-visitor-keys "^4.2.1" - espree "^10.4.0" - esquery "^1.5.0" + eslint-scope "^9.1.2" + eslint-visitor-keys "^5.0.1" + espree "^11.1.1" + esquery "^1.7.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^8.0.0" @@ -2077,21 +1998,20 @@ eslint@^9.39.2: imurmurhash "^0.1.4" is-glob "^4.0.0" json-stable-stringify-without-jsonify "^1.0.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" + minimatch "^10.2.4" natural-compare "^1.4.0" optionator "^0.9.3" -espree@^10.0.1, espree@^10.4.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" - integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== +espree@^11.1.1: + version "11.2.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-11.2.0.tgz#01d5e47dc332aaba3059008362454a8cc34ccaa5" + integrity sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw== dependencies: - acorn "^8.15.0" + acorn "^8.16.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^4.2.1" + eslint-visitor-keys "^5.0.1" -esquery@^1.5.0: +esquery@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== @@ -2140,7 +2060,7 @@ events@^3.3.0: exenv@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" - integrity sha1-KueOhdmJQVhnCwPUe+wfA72Ru50= + integrity sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw== expect-type@^1.2.2: version "1.3.0" @@ -2179,23 +2099,10 @@ fbjs-css-vars@^1.0.0: resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== -fbjs@^0.8.9: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - fbjs@^3.0.0, fbjs@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" - integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== + version "3.0.5" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.5.tgz#aa0edb7d5caa6340011790bd9249dbef8a81128d" + integrity sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg== dependencies: cross-fetch "^3.1.5" fbjs-css-vars "^1.0.0" @@ -2203,7 +2110,7 @@ fbjs@^3.0.0, fbjs@^3.0.1: object-assign "^4.1.0" promise "^7.1.1" setimmediate "^1.0.5" - ua-parser-js "^0.7.30" + ua-parser-js "^1.0.35" fdir@^6.5.0: version "6.5.0" @@ -2217,10 +2124,10 @@ file-entry-cache@^8.0.0: dependencies: flat-cache "^4.0.0" -filelist@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== +filelist@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.6.tgz#1e8870942a7c636c862f7c49b9394937b6a995a3" + integrity sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA== dependencies: minimatch "^5.0.1" @@ -2231,6 +2138,11 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -2248,22 +2160,22 @@ flat-cache@^4.0.0: keyv "^4.5.4" flatted@^3.2.9: - version "3.3.3" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" - integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== + version "3.4.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.0.tgz#92ab2efec9b272eb85a3a25a106c3afbbc990d8b" + integrity sha512-kC6Bb+ooptOIvWj5B63EQWkF0FEnNjV2ZNkLMLZRDDduIiWeFF4iKnslwhiWxjAdbg4NzTNo6h0qLuvFrcx+Sw== flux@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.3.tgz#573b504a24982c4768fdfb59d8d2ea5637d72ee7" - integrity sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw== + version "4.0.4" + resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.4.tgz#9661182ea81d161ee1a6a6af10d20485ef2ac572" + integrity sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw== dependencies: fbemitter "^3.0.0" fbjs "^3.0.1" follow-redirects@^1.0.0: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== for-each@^0.3.3, for-each@^0.3.5: version "0.3.5" @@ -2275,14 +2187,9 @@ for-each@^0.3.3, for-each@^0.3.5: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -fsevents@~2.3.3: +fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== @@ -2370,26 +2277,21 @@ glob-parent@^6.0.2: is-glob "^4.0.3" glob@^7.1.3, glob@^7.1.6: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" -globals@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" - integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== - globals@^17.2.0: - version "17.2.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-17.2.0.tgz#41d29408d6f5408457d2ef965d29215e3026779f" - integrity sha512-tovnCz/fEq+Ripoq+p/gN1u7l6A7wwkoBT9pRCzTHzsD/LvADIzXZdjmRymh5Ztf0DYC3Rwg5cZRYjxzBmzbWg== + version "17.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-17.4.0.tgz#33d7d297ed1536b388a0e2f4bcd0ff19c8ff91b5" + integrity sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw== globalthis@^1.0.4: version "1.0.4" @@ -2416,11 +2318,6 @@ has-bigints@^1.0.2: resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" @@ -2460,9 +2357,9 @@ hasown@^2.0.2: function-bind "^1.1.2" hast-util-from-html@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz#9cd38ee81bf40b2607368b92a04b0905fa987488" - integrity sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g== + version "2.0.3" + resolved "https://registry.yarnpkg.com/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz#485c74785358beb80c4ba6346299311ac4c49c82" + integrity sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw== dependencies: "@types/hast" "^3.0.0" devlop "^1.1.0" @@ -2472,15 +2369,15 @@ hast-util-from-html@^2.0.0: vfile-message "^4.0.0" hast-util-from-parse5@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz#654a5676a41211e14ee80d1b1758c399a0327651" - integrity sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ== + version "8.0.3" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz#830a35022fff28c3fea3697a98c2f4cc6b835a2e" + integrity sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg== dependencies: "@types/hast" "^3.0.0" "@types/unist" "^3.0.0" devlop "^1.0.0" - hastscript "^8.0.0" - property-information "^6.0.0" + hastscript "^9.0.0" + property-information "^7.0.0" vfile "^6.0.0" vfile-location "^5.0.0" web-namespaces "^2.0.0" @@ -2507,9 +2404,9 @@ hast-util-is-element@^3.0.0: "@types/hast" "^3.0.0" hast-util-parse-selector@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz#a519e27e8b61bd5a98fad494ed06131ce68d9c3f" - integrity sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg== + version "3.1.1" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz#25ab00ae9e75cbc62cf7a901f68a247eade659e2" + integrity sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA== dependencies: "@types/hast" "^2.0.0" @@ -2521,9 +2418,9 @@ hast-util-parse-selector@^4.0.0: "@types/hast" "^3.0.0" hast-util-raw@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-9.0.1.tgz#2ba8510e4ed2a1e541cde2a4ebb5c38ab4c82c2d" - integrity sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA== + version "9.1.0" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-9.1.0.tgz#79b66b26f6f68fb50dfb4716b2cdca90d92adf2e" + integrity sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw== dependencies: "@types/hast" "^3.0.0" "@types/unist" "^3.0.0" @@ -2540,9 +2437,9 @@ hast-util-raw@^9.0.0: zwitch "^2.0.0" hast-util-select@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hast-util-select/-/hast-util-select-6.0.2.tgz#f1e6c583ab6227cb510383471328734342bd1d1c" - integrity sha512-hT/SD/d/Meu+iobvgkffo1QecV8WeKWxwsNMzcTJsKw1cKTQKSR/7ArJeURLNJF9HDjp9nVoORyNNJxrvBye8Q== + version "6.0.4" + resolved "https://registry.yarnpkg.com/hast-util-select/-/hast-util-select-6.0.4.tgz#1d8f69657a57441d0ce0ade35887874d3e65a303" + integrity sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw== dependencies: "@types/hast" "^3.0.0" "@types/unist" "^3.0.0" @@ -2554,35 +2451,33 @@ hast-util-select@^6.0.0: hast-util-has-property "^3.0.0" hast-util-to-string "^3.0.0" hast-util-whitespace "^3.0.0" - not "^0.1.0" nth-check "^2.0.0" - property-information "^6.0.0" + property-information "^7.0.0" space-separated-tokens "^2.0.0" unist-util-visit "^5.0.0" zwitch "^2.0.0" hast-util-to-html@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-9.0.0.tgz#51c0ae2a3550b9aa988c094c4fc4e327af0dddd1" - integrity sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw== + version "9.0.5" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz#ccc673a55bb8e85775b08ac28380f72d47167005" + integrity sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw== dependencies: "@types/hast" "^3.0.0" "@types/unist" "^3.0.0" ccount "^2.0.0" comma-separated-tokens "^2.0.0" - hast-util-raw "^9.0.0" hast-util-whitespace "^3.0.0" html-void-elements "^3.0.0" mdast-util-to-hast "^13.0.0" - property-information "^6.0.0" + property-information "^7.0.0" space-separated-tokens "^2.0.0" stringify-entities "^4.0.0" zwitch "^2.0.4" hast-util-to-jsx-runtime@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz#3ed27caf8dc175080117706bf7269404a0aa4f7c" - integrity sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ== + version "2.3.6" + resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz#ff31897aae59f62232e21594eac7ef6b63333e98" + integrity sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg== dependencies: "@types/estree" "^1.0.0" "@types/hast" "^3.0.0" @@ -2594,29 +2489,29 @@ hast-util-to-jsx-runtime@^2.0.0: mdast-util-mdx-expression "^2.0.0" mdast-util-mdx-jsx "^3.0.0" mdast-util-mdxjs-esm "^2.0.0" - property-information "^6.0.0" + property-information "^7.0.0" space-separated-tokens "^2.0.0" - style-to-object "^1.0.0" + style-to-js "^1.0.0" unist-util-position "^5.0.0" vfile-message "^4.0.0" hast-util-to-parse5@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz#477cd42d278d4f036bc2ea58586130f6f39ee6ed" - integrity sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw== + version "8.0.1" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz#95aa391cc0514b4951418d01c883d1038af42f5d" + integrity sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA== dependencies: "@types/hast" "^3.0.0" comma-separated-tokens "^2.0.0" devlop "^1.0.0" - property-information "^6.0.0" + property-information "^7.0.0" space-separated-tokens "^2.0.0" web-namespaces "^2.0.0" zwitch "^2.0.0" -hast-util-to-string@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz#2a131948b4b1b26461a2c8ac876e2c88d02946bd" - integrity sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA== +hast-util-to-string@^3.0.0, hast-util-to-string@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz#a4f15e682849326dd211c97129c94b0c3e76527c" + integrity sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A== dependencies: "@types/hast" "^3.0.0" @@ -2628,9 +2523,9 @@ hast-util-whitespace@^3.0.0: "@types/hast" "^3.0.0" hastscript@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-7.0.2.tgz#d811fc040817d91923448a28156463b2e40d590a" - integrity sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g== + version "7.2.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-7.2.0.tgz#0eafb7afb153d047077fa2a833dc9b7ec604d10b" + integrity sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw== dependencies: "@types/hast" "^2.0.0" comma-separated-tokens "^2.0.0" @@ -2638,15 +2533,15 @@ hastscript@^7.0.0: property-information "^6.0.0" space-separated-tokens "^2.0.0" -hastscript@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-8.0.0.tgz#4ef795ec8dee867101b9f23cc830d4baf4fd781a" - integrity sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw== +hastscript@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-9.0.1.tgz#dbc84bef6051d40084342c229c451cd9dc567dff" + integrity sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w== dependencies: "@types/hast" "^3.0.0" comma-separated-tokens "^2.0.0" hast-util-parse-selector "^4.0.0" - property-information "^6.0.0" + property-information "^7.0.0" space-separated-tokens "^2.0.0" hermes-estree@0.25.1: @@ -2674,9 +2569,9 @@ hoist-non-react-statics@^3.3.1: react-is "^16.7.0" html-url-attributes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/html-url-attributes/-/html-url-attributes-3.0.0.tgz#fc4abf0c3fb437e2329c678b80abb3c62cff6f08" - integrity sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow== + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-url-attributes/-/html-url-attributes-3.0.1.tgz#83b052cd5e437071b756cd74ae70f708870c2d87" + integrity sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ== html-void-elements@^3.0.0: version "3.0.0" @@ -2704,17 +2599,14 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" -i18n-js@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/i18n-js/-/i18n-js-3.8.0.tgz#b8fd6b12e1d88cb71f9806c29bca7c31c012e504" - integrity sha512-hDsGgPuvw/2P+lXSbOafAwspK8Ste8YrwuuUg17W3wEcO1JkQxBlPgsN1t2+852nTnz4YSYTjZc/1nAA2PC/nw== - -iconv-lite@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" - integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== +i18n-js@^4.5.3: + version "4.5.3" + resolved "https://registry.yarnpkg.com/i18n-js/-/i18n-js-4.5.3.tgz#b86c5e6b8d1f09e15952edd7fb7d07445e8d5475" + integrity sha512-5/tT6R9t9qlYqGhxGq9I9Ap3WKUaAMq5aRuO1gqAcUqm6xGbL0jwTAjSFjgbx935BAV8QbEzvQOzE796dUlEfA== dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" + bignumber.js "*" + lodash "*" + make-plural "7.5.0" ignore@^5.2.0: version "5.3.2" @@ -2722,14 +2614,14 @@ ignore@^5.2.0: integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== immutable@^5.0.2: - version "5.1.4" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.4.tgz#e3f8c1fe7b567d56cf26698f31918c241dae8c1f" - integrity sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA== + version "5.1.5" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.5.tgz#93ee4db5c2a9ab42a4a783069f3c5d8847d40165" + integrity sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A== import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -2742,7 +2634,7 @@ imurmurhash@^0.1.4: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" @@ -2752,10 +2644,10 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inline-style-parser@0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.2.tgz#d498b4e6de0373458fc610ff793f6b14ebf45633" - integrity sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ== +inline-style-parser@0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.7.tgz#b1fc68bfc0313b8685745e4464e37f9376b9c909" + integrity sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA== internal-slot@^1.1.0: version "1.1.0" @@ -2788,6 +2680,11 @@ is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: call-bound "^1.0.3" get-intrinsic "^1.2.6" +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + is-async-function@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" @@ -2819,7 +2716,7 @@ is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.13.0: +is-core-module@^2.16.1: version "2.16.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== @@ -2849,14 +2746,14 @@ is-decimal@^2.0.0: integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-finalizationregistry@^1.1.0: version "1.1.1" @@ -2917,9 +2814,9 @@ is-number@^7.0.0: integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-plain-obj@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.0.0.tgz#06c0999fd7574edf5a906ba5644ad0feb3a84d22" - integrity sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw== + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== is-plain-object@^5.0.0: version "5.0.0" @@ -2948,11 +2845,6 @@ is-shared-array-buffer@^1.0.4: dependencies: call-bound "^1.0.3" -is-stream@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - is-string@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" @@ -3014,14 +2906,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - iterator.prototype@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39" @@ -3035,14 +2919,13 @@ iterator.prototype@^1.1.5: set-function-name "^2.0.2" jake@^10.8.5: - version "10.8.5" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" - integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + version "10.9.4" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.4.tgz#d626da108c63d5cfb00ab5c25fadc7e0084af8e6" + integrity sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA== dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.1" - minimatch "^3.0.4" + async "^3.2.6" + filelist "^1.0.4" + picocolors "^1.1.1" js-cookie@^3.0.5: version "3.0.5" @@ -3054,13 +2937,6 @@ js-cookie@^3.0.5: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" - integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== - dependencies: - argparse "^2.0.1" - jsesc@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" @@ -3071,6 +2947,11 @@ json-buffer@3.0.1: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -3086,13 +2967,12 @@ json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsondiffpatch@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/jsondiffpatch/-/jsondiffpatch-0.4.1.tgz#9fb085036767f03534ebd46dcd841df6070c5773" - integrity sha512-t0etAxTUk1w5MYdNOkZBZ8rvYYN5iL+2dHCCx/DpkFm/bW28M6y5nUS83D4XdZiHy35Fpaw6LBb+F88fHZnVCw== +jsondiffpatch@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/jsondiffpatch/-/jsondiffpatch-0.7.3.tgz#d83360730767c48076fb4a8db89d33d46de0cbe2" + integrity sha512-zd4dqFiXSYyant2WgSXAZ9+yYqilNVvragVNkNRn2IFZKgjyULNrKRznqN4Zon0MkLueCg+3QaPVCnDAVP20OQ== dependencies: - chalk "^2.3.0" - diff-match-patch "^1.0.0" + "@dmsnell/diff-match-patch" "^1.1.0" "jsx-ast-utils@^2.4.1 || ^3.0.0": version "3.3.5" @@ -3119,6 +2999,11 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -3129,49 +3014,49 @@ locate-path@^6.0.0: lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== lodash.curry@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" - integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= + integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.escape@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" - integrity sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg= + integrity sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw== lodash.flow@^3.3.0: version "3.5.0" resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" - integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= + integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== lodash.isequal@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@^4.17.20: +lodash@*, lodash@^4.17.20: version "4.17.23" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a" integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w== longest-streak@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.0.1.tgz#c97315b7afa0e7d9525db9a5a2953651432bdc5d" - integrity sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -3185,13 +3070,6 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - magic-string@^0.30.21: version "0.30.21" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" @@ -3199,10 +3077,15 @@ magic-string@^0.30.21: dependencies: "@jridgewell/sourcemap-codec" "^1.5.5" +make-plural@7.5.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-7.5.0.tgz#ff99598640d82ec7a69bea15d34ecc50152fc0db" + integrity sha512-0booA+aVYyVFoR67JBHdfVk0U08HmrBH2FrtmBqBa+NldlqXv/G2Z9VQuQq6Wgp2jDWdybEWGfBkk1cq5264WA== + markdown-table@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.2.tgz#9b59eb2c1b22fe71954a65ff512887065a7bb57c" - integrity sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA== + version "3.0.4" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a" + integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== math-intrinsics@^1.1.0: version "1.1.0" @@ -3210,9 +3093,9 @@ math-intrinsics@^1.1.0: integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== mdast-util-find-and-replace@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz#a6fc7b62f0994e973490e45262e4bc07607b04e0" - integrity sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA== + version "3.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz#70a3174c894e14df722abf43bc250cbae44b11df" + integrity sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg== dependencies: "@types/mdast" "^4.0.0" escape-string-regexp "^5.0.0" @@ -3220,9 +3103,9 @@ mdast-util-find-and-replace@^3.0.0: unist-util-visit-parents "^6.0.0" mdast-util-from-markdown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz#52f14815ec291ed061f2922fd14d6689c810cb88" - integrity sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA== + version "2.0.3" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz#c95822b91aab75f18a4cbe8b2f51b873ed2cf0c7" + integrity sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q== dependencies: "@types/mdast" "^4.0.0" "@types/unist" "^3.0.0" @@ -3238,9 +3121,9 @@ mdast-util-from-markdown@^2.0.0: unist-util-stringify-position "^4.0.0" mdast-util-gfm-autolink-literal@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz#5baf35407421310a08e68c15e5d8821e8898ba2a" - integrity sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg== + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz#abd557630337bd30a6d5a4bd8252e1c2dc0875d5" + integrity sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ== dependencies: "@types/mdast" "^4.0.0" ccount "^2.0.0" @@ -3249,9 +3132,9 @@ mdast-util-gfm-autolink-literal@^2.0.0: micromark-util-character "^2.0.0" mdast-util-gfm-footnote@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz#25a1753c7d16db8bfd53cd84fe50562bd1e6d6a9" - integrity sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz#7778e9d9ca3df7238cc2bd3fa2b1bf6a65b19403" + integrity sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ== dependencies: "@types/mdast" "^4.0.0" devlop "^1.1.0" @@ -3290,9 +3173,9 @@ mdast-util-gfm-task-list-item@^2.0.0: mdast-util-to-markdown "^2.0.0" mdast-util-gfm@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz#3f2aecc879785c3cb6a81ff3a243dc11eca61095" - integrity sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw== + version "3.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz#2cdf63b92c2a331406b0fb0db4c077c1b0331751" + integrity sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ== dependencies: mdast-util-from-markdown "^2.0.0" mdast-util-gfm-autolink-literal "^2.0.0" @@ -3303,9 +3186,9 @@ mdast-util-gfm@^3.0.0: mdast-util-to-markdown "^2.0.0" mdast-util-mdx-expression@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz#4968b73724d320a379110d853e943a501bfd9d87" - integrity sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096" + integrity sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ== dependencies: "@types/estree-jsx" "^1.0.0" "@types/hast" "^3.0.0" @@ -3315,9 +3198,9 @@ mdast-util-mdx-expression@^2.0.0: mdast-util-to-markdown "^2.0.0" mdast-util-mdx-jsx@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.0.0.tgz#f73631fa5bb7a36712ff1e9cedec0cafed03401c" - integrity sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA== + version "3.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz#fd04c67a2a7499efb905a8a5c578dddc9fdada0d" + integrity sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q== dependencies: "@types/estree-jsx" "^1.0.0" "@types/hast" "^3.0.0" @@ -3329,7 +3212,6 @@ mdast-util-mdx-jsx@^3.0.0: mdast-util-to-markdown "^2.0.0" parse-entities "^4.0.0" stringify-entities "^4.0.0" - unist-util-remove-position "^5.0.0" unist-util-stringify-position "^4.0.0" vfile-message "^4.0.0" @@ -3346,9 +3228,9 @@ mdast-util-mdxjs-esm@^2.0.0: mdast-util-to-markdown "^2.0.0" mdast-util-phrasing@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.0.0.tgz#468cbbb277375523de807248b8ad969feb02a5c7" - integrity sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA== + version "4.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" + integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== dependencies: "@types/mdast" "^4.0.0" unist-util-is "^6.0.0" @@ -3369,15 +3251,16 @@ mdast-util-to-hast@^13.0.0: vfile "^6.0.0" mdast-util-to-markdown@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz#9813f1d6e0cdaac7c244ec8c6dabfdb2102ea2b4" - integrity sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ== + version "2.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b" + integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== dependencies: "@types/mdast" "^4.0.0" "@types/unist" "^3.0.0" longest-streak "^3.0.0" mdast-util-phrasing "^4.0.0" mdast-util-to-string "^4.0.0" + micromark-util-classify-character "^2.0.0" micromark-util-decode-string "^2.0.0" unist-util-visit "^5.0.0" zwitch "^2.0.0" @@ -3389,15 +3272,15 @@ mdast-util-to-string@^4.0.0: dependencies: "@types/mdast" "^4.0.0" -memoize-one@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" - integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== +memoize-one@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" + integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== micromark-core-commonmark@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz#50740201f0ee78c12a675bf3e68ffebc0bf931a3" - integrity sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA== + version "2.0.3" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4" + integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== dependencies: decode-named-character-reference "^1.0.0" devlop "^1.0.0" @@ -3417,9 +3300,9 @@ micromark-core-commonmark@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-gfm-autolink-literal@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz#f1e50b42e67d441528f39a67133eddde2bbabfd9" - integrity sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg== + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz#6286aee9686c4462c1e3552a9d505feddceeb935" + integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw== dependencies: micromark-util-character "^2.0.0" micromark-util-sanitize-uri "^2.0.0" @@ -3427,9 +3310,9 @@ micromark-extension-gfm-autolink-literal@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-gfm-footnote@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz#91afad310065a94b636ab1e9dab2c60d1aab953c" - integrity sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg== + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz#4dab56d4e398b9853f6fe4efac4fc9361f3e0750" + integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== dependencies: devlop "^1.0.0" micromark-core-commonmark "^2.0.0" @@ -3441,9 +3324,9 @@ micromark-extension-gfm-footnote@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-gfm-strikethrough@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz#6917db8e320da70e39ffbf97abdbff83e6783e61" - integrity sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz#86106df8b3a692b5f6a92280d3879be6be46d923" + integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw== dependencies: devlop "^1.0.0" micromark-util-chunked "^2.0.0" @@ -3453,9 +3336,9 @@ micromark-extension-gfm-strikethrough@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-gfm-table@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz#2cf3fe352d9e089b7ef5fff003bdfe0da29649b7" - integrity sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw== + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz#fac70bcbf51fe65f5f44033118d39be8a9b5940b" + integrity sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg== dependencies: devlop "^1.0.0" micromark-factory-space "^2.0.0" @@ -3471,9 +3354,9 @@ micromark-extension-gfm-tagfilter@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-gfm-task-list-item@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz#ee8b208f1ced1eb9fb11c19a23666e59d86d4838" - integrity sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz#bcc34d805639829990ec175c3eea12bb5b781f2c" + integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== dependencies: devlop "^1.0.0" micromark-factory-space "^2.0.0" @@ -3496,18 +3379,18 @@ micromark-extension-gfm@^3.0.0: micromark-util-types "^2.0.0" micromark-factory-destination@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz#857c94debd2c873cba34e0445ab26b74f6a6ec07" - integrity sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" + integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== dependencies: micromark-util-character "^2.0.0" micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" micromark-factory-label@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz#17c5c2e66ce39ad6f4fc4cbf40d972f9096f726a" - integrity sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1" + integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== dependencies: devlop "^1.0.0" micromark-util-character "^2.0.0" @@ -3515,17 +3398,17 @@ micromark-factory-label@^2.0.0: micromark-util-types "^2.0.0" micromark-factory-space@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz#5e7afd5929c23b96566d0e1ae018ae4fcf81d030" - integrity sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc" + integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== dependencies: micromark-util-character "^2.0.0" micromark-util-types "^2.0.0" micromark-factory-title@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz#726140fc77892af524705d689e1cf06c8a83ea95" - integrity sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94" + integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== dependencies: micromark-factory-space "^2.0.0" micromark-util-character "^2.0.0" @@ -3533,9 +3416,9 @@ micromark-factory-title@^2.0.0: micromark-util-types "^2.0.0" micromark-factory-whitespace@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz#9e92eb0f5468083381f923d9653632b3cfb5f763" - integrity sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1" + integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== dependencies: micromark-factory-space "^2.0.0" micromark-util-character "^2.0.0" @@ -3543,48 +3426,48 @@ micromark-factory-whitespace@^2.0.0: micromark-util-types "^2.0.0" micromark-util-character@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.0.1.tgz#52b824c2e2633b6fb33399d2ec78ee2a90d6b298" - integrity sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw== + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" + integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== dependencies: micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" micromark-util-chunked@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz#e51f4db85fb203a79dbfef23fd41b2f03dc2ef89" - integrity sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051" + integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== dependencies: micromark-util-symbol "^2.0.0" micromark-util-classify-character@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz#8c7537c20d0750b12df31f86e976d1d951165f34" - integrity sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629" + integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== dependencies: micromark-util-character "^2.0.0" micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" micromark-util-combine-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz#75d6ab65c58b7403616db8d6b31315013bfb7ee5" - integrity sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9" + integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== dependencies: micromark-util-chunked "^2.0.0" micromark-util-types "^2.0.0" micromark-util-decode-numeric-character-reference@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz#2698bbb38f2a9ba6310e359f99fcb2b35a0d2bd5" - integrity sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ== + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5" + integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== dependencies: micromark-util-symbol "^2.0.0" micromark-util-decode-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz#7dfa3a63c45aecaa17824e656bcdb01f9737154a" - integrity sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2" + integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== dependencies: decode-named-character-reference "^1.0.0" micromark-util-character "^2.0.0" @@ -3592,42 +3475,42 @@ micromark-util-decode-string@^2.0.0: micromark-util-symbol "^2.0.0" micromark-util-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz#0921ac7953dc3f1fd281e3d1932decfdb9382ab1" - integrity sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" + integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== micromark-util-html-tag-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz#ae34b01cbe063363847670284c6255bb12138ec4" - integrity sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825" + integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== micromark-util-normalize-identifier@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz#91f9a4e65fe66cc80c53b35b0254ad67aa431d8b" - integrity sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d" + integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== dependencies: micromark-util-symbol "^2.0.0" micromark-util-resolve-all@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz#189656e7e1a53d0c86a38a652b284a252389f364" - integrity sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b" + integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== dependencies: micromark-util-types "^2.0.0" micromark-util-sanitize-uri@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz#ec8fbf0258e9e6d8f13d9e4770f9be64342673de" - integrity sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" + integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== dependencies: micromark-util-character "^2.0.0" micromark-util-encode "^2.0.0" micromark-util-symbol "^2.0.0" micromark-util-subtokenize@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz#9f412442d77e0c5789ffdf42377fa8a2bcbdf581" - integrity sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg== + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee" + integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== dependencies: devlop "^1.0.0" micromark-util-chunked "^2.0.0" @@ -3635,19 +3518,19 @@ micromark-util-subtokenize@^2.0.0: micromark-util-types "^2.0.0" micromark-util-symbol@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz#12225c8f95edf8b17254e47080ce0862d5db8044" - integrity sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" + integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== micromark-util-types@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.0.tgz#63b4b7ffeb35d3ecf50d1ca20e68fc7caa36d95e" - integrity sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w== + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" + integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== micromark@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.0.tgz#84746a249ebd904d9658cfabc1e8e5f32cbc6249" - integrity sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ== + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb" + integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== dependencies: "@types/debug" "^4.0.0" debug "^4.0.0" @@ -3675,31 +3558,24 @@ micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" -minimatch@^3.0.4, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== +minimatch@10.2.4, minimatch@^10.2.4, minimatch@^3.1.1, minimatch@^3.1.2, minimatch@^5.0.1: + version "10.2.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.4.tgz#465b3accbd0218b8281f5301e27cedc697f96fde" + integrity sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg== dependencies: - brace-expansion "^2.0.1" + brace-expansion "^5.0.2" -minimist@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - minimist "^1.2.5" + minimist "^1.2.6" ms@^2.1.3: version "2.1.3" @@ -3721,42 +3597,39 @@ node-addon-api@^7.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== +node-exports-info@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/node-exports-info/-/node-exports-info-1.6.0.tgz#1aedafb01a966059c9a5e791a94a94d93f5c2a13" + integrity sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw== dependencies: - whatwg-url "^5.0.0" + array.prototype.flatmap "^1.3.3" + es-errors "^1.3.0" + object.entries "^1.1.9" + semver "^6.3.1" -node-fetch@^1.0.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== +node-fetch@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" + whatwg-url "^5.0.0" node-releases@^2.0.27: - version "2.0.27" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" - integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== - -not@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/not/-/not-0.1.0.tgz#c9691c1746c55dcfbe54cbd8bd4ff041bc2b519d" - integrity sha1-yWkcF0bFXc++VMvYvU/wQbwrUZ0= + version "2.0.36" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.36.tgz#99fd6552aaeda9e17c4713b57a63964a2e325e9d" + integrity sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA== nth-check@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" - integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.13.3, object-inspect@^1.13.4: version "1.13.4" @@ -3818,14 +3691,14 @@ obug@^2.1.1: once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" open@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/open/-/open-7.3.1.tgz#111119cb919ca1acd988f49685c4fdd0f4755356" - integrity sha512-f2wt9DCBKKjlFbjzGb8MOAW8LH8F0mrs1zc7KTjAJ9PZNQbfenzWbNP1VZJvw6ICMG9r14Ah6yfwPn7T7i646A== + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== dependencies: is-docker "^2.0.0" is-wsl "^2.1.1" @@ -3878,12 +3751,11 @@ parent-module@^1.0.0: callsites "^3.0.0" parse-entities@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e" - integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== + version "4.0.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.2.tgz#61d46f5ed28e4ee62e9ddc43d6b010188443f159" + integrity sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw== dependencies: "@types/unist" "^2.0.0" - character-entities "^2.0.0" character-entities-legacy "^3.0.0" character-reference-invalid "^2.0.0" decode-named-character-reference "^1.0.0" @@ -3891,17 +3763,27 @@ parse-entities@^4.0.0: is-decimal "^2.0.0" is-hexadecimal "^2.0.0" +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + parse-numeric-range@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== parse5@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + version "7.3.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" + integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== dependencies: - entities "^4.4.0" + entities "^6.0.0" path-exists@^4.0.0: version "4.0.0" @@ -3911,7 +3793,7 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.1.0: version "3.1.1" @@ -3923,6 +3805,11 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pathe@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" @@ -3949,9 +3836,9 @@ possible-typed-array-names@^1.0.0: integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== postcss@^8.5.6: - version "8.5.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" - integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + version "8.5.8" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.8.tgz#6230ecc8fb02e7a0f6982e53990937857e13f399" + integrity sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg== dependencies: nanoid "^3.3.11" picocolors "^1.1.1" @@ -3969,16 +3856,7 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" - -prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.5.4, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -3988,9 +3866,14 @@ prop-types@^15.7.2, prop-types@^15.8.1: react-is "^16.13.1" property-information@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.1.1.tgz#5ca85510a3019726cb9afed4197b7b8ac5926a22" - integrity sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w== + version "6.5.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" + integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== + +property-information@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d" + integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ== punycode@^2.1.0: version "2.3.1" @@ -4000,12 +3883,12 @@ punycode@^2.1.0: pure-color@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" - integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= + integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== react-base16-styling@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" - integrity sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw= + integrity sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ== dependencies: base16 "^1.0.0" lodash.curry "^4.0.1" @@ -4015,7 +3898,7 @@ react-base16-styling@^0.6.0: react-codemirror@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/react-codemirror/-/react-codemirror-1.0.0.tgz#91467b53b1f5d80d916a2fd0b4c7adb85a9001ba" - integrity sha1-kUZ7U7H12A2Rai/QtMetuFqQAbo= + integrity sha512-pPvL8b1vwLyfX5f3EMLyqZVXYY/qAKdqURYxi3izYfjWbnUdqVaFBA7z78o9eEM+UzgxuKjI864BJkPIRVS2JA== dependencies: classnames "^2.2.5" codemirror "^5.18.2" @@ -4025,29 +3908,28 @@ react-codemirror@^1.0.0: prop-types "^15.5.4" react-copy-to-clipboard@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.4.tgz#42ec519b03eb9413b118af92d1780c403a5f19bf" - integrity sha512-IeVAiNVKjSPeGax/Gmkqfa/+PuMTBhutEvFUaMQLwE2tS0EXrAdgOpWDX26bWTXF3HrioorR7lr08NqeYUWQCQ== + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.1.tgz#76adb8be03616e99692fcf3f762365ed3fb5ff16" + integrity sha512-s+HrzLyJBxrpGTYXF15dTgMjAJpEPZT/Yp6NytAtZMRngejxt6Pt5WrfFxLAcsqUDU6sY1Jz6tyHwIicE1U2Xg== dependencies: - copy-to-clipboard "^3" - prop-types "^15.5.8" + copy-to-clipboard "^3.3.3" + prop-types "^15.8.1" -react-dom@^18.3.1: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" - integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== +react-dom@^19.2.4: + version "19.2.4" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.4.tgz#6fac6bd96f7db477d966c7ec17c1a2b1ad8e6591" + integrity sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ== dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.2" + scheduler "^0.27.0" -react-highlight@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/react-highlight/-/react-highlight-0.14.0.tgz#5aefa5518baa580f96b68d48129d7a5d2dc0c9ef" - integrity sha512-kWE+KXOXidS7SABhVopOgMnowbI3RAfeGZbnrduLNlWrYAED8sycL9l/Fvw3w0PFpIIawB7mRDnyhDcM/cIIGA== +react-highlight@^0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/react-highlight/-/react-highlight-0.15.0.tgz#66749d01969853327d499959558f9468330cd9d8" + integrity sha512-5uV/b/N4Z421GSVVe05fz+OfTsJtFzx/fJBdafZyw4LS70XjIZwgEx3Lrkfc01W/RzZ2Dtfb0DApoaJFAIKBtA== dependencies: highlight.js "^10.5.0" -react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -4075,9 +3957,9 @@ react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== react-markdown@~9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-9.0.1.tgz#c05ddbff67fd3b3f839f8c648e6fb35d022397d1" - integrity sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg== + version "9.0.3" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-9.0.3.tgz#c12bf60dad05e9bf650b86bcc612d80636e8456e" + integrity sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw== dependencies: "@types/hast" "^3.0.0" devlop "^1.0.0" @@ -4091,9 +3973,9 @@ react-markdown@~9.0.1: vfile "^6.0.0" react-modal@^3.14.4: - version "3.14.4" - resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.14.4.tgz#2ca7e8e9a180955e5c9508c228b73167c1e6f6a3" - integrity sha512-8surmulejafYCH9wfUmFyj4UfbSJwjcgbS9gf3oOItu4Hwd6ivJyVBETI0yHRhpJKCLZMUtnhzk76wXTsNL6Qg== + version "3.16.3" + resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.16.3.tgz#c412d41915782e3c261253435d01468e2439b11b" + integrity sha512-yCYRJB5YkeQDQlTt17WGAgFJ7jr2QYcWa1SHqZ3PluDmnKJ/7+tVU+E6uKyZ0nODaeEj+xCpK4LcSnKXLMC0Nw== dependencies: exenv "^1.2.0" prop-types "^15.7.2" @@ -4105,67 +3987,67 @@ react-refresh@^0.18.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.18.0.tgz#2dce97f4fe932a4d8142fa1630e475c1729c8062" integrity sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw== -react-router-dom@^6.30.3: - version "6.30.3" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.30.3.tgz#42ae6dc4c7158bfb0b935f162b9621b29dddf740" - integrity sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag== +react-router-dom@^7.13.1: + version "7.13.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-7.13.1.tgz#74c045acc333ca94612b889cd1b1e1ee9534dead" + integrity sha512-UJnV3Rxc5TgUPJt2KJpo1Jpy0OKQr0AjgbZzBFjaPJcFOb2Y8jA5H3LT8HUJAiRLlWrEXWHbF1Z4SCZaQjWDHw== dependencies: - "@remix-run/router" "1.23.2" - react-router "6.30.3" + react-router "7.13.1" -react-router@6.30.3: - version "6.30.3" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.30.3.tgz#994b3ccdbe0e81fe84d4f998100f62584dfbf1cf" - integrity sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw== +react-router@7.13.1: + version "7.13.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-7.13.1.tgz#5e2b3ebafd6c78d9775e135474bf5060645077f7" + integrity sha512-td+xP4X2/6BJvZoX6xw++A2DdEi++YypA69bJUV5oVvqf6/9/9nNlD70YO1e9d3MyamJEBQFEzk6mbfDYbqrSA== dependencies: - "@remix-run/router" "1.23.2" + cookie "^1.0.1" + set-cookie-parser "^2.6.0" react-select@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.2.2.tgz#3d5edf0a60f1276fd5f29f9f90a305f0a25a5189" - integrity sha512-miGS2rT1XbFNjduMZT+V73xbJEeMzVkJOz727F6MeAr2hKE0uUSA8Ff7vD44H32x2PD3SRB6OXTY/L+fTV3z9w== + version "5.10.2" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.10.2.tgz#8dffc69dfd7d74684d9613e6eb27204e3b99e127" + integrity sha512-Z33nHdEFWq9tfnfVXaiM12rbJmk+QjFEztWLtmXqQhz6Al4UZZ9xc0wiatmGtUOCCnHN0WizL3tCMYRENX4rVQ== dependencies: "@babel/runtime" "^7.12.0" "@emotion/cache" "^11.4.0" - "@emotion/react" "^11.1.1" + "@emotion/react" "^11.8.1" + "@floating-ui/dom" "^1.0.1" "@types/react-transition-group" "^4.4.0" - memoize-one "^5.0.0" + memoize-one "^6.0.0" prop-types "^15.6.0" react-transition-group "^4.3.0" + use-isomorphic-layout-effect "^1.2.0" react-textarea-autosize@^8.3.2: - version "8.3.3" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz#f70913945369da453fd554c168f6baacd1fa04d8" - integrity sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ== + version "8.5.9" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.9.tgz#ab8627b09aa04d8a2f45d5b5cd94c84d1d4a8893" + integrity sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A== dependencies: - "@babel/runtime" "^7.10.2" - use-composed-ref "^1.0.0" - use-latest "^1.0.0" + "@babel/runtime" "^7.20.13" + use-composed-ref "^1.3.0" + use-latest "^1.2.1" -react-tooltip@^4.2.21: - version "4.2.21" - resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.2.21.tgz#840123ed86cf33d50ddde8ec8813b2960bfded7f" - integrity sha512-zSLprMymBDowknr0KVDiJ05IjZn9mQhhg4PRsqln0OZtURAJ1snt1xi5daZfagsh6vfsziZrc9pErPTDY1ACig== +react-tooltip@^5.30.0: + version "5.30.0" + resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-5.30.0.tgz#8e1af2d1bf91a2a5169302bd0eb82b62847ad224" + integrity sha512-Yn8PfbgQ/wmqnL7oBpz1QiDaLKrzZMdSUUdk7nVeGTwzbxCAJiJzR4VSYW+eIO42F1INt57sPUmpgKv0KwJKtg== dependencies: - prop-types "^15.7.2" - uuid "^7.0.3" + "@floating-ui/dom" "^1.6.1" + classnames "^2.3.0" react-transition-group@^4.3.0: - version "4.4.2" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470" - integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg== + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== dependencies: "@babel/runtime" "^7.5.5" dom-helpers "^5.0.1" loose-envify "^1.4.0" prop-types "^15.6.2" -react@^18.3.1: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" - integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== - dependencies: - loose-envify "^1.1.0" +react@^19.2.4: + version "19.2.4" + resolved "https://registry.yarnpkg.com/react/-/react-19.2.4.tgz#438e57baa19b77cb23aab516cf635cd0579ee09a" + integrity sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ== readdirp@^4.0.1: version "4.1.2" @@ -4187,19 +4069,24 @@ reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: which-builtin-type "^1.2.1" refractor@^4.8.0: - version "4.8.1" - resolved "https://registry.yarnpkg.com/refractor/-/refractor-4.8.1.tgz#fbdd889333a3d86c9c864479622855c9b38e9d42" - integrity sha512-/fk5sI0iTgFYlmVGYVew90AoYnNMP6pooClx/XKqyeeCQXrL0Kvgn8V0VEht5ccdljbzzF1i3Q213gcntkRExg== + version "4.9.0" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-4.9.0.tgz#2e1c7af0157230cdd2f9086660912eadc5f68323" + integrity sha512-nEG1SPXFoGGx+dcjftjv8cAjEusIh6ED1xhf5DG3C0x/k+rmZ2duKnc3QLpt6qeHv5fPb8uwN3VWN2BT7fr3Og== dependencies: "@types/hast" "^2.0.0" "@types/prismjs" "^1.0.0" hastscript "^7.0.0" parse-entities "^4.0.0" -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== +refractor@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-5.0.0.tgz#85daf0448a6d947f5361796eb22c31733d61d904" + integrity sha512-QXOrHQF5jOpjjLfiNk5GFnWhRXvxjUVnlFxkeDmewR5sXkr3iM46Zo+CnRR8B+MDVqkULW4EcLVcRBNOPXHosw== + dependencies: + "@types/hast" "^3.0.0" + "@types/prismjs" "^1.0.0" + hastscript "^9.0.0" + parse-entities "^4.0.0" regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4: version "1.5.4" @@ -4234,24 +4121,24 @@ rehype-autolink-headings@~7.1.0: unist-util-visit "^5.0.0" rehype-ignore@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/rehype-ignore/-/rehype-ignore-2.0.2.tgz#1212335d3c8bd86422c15d4a4e5afaabc0488802" - integrity sha512-BpAT/3lU9DMJ2siYVD/dSR0A/zQgD6Fb+fxkJd4j+wDVy6TYbYpK+FZqu8eM9EuNKGvi4BJR7XTZ/+zF02Dq8w== + version "2.0.3" + resolved "https://registry.yarnpkg.com/rehype-ignore/-/rehype-ignore-2.0.3.tgz#2548758120fa7aa6ede5e0bbea1b850d25c8fbf4" + integrity sha512-IzhP6/u/6sm49sdktuYSmeIuObWB+5yC/5eqVws8BhuGA9kY25/byz6uCy/Ravj6lXUShEd2ofHM5MyAIj86Sg== dependencies: hast-util-select "^6.0.0" unified "^11.0.0" unist-util-visit "^5.0.0" -rehype-parse@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-9.0.0.tgz#3949faeec6f466ec57774215661e0d75469195d9" - integrity sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw== +rehype-parse@^9.0.0, rehype-parse@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-9.0.1.tgz#9993bda129acc64c417a9d3654a7be38b2a94c20" + integrity sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag== dependencies: "@types/hast" "^3.0.0" hast-util-from-html "^2.0.0" unified "^11.0.0" -rehype-prism-plus@2.0.0, rehype-prism-plus@~2.0.0: +rehype-prism-plus@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/rehype-prism-plus/-/rehype-prism-plus-2.0.0.tgz#75b1e2d0dd7496125987a1732cb7d560de02a0fd" integrity sha512-FeM/9V2N7EvDZVdR2dqhAzlw5YI49m9Tgn7ZrYJeYHIahM6gcXpH0K1y2gNnKanZCydOMluJvX2cB9z3lhY8XQ== @@ -4263,6 +4150,18 @@ rehype-prism-plus@2.0.0, rehype-prism-plus@~2.0.0: unist-util-filter "^5.0.0" unist-util-visit "^5.0.0" +rehype-prism-plus@~2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/rehype-prism-plus/-/rehype-prism-plus-2.0.2.tgz#b67bc43bb7ce19396f6362f0e893ccf452b86320" + integrity sha512-jTHb8ZtQHd2VWAAKeCINgv/8zNEF0+LesmwJak69GemoPVN9/8fGEARTvqOpKqmN57HwaM9z8UKBVNVJe8zggw== + dependencies: + hast-util-to-string "^3.0.1" + parse-numeric-range "^1.3.0" + refractor "^5.0.0" + rehype-parse "^9.0.1" + unist-util-filter "^5.0.1" + unist-util-visit "^5.1.0" + rehype-raw@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-7.0.0.tgz#59d7348fd5dbef3807bbaa1d443efd2dd85ecee4" @@ -4273,9 +4172,9 @@ rehype-raw@^7.0.0: vfile "^6.0.0" rehype-rewrite@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/rehype-rewrite/-/rehype-rewrite-4.0.2.tgz#7b094bb586dfda83333994cb3dbb01cb1e8c361d" - integrity sha512-rjLJ3z6fIV11phwCqHp/KRo8xuUCO8o9bFJCNw5o6O2wlLk6g8r323aRswdGBQwfXPFYeSuZdAjp4tzo6RGqEg== + version "4.0.4" + resolved "https://registry.yarnpkg.com/rehype-rewrite/-/rehype-rewrite-4.0.4.tgz#69c89f18c42033a7e73f79178b8f0578dd3a5a69" + integrity sha512-L/FO96EOzSA6bzOam4DVu61/PB3AGKcSPXpa53yMIozoxH4qg1+bVZDF8zh1EsuxtSauAhzt5cCnvoplAaSLrw== dependencies: hast-util-select "^6.0.0" unified "^11.0.3" @@ -4293,18 +4192,18 @@ rehype-slug@~6.0.0: unist-util-visit "^5.0.0" rehype-stringify@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/rehype-stringify/-/rehype-stringify-10.0.0.tgz#2031cf6fdd0355393706f0474ec794c75e5492f2" - integrity sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ== + version "10.0.1" + resolved "https://registry.yarnpkg.com/rehype-stringify/-/rehype-stringify-10.0.1.tgz#2ec1ebc56c6aba07905d3b4470bdf0f684f30b75" + integrity sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA== dependencies: "@types/hast" "^3.0.0" hast-util-to-html "^9.0.0" unified "^11.0.0" rehype@~13.0.0: - version "13.0.1" - resolved "https://registry.yarnpkg.com/rehype/-/rehype-13.0.1.tgz#56384ba83955e2f3aa7eca1975b406c67d9dbd5e" - integrity sha512-AcSLS2mItY+0fYu9xKxOu1LhUZeBZZBx8//5HKzF+0XP+eP8+6a5MXn2+DW2kfXR6Dtp1FEXMVrjyKAcvcU8vg== + version "13.0.2" + resolved "https://registry.yarnpkg.com/rehype/-/rehype-13.0.2.tgz#ab0b3ac26573d7b265a0099feffad450e4cf1952" + integrity sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A== dependencies: "@types/hast" "^3.0.0" rehype-parse "^9.0.0" @@ -4312,9 +4211,9 @@ rehype@~13.0.0: unified "^11.0.0" remark-gfm@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.0.tgz#aea777f0744701aa288b67d28c43565c7e8c35de" - integrity sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA== + version "4.0.1" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.1.tgz#33227b2a74397670d357bf05c098eaf8513f0d6b" + integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg== dependencies: "@types/mdast" "^4.0.0" mdast-util-gfm "^3.0.0" @@ -4323,6 +4222,13 @@ remark-gfm@~4.0.0: remark-stringify "^11.0.0" unified "^11.0.0" +remark-github-blockquote-alert@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/remark-github-blockquote-alert/-/remark-github-blockquote-alert-1.3.1.tgz#36367542be9d94627d62d8fc5b925ea37d6bc9fe" + integrity sha512-OPNnimcKeozWN1w8KVQEuHOxgN3L4rah8geMOLhA5vN9wITqU4FWD+G26tkEsCGHiOVDbISx+Se5rGZ+D1p0Jg== + dependencies: + unist-util-visit "^5.0.0" + remark-parse@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" @@ -4334,9 +4240,9 @@ remark-parse@^11.0.0: unified "^11.0.0" remark-rehype@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.0.tgz#d5f264f42bcbd4d300f030975609d01a1697ccdc" - integrity sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g== + version "11.1.2" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.2.tgz#2addaadda80ca9bd9aa0da763e74d16327683b37" + integrity sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw== dependencies: "@types/hast" "^3.0.0" "@types/mdast" "^4.0.0" @@ -4356,24 +4262,36 @@ remark-stringify@^11.0.0: require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve@^1.19.0: + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== + dependencies: + is-core-module "^2.16.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.5: - version "2.0.0-next.5" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" - integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== + version "2.0.0-next.6" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.6.tgz#b3961812be69ace7b3bc35d5bf259434681294af" + integrity sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA== dependencies: - is-core-module "^2.13.0" + es-errors "^1.3.0" + is-core-module "^2.16.1" + node-exports-info "^1.6.0" + object-keys "^1.1.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -4446,11 +4364,6 @@ safe-regex-test@^1.1.0: es-errors "^1.3.0" is-regex "^1.2.1" -"safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - sass@^1.97.3: version "1.97.3" resolved "https://registry.yarnpkg.com/sass/-/sass-1.97.3.tgz#9cb59339514fa7e2aec592b9700953ac6e331ab2" @@ -4462,24 +4375,25 @@ sass@^1.97.3: optionalDependencies: "@parcel/watcher" "^2.4.1" -scheduler@^0.23.2: - version "0.23.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" - integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== - dependencies: - loose-envify "^1.1.0" +scheduler@^0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.27.0.tgz#0c4ef82d67d1e5c1e359e8fc76d3a87f045fe5bd" + integrity sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q== scroll-into-view@^1.16.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/scroll-into-view/-/scroll-into-view-1.16.0.tgz#07141fc4ba8a14b898d2163d6167f3d84cb9b05b" - integrity sha512-N8T/4mKzQXMorcbMzNm+rOfy0lPmga3zl7SmUSHDryA6cqGVlzG9pePQCqHA/UPaJtC2KOJP/r93pHm9df+5/A== + version "1.16.2" + resolved "https://registry.yarnpkg.com/scroll-into-view/-/scroll-into-view-1.16.2.tgz#ea3e810dacc861fb9c115eac7bf603e564f0104a" + integrity sha512-vyTE0i27o6eldt9xinjHec41Dw05y+faoI+s2zNKJAVOdbA5M2XZrYq/obJ8E+QDQulJ2gDjgui9w9m9RZSRng== semver@^6.3.1, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" + version "7.7.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" + integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== + +set-cookie-parser@^2.6.0: + version "2.7.2" + resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz#ccd08673a9ae5d2e44ea2a2de25089e67c7edf68" + integrity sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw== set-function-length@^1.2.2: version "1.2.2" @@ -4515,7 +4429,7 @@ set-proto@^1.0.0: setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== shebang-command@^2.0.0: version "2.0.0" @@ -4592,30 +4506,30 @@ source-map-explorer@^2.5.3: temp "^0.9.4" yargs "^16.2.0" -"source-map-js@>=0.6.2 <2.0.0": - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-js@^1.2.1: +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== +source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + source-map@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + version "0.7.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" + integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== space-separated-tokens@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz#43193cec4fb858a2ce934b7f98b7f2c18107098b" - integrity sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw== + version "2.0.2" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== -spin.js@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/spin.js/-/spin.js-2.3.2.tgz#6caa56d520673450fd5cfbc6971e6d0772c37a1a" - integrity sha1-bKpW1SBnNFD9XPvGlx5tB3LDeho= +spin.js@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/spin.js/-/spin.js-4.1.2.tgz#866180f0489ce90432201363e71c314f0db28824" + integrity sha512-ua/yEpxEwyEUWs57tMQYdik/KJ12sQRyMXjSlK/Ai927aEUDVY3FXUi4ml4VvlLCTQNIjC6tHyjSLBrJzFAqMA== stackback@0.0.2: version "0.0.2" @@ -4636,13 +4550,13 @@ stop-iteration-iterator@^1.1.0: internal-slot "^1.1.0" string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" string.prototype.matchall@^4.0.12: version "4.0.12" @@ -4704,48 +4618,43 @@ string.prototype.trimstart@^1.0.8: es-object-atoms "^1.0.0" stringify-entities@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.3.tgz#cfabd7039d22ad30f3cc435b0ca2c1574fc88ef8" - integrity sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g== + version "4.0.4" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== dependencies: character-entities-html4 "^2.0.0" character-entities-legacy "^3.0.0" -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^5.0.0" - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + ansi-regex "^5.0.1" style-mod@^4.0.0, style-mod@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.1.2.tgz#ca238a1ad4786520f7515a8539d5a63691d7bf67" - integrity sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw== + version "4.1.3" + resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.1.3.tgz#6e9012255bb799bdac37e288f7671b5d71bf9f73" + integrity sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ== -style-to-object@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.5.tgz#5e918349bc3a39eee3a804497d97fcbbf2f0d7c0" - integrity sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ== +style-to-js@^1.0.0: + version "1.1.21" + resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.21.tgz#2908941187f857e79e28e9cd78008b9a0b3e0e8d" + integrity sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ== dependencies: - inline-style-parser "0.2.2" - -stylis@4.0.13: - version "4.0.13" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" - integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== + style-to-object "1.0.14" -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== +style-to-object@1.0.14: + version "1.0.14" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.14.tgz#1d22f0e7266bb8c6d8cae5caf4ec4f005e08f611" + integrity sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw== dependencies: - has-flag "^3.0.0" + inline-style-parser "0.2.7" + +stylis@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" + integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== supports-color@^7.1.0: version "7.2.0" @@ -4790,11 +4699,6 @@ tinyrainbow@^3.0.3: resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-3.0.3.tgz#984a5b1c1b25854a9b6bccbe77964d0593d1ea42" integrity sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q== -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -4805,12 +4709,12 @@ to-regex-range@^5.0.1: toggle-selection@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" - integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= + integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== trim-lines@^3.0.0: version "3.0.1" @@ -4818,9 +4722,9 @@ trim-lines@^3.0.0: integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== trough@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/trough/-/trough-2.0.2.tgz#94a3aa9d5ce379fc561f6244905b3f36b7458d96" - integrity sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w== + version "2.2.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -4879,10 +4783,10 @@ typeface-roboto@^1.1.13: resolved "https://registry.yarnpkg.com/typeface-roboto/-/typeface-roboto-1.1.13.tgz#9c4517cb91e311706c74823e857b4bac9a764ae5" integrity sha512-YXvbd3a1QTREoD+FJoEkl0VQNJoEjewR2H11IjVv4bp6ahuIcw0yyw/3udC4vJkHw3T3cUh85FTg8eWef3pSaw== -ua-parser-js@^0.7.18, ua-parser-js@^0.7.30: - version "0.7.33" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.33.tgz#1d04acb4ccef9293df6f70f2c3d22f3030d8b532" - integrity sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw== +ua-parser-js@^1.0.35: + version "1.0.41" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.41.tgz#bd04dc9ec830fcf9e4fad35cf22dcedd2e3b4e9c" + integrity sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug== unbox-primitive@^1.1.0: version "1.1.0" @@ -4894,10 +4798,15 @@ unbox-primitive@^1.1.0: has-symbols "^1.1.0" which-boxed-primitive "^1.1.1" +undici-types@~7.18.0: + version "7.18.2" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.18.2.tgz#29357a89e7b7ca4aef3bf0fd3fd0cd73884229e9" + integrity sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w== + unified@^11.0.0, unified@^11.0.3, unified@~11.0.0: - version "11.0.4" - resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.4.tgz#f4be0ac0fe4c88cb873687c07c64c49ed5969015" - integrity sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ== + version "11.0.5" + resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" + integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== dependencies: "@types/unist" "^3.0.0" bail "^2.0.0" @@ -4907,7 +4816,7 @@ unified@^11.0.0, unified@^11.0.3, unified@~11.0.0: trough "^2.0.0" vfile "^6.0.0" -unist-util-filter@^5.0.0: +unist-util-filter@^5.0.0, unist-util-filter@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/unist-util-filter/-/unist-util-filter-5.0.1.tgz#f9f3a0bdee007e040964c274dda27bac663d0a39" integrity sha512-pHx7D4Zt6+TsfwylH9+lYhBhzyhEnCXs/lbq/Hstxno5z4gVdyc2WEW0asfjGKPyG4pEKrnBv5hdkO6+aRnQJw== @@ -4917,9 +4826,9 @@ unist-util-filter@^5.0.0: unist-util-visit-parents "^6.0.0" unist-util-is@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" - integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== + version "6.0.1" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.1.tgz#d0a3f86f2dd0db7acd7d8c2478080b5c67f9c6a9" + integrity sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g== dependencies: "@types/unist" "^3.0.0" @@ -4930,14 +4839,6 @@ unist-util-position@^5.0.0: dependencies: "@types/unist" "^3.0.0" -unist-util-remove-position@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz#fea68a25658409c9460408bc6b4991b965b52163" - integrity sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q== - dependencies: - "@types/unist" "^3.0.0" - unist-util-visit "^5.0.0" - unist-util-stringify-position@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" @@ -4946,14 +4847,23 @@ unist-util-stringify-position@^4.0.0: "@types/unist" "^3.0.0" unist-util-visit-parents@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" - integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== + version "6.0.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz#777df7fb98652ce16b4b7cd999d0a1a40efa3a02" + integrity sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ== dependencies: "@types/unist" "^3.0.0" unist-util-is "^6.0.0" -unist-util-visit@^5.0.0, unist-util-visit@~5.0.0: +unist-util-visit@^5.0.0, unist-util-visit@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.1.0.tgz#9a2a28b0aa76a15e0da70a08a5863a2f060e2468" + integrity sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + +unist-util-visit@~5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== @@ -4982,51 +4892,45 @@ urijs@^1.19.11: resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.11.tgz#204b0d6b605ae80bea54bea39280cdb7c9f923cc" integrity sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ== -use-composed-ref@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.2.1.tgz#9bdcb5ccd894289105da2325e1210079f56bf849" - integrity sha512-6+X1FLlIcjvFMAeAD/hcxDT8tmyrWnbSPMU0EnxQuDLIxokuFzWliXBiYZuGIx+mrAMLBw0WFfCkaPw8ebzAhw== +use-composed-ref@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.4.0.tgz#09e023bf798d005286ad85cd20674bdf5770653b" + integrity sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w== -use-isomorphic-layout-effect@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz#7bb6589170cd2987a152042f9084f9effb75c225" - integrity sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ== +use-isomorphic-layout-effect@^1.1.1, use-isomorphic-layout-effect@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz#2f11a525628f56424521c748feabc2ffcc962fce" + integrity sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA== -use-latest@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.0.tgz#a44f6572b8288e0972ec411bdd0840ada366f232" - integrity sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw== +use-latest@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.3.0.tgz#549b9b0d4c1761862072f0899c6f096eb379137a" + integrity sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ== dependencies: - use-isomorphic-layout-effect "^1.0.0" - -uuid@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" - integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== + use-isomorphic-layout-effect "^1.1.1" vfile-location@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-5.0.2.tgz#220d9ca1ab6f8b2504a4db398f7ebc149f9cb464" - integrity sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg== + version "5.0.3" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-5.0.3.tgz#cb9eacd20f2b6426d19451e0eafa3d0a846225c3" + integrity sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg== dependencies: "@types/unist" "^3.0.0" vfile "^6.0.0" vfile-message@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" - integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== + version "4.0.3" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.3.tgz#87b44dddd7b70f0641c2e3ed0864ba73e2ea8df4" + integrity sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw== dependencies: "@types/unist" "^3.0.0" unist-util-stringify-position "^4.0.0" vfile@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.1.tgz#1e8327f41eac91947d4fe9d237a2dd9209762536" - integrity sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw== + version "6.0.3" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== dependencies: "@types/unist" "^3.0.0" - unist-util-stringify-position "^4.0.0" vfile-message "^4.0.0" "vite@^6.0.0 || ^7.0.0", vite@^7.3.1: @@ -5089,17 +4993,12 @@ web-namespaces@^2.0.0: webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= - -whatwg-fetch@>=0.10.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz#e5f871572d6879663fa5674c8f833f15a8425ab3" - integrity sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ== + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" @@ -5189,7 +5088,7 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== xml-formatter@^3.6.7: version "3.6.7" @@ -5204,29 +5103,24 @@ xml-parser-xo@^4.1.5: integrity sha512-TxyRxk9sTOUg3glxSIY6f0nfuqRll2OEF8TspLgh5mZkLuBgheCn3zClcDSGJ58TvNmiwyCCuat4UajPud/5Og== y18n@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" - integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" - integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== +yaml@^1.10.0, yaml@^2.3.1: + version "2.8.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.2.tgz#5694f25eca0ce9c3e7a9d9e00ce0ddabbd9e35c5" + integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A== yargs-parser@^20.2.2: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs@^16.2.0: version "16.2.0" @@ -5256,12 +5150,7 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/zod/-/zod-4.3.6.tgz#89c56e0aa7d2b05107d894412227087885ab112a" integrity sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg== -zwitch@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.2.tgz#91f8d0e901ffa3d66599756dde7f57b17c95dce1" - integrity sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA== - -zwitch@^2.0.4: +zwitch@^2.0.0, zwitch@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== From 303eb796c8c6d5285fbf4566e3f5ebfe939eb7e7 Mon Sep 17 00:00:00 2001 From: Okke Harsta Date: Mon, 9 Mar 2026 11:37:46 +0100 Subject: [PATCH 03/17] Upped dependencies --- manage-gui/package.json | 6 ++-- manage-gui/src/components/Autocomplete.jsx | 2 +- manage-gui/src/components/ClipBoardCopy.jsx | 2 +- .../src/components/ConfirmationDialog.jsx | 2 +- manage-gui/src/components/ErrorDialog.jsx | 2 +- manage-gui/src/components/FormatInput.jsx | 2 +- manage-gui/src/components/Header.jsx | 2 +- manage-gui/src/components/Navigation.jsx | 2 +- manage-gui/src/components/PolicyPlaygound.jsx | 2 +- manage-gui/src/components/form/Password.jsx | 2 +- .../src/components/form/ScopeSelection.jsx | 2 +- .../src/components/form/StringWithFormat.jsx | 2 +- manage-gui/src/components/form/Strings.jsx | 2 +- manage-gui/src/components/metadata/ARP.jsx | 2 +- .../src/components/metadata/AutoRefresh.jsx | 2 +- .../src/components/metadata/ConnectedIdps.jsx | 2 +- .../src/components/metadata/Connection.jsx | 2 +- .../components/metadata/ConsentDisabling.jsx | 2 +- manage-gui/src/components/metadata/Diff.jsx | 13 +++++--- .../src/components/metadata/EntityId.jsx | 2 +- manage-gui/src/components/metadata/Export.jsx | 2 +- manage-gui/src/components/metadata/Import.jsx | 2 +- .../components/metadata/InlineEditable.jsx | 2 +- .../src/components/metadata/Manipulation.jsx | 2 +- .../src/components/metadata/MetaData.jsx | 2 +- .../metadata/MetaDataChangeRequests.jsx | 13 +++++--- .../src/components/metadata/Organisation.jsx | 2 +- .../metadata/OrganisationEntity.jsx | 2 +- .../src/components/metadata/Policies.jsx | 2 +- .../components/metadata/PolicyAttributes.jsx | 2 +- .../src/components/metadata/PolicyForm.jsx | 2 +- .../src/components/metadata/PolicyJSON.jsx | 2 +- .../components/metadata/PolicyMaintenance.jsx | 2 +- .../src/components/metadata/PolicyRules.jsx | 2 +- .../src/components/metadata/PolicyXML.jsx | 2 +- .../metadata/ProvisioningApplications.jsx | 2 +- .../components/metadata/RelyingParties.jsx | 2 +- .../components/metadata/ResourceServers.jsx | 2 +- .../src/components/metadata/RevisionDiff.jsx | 2 +- .../src/components/metadata/Revisions.jsx | 4 +-- .../metadata/SelectMetaDataType.jsx | 2 +- .../src/components/metadata/SelectState.jsx | 2 +- manage-gui/src/components/metadata/Stepup.jsx | 2 +- .../src/components/metadata/WhiteList.jsx | 2 +- manage-gui/src/locale/en.js | 12 ++----- manage-gui/src/locale/nl.js | 5 ++- manage-gui/src/pages/API.jsx | 2 +- manage-gui/src/pages/Activity.jsx | 2 +- manage-gui/src/pages/ChangeRequests.jsx | 2 +- manage-gui/src/pages/Detail.jsx | 2 +- manage-gui/src/pages/EduGain.jsx | 2 +- manage-gui/src/pages/NotFound.jsx | 2 +- manage-gui/src/pages/Policies.jsx | 2 +- manage-gui/src/pages/Scopes.jsx | 2 +- manage-gui/src/pages/Search.jsx | 2 +- manage-gui/src/pages/ServerError.jsx | 4 +-- manage-gui/src/pages/Staging.jsx | 2 +- manage-gui/src/pages/StepupManagement.jsx | 2 +- manage-gui/src/pages/Support.jsx | 2 +- manage-gui/src/pages/System.jsx | 2 +- manage-gui/src/utils/Flash.js | 2 +- manage-gui/vite.config.js | 15 --------- manage-gui/yarn.lock | 33 +++++++++++-------- 63 files changed, 100 insertions(+), 113 deletions(-) diff --git a/manage-gui/package.json b/manage-gui/package.json index ab6d543f..a2135fe4 100644 --- a/manage-gui/package.json +++ b/manage-gui/package.json @@ -24,7 +24,7 @@ }, "devDependencies": { "@vitejs/plugin-react": "^5.1.2", - "codemirror": "^6.0.2", + "codemirror": "^5.65.1", "eslint": "^10.0.3", "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^7.0.1", @@ -43,10 +43,10 @@ "react-modal": "^3.14.4", "react-router-dom": "^7.13.1", "react-select": "^5.2.2", - "react-tooltip": "^5.30.0", + "react-tooltip": "^4.2.21", "sass": "^1.97.3", "scroll-into-view": "^1.16.0", - "spin.js": "^4.1.2", + "spin.js": "^2.3.2", "urijs": "^1.19.11", "vite": "^7.3.1", "vitest": "^4.0.18" diff --git a/manage-gui/src/components/Autocomplete.jsx b/manage-gui/src/components/Autocomplete.jsx index a6e1ae00..47bec8e8 100644 --- a/manage-gui/src/components/Autocomplete.jsx +++ b/manage-gui/src/components/Autocomplete.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import PropTypes from "prop-types"; import scrollIntoView from "scroll-into-view"; import {isEmpty} from "../utils/Utils"; diff --git a/manage-gui/src/components/ClipBoardCopy.jsx b/manage-gui/src/components/ClipBoardCopy.jsx index aabf252e..0e73fbf3 100644 --- a/manage-gui/src/components/ClipBoardCopy.jsx +++ b/manage-gui/src/components/ClipBoardCopy.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import PropTypes from "prop-types"; import ReactTooltip from "react-tooltip"; import CopyToClipboard from "react-copy-to-clipboard"; diff --git a/manage-gui/src/components/ConfirmationDialog.jsx b/manage-gui/src/components/ConfirmationDialog.jsx index 7f09465d..57b06bb0 100644 --- a/manage-gui/src/components/ConfirmationDialog.jsx +++ b/manage-gui/src/components/ConfirmationDialog.jsx @@ -1,7 +1,7 @@ import React from "react"; import PropTypes from "prop-types"; import Modal from "react-modal"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import {stop} from "../utils/Utils"; import "./ConfirmationDialog.scss"; diff --git a/manage-gui/src/components/ErrorDialog.jsx b/manage-gui/src/components/ErrorDialog.jsx index e4fedfd2..a4392029 100644 --- a/manage-gui/src/components/ErrorDialog.jsx +++ b/manage-gui/src/components/ErrorDialog.jsx @@ -1,7 +1,7 @@ import React from "react"; import PropTypes from "prop-types"; import Modal from "react-modal"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import {stop} from "../utils/Utils"; import "./ConfirmationDialog.scss"; diff --git a/manage-gui/src/components/FormatInput.jsx b/manage-gui/src/components/FormatInput.jsx index e5ea7ff3..04eb8c35 100644 --- a/manage-gui/src/components/FormatInput.jsx +++ b/manage-gui/src/components/FormatInput.jsx @@ -1,6 +1,6 @@ import React from "react"; import PropTypes from "prop-types"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import {validation} from "./../api"; import {isEmpty} from "../utils/Utils"; diff --git a/manage-gui/src/components/Header.jsx b/manage-gui/src/components/Header.jsx index 82227ec6..4fe08b5f 100644 --- a/manage-gui/src/components/Header.jsx +++ b/manage-gui/src/components/Header.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import PropTypes from "prop-types"; import {unmountComponentAtNode} from "react-dom"; import {Link} from "react-router-dom"; diff --git a/manage-gui/src/components/Navigation.jsx b/manage-gui/src/components/Navigation.jsx index d2fbcb18..a41236c2 100644 --- a/manage-gui/src/components/Navigation.jsx +++ b/manage-gui/src/components/Navigation.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import PropTypes from "prop-types"; import Spinner from "spin.js"; diff --git a/manage-gui/src/components/PolicyPlaygound.jsx b/manage-gui/src/components/PolicyPlaygound.jsx index ca720464..001f3625 100644 --- a/manage-gui/src/components/PolicyPlaygound.jsx +++ b/manage-gui/src/components/PolicyPlaygound.jsx @@ -1,7 +1,7 @@ import React, {useEffect, useState} from "react"; import "./PolicyPlayground.scss"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import CodeMirror from '@uiw/react-codemirror'; import {json} from '@codemirror/lang-json'; import { diff --git a/manage-gui/src/components/form/Password.jsx b/manage-gui/src/components/form/Password.jsx index b7e648fa..9b7c5917 100644 --- a/manage-gui/src/components/form/Password.jsx +++ b/manage-gui/src/components/form/Password.jsx @@ -1,6 +1,6 @@ import React from "react"; import PropTypes from "prop-types"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import "./Password.scss"; import {secret} from "../../api"; import CopyToClipboard from "react-copy-to-clipboard"; diff --git a/manage-gui/src/components/form/ScopeSelection.jsx b/manage-gui/src/components/form/ScopeSelection.jsx index a65cf58d..4dd5f022 100644 --- a/manage-gui/src/components/form/ScopeSelection.jsx +++ b/manage-gui/src/components/form/ScopeSelection.jsx @@ -1,7 +1,7 @@ import React from "react"; import {Select} from "./../../components"; import {fetchEnumValues, scopeInUse} from "../../api"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import "./ScopeSelection.scss"; import {getNameForLanguage} from "../../utils/Language"; diff --git a/manage-gui/src/components/form/StringWithFormat.jsx b/manage-gui/src/components/form/StringWithFormat.jsx index 4f1a834f..5d90a232 100644 --- a/manage-gui/src/components/form/StringWithFormat.jsx +++ b/manage-gui/src/components/form/StringWithFormat.jsx @@ -1,6 +1,6 @@ import React from "react"; import PropTypes from "prop-types"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import {Password} from "../form"; export default class StringWithFormat extends React.PureComponent { diff --git a/manage-gui/src/components/form/Strings.jsx b/manage-gui/src/components/form/Strings.jsx index a371b317..4c0bccfe 100644 --- a/manage-gui/src/components/form/Strings.jsx +++ b/manage-gui/src/components/form/Strings.jsx @@ -1,7 +1,7 @@ import React from "react"; import PropTypes from "prop-types"; import Creatable from 'react-select/creatable'; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import reactSelectStyles from "./../reactSelectStyles.js"; diff --git a/manage-gui/src/components/metadata/ARP.jsx b/manage-gui/src/components/metadata/ARP.jsx index 63d25cfe..b4199fb8 100644 --- a/manage-gui/src/components/metadata/ARP.jsx +++ b/manage-gui/src/components/metadata/ARP.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import PropTypes from "prop-types"; import ReactTooltip from "react-tooltip"; diff --git a/manage-gui/src/components/metadata/AutoRefresh.jsx b/manage-gui/src/components/metadata/AutoRefresh.jsx index 45d90af3..6cda526a 100644 --- a/manage-gui/src/components/metadata/AutoRefresh.jsx +++ b/manage-gui/src/components/metadata/AutoRefresh.jsx @@ -3,7 +3,7 @@ import React from "react"; import "./AutoRefresh.scss"; import PropTypes from "prop-types"; import CheckBox from "../CheckBox"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import {copyToClip, isEmpty} from "../../utils/Utils"; export default class AutoRefresh extends React.PureComponent { diff --git a/manage-gui/src/components/metadata/ConnectedIdps.jsx b/manage-gui/src/components/metadata/ConnectedIdps.jsx index ef6c941a..04194e6a 100644 --- a/manage-gui/src/components/metadata/ConnectedIdps.jsx +++ b/manage-gui/src/components/metadata/ConnectedIdps.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import PropTypes from "prop-types"; import {Link} from "react-router-dom"; diff --git a/manage-gui/src/components/metadata/Connection.jsx b/manage-gui/src/components/metadata/Connection.jsx index 5668497b..71085ae9 100644 --- a/manage-gui/src/components/metadata/Connection.jsx +++ b/manage-gui/src/components/metadata/Connection.jsx @@ -1,6 +1,6 @@ import React from "react"; import PropTypes from "prop-types"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import EntityId from "./EntityId"; import SelectState from "./SelectState"; diff --git a/manage-gui/src/components/metadata/ConsentDisabling.jsx b/manage-gui/src/components/metadata/ConsentDisabling.jsx index 3cedcd34..a347dade 100644 --- a/manage-gui/src/components/metadata/ConsentDisabling.jsx +++ b/manage-gui/src/components/metadata/ConsentDisabling.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import PropTypes from "prop-types"; import {Link} from "react-router-dom"; import SelectEntities from "./../SelectEntities"; diff --git a/manage-gui/src/components/metadata/Diff.jsx b/manage-gui/src/components/metadata/Diff.jsx index 54136c1c..4d01fe89 100644 --- a/manage-gui/src/components/metadata/Diff.jsx +++ b/manage-gui/src/components/metadata/Diff.jsx @@ -1,14 +1,17 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import DOMPurify from "dompurify"; -import {DiffPatcher, formatters} from "jsondiffpatch"; +import {create} from "jsondiffpatch"; + +import * as htmlFormatter from "jsondiffpatch/formatters/html"; + import cloneDeep from "lodash.clonedeep"; import {sortDict} from "../../utils/Utils"; import "./Diff.scss"; const ignoreInDiff = ["id", "eid", "revisionid", "user", "created", "ip", "revisionnote"]; -const differ = new DiffPatcher({ +const differ = create({ // https://github.com/benjamine/jsondiffpatch/blob/HEAD/docs/arrays.md objectHash: (obj, index) => obj.name || obj.level || obj.type || obj.source || obj.value || "$$index:" + index }); @@ -23,9 +26,9 @@ export const Diff = ({revision, previousRevision}) => { sortDict(prev); const diffs = differ.diff(prev, rev); - const html = DOMPurify.sanitize(formatters.html.format(diffs)); + const html = DOMPurify.sanitize(htmlFormatter.format(diffs)); return diffs - ?
+ ?
:

{I18n.t("revisions.identical")}

; }; diff --git a/manage-gui/src/components/metadata/EntityId.jsx b/manage-gui/src/components/metadata/EntityId.jsx index 4442c62d..bcdbbab1 100644 --- a/manage-gui/src/components/metadata/EntityId.jsx +++ b/manage-gui/src/components/metadata/EntityId.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import {uniqueEntityId, validation} from "../../api"; import InlineEditable from "./InlineEditable"; diff --git a/manage-gui/src/components/metadata/Export.jsx b/manage-gui/src/components/metadata/Export.jsx index abc27127..5cae80a1 100644 --- a/manage-gui/src/components/metadata/Export.jsx +++ b/manage-gui/src/components/metadata/Export.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import PropTypes from "prop-types"; import Highlight from "react-highlight"; diff --git a/manage-gui/src/components/metadata/Import.jsx b/manage-gui/src/components/metadata/Import.jsx index 4a933758..f8edb438 100644 --- a/manage-gui/src/components/metadata/Import.jsx +++ b/manage-gui/src/components/metadata/Import.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import PropTypes from "prop-types"; import CodeMirror from "react-codemirror"; import "codemirror/mode/javascript/javascript"; diff --git a/manage-gui/src/components/metadata/InlineEditable.jsx b/manage-gui/src/components/metadata/InlineEditable.jsx index 9687669c..62938d04 100644 --- a/manage-gui/src/components/metadata/InlineEditable.jsx +++ b/manage-gui/src/components/metadata/InlineEditable.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import PropTypes from "prop-types"; import ReactTooltip from "react-tooltip"; diff --git a/manage-gui/src/components/metadata/Manipulation.jsx b/manage-gui/src/components/metadata/Manipulation.jsx index 8701e116..09901c93 100644 --- a/manage-gui/src/components/metadata/Manipulation.jsx +++ b/manage-gui/src/components/metadata/Manipulation.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import MDEditor from '@uiw/react-md-editor'; import PropTypes from "prop-types"; import CodeMirror from "react-codemirror"; diff --git a/manage-gui/src/components/metadata/MetaData.jsx b/manage-gui/src/components/metadata/MetaData.jsx index c793cf77..01d7c859 100644 --- a/manage-gui/src/components/metadata/MetaData.jsx +++ b/manage-gui/src/components/metadata/MetaData.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import PropTypes from "prop-types"; import ReactTooltip from "react-tooltip"; import scrollIntoView from "scroll-into-view"; diff --git a/manage-gui/src/components/metadata/MetaDataChangeRequests.jsx b/manage-gui/src/components/metadata/MetaDataChangeRequests.jsx index 251e3add..1ef0d9f1 100644 --- a/manage-gui/src/components/metadata/MetaDataChangeRequests.jsx +++ b/manage-gui/src/components/metadata/MetaDataChangeRequests.jsx @@ -1,7 +1,10 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import ReactJson from "react-json-view"; -import {DiffPatcher, formatters} from 'jsondiffpatch'; + +import {create} from "jsondiffpatch"; +import * as htmlFormatter from "jsondiffpatch/formatters/html"; + import merge from "lodash.merge"; import PropTypes from "prop-types"; import cloneDeep from "lodash.clonedeep"; @@ -9,7 +12,7 @@ import CheckBox from "../../components/CheckBox"; import ConfirmationDialog from "../ConfirmationDialog"; import {collapseDotKeys, createDiffObject, isEmpty, sortDict, stop} from "../../utils/Utils"; -import "jsondiffpatch/dist/formatters-styles/html.css"; +import "jsondiffpatch/formatters/styles/html.css"; import "./MetaDataChangeRequests.scss"; import {acceptChangeRequest, rejectChangeRequest} from "../../api"; import {emitter, setFlash} from "../../utils/Flash"; @@ -37,7 +40,7 @@ class MetaDataChangeRequests extends React.Component { revisionNotes: "", accept: false }; - this.differ = new DiffPatcher({ + this.differ = create({ // https://github.com/benjamine/jsondiffpatch/blob/HEAD/docs/arrays.md objectHash: (obj, index) => obj.name || obj.level || obj.type || obj.source || obj.value || '$$index:' + index }); @@ -178,7 +181,7 @@ class MetaDataChangeRequests extends React.Component { const originalDict = createDiffObject(data, newData); diffs = this.differ.diff(originalDict, newData); } - const html = formatters.html.format(diffs); + const html = htmlFormatter.format(diffs); return diffs ?

:

{I18n.t("changeRequests.identical")}

}; diff --git a/manage-gui/src/components/metadata/Organisation.jsx b/manage-gui/src/components/metadata/Organisation.jsx index a203320a..583813c8 100644 --- a/manage-gui/src/components/metadata/Organisation.jsx +++ b/manage-gui/src/components/metadata/Organisation.jsx @@ -2,7 +2,7 @@ import React from "react"; import "./Organisation.scss"; import PropTypes from "prop-types"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import String from "../form/String"; import {isEmpty} from "../../utils/Utils"; import {validateUniqueField} from "../../api"; diff --git a/manage-gui/src/components/metadata/OrganisationEntity.jsx b/manage-gui/src/components/metadata/OrganisationEntity.jsx index df6e79c7..e5437283 100644 --- a/manage-gui/src/components/metadata/OrganisationEntity.jsx +++ b/manage-gui/src/components/metadata/OrganisationEntity.jsx @@ -2,7 +2,7 @@ import React from "react"; import "./OrganisationEntity.scss"; import {getAllEntities, update} from "../../api"; import PropTypes from "prop-types"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import {Link} from "react-router-dom"; import {isEmpty, stop} from "../../utils/Utils"; import NotesTooltip from "../NotesTooltip"; diff --git a/manage-gui/src/components/metadata/Policies.jsx b/manage-gui/src/components/metadata/Policies.jsx index 71e16786..41f19fb9 100644 --- a/manage-gui/src/components/metadata/Policies.jsx +++ b/manage-gui/src/components/metadata/Policies.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import PropTypes from "prop-types"; import {Link} from "react-router-dom"; diff --git a/manage-gui/src/components/metadata/PolicyAttributes.jsx b/manage-gui/src/components/metadata/PolicyAttributes.jsx index 3a0624f4..2929bd51 100644 --- a/manage-gui/src/components/metadata/PolicyAttributes.jsx +++ b/manage-gui/src/components/metadata/PolicyAttributes.jsx @@ -1,7 +1,7 @@ import React, {Fragment} from "react"; import "./PolicyAttributes.scss"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import {Select} from "../index"; import {groupPolicyAttributes, isEmpty, stop} from "../../utils/Utils"; import CheckBox from "../CheckBox"; diff --git a/manage-gui/src/components/metadata/PolicyForm.jsx b/manage-gui/src/components/metadata/PolicyForm.jsx index a6e89676..66f93fe2 100644 --- a/manage-gui/src/components/metadata/PolicyForm.jsx +++ b/manage-gui/src/components/metadata/PolicyForm.jsx @@ -1,7 +1,7 @@ import React, {useEffect, useState} from "react"; import "./PolicyForm.scss"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import ReactTooltip from "react-tooltip"; import {Select} from "../index"; import {isEmpty, stop} from "../../utils/Utils"; diff --git a/manage-gui/src/components/metadata/PolicyJSON.jsx b/manage-gui/src/components/metadata/PolicyJSON.jsx index d13af262..82bff5cc 100644 --- a/manage-gui/src/components/metadata/PolicyJSON.jsx +++ b/manage-gui/src/components/metadata/PolicyJSON.jsx @@ -5,7 +5,7 @@ import {parsePolicyJSON} from "../../api"; import "highlight.js/styles/default.css"; import JSONPretty from "react-json-pretty"; import "react-json-pretty/themes/monikai.css"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; export default function PolicyJSON({data}) { diff --git a/manage-gui/src/components/metadata/PolicyMaintenance.jsx b/manage-gui/src/components/metadata/PolicyMaintenance.jsx index 40d678f5..2b7d1ea5 100644 --- a/manage-gui/src/components/metadata/PolicyMaintenance.jsx +++ b/manage-gui/src/components/metadata/PolicyMaintenance.jsx @@ -1,6 +1,6 @@ import React from "react"; import PropTypes from "prop-types"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import "./PolicyMaintenance.scss"; diff --git a/manage-gui/src/components/metadata/PolicyRules.jsx b/manage-gui/src/components/metadata/PolicyRules.jsx index 7ec6042b..65e301cb 100644 --- a/manage-gui/src/components/metadata/PolicyRules.jsx +++ b/manage-gui/src/components/metadata/PolicyRules.jsx @@ -1,6 +1,6 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import ReactTooltip from "react-tooltip"; import CheckBox from "../CheckBox"; diff --git a/manage-gui/src/components/metadata/PolicyXML.jsx b/manage-gui/src/components/metadata/PolicyXML.jsx index 900d4355..86736b27 100644 --- a/manage-gui/src/components/metadata/PolicyXML.jsx +++ b/manage-gui/src/components/metadata/PolicyXML.jsx @@ -5,7 +5,7 @@ import {parsePolicyXML} from "../../api"; import Highlight from "react-highlight"; import "highlight.js/styles/default.css"; import format from "xml-formatter"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; export default function PolicyXML({data}) { diff --git a/manage-gui/src/components/metadata/ProvisioningApplications.jsx b/manage-gui/src/components/metadata/ProvisioningApplications.jsx index 2d0e343c..22e06ffc 100644 --- a/manage-gui/src/components/metadata/ProvisioningApplications.jsx +++ b/manage-gui/src/components/metadata/ProvisioningApplications.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import PropTypes from "prop-types"; import {Link} from "react-router-dom"; import SelectEntities from "./../SelectEntities"; diff --git a/manage-gui/src/components/metadata/RelyingParties.jsx b/manage-gui/src/components/metadata/RelyingParties.jsx index 97936e36..f753e5e6 100644 --- a/manage-gui/src/components/metadata/RelyingParties.jsx +++ b/manage-gui/src/components/metadata/RelyingParties.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import PropTypes from "prop-types"; import {Link} from "react-router-dom"; diff --git a/manage-gui/src/components/metadata/ResourceServers.jsx b/manage-gui/src/components/metadata/ResourceServers.jsx index 65598aad..3a8b04f2 100644 --- a/manage-gui/src/components/metadata/ResourceServers.jsx +++ b/manage-gui/src/components/metadata/ResourceServers.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import PropTypes from "prop-types"; import {Link} from "react-router-dom"; import SelectEntities from "./../SelectEntities"; diff --git a/manage-gui/src/components/metadata/RevisionDiff.jsx b/manage-gui/src/components/metadata/RevisionDiff.jsx index d1c0d614..3f0d0e45 100644 --- a/manage-gui/src/components/metadata/RevisionDiff.jsx +++ b/manage-gui/src/components/metadata/RevisionDiff.jsx @@ -1,6 +1,6 @@ import React, {useEffect, useState} from "react"; import PropTypes from "prop-types"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import {detail, revisionByNumber} from "../../api"; import {Diff} from "./Diff"; import "./RevisionDiff.scss"; diff --git a/manage-gui/src/components/metadata/Revisions.jsx b/manage-gui/src/components/metadata/Revisions.jsx index 3ceb6832..b20c4238 100644 --- a/manage-gui/src/components/metadata/Revisions.jsx +++ b/manage-gui/src/components/metadata/Revisions.jsx @@ -1,12 +1,12 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import PropTypes from "prop-types"; import CheckBox from "../../components/CheckBox"; import ConfirmationDialog from "../ConfirmationDialog"; import {stop} from "../../utils/Utils"; -import "jsondiffpatch/dist/formatters-styles/html.css"; +import "jsondiffpatch/formatters/styles/html.css"; import "./Revisions.scss"; import {restoreRevision} from "../../api"; import {setFlash} from "../../utils/Flash"; diff --git a/manage-gui/src/components/metadata/SelectMetaDataType.jsx b/manage-gui/src/components/metadata/SelectMetaDataType.jsx index c60d5962..87f1b69c 100644 --- a/manage-gui/src/components/metadata/SelectMetaDataType.jsx +++ b/manage-gui/src/components/metadata/SelectMetaDataType.jsx @@ -2,7 +2,7 @@ import React from "react"; import PropTypes from "prop-types"; import {Select} from "./../../components"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import "./SelectMetaDataType.scss"; export default class SelectMetaDataType extends React.PureComponent { diff --git a/manage-gui/src/components/metadata/SelectState.jsx b/manage-gui/src/components/metadata/SelectState.jsx index 80188e2e..daf079ab 100644 --- a/manage-gui/src/components/metadata/SelectState.jsx +++ b/manage-gui/src/components/metadata/SelectState.jsx @@ -2,7 +2,7 @@ import React from "react"; import PropTypes from "prop-types"; import {Select} from "./../../components"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import "./SelectState.scss"; export default class SelectState extends React.PureComponent { diff --git a/manage-gui/src/components/metadata/Stepup.jsx b/manage-gui/src/components/metadata/Stepup.jsx index 805eea7a..492c2806 100644 --- a/manage-gui/src/components/metadata/Stepup.jsx +++ b/manage-gui/src/components/metadata/Stepup.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import PropTypes from "prop-types"; import {Link} from "react-router-dom"; import SelectEntities from "./../SelectEntities"; diff --git a/manage-gui/src/components/metadata/WhiteList.jsx b/manage-gui/src/components/metadata/WhiteList.jsx index ba536ce3..2396bee6 100644 --- a/manage-gui/src/components/metadata/WhiteList.jsx +++ b/manage-gui/src/components/metadata/WhiteList.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../../locale/I18n"; import PropTypes from "prop-types"; import {Link} from "react-router-dom"; import ConfirmationDialog from "../ConfirmationDialog"; diff --git a/manage-gui/src/locale/en.js b/manage-gui/src/locale/en.js index f068680f..178cb897 100644 --- a/manage-gui/src/locale/en.js +++ b/manage-gui/src/locale/en.js @@ -1,11 +1,4 @@ -// Interpolation works as follows: -// -// Make a key with the translation and enclose the variable with {{}} -// ie "Hello {{name}}" Do not add any spaces around the variable name. -// Provide the values as: I18n.t("key", {name: "John Doe"}) -import I18n from "i18n-js"; - -I18n.translations.en = { +const en = { code: "EN", name: "English", select_locale: "Select English", @@ -739,5 +732,4 @@ I18n.translations.en = { policyPlaceholder: "Select a policy to initiate the PDP request data" } }; - -export default I18n.translations.en; +export default en; diff --git a/manage-gui/src/locale/nl.js b/manage-gui/src/locale/nl.js index c200903d..d35d9e8a 100644 --- a/manage-gui/src/locale/nl.js +++ b/manage-gui/src/locale/nl.js @@ -1,7 +1,6 @@ -import I18n from "i18n-js"; import en from "./en" //No Dutch translations -I18n.translations.nl = en; +const nl = en; -export default I18n.translations.nl; +export default nl; diff --git a/manage-gui/src/pages/API.jsx b/manage-gui/src/pages/API.jsx index e74fcc3c..f17be69a 100644 --- a/manage-gui/src/pages/API.jsx +++ b/manage-gui/src/pages/API.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import PropTypes from "prop-types"; import {Link} from "react-router-dom"; import Papaparse from "papaparse"; diff --git a/manage-gui/src/pages/Activity.jsx b/manage-gui/src/pages/Activity.jsx index 97f5cba4..f13245dc 100644 --- a/manage-gui/src/pages/Activity.jsx +++ b/manage-gui/src/pages/Activity.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import {recentActivity} from "../api"; import "./Activity.scss"; import SelectMulti from "../components/form/SelectMulti"; diff --git a/manage-gui/src/pages/ChangeRequests.jsx b/manage-gui/src/pages/ChangeRequests.jsx index 21dbf5b4..ee216e3f 100644 --- a/manage-gui/src/pages/ChangeRequests.jsx +++ b/manage-gui/src/pages/ChangeRequests.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import {allChangeRequests} from "../api"; import {copyToClip, isEmpty, stop} from "../utils/Utils"; import "./Support.scss"; diff --git a/manage-gui/src/pages/Detail.jsx b/manage-gui/src/pages/Detail.jsx index 2ab75976..1a1e75ed 100644 --- a/manage-gui/src/pages/Detail.jsx +++ b/manage-gui/src/pages/Detail.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import PropTypes from "prop-types"; import { diff --git a/manage-gui/src/pages/EduGain.jsx b/manage-gui/src/pages/EduGain.jsx index 4822f843..531f71ec 100644 --- a/manage-gui/src/pages/EduGain.jsx +++ b/manage-gui/src/pages/EduGain.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import PropTypes from "prop-types"; import {countFeed, deleteFeed, importFeed, validation} from "../api"; import "./EduGain.scss"; diff --git a/manage-gui/src/pages/NotFound.jsx b/manage-gui/src/pages/NotFound.jsx index 3107bca3..b42694b3 100644 --- a/manage-gui/src/pages/NotFound.jsx +++ b/manage-gui/src/pages/NotFound.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import "./NotFound.scss"; export default function NotFound() { diff --git a/manage-gui/src/pages/Policies.jsx b/manage-gui/src/pages/Policies.jsx index c6e4ecfe..2a2dce83 100644 --- a/manage-gui/src/pages/Policies.jsx +++ b/manage-gui/src/pages/Policies.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import {stop} from "../utils/Utils"; import "./Policies.scss"; import PolicyPlayground from "../components/PolicyPlaygound"; diff --git a/manage-gui/src/pages/Scopes.jsx b/manage-gui/src/pages/Scopes.jsx index eefa3dab..d40e952a 100644 --- a/manage-gui/src/pages/Scopes.jsx +++ b/manage-gui/src/pages/Scopes.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import {allScopes, deleteScope, saveScope, scopeSupportedLanguagers} from "../api"; import {isEmpty, validScope} from "../utils/Utils"; import "./Scopes.scss"; diff --git a/manage-gui/src/pages/Search.jsx b/manage-gui/src/pages/Search.jsx index 45678b92..0ef53112 100644 --- a/manage-gui/src/pages/Search.jsx +++ b/manage-gui/src/pages/Search.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import PropTypes from "prop-types"; import debounce from "lodash.debounce"; import Autocomplete from "../components/Autocomplete"; diff --git a/manage-gui/src/pages/ServerError.jsx b/manage-gui/src/pages/ServerError.jsx index a178bda4..185da52c 100644 --- a/manage-gui/src/pages/ServerError.jsx +++ b/manage-gui/src/pages/ServerError.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import "./NotFound.scss"; export default function ServerError() { @@ -9,4 +9,4 @@ export default function ServerError() {

); -} \ No newline at end of file +} diff --git a/manage-gui/src/pages/Staging.jsx b/manage-gui/src/pages/Staging.jsx index 1260519d..394dff0d 100644 --- a/manage-gui/src/pages/Staging.jsx +++ b/manage-gui/src/pages/Staging.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import {stop} from "../utils/Utils"; import "./System.scss"; import "react-json-pretty/themes/monikai.css"; diff --git a/manage-gui/src/pages/StepupManagement.jsx b/manage-gui/src/pages/StepupManagement.jsx index 6ef3c26a..fd8f54f2 100644 --- a/manage-gui/src/pages/StepupManagement.jsx +++ b/manage-gui/src/pages/StepupManagement.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import {stop} from "../utils/Utils"; import "./StepupManagement.scss"; import PolicyPlayground from "../components/PolicyPlaygound"; diff --git a/manage-gui/src/pages/Support.jsx b/manage-gui/src/pages/Support.jsx index 99b394a3..8b6aa003 100644 --- a/manage-gui/src/pages/Support.jsx +++ b/manage-gui/src/pages/Support.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import {Link} from "react-router-dom"; import {includeInPush, search} from "../api"; import {copyToClip, isEmpty, stop} from "../utils/Utils"; diff --git a/manage-gui/src/pages/System.jsx b/manage-gui/src/pages/System.jsx index a6357b1f..78291712 100644 --- a/manage-gui/src/pages/System.jsx +++ b/manage-gui/src/pages/System.jsx @@ -1,5 +1,5 @@ import React from "react"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; import CopyToClipboard from "react-copy-to-clipboard"; import PropTypes from "prop-types"; diff --git a/manage-gui/src/utils/Flash.js b/manage-gui/src/utils/Flash.js index 283bf10d..e5f1018d 100644 --- a/manage-gui/src/utils/Flash.js +++ b/manage-gui/src/utils/Flash.js @@ -1,5 +1,5 @@ import {EventEmitter} from "events"; -import I18n from "i18n-js"; +import I18n from "../locale/I18n"; export const emitter = new EventEmitter(); diff --git a/manage-gui/vite.config.js b/manage-gui/vite.config.js index 48cc9dd0..11b2216a 100644 --- a/manage-gui/vite.config.js +++ b/manage-gui/vite.config.js @@ -3,21 +3,6 @@ import react from '@vitejs/plugin-react' // https://vite.dev/config/ export default defineConfig({ - resolve: { - alias: [ - // JS: force browser-safe build - { - find: /^jsondiffpatch$/, - replacement: 'jsondiffpatch/dist/jsondiffpatch.umd.js', - }, - - // CSS: keep original path working - { - find: /^jsondiffpatch\/dist\/formatters-styles\/(.*)$/, - replacement: 'jsondiffpatch/dist/formatters-styles/$1', - }, - ], - }, plugins: [react()], build: { chunkSizeWarningLimit: 1000 diff --git a/manage-gui/yarn.lock b/manage-gui/yarn.lock index 3d5d86a9..733f14f4 100644 --- a/manage-gui/yarn.lock +++ b/manage-gui/yarn.lock @@ -528,7 +528,7 @@ dependencies: "@floating-ui/utils" "^0.2.11" -"@floating-ui/dom@^1.0.1", "@floating-ui/dom@^1.6.1": +"@floating-ui/dom@^1.0.1": version "1.7.6" resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.6.tgz#f915bba5abbb177e1f227cacee1b4d0634b187bf" integrity sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ== @@ -1431,7 +1431,7 @@ chokidar@^4.0.0: dependencies: readdirp "^4.0.1" -classnames@^2.2.5, classnames@^2.3.0: +classnames@^2.2.5: version "2.5.1" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== @@ -1445,12 +1445,12 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -codemirror@^5.18.2: +codemirror@^5.18.2, codemirror@^5.65.1: version "5.65.21" resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.21.tgz#cacf320606c5450ad3b3da34bb9c666afec21068" integrity sha512-6teYk0bA0nR3QP0ihGMoxuKzpl5W80FpnHpBJpgy66NK3cZv5b/d/HY8PnRvfSsCG1MTfr92u2WUl+wT0E40mQ== -codemirror@^6.0.0, codemirror@^6.0.2: +codemirror@^6.0.0: version "6.0.2" resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-6.0.2.tgz#4d3fea1ad60b6753f97ca835f2f48c6936a8946e" integrity sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw== @@ -4026,13 +4026,13 @@ react-textarea-autosize@^8.3.2: use-composed-ref "^1.3.0" use-latest "^1.2.1" -react-tooltip@^5.30.0: - version "5.30.0" - resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-5.30.0.tgz#8e1af2d1bf91a2a5169302bd0eb82b62847ad224" - integrity sha512-Yn8PfbgQ/wmqnL7oBpz1QiDaLKrzZMdSUUdk7nVeGTwzbxCAJiJzR4VSYW+eIO42F1INt57sPUmpgKv0KwJKtg== +react-tooltip@^4.2.21: + version "4.5.1" + resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.5.1.tgz#77eccccdf16adec804132e558ec20ca5783b866a" + integrity sha512-Zo+CSFUGXar1uV+bgXFFDe7VeS2iByeIp5rTgTcc2HqtuOS5D76QapejNNfx320MCY91TlhTQat36KGFTqgcvw== dependencies: - "@floating-ui/dom" "^1.6.1" - classnames "^2.3.0" + prop-types "^15.8.1" + uuid "^7.0.3" react-transition-group@^4.3.0: version "4.4.5" @@ -4526,10 +4526,10 @@ space-separated-tokens@^2.0.0: resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== -spin.js@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/spin.js/-/spin.js-4.1.2.tgz#866180f0489ce90432201363e71c314f0db28824" - integrity sha512-ua/yEpxEwyEUWs57tMQYdik/KJ12sQRyMXjSlK/Ai927aEUDVY3FXUi4ml4VvlLCTQNIjC6tHyjSLBrJzFAqMA== +spin.js@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/spin.js/-/spin.js-2.3.2.tgz#6caa56d520673450fd5cfbc6971e6d0772c37a1a" + integrity sha512-ryhCvKCRa6J5Fxa7Y+fnhE2a+e05JwfW5dxO82zPd0uDM9o+qp8p74BJUurjiqCqmDsWNvGOAxfqdD317XIedg== stackback@0.0.2: version "0.0.2" @@ -4909,6 +4909,11 @@ use-latest@^1.2.1: dependencies: use-isomorphic-layout-effect "^1.1.1" +uuid@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" + integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== + vfile-location@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-5.0.3.tgz#cb9eacd20f2b6426d19451e0eafa3d0a846225c3" From 574ed69dab0f64785a4d8630dace603b2ef2607f Mon Sep 17 00:00:00 2001 From: Okke Harsta Date: Mon, 9 Mar 2026 12:56:56 +0100 Subject: [PATCH 04/17] WIP for #672 --- manage-gui/src/components/metadata/SFO.jsx | 28 +++++++ manage-gui/src/components/metadata/SFO.scss | 75 +++++++++++++++++++ manage-gui/src/locale/I18n.js | 16 ++++ manage-gui/src/locale/en.js | 15 +++- manage-gui/src/pages/Detail.jsx | 14 ++++ manage-gui/src/pages/StepupManagement.jsx | 47 ------------ manage-gui/src/pages/StepupManagement.scss | 36 --------- .../metadata_configuration/sfo.schema.json | 5 +- .../metadata_templates/sfo.template.json | 1 + 9 files changed, 152 insertions(+), 85 deletions(-) create mode 100644 manage-gui/src/components/metadata/SFO.jsx create mode 100644 manage-gui/src/components/metadata/SFO.scss create mode 100644 manage-gui/src/locale/I18n.js delete mode 100644 manage-gui/src/pages/StepupManagement.jsx delete mode 100644 manage-gui/src/pages/StepupManagement.scss diff --git a/manage-gui/src/components/metadata/SFO.jsx b/manage-gui/src/components/metadata/SFO.jsx new file mode 100644 index 00000000..e5fa40b7 --- /dev/null +++ b/manage-gui/src/components/metadata/SFO.jsx @@ -0,0 +1,28 @@ +import React, {useEffect, useState} from "react"; + +import "./SFO.scss"; + + +export default function SFO({ + configuration, + data, + isNew, + errors, + onChange, + onError + }) { + + useEffect(() => { + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + + return ( +
+ {/*{JSON.stringify(errors)}*/} +
+ {JSON.stringify(configuration)} +
+
+ ); +} diff --git a/manage-gui/src/components/metadata/SFO.scss b/manage-gui/src/components/metadata/SFO.scss new file mode 100644 index 00000000..3bd2d328 --- /dev/null +++ b/manage-gui/src/components/metadata/SFO.scss @@ -0,0 +1,75 @@ +@use "../../stylesheets/vars.scss"; +@use "../../stylesheets/media_queries.scss"; + +.metadata-sfo { + background-color: white; + padding: 10px 20px 20px 20px; + + section.sfo { + margin-top: 15px; + + .error { + color: vars.$red; + margin-top: 5px; + } + + label > span { + margin-bottom: 5px; + } + + .input-field { + margin-bottom: 25px; + display: flex; + flex-direction: column; + + &.row { + flex-direction: row; + } + + label { + margin-bottom: 5px; + display: inline-block; + } + + + } + + input, textarea { + width: 50%; + padding: 5px; + border-radius: 3px; + border: 1px solid #d9d9d8; + line-height: 22px; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + + &.max { + width: 100%; + } + + @include media_queries.desktop { + width: 100%; + } + + } + + .sfo-select { + width: 50%; + + &.max { + width: 100%; + } + + @include media_queries.desktop { + width: 100%; + } + + } + + .fa-info-circle { + color: vars.$blue; + margin-left: 5px; + } + + } + +} diff --git a/manage-gui/src/locale/I18n.js b/manage-gui/src/locale/I18n.js new file mode 100644 index 00000000..657bfabf --- /dev/null +++ b/manage-gui/src/locale/I18n.js @@ -0,0 +1,16 @@ +import {I18n as I18nRemote} from "i18n-js"; + +import en from "./en"; +import nl from "./nl"; + +const I18n = new I18nRemote({ + en: en, + nl: nl, +}, {locale: "en"}); + +I18n.missingTranslation.register("report-error", (i18n, scope) => { + return null; +}); +I18n.missingBehavior = "report-error"; + +export default I18n; diff --git a/manage-gui/src/locale/en.js b/manage-gui/src/locale/en.js index 178cb897..f7f79355 100644 --- a/manage-gui/src/locale/en.js +++ b/manage-gui/src/locale/en.js @@ -84,6 +84,7 @@ const en = { organisation: "Organisation", organisation_entity: "Connected entities", sp_organisation: "Organisation", + sfo: "SFO" }, notFound: "No Metadata found. You might want to search for this deleted entity in the 'FIND MY METADATA' section in the 'System' tab.", existingChangeRequests: "There are orphaned change requests for this deleted entity. You probably want to remove them.", @@ -721,7 +722,7 @@ const en = { reload: "Reload", providers: "Services", }, - policyPlayGround :{ + policyPlayGround: { institutionProvider: "Identity provider", serviceProvider: "Service provider", institutionProviderPlaceholder: 'Select the Identity Provider - required', @@ -730,6 +731,18 @@ const en = { clear: 'Clear', policy: "Policy", policyPlaceholder: "Select a policy to initiate the PDP request data" + }, + sfo: { + entityId: "entityID", + publicKey: "Public Key", + acs: "ACS", + loa: "Loa", + assertionEncryptionEnabled: "Assertion encryption enabled", + secondFactorOnly: "Second factor only", + secondFactorOnlyNameidPatterns: "Second factor only nameID patterns", + blacklistedEncryptionAlgorithm: "Blacklisted encryption Algorithms" + + } }; export default en; diff --git a/manage-gui/src/pages/Detail.jsx b/manage-gui/src/pages/Detail.jsx index 1a1e75ed..7b44289c 100644 --- a/manage-gui/src/pages/Detail.jsx +++ b/manage-gui/src/pages/Detail.jsx @@ -61,6 +61,7 @@ import PolicyXML from "../components/metadata/PolicyXML"; import PolicyJSON from "../components/metadata/PolicyJSON"; import ErrorDialog from "../components/ErrorDialog"; import PolicyMaintenance from "../components/metadata/PolicyMaintenance"; +import SFO from "../components/metadata/SFO"; export const DIALOG_TYPES = { CONFIRM: "confirm", @@ -187,6 +188,8 @@ class Detail extends React.PureComponent { tab = "policy_form"; } else if (tab === "connection" && type === "organisation") { tab = "organisation"; + } else if (tab === "connection" && type === "sfo") { + tab = "sfo"; } const id = isEmpty(props.newMetaData) ? this.props.params.id : "new"; this.state = { @@ -865,6 +868,7 @@ class Detail extends React.PureComponent { case "metadata": case "import": case "export": + case "sfo": break; case "connected_idps": { const connectedEntities = getConnectedEntities(whiteListing, allowedAll, allowedEntities, metaData.data.entityid, metaData.data.state); @@ -1197,6 +1201,16 @@ class Detail extends React.PureComponent { return ( ); + case "sfo": + return ( + + + ); default: throw new Error(`Unknown tab ${tab}`); } diff --git a/manage-gui/src/pages/StepupManagement.jsx b/manage-gui/src/pages/StepupManagement.jsx deleted file mode 100644 index fd8f54f2..00000000 --- a/manage-gui/src/pages/StepupManagement.jsx +++ /dev/null @@ -1,47 +0,0 @@ -import React from "react"; -import I18n from "../locale/I18n"; -import {stop} from "../utils/Utils"; -import "./StepupManagement.scss"; -import PolicyPlayground from "../components/PolicyPlaygound"; -import withRouterHooks from "../utils/RouterBackwardCompatability"; -import PolicyConflicts from "../components/PolicyConflicts"; -import {useParams} from "react-router-dom"; - -export const StepupManagement = ({configuration}) => { - const {tab = ""} = useParams(); - const [currentTab, setCurrentTab] = useState(tab); - const navigate = useNavigate(); - const tabs = ["sfo","institutions"] - - const switchTab = tab => e => { - stop(e); - setCurrentTab(tab) - navigate(`/policies/${tab}`); - }; - - const renderTab = (tab, selectedTab) => - - {I18n.t(`stepupManagement.${tab}`)} - ; - - const renderCurrentTab = selectedTab => { - switch (selectedTab) { - case "sfo" : - return ; - case "institutions" : - return ; - } - }; - - return ( -
-
- {tabs.map(tab => renderTab(tab, currentTab))} -
- {renderCurrentTab(currentTab)} -
- ); - -} diff --git a/manage-gui/src/pages/StepupManagement.scss b/manage-gui/src/pages/StepupManagement.scss deleted file mode 100644 index 7f3ca8c6..00000000 --- a/manage-gui/src/pages/StepupManagement.scss +++ /dev/null @@ -1,36 +0,0 @@ -@use "../stylesheets/vars.scss"; -@use "../stylesheets/mixins.scss"; - -.mod-stepup-management { - @include mixins.page; - - section.tabs { - display: flex; - margin-top: 15px; - padding: 0; - - span { - text-align: center; - cursor: pointer; - padding: 15px 25px; - background-color: vars.$light-grey; - color: vars.$dark-grey; - text-transform: uppercase; - border-right: 1px solid white; - - &.active { - background-color: white; - color: vars.$darker-blue; - border-top: 2px solid vars.$blue; - border-right: none; - font-weight: bold; - } - - &:last-child { - border-right: none; - } - } - } - -} - diff --git a/manage-server/src/main/resources/metadata_configuration/sfo.schema.json b/manage-server/src/main/resources/metadata_configuration/sfo.schema.json index 9aca7fc5..be31a754 100644 --- a/manage-server/src/main/resources/metadata_configuration/sfo.schema.json +++ b/manage-server/src/main/resources/metadata_configuration/sfo.schema.json @@ -81,7 +81,10 @@ } }, "required": [ - "entityid" + "entityid", + "public_key", + "acs", + "loa" ], "additionalProperties": false, "indexes": [] diff --git a/manage-server/src/main/resources/metadata_templates/sfo.template.json b/manage-server/src/main/resources/metadata_templates/sfo.template.json index d2383580..1bc3c969 100644 --- a/manage-server/src/main/resources/metadata_templates/sfo.template.json +++ b/manage-server/src/main/resources/metadata_templates/sfo.template.json @@ -1,5 +1,6 @@ { "entity_id": "", + "metaDataFields": {}, "public_key": "", "acs": [], "loa": { From 4295bb7cb3b8b022984240c244adb22fc2605b8b Mon Sep 17 00:00:00 2001 From: Okke Harsta Date: Mon, 9 Mar 2026 16:23:59 +0100 Subject: [PATCH 05/17] WIP for #627 --- .../src/components/metadata/Institution.jsx | 213 ++++++++++++++++++ .../src/components/metadata/Institution.scss | 57 +++++ manage-gui/src/components/metadata/SFO.jsx | 192 +++++++++++++++- manage-gui/src/components/metadata/SFO.scss | 4 +- manage-gui/src/locale/I18n.js | 2 +- manage-gui/src/locale/en.js | 4 +- manage-gui/src/pages/Detail.jsx | 37 ++- manage-gui/src/stylesheets/mixins.scss | 3 - .../institution.schema.json | 110 +++++++++ .../metadata_configuration/sfo.schema.json | 31 ++- .../institution.template.json | 19 ++ .../metadata_templates/sfo.template.json | 6 +- 12 files changed, 635 insertions(+), 43 deletions(-) create mode 100644 manage-gui/src/components/metadata/Institution.jsx create mode 100644 manage-gui/src/components/metadata/Institution.scss create mode 100644 manage-server/src/main/resources/metadata_configuration/institution.schema.json create mode 100644 manage-server/src/main/resources/metadata_templates/institution.template.json diff --git a/manage-gui/src/components/metadata/Institution.jsx b/manage-gui/src/components/metadata/Institution.jsx new file mode 100644 index 00000000..956ba6b6 --- /dev/null +++ b/manage-gui/src/components/metadata/Institution.jsx @@ -0,0 +1,213 @@ +import React, {useEffect, useState} from "react"; +import Creatable from 'react-select/creatable'; +import "./Institution.scss"; +import I18n from "../../locale/I18n"; +import {isEmpty} from "../../utils/Utils"; +import {search, validation} from "../../api"; +import reactSelectStyles from "./../reactSelectStyles.js"; +import Select from "../Select"; +import {CheckBox} from "../index"; + +export default function Institution({ + configuration, + data, + errors, + onChange, + onError + }) { + + const [institutions, setInstitutions] = useState([]); + + + useEffect(() => { + search({}, "institution") + .then(res => setInstitutions(res)); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + const internalOnChange = (value, attribute) => { + onChange(`data.${attribute}`, value); + if (configuration.required.includes(attribute)) { + onError(attribute, isEmpty(value)); + } + } + + const validateFormat = async (attribute, value, format) => { + if (isEmpty(value)) { + return true; + } + if (typeof value === "string") { + const valid = await validation(format, value); + onError(attribute, !valid); + } + + if (Array.isArray(value)) { + const validationValues = await Promise.all( + value.map(val => validation(format, val)) + ); + const valid = isEmpty(validationValues.filter(val => !val)); + onError(attribute, !valid); + } + } + + const renderError = (attribute, formatInvalid = false) => { + return ( +
+ {I18n.t(formatInvalid ? "metaDataFields.error" : "metadata.required", { + name: attribute, + format: attribute + })} +
+ ); + } + + const renderIdentifier = () => { + return ( +
+ + internalOnChange(e.target.value, "entityid")}/> + {isEmpty(data.entityid) && renderError("EntityID")} +
+ ); + } + + const renderPublicKey = () => { + return ( +
+ + validateFormat("public_key", e.target.value, "certificate")} + onChange={e => { + internalOnChange(e.target.value, "public_key"); + }}/> + {isEmpty(data.public_key) && renderError("Public key")} + {(!isEmpty(data.public_key) && errors.public_key) && + renderError("Public key", true)} +
+ ); + } + + const renderAcs = () => { + return ( +
+ + internalOnChange(options.map(o => o.value), "acs")} + onBlur={() => validateFormat("acs", data.acs, "url")} + placeholder="Enter acs..." + value={(data.acs || []).map(acs => ({value: acs, label: acs}))} + /> + {(!isEmpty(data.acs) && errors.acs) && + renderError("ACS", true)} + {isEmpty(data.acs) && + renderError("ACS", )} +
+ ); + } + + const renderLoa = () => { + return ( +
+ + internalOnChange(e.target.value, "entityid")}/> + {isEmpty(data.entityid) && renderError("EntityID")} +
+ ); + } + + const renderPublicKey = () => { + return ( +
+ + validateFormat("public_key", e.target.value, "certificate")} + onChange={e => { + internalOnChange(e.target.value, "public_key"); + }}/> + {isEmpty(data.public_key) && renderError("Public key")} + {(!isEmpty(data.public_key) && errors.public_key) && + renderError("Public key", true)} +
+ ); + } + + const renderAcs = () => { + return ( +
+ + internalOnChange(options.map(o => o.value), "acs")} + onBlur={() => validateFormat("acs", data.acs, "url")} + placeholder="Enter acs..." + value={(data.acs || []).map(acs => ({value: acs, label: acs}))} + /> + {(!isEmpty(data.acs) && errors.acs) && + renderError("ACS", true)} + {isEmpty(data.acs) && + renderError("ACS", )} +
+ ); + } + + const renderLoa = () => { + return ( +
+ + internalOnChange(e.target.value, "entityid")}/> - {isEmpty(data.entityid) && renderError("EntityID")} + value={data.identifier || ""} + onChange={e => internalOnChange(e.target.value, "identifier")} + onBlur={onBlurIdentifier}/> + {isEmpty(data.identifier) && renderError("Identifier")} + {duplicateIdentifier && renderDuplicateIdentifier()}
); } - const renderPublicKey = () => { + const renderNumberOfTokensPerIdentity = () => { return (
-
); } - const renderAcs = () => { + const renderUseRaLocations = () => { return (
- - internalOnChange(options.map(o => o.value), "acs")} - onBlur={() => validateFormat("acs", data.acs, "url")} - placeholder="Enter acs..." - value={(data.acs || []).map(acs => ({value: acs, label: acs}))} - /> - {(!isEmpty(data.acs) && errors.acs) && - renderError("ACS", true)} - {isEmpty(data.acs) && - renderError("ACS", )} + internalOnChange(e.target.checked, "use_ra_locations")}/>
); } - const renderLoa = () => { + const renderShowRaaContactInformation = () => { return (
- - internalOnChange(option.value, "stepup-client")} + options={configuration.properties["stepup-client"].enum + .map(client => ({label: client, value: client}))} + value={data["stepup-client"]} + isClearable={false} + isSearchable={false} + />
); } - const renderSecondFactorOnlyNameidPatterns = () => { + + const renderAllowedSecondFactors = () => { return (
-
); } - const renderBlacklistedEncryptionAlgorithm = () => { + const renderUseRa = () => { return (
-
); @@ -199,14 +207,14 @@ export default function Institution({
{/*{JSON.stringify(errors)}*/}
- {renderEntityID()} - {renderPublicKey()} - {renderAcs()} - {renderLoa()} - {renderAssertionEncryptionEnabled()} - {renderSecondFactorOnly()} - {renderSecondFactorOnlyNameidPatterns()} - {renderBlacklistedEncryptionAlgorithm()} + {renderIdentifier()} + {renderUseRaLocations()} + {renderShowRaaContactInformation()} + {renderVerifyEmail()} + {renderAllowedSecondFactors()} + {renderNumberOfTokensPerIdentity()} + {renderUseRa()} + {renderStepupClient()}
); diff --git a/manage-gui/src/locale/en.js b/manage-gui/src/locale/en.js index 9d259b7d..c0eb32b7 100644 --- a/manage-gui/src/locale/en.js +++ b/manage-gui/src/locale/en.js @@ -84,7 +84,9 @@ const en = { organisation: "Organisation", organisation_entity: "Connected entities", sp_organisation: "Organisation", - sfo: "SFO" + sfo: "SFO", + institution: "Institution", + overview: "Overview" }, notFound: "No Metadata found. You might want to search for this deleted entity in the 'FIND MY METADATA' section in the 'System' tab.", existingChangeRequests: "There are orphaned change requests for this deleted entity. You probably want to remove them.", @@ -174,9 +176,12 @@ const en = { orphans: "Referential integrity", extended_search: "Extended Search", push: "Push", - push_preview_eb: "Push Preview EB", - push_preview_oidc: "Push Preview OIDC", - push_preview_pdp: "Push Preview PDP", + push_preview_eb: "Preview EB", + push_preview_oidc: "Preview OIDC", + push_preview_pdp: "Preview PDP", + push_preview_sfo: "Preview SFO", + push_preview_insititution: "Preview Institution", + push_preview_stepup: "Preview Stepup", find_my_data: "Find my MetaData", stats: "Stats", findMyDataInfo: "Find your 'lost' MetaData. Enter part of the entityId, specify the type of MetaData and search in the revisions where all deleted MetaData still exists.", @@ -741,8 +746,22 @@ const en = { secondFactorOnly: "Second factor only", secondFactorOnlyNameidPatterns: "Second factor only nameID patterns", blacklistedEncryptionAlgorithm: "Blacklisted encryption algorithms" - - + }, + institution: { + identifier: "Identifier", + duplicateIdentifier: "This identifier is alreay taken. Duplicates are not allowed", + useRaLocations: "Use RA locations", + showRaaContactInformation: "Show RAA contact information", + verifyEmail: "Verify email", + allowedSecondFactors: "Allowed second factors", + numberOfTokensPerIdentity: "Number of tokens per identity", + useRa: "Use RA", + useRaa: "Use RAA", + selectRaa: "Select RAA", + selfVet: "Self vet", + allowSelfAssertedTokens: "Allow self asserted tokens", + ssoOn2fa: "SSO on 2FA", + stepupClient: "Type of stepup-client" } }; export default en; diff --git a/manage-gui/src/pages/Detail.jsx b/manage-gui/src/pages/Detail.jsx index b7d70bd1..769b10f6 100644 --- a/manage-gui/src/pages/Detail.jsx +++ b/manage-gui/src/pages/Detail.jsx @@ -1290,6 +1290,7 @@ class Detail extends React.PureComponent { const isRs = type === "oauth20_rs"; const isProvisioning = type === "provisioning"; const isSingleTenantTemplate = type === "single_tenant_template"; + const isStepUp = type === "sfo" || type === "institution"; const isOrganisation = type === "organisation"; const isPolicy = type === "policy"; const nonExistentAllowedEntities = this.renderWarningNonExistentAllowedEntities(); @@ -1310,9 +1311,9 @@ class Detail extends React.PureComponent { {I18n.t("topBannerDetails.name")} - {!isPolicy && !isOrganisation && {I18n.t("topBannerDetails.organization")}} + {!isPolicy && !isOrganisation && !isStepUp && {I18n.t("topBannerDetails.organization")}} {I18n.t("topBannerDetails.type")} - {!isPolicy && !isOrganisation && {I18n.t("topBannerDetails.workflow")}} + {!isPolicy && !isOrganisation && !isStepUp && {I18n.t("topBannerDetails.workflow")}} {isPolicy && {I18n.t("topBannerDetails.policyType")}} {(isSp || isRp) && {I18n.t("topBannerDetails.reviewState")} @@ -1351,9 +1352,9 @@ class Detail extends React.PureComponent { {name} {!isPolicy && !isOrganisation && {organization}} {typeMetaData} - {!isPolicy && !isOrganisation && + {!isPolicy && !isOrganisation && !isStepUp && {state}} - {isPolicy && !isOrganisation && {I18n.t(`topBannerDetails.${metaData.data.type}`)}} + {isPolicy && !isOrganisation && !isStepUp && {I18n.t(`topBannerDetails.${metaData.data.type}`)}} {(isSp || isRp) && {excludedFromPush ? I18n.t("topBannerDetails.staging") : I18n.t("topBannerDetails.production")} } @@ -1376,7 +1377,7 @@ class Detail extends React.PureComponent { })} } {(isEmpty(connectedEntities) && !isSingleTenantTemplate && !isNew && !isRs - && whiteListingLoaded && !isProvisioning) && !isPolicy && !isOrganisation && + && whiteListingLoaded && !isProvisioning) && !isPolicy && !isOrganisation && !isStepUp &&
{I18n.t("topBannerDetails.noEntitiesConnected", {type: typeMetaData})} diff --git a/manage-gui/src/pages/System.jsx b/manage-gui/src/pages/System.jsx index 78291712..711447c8 100644 --- a/manage-gui/src/pages/System.jsx +++ b/manage-gui/src/pages/System.jsx @@ -8,7 +8,11 @@ import { orphans, ping, pushPreview, - pushPreviewOIDC, pushPreviewPdP, + pushPreviewOIDC, + pushPreviewPdP, + pushPreviewSFO, + pushPreviewInstitution, + pushPreviewStepup, restoreDeletedRevision, search, stats, @@ -29,7 +33,10 @@ export default class System extends React.PureComponent { constructor(props) { super(props); - const tabs = ["push_preview_eb", "push_preview_oidc", "push_preview_pdp", "validation", "orphans", "find_my_data", "stats"]; + const tabs = [ + "push_preview_eb", "push_preview_oidc", "push_preview_pdp", + "push_preview_sfo", "push_preview_insititution", "push_preview_stepup", + "validation", "orphans", "find_my_data", "stats"]; this.state = { tabs: tabs, selectedTab: tabs[0], diff --git a/manage-server/src/main/java/manage/control/DatabaseController.java b/manage-server/src/main/java/manage/control/DatabaseController.java index 90062464..5dbddb31 100644 --- a/manage-server/src/main/java/manage/control/DatabaseController.java +++ b/manage-server/src/main/java/manage/control/DatabaseController.java @@ -48,6 +48,10 @@ public class DatabaseController { private final String oidcPushUri; private final boolean oidcEnabled; + private final RestTemplate stepUpRestTemplate; + private final String stepUpPushUri; + private final boolean stepUpEnabled; + private final boolean excludeEduGainImported; private final boolean excludeOidcRP; private final boolean excludeSRAM; @@ -70,11 +74,15 @@ public class DatabaseController { @Value("${push.oidc.url}") String oidcPushUri, @Value("${push.oidc.user}") String oidcUser, @Value("${push.oidc.password}") String oidcPassword, - @Value("${push.pdp.url}") String pdpPushUri, + @Value("${push.oidc.enabled}") boolean oidcEnabled, @Value("${push.pdp.user}") String pdpUser, @Value("${push.pdp.password}") String pdpPassword, + @Value("${push.pdp.url}") String pdpPushUri, @Value("${push.pdp.enabled}") boolean pdpEnabled, - @Value("${push.oidc.enabled}") boolean oidcEnabled, + @Value("${push.stepup.enabled}") boolean stepUpEnabled, + @Value("${push.stepup.url}") String stepUpPushUri, + @Value("${push.stepup.user}") String stepUpUser, + @Value("${push.stepup.password}") String stepUpPassword, Environment environment) { this.metaDataRepository = metaDataRepository; this.pushUri = pushUri; @@ -92,6 +100,10 @@ public class DatabaseController { this.pdpPushUri = pdpPushUri; this.pdpEnabled = pdpEnabled; + this.stepUpRestTemplate = RestTemplateIdiom.buildRestTemplate(stepUpPushUri, stepUpUser, stepUpPassword); + this.stepUpPushUri = stepUpPushUri; + this.stepUpEnabled = stepUpEnabled; + this.environment = environment; } @@ -353,6 +365,24 @@ public List pushPreviewPdPEndpoint() { return this.pushPreviewPdP(); } + @PreAuthorize("hasRole('ADMIN')") + @GetMapping("/client/playground/pushPreviewSFO") + public List pushPreviewSFOEndpoint() { + return this.pushPreviewSFO(); + } + + @PreAuthorize("hasRole('ADMIN')") + @GetMapping("/client/playground/pushPreviewInstitution") + public List pushPreviewInstitutionEndpoint() { + return this.pushPreviewInstitution(); + } + + @PreAuthorize("hasRole('ADMIN')") + @GetMapping("/client/playground/pushPreviewStepup") + public List pushPreviewStepupEndpoint() { + return this.pushPreviewStepup(); + } + private boolean excludeFromPush(Map metaDataFields) { Object excludeFromPush = metaDataFields.getOrDefault("coin:exclude_from_push", false); if (excludeFromPush instanceof String) { diff --git a/manage-server/src/main/java/manage/control/MetaDataController.java b/manage-server/src/main/java/manage/control/MetaDataController.java index 1ecfc0b5..39c5c1e9 100644 --- a/manage-server/src/main/java/manage/control/MetaDataController.java +++ b/manage-server/src/main/java/manage/control/MetaDataController.java @@ -474,6 +474,13 @@ public List uniqueEntityId(@PathVariable("type") String type, @RequestBody return metaDataService.uniqueEntityId(type, entityId); } + @PreAuthorize("hasAnyRole('ADMIN')") + @PostMapping({"/client/uniqueInstitutionIdentifier"}) + public List uniqueInstitutionIdentifier(@RequestBody Map properties) { + String identifier = (String) properties.get("identifier"); + return metaDataRepository.findInstitutionByIdentifier(identifier); + } + @PreAuthorize("hasAnyRole('ADMIN', 'READ')") @PostMapping({"/client/uniquePolicyName/policy", "/internal/uniquePolicyName/policy"}) public List uniquePolicyName(@RequestBody Map properties) { diff --git a/manage-server/src/main/java/manage/hook/EntityIdReconcilerHook.java b/manage-server/src/main/java/manage/hook/EntityIdReconcilerHook.java index c0b2e819..93975830 100644 --- a/manage-server/src/main/java/manage/hook/EntityIdReconcilerHook.java +++ b/manage-server/src/main/java/manage/hook/EntityIdReconcilerHook.java @@ -5,10 +5,13 @@ import manage.model.MetaData; import manage.repository.MetaDataRepository; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.UUID; import static java.util.Arrays.asList; -import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import static java.util.stream.Collectors.toList; import static manage.model.EntityType.*; @@ -26,6 +29,8 @@ public EntityIdReconcilerHook(MetaDataRepository metaDataRepository) { public boolean appliesForMetaData(MetaData metaData) { return !metaData.getType().equals(EntityType.STT.getType()) && !metaData.getType().equals(EntityType.PROV.getType()) && + !metaData.getType().equals(STEPUP.getType()) && + !metaData.getType().equals(SFO.getType()) && !metaData.getType().equals(EntityType.ORG.getType()); } @@ -40,21 +45,21 @@ public MetaData prePut(MetaData previous, MetaData newMetaData, AbstractUser use String metaDataType = newMetaData.getType(); List types = metaDataTypesForeignKeyRelations(metaDataType); getCollectionReferenceNames(metaDataType).forEach(name -> - types.forEach(type -> { - List references = metaDataRepository.findRaw(type, - String.format("{\"data.%s.name\" : \"%s\"}", name, oldEntityId)); - - String revisionNote = String.format("Updated after entityId rename of %s to %s", oldEntityId, newEntityId); - - references.forEach(metaData -> { - List> entities = (List>) metaData.getData().getOrDefault(name, new ArrayList<>()); - entities.stream() - .filter(entry -> oldEntityId.equals(entry.get("name"))) - .findAny() - .ifPresent(entry -> entry.put("name", newEntityId)); - this.revision(metaData, revisionNote); - }); - })); + types.forEach(type -> { + List references = metaDataRepository.findRaw(type, + String.format("{\"data.%s.name\" : \"%s\"}", name, oldEntityId)); + + String revisionNote = String.format("Updated after entityId rename of %s to %s", oldEntityId, newEntityId); + + references.forEach(metaData -> { + List> entities = (List>) metaData.getData().getOrDefault(name, new ArrayList<>()); + entities.stream() + .filter(entry -> oldEntityId.equals(entry.get("name"))) + .findAny() + .ifPresent(entry -> entry.put("name", newEntityId)); + this.revision(metaData, revisionNote); + }); + })); return newMetaData; } @@ -67,7 +72,7 @@ public MetaData preDelete(MetaData metaDataToBeDeleted, AbstractUser user) { getCollectionReferenceNames(metaDataType).forEach(name -> { types.forEach(type -> { List references = metaDataRepository.findRaw(type, - String.format("{\"data.%s.name\" : \"%s\"}", name, entityId)); + String.format("{\"data.%s.name\" : \"%s\"}", name, entityId)); String revisionNote = String.format("Updated after deletion of entityId %s", entityId); diff --git a/manage-server/src/main/java/manage/hook/MetaDataHookConfiguration.java b/manage-server/src/main/java/manage/hook/MetaDataHookConfiguration.java index 0d39cd8d..c5da7e44 100644 --- a/manage-server/src/main/java/manage/hook/MetaDataHookConfiguration.java +++ b/manage-server/src/main/java/manage/hook/MetaDataHookConfiguration.java @@ -51,7 +51,10 @@ CompositeMetaDataHook hooks(MetaDataRepository metaDataRepository, new ProvisioningApplicationDeletionHook(metaDataRepository), new IdentityProviderBrinCodeHook(metaDataAutoConfiguration), new CertificateDataDuplicationHook(metaDataAutoConfiguration), - new OrganisationDeletionHook(metaDataRepository, metaDataAutoConfiguration))); + new OrganisationDeletionHook(metaDataRepository, metaDataAutoConfiguration), + new StepupIdentifierReconcilerHook(metaDataRepository) + ) + ); } diff --git a/manage-server/src/main/java/manage/hook/StepupIdentifierReconcilerHook.java b/manage-server/src/main/java/manage/hook/StepupIdentifierReconcilerHook.java new file mode 100644 index 00000000..13d7a64d --- /dev/null +++ b/manage-server/src/main/java/manage/hook/StepupIdentifierReconcilerHook.java @@ -0,0 +1,92 @@ +package manage.hook; + +import manage.api.AbstractUser; +import manage.model.EntityType; +import manage.model.MetaData; +import manage.repository.MetaDataRepository; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import static java.util.Arrays.asList; +import static java.util.Collections.singletonList; +import static java.util.stream.Collectors.toList; +import static manage.model.EntityType.*; + +@SuppressWarnings("unchecked") +public class StepupIdentifierReconcilerHook extends MetaDataHookAdapter { + + private final MetaDataRepository metaDataRepository; + + public StepupIdentifierReconcilerHook(MetaDataRepository metaDataRepository) { + this.metaDataRepository = metaDataRepository; + } + + @Override + public boolean appliesForMetaData(MetaData metaData) { + return metaData.getType().equals(STEPUP.getType()); + } + + @Override + public MetaData prePut(MetaData previous, MetaData newMetaData, AbstractUser user) { + String oldIdentifier = identifier(previous); + String newIdentifier = identifier(newMetaData); + + if (oldIdentifier.equals(newIdentifier)) { + return newMetaData; + } + String revisionNote = String.format("Updated after identifier rename of %s to %s", oldIdentifier, newIdentifier); + + List.of("use_ra","use_raa","select_raa").forEach(attr -> { + List references = metaDataRepository.findRaw(newMetaData.getType(), + String.format("{\"data.%s\" : \"%s\"}", attr, oldIdentifier)); + references.forEach(metaData -> { + List identifiers = (List) metaData.getData().get(attr); + identifiers.set(identifiers.indexOf(oldIdentifier), newIdentifier); + this.revision(metaData, revisionNote); + }); + } + ); + newMetaData.getData().put("entityid", newIdentifier); + return newMetaData; + } + + @Override + public MetaData preDelete(MetaData metaDataToBeDeleted, AbstractUser user) { + String identifier = identifier(metaDataToBeDeleted); + + String revisionNote = String.format("Updated after deletion of identifier %s", identifier); + + List.of("use_ra","use_raa","select_raa").forEach(attr -> { + List references = metaDataRepository.findRaw(metaDataToBeDeleted.getType(), + String.format("{\"data.%s\" : \"%s\"}", attr, identifier)); + references.forEach(metaData -> { + List identifiers = (List) metaData.getData().get(attr); + List newIdentifiers = identifiers.stream().filter(item -> !item.equals(identifier)).toList(); + metaData.getData().put(attr, newIdentifiers); + this.revision(metaData, revisionNote); + }); + } + ); + return metaDataToBeDeleted; + } + + private void revision(MetaData metaData, String revisionNote) { + String id = metaData.getId(); + MetaData previous = metaDataRepository.findById(id, metaData.getType()); + previous.revision(UUID.randomUUID().toString()); + metaDataRepository.save(previous); + + metaData.promoteToLatest("System", revisionNote); + metaDataRepository.update(metaData); + + } + + private String identifier(MetaData metaData) { + return (String) metaData.getData().get("identifier"); + } + +} diff --git a/manage-server/src/main/java/manage/repository/MetaDataRepository.java b/manage-server/src/main/java/manage/repository/MetaDataRepository.java index 46c25e3d..2477129c 100644 --- a/manage-server/src/main/java/manage/repository/MetaDataRepository.java +++ b/manage-server/src/main/java/manage/repository/MetaDataRepository.java @@ -299,6 +299,13 @@ public List findByEntityId(String type, String entityId) { return mongoTemplate.find(query, Map.class, type); } + public List findInstitutionByIdentifier(String identifier) { + Document document = new Document("data.identifier", identifier); + Query query = new BasicQuery(document).collation(Collation.of("en").strength(2)); + query.fields().include("_id"); + return mongoTemplate.find(query, Map.class, EntityType.STEPUP.getType()); + } + public List recentActivity(List types, int max) { max = Math.min(max, 100); Query query = new Query() diff --git a/manage-server/src/main/resources/metadata_configuration/institution.schema.json b/manage-server/src/main/resources/metadata_configuration/institution.schema.json index 4cb78346..cad717f0 100644 --- a/manage-server/src/main/resources/metadata_configuration/institution.schema.json +++ b/manage-server/src/main/resources/metadata_configuration/institution.schema.json @@ -25,14 +25,16 @@ "type": "boolean" }, "allowed_second_factors": { - "type": "string", - "enum": [ - "yubikey", - "tiqr", - "webauthn", - "sms" - ], - "default": "tiqr" + "type": "array", + "items": { + "type": "string", + "enum": [ + "yubikey", + "tiqr", + "webauthn", + "sms" + ] + } }, "number_of_tokens_per_identity": { "type": "number" @@ -103,7 +105,7 @@ "entityid", "identifier", "allowed_second_factors", - "loa" + "stepup-client" ], "additionalProperties": false, "indexes": [] diff --git a/manage-server/src/test/java/manage/control/DatabaseControllerUnitTest.java b/manage-server/src/test/java/manage/control/DatabaseControllerUnitTest.java index 1c398855..fd973294 100644 --- a/manage-server/src/test/java/manage/control/DatabaseControllerUnitTest.java +++ b/manage-server/src/test/java/manage/control/DatabaseControllerUnitTest.java @@ -26,22 +26,37 @@ public class DatabaseControllerUnitTest { private DatabaseController subject; - private MetaDataRepository metaDataRepository = Mockito.mock(MetaDataRepository.class); - private org.springframework.data.mongodb.core.MongoTemplate mongoTemplate = Mockito.mock(org.springframework.data.mongodb.core.MongoTemplate.class); - private Environment environment = Mockito.mock(Environment.class); - private RestTemplate pdpRestTemplate = Mockito.mock(RestTemplate.class); - private RestTemplate ebRestTemplate = Mockito.mock(RestTemplate.class); - private RestTemplate oidcRestTemplate = Mockito.mock(RestTemplate.class); + private final MetaDataRepository metaDataRepository = Mockito.mock(MetaDataRepository.class); + private final org.springframework.data.mongodb.core.MongoTemplate mongoTemplate = Mockito.mock(org.springframework.data.mongodb.core.MongoTemplate.class); + private final Environment environment = Mockito.mock(Environment.class); + private final RestTemplate pdpRestTemplate = Mockito.mock(RestTemplate.class); + private final RestTemplate ebRestTemplate = Mockito.mock(RestTemplate.class); + private final RestTemplate oidcRestTemplate = Mockito.mock(RestTemplate.class); @BeforeEach public void before() { when(metaDataRepository.getMongoTemplate()).thenReturn(mongoTemplate); subject = new DatabaseController( - metaDataRepository, - "http://eb-push", "user", "pass", false, false, false, - "http://oidc-push", "user", "pass", - "http://pdp-push", "user", "pass", - true, true, environment); + metaDataRepository, + "http://eb-push", + "user", + "pass", + false, + false, + false, + "http://oidc-push", + "user", + "pass", + true, + "user", + "pass", + "http://pdp-push", + true, + true, + "http://stepup-push", + "user", + "pass", + environment); ReflectionTestUtils.setField(subject, "pdpRestTemplate", pdpRestTemplate); ReflectionTestUtils.setField(subject, "restTemplate", ebRestTemplate); @@ -53,11 +68,11 @@ public void before() { @Test public void doPushPdpError() { HttpServerErrorException exception = HttpServerErrorException.create( - HttpStatus.INTERNAL_SERVER_ERROR, - "Internal Server Error", - null, - "{\"error\":\"pdp error\"}".getBytes(StandardCharsets.UTF_8), - StandardCharsets.UTF_8); + HttpStatus.INTERNAL_SERVER_ERROR, + "Internal Server Error", + null, + "{\"error\":\"pdp error\"}".getBytes(StandardCharsets.UTF_8), + StandardCharsets.UTF_8); doThrow(exception).when(pdpRestTemplate).put(eq("http://pdp-push"), anyList()); @@ -71,11 +86,11 @@ public void doPushPdpError() { @Test public void doPushPdpServiceUnavailable() { HttpServerErrorException exception = HttpServerErrorException.create( - HttpStatus.SERVICE_UNAVAILABLE, - "Service Unavailable", - null, - "".getBytes(StandardCharsets.UTF_8), - StandardCharsets.UTF_8); + HttpStatus.SERVICE_UNAVAILABLE, + "Service Unavailable", + null, + "".getBytes(StandardCharsets.UTF_8), + StandardCharsets.UTF_8); doThrow(exception).when(pdpRestTemplate).put(eq("http://pdp-push"), anyList()); @@ -112,11 +127,11 @@ public void doPushSuccess() { @Test public void doPushEbError() { HttpServerErrorException exception = HttpServerErrorException.create( - HttpStatus.BAD_GATEWAY, - "Bad Gateway", - null, - "{\"error\":\"eb error\"}".getBytes(StandardCharsets.UTF_8), - StandardCharsets.UTF_8); + HttpStatus.BAD_GATEWAY, + "Bad Gateway", + null, + "{\"error\":\"eb error\"}".getBytes(StandardCharsets.UTF_8), + StandardCharsets.UTF_8); when(mongoTemplate.stream(any(), any(), anyString())).thenAnswer(invocation -> java.util.stream.Stream.empty()); when(ebRestTemplate.postForEntity(eq("http://eb-push"), anyMap(), eq(String.class))).thenThrow(exception); @@ -131,11 +146,11 @@ public void doPushEbError() { @Test public void doPushEbServiceUnavailable() { HttpServerErrorException exception = HttpServerErrorException.create( - HttpStatus.SERVICE_UNAVAILABLE, - "Service Unavailable", - null, - "".getBytes(StandardCharsets.UTF_8), - StandardCharsets.UTF_8); + HttpStatus.SERVICE_UNAVAILABLE, + "Service Unavailable", + null, + "".getBytes(StandardCharsets.UTF_8), + StandardCharsets.UTF_8); when(mongoTemplate.stream(any(), any(), anyString())).thenAnswer(invocation -> java.util.stream.Stream.empty()); when(ebRestTemplate.postForEntity(eq("http://eb-push"), anyMap(), eq(String.class))).thenThrow(exception); @@ -150,11 +165,11 @@ public void doPushEbServiceUnavailable() { @Test public void doPushPdpForbidden() { HttpClientErrorException exception = HttpClientErrorException.create( - HttpStatus.FORBIDDEN, - "Forbidden", - null, - "".getBytes(StandardCharsets.UTF_8), - StandardCharsets.UTF_8); + HttpStatus.FORBIDDEN, + "Forbidden", + null, + "".getBytes(StandardCharsets.UTF_8), + StandardCharsets.UTF_8); doThrow(exception).when(pdpRestTemplate).put(eq("http://pdp-push"), anyList()); @@ -168,11 +183,11 @@ public void doPushPdpForbidden() { @Test public void doPushOidcError() { HttpServerErrorException exception = HttpServerErrorException.create( - HttpStatus.SERVICE_UNAVAILABLE, - "Service Unavailable", - null, - "{\"error\":\"oidc error\"}".getBytes(StandardCharsets.UTF_8), - StandardCharsets.UTF_8); + HttpStatus.SERVICE_UNAVAILABLE, + "Service Unavailable", + null, + "{\"error\":\"oidc error\"}".getBytes(StandardCharsets.UTF_8), + StandardCharsets.UTF_8); when(mongoTemplate.findAll(any(), anyString())).thenReturn(java.util.Collections.emptyList()); when(oidcRestTemplate.postForEntity(eq("http://oidc-push"), anyList(), eq(Void.class))).thenThrow(exception); diff --git a/manage-server/src/test/resources/json/meta_data_seed.json b/manage-server/src/test/resources/json/meta_data_seed.json index 9194747c..71695e4a 100644 --- a/manage-server/src/test/resources/json/meta_data_seed.json +++ b/manage-server/src/test/resources/json/meta_data_seed.json @@ -824,7 +824,8 @@ } } }, - { "id": 18, + { + "id": 18, "_id": "750357b2-8cf1-462d-94fe-48342305fc3e", "_class": "manage.model.MetaData", "data": { @@ -842,5 +843,70 @@ }, "type": "organisation", "version": 6 + }, + { + "id": "cdeb5f7d-370c-46ed-b462-d44fedfd923f", + "version": 1, + "type": "institution", + "revision": { + "number": 1, + "created": "2026-03-10T10:52:03.450Z", + "updatedBy": "saml2_user.com" + }, + "data": { + "entityid": "inst1", + "metaDataFields": {}, + "identifier": "inst1", + "use_ra_locations": true, + "show_raa_contact_information": true, + "verify_email": true, + "allowed_second_factors": [ + "tiqr" + ], + "number_of_tokens_per_identity": 3, + "use_ra": [ + "inst1" + ], + "use_raa": [], + "select_raa": [], + "self_vet": true, + "allow_self_asserted_tokens": false, + "sso_on_2fa": false, + "stepup-client": "full", + "revisionnote": "test", + "eid": 13629 + }, + "_class": "manage.model.MetaData" + }, + { + "_id": "8291dd9c-9746-4ef2-9795-e2317641637e", + "version": 1, + "type": "sfo", + "revision": { + "number": 1, + "created": "2026-03-09T14:51:01.436Z", + "updatedBy": "saml2_user.com" + }, + "data": { + "entityid": "http://entity.id.changed", + "metaDataFields": {}, + "public_key": "MIIDEzCCAfugAwIBAgIJAKoK/heBjcOYMA0GCSqGSIb3DQEBBQUAMCAxHjAcBgNVBAoMFU9yZ2FuaXphdGlvbiwgQ049T0lEQzAeFw0xNTExMTExMDEyMTVaFw0yNTExMTAxMDEyMTVaMCAxHjAcBgNVBAoMFU9yZ2FuaXphdGlvbiwgQ049T0lEQzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANBGwJ/qpTQNiSgUglSE2UzEkUow+wS8r67etxoEhlzJZfgK/k5TfG1wICDqapHAxEVgUM10aBHRctNocA5wmlHtxdidhzRZroqHwpKy2BmsKX5Z2oK25RLpsyusB1KroemgA/CjUnI6rIL1xxFn3KyOFh1ZBLUQtKNQeMS7HFGgSDAp+sXuTFujz12LFDugX0T0KB5a1+0l8y0PEa0yGa1oi6seONx849ZHxM0PRvUunWkuTM+foZ0jZpFapXe02yWMqhc/2iYMieE/3GvOguJchJt6R+cut8VBb6ubKUIGK7pmoq/TB6DVXpvsHqsDJXechxcicu4pdKVDHSec850CAwEAAaNQME4wHQYDVR0OBBYEFK7RqjoodSYVXGTVEdLf3kJflP/sMB8GA1UdIwQYMBaAFK7RqjoodSYVXGTVEdLf3kJflP/sMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADNZkxlFXh4F45muCbnQd+WmaXlGvb9tkUyAIxVL8AIu8J18F420vpnGpoUAE+Hy3evBmp2nkrFAgmr055fAjpHeZFgDZBAPCwYd3TNMDeSyMta3Ka+oS7GRFDePkMEm+kH4/rITNKUF1sOvWBTSowk9TudEDyFqgGntcdu/l/zRxvx33y3LMG5USD0x4X4IKjRrRN1BbcKgi8dq10C3jdqNancTuPoqT3WWzRvVtB/q34B7F74/6JzgEoOCEHufBMp4ZFu54P0yEGtWfTwTzuoZobrChVVBt4w/XZagrRtUCDNwRpHNbpjxYudbqLqpi1MQpV9oht/BpTHVJG2i0ro=", + "acs": [ + "https://acs.com", + "https://acs2.org" + ], + "loa": "http://test.surfconext.nl/assurance/loa2", + "assertion_encryption_enabled": false, + "second_factor_only": true, + "second_factor_only_nameid_patterns": [ + "pattern:8" + ], + "blacklisted_encryption_algorithms": [ + "algo" + ], + "revisionnote": "test", + "eid": 13628 + }, + "_class": "manage.model.MetaData" } ] From df93e8e96bd01979660f4c5078d722e8a5f85f1d Mon Sep 17 00:00:00 2001 From: Okke Harsta Date: Thu, 12 Mar 2026 14:13:41 +0100 Subject: [PATCH 07/17] WIP for #627 --- manage-gui/src/components/Autocomplete.jsx | 27 +-- .../src/components/metadata/Institution.jsx | 86 ++++++++++ manage-gui/src/components/metadata/SFO.jsx | 16 ++ manage-gui/src/locale/en.js | 6 +- manage-gui/src/pages/System.jsx | 156 +++++++++++++++++- .../manage/control/DatabaseController.java | 104 ++++++++++-- .../manage/repository/MetaDataRepository.java | 4 + .../src/main/resources/application.yml | 6 + .../institution.schema.json | 6 +- .../metadata_configuration/sfo.schema.json | 5 + .../metadata_templates/sfo.template.json | 1 + .../src/main/resources/stepup_config.json | 48 ++++++ .../control/DatabaseControllerTest.java | 95 +++++++++-- .../control/DatabaseControllerUnitTest.java | 7 +- .../test/resources/json/meta_data_seed.json | 14 +- 15 files changed, 525 insertions(+), 56 deletions(-) create mode 100644 manage-server/src/main/resources/stepup_config.json diff --git a/manage-gui/src/components/Autocomplete.jsx b/manage-gui/src/components/Autocomplete.jsx index 47bec8e8..d96351e0 100644 --- a/manage-gui/src/components/Autocomplete.jsx +++ b/manage-gui/src/components/Autocomplete.jsx @@ -59,12 +59,12 @@ export default class Autocomplete extends React.PureComponent {
{!showSuggestions && this.renderAlternatives(alternatives, selected, itemSelected, query, moreAlternativesToShow)} {showSuggestions && -
- {moreToShow &&
-

{I18n.t("metadata_autocomplete.results_limited")}

+
+ {moreToShow &&
+

{I18n.t("metadata_autocomplete.results_limited")}

+
} + {this.getTable(suggestions, selected, itemSelected, query, type)}
} - {this.getTable(suggestions, selected, itemSelected, query, type)} -
}
); } @@ -72,13 +72,17 @@ export default class Autocomplete extends React.PureComponent { getTable(suggestions, selected, itemSelected, query, type) { const isOrganisation = type === "organisation"; const isPolicy = type === "policy"; + const isInstitution = type === "institution"; + const isSfo = type === "sfo"; return {!isOrganisation && } - {!isPolicy && !isOrganisation && } + {!isPolicy && !isOrganisation && !isInstitution && + } {isPolicy && } + {isInstitution && } {!isOrganisation && } {!isOrganisation && } {!isOrganisation && } @@ -93,7 +97,7 @@ export default class Autocomplete extends React.PureComponent { case "organisation": return this.renderOrganisation(item, index, selected, itemSelected); default: - return this.renderMetadata(item, index, selected, itemSelected, isPolicy, query); + return this.renderMetadata(item, index, selected, itemSelected, isPolicy, isInstitution, isSfo, query); } } )} @@ -124,7 +128,7 @@ export default class Autocomplete extends React.PureComponent { ); }; - renderMetadata(item, index, selected, itemSelected, isPolicy, query) { + renderMetadata(item, index, selected, itemSelected, isPolicy, isInstitution,isSfo, query) { return ( diff --git a/manage-gui/src/components/metadata/Institution.jsx b/manage-gui/src/components/metadata/Institution.jsx index e3c7bff3..a26be167 100644 --- a/manage-gui/src/components/metadata/Institution.jsx +++ b/manage-gui/src/components/metadata/Institution.jsx @@ -103,6 +103,21 @@ export default function Institution({ ); } + const renderName = () => { + return ( +
+ + internalOnChange(e.target.value, "name")}/> + {isEmpty(data.name) && renderError("Name")} +
+ ); + } + const renderNumberOfTokensPerIdentity = () => { return (
@@ -203,10 +218,76 @@ export default function Institution({ ); } + const renderUseRaa = () => { + return ( +
+ + instition.data.entityid)} + onChange={options => internalOnChange(options, "use_raa")} + value={data.use_raa} + isSearchable={false} + /> +
+ ); + } + + const renderSelectRaa = () => { + return ( +
+ + instition.data.entityid)} + onChange={options => internalOnChange(options, "select_raa")} + value={data.select_raa} + isSearchable={false} + /> +
+ ); + } + + const renderSelfVet= () => { + return ( +
+ internalOnChange(e.target.checked, "self_vet")}/> +
+ ); + } + + const renderAllowSelfAssertedTokens= () => { + return ( +
+ internalOnChange(e.target.checked, "allow_self_asserted_tokens")}/> +
+ ); + } + + const renderSsoOn2fa= () => { + return ( +
+ internalOnChange(e.target.checked, "sso_on_2fa")}/> +
+ ); + } + return (
{/*{JSON.stringify(errors)}*/}
+ {renderName()} {renderIdentifier()} {renderUseRaLocations()} {renderShowRaaContactInformation()} @@ -214,6 +295,11 @@ export default function Institution({ {renderAllowedSecondFactors()} {renderNumberOfTokensPerIdentity()} {renderUseRa()} + {renderUseRaa()} + {renderSelectRaa()} + {renderSelfVet()} + {renderAllowSelfAssertedTokens()} + {renderSsoOn2fa()} {renderStepupClient()}
diff --git a/manage-gui/src/components/metadata/SFO.jsx b/manage-gui/src/components/metadata/SFO.jsx index da55fffb..3e895efa 100644 --- a/manage-gui/src/components/metadata/SFO.jsx +++ b/manage-gui/src/components/metadata/SFO.jsx @@ -52,6 +52,21 @@ export default function SFO({ ); } + const renderName = () => { + return ( +
+ + internalOnChange(e.target.value, "name")}/> + {isEmpty(data.name) && renderError("Name")} +
+ ); + } + const renderEntityID = () => { return (
@@ -190,6 +205,7 @@ export default function SFO({
{/*{JSON.stringify(errors)}*/}
+ {renderName()} {renderEntityID()} {renderPublicKey()} {renderAcs()} diff --git a/manage-gui/src/locale/en.js b/manage-gui/src/locale/en.js index c0eb32b7..032a2849 100644 --- a/manage-gui/src/locale/en.js +++ b/manage-gui/src/locale/en.js @@ -180,8 +180,8 @@ const en = { push_preview_oidc: "Preview OIDC", push_preview_pdp: "Preview PDP", push_preview_sfo: "Preview SFO", - push_preview_insititution: "Preview Institution", - push_preview_stepup: "Preview Stepup", + push_preview_institution: "Preview Stepup Institutions", + push_preview_stepup: "Preview Stepup Whitelist", find_my_data: "Find my MetaData", stats: "Stats", findMyDataInfo: "Find your 'lost' MetaData. Enter part of the entityId, specify the type of MetaData and search in the revisions where all deleted MetaData still exists.", @@ -522,6 +522,7 @@ const en = { entity_id: "Entity ID", name: "Name", organization: "Organization", + institution: "Institution", description: "Description", policy: "Policy", state: "Production", @@ -738,6 +739,7 @@ const en = { policyPlaceholder: "Select a policy to initiate the PDP request data" }, sfo: { + name: "Name", entityId: "entityID", publicKey: "Public Key", acs: "ACS", diff --git a/manage-gui/src/pages/System.jsx b/manage-gui/src/pages/System.jsx index 711447c8..d0d4f948 100644 --- a/manage-gui/src/pages/System.jsx +++ b/manage-gui/src/pages/System.jsx @@ -35,7 +35,7 @@ export default class System extends React.PureComponent { super(props); const tabs = [ "push_preview_eb", "push_preview_oidc", "push_preview_pdp", - "push_preview_sfo", "push_preview_insititution", "push_preview_stepup", + "push_preview_sfo", "push_preview_institution", "push_preview_stepup", "validation", "orphans", "find_my_data", "stats"]; this.state = { tabs: tabs, @@ -96,6 +96,15 @@ export default class System extends React.PureComponent { if (tab === "push_preview_pdp") { this.setState({pushPreviewResultsPDP: undefined}); } + if (tab === "push_preview_insititution") { + this.setState({pushPreviewResultsInstitution: undefined}); + } + if (tab === "push_preview_sfo") { + this.setState({pushPreviewResultsSFO: undefined}); + } + if (tab === "push_preview_stepup") { + this.setState({pushPreviewResultsStepup: undefined}); + } if (tab === "stats") { stats().then(json => this.setState({statistics: json})); } @@ -132,6 +141,34 @@ export default class System extends React.PureComponent { this.setState({loading: true}); pushPreviewPdP().then(json => this.setState({pushPreviewResultsPDP: json, loading: false})); }; + + runPushPreviewSFO = e => { + stop(e); + if (this.state.loading) { + return; + } + this.setState({loading: true}); + pushPreviewSFO().then(json => this.setState({pushPreviewResultsSFO: json, loading: false})); + }; + + runPushPreviewStepup = e => { + stop(e); + if (this.state.loading) { + return; + } + this.setState({loading: true}); + pushPreviewStepup().then(json => this.setState({pushPreviewResultsStepup: json, loading: false})); + }; + + runPushPreviewInstitution = e => { + stop(e); + if (this.state.loading) { + return; + } + this.setState({loading: true}); + pushPreviewInstitution().then(json => this.setState({pushPreviewResultsInstitution: json, loading: false})); + }; + findMyData = e => { stop(e); @@ -386,6 +423,117 @@ export default class System extends React.PureComponent { ); }; + renderPushPreviewInstitution = () => { + const {pushPreviewResultsInstitution, loading, copiedToClipboardClassName} = this.state; + const json = pushPreviewResultsInstitution ? JSON.stringify(pushPreviewResultsInstitution) : ""; + const showCopy = (pushPreviewResultsInstitution && json.length > 0 && json.length < 150 * 1000); + const showSelectText = !showCopy && json.length > 0; + return ( +
+

{I18n.t("playground.pushPreviewInfo", {name: "middleware-institution"})}

+ {I18n.t("playground.runPushPreview")} + + {showCopy && + + + Copy JSON to clipboard + + + } + {showSelectText && + { + const range = document.createRange(); + const sel = window.getSelection(); + range.selectNodeContents(this.pushPreviewResultsInstitution); + sel.removeAllRanges(); + sel.addRange(range); + }}> + Select all JSON + + } + {pushPreviewResultsInstitution && +
this.pushPreviewResultsInstitution = ref}> + {json} +
} +
+ ); + }; + + renderPushPreviewSFO = () => { + const {pushPreviewResultsSFO, loading, copiedToClipboardClassName} = this.state; + const json = pushPreviewResultsSFO ? JSON.stringify(pushPreviewResultsSFO) : ""; + const showCopy = (pushPreviewResultsSFO && json.length > 0 && json.length < 150 * 1000); + const showSelectText = !showCopy && json.length > 0; + return ( +
+

{I18n.t("playground.pushPreviewInfo", {name: "middleware-config"})}

+ {I18n.t("playground.runPushPreview")} + + {showCopy && + + + Copy JSON to clipboard + + + } + {showSelectText && + { + const range = document.createRange(); + const sel = window.getSelection(); + range.selectNodeContents(this.pushPreviewResultsSFO); + sel.removeAllRanges(); + sel.addRange(range); + }}> + Select all JSON + + } + {pushPreviewResultsSFO && +
this.pushPreviewResultsSFO = ref}> + {json} +
} +
+ ); + }; + + renderPushPreviewStepup = () => { + const {pushPreviewResultsStepup, loading, copiedToClipboardClassName} = this.state; + const json = pushPreviewResultsStepup ? JSON.stringify(pushPreviewResultsStepup) : ""; + const showCopy = (pushPreviewResultsStepup && json.length > 0 && json.length < 150 * 1000); + const showSelectText = !showCopy && json.length > 0; + return ( +
+

{I18n.t("playground.pushPreviewInfo", {name: "middleware-whitelist"})}

+ {I18n.t("playground.runPushPreview")} + + {showCopy && + + + Copy JSON to clipboard + + + } + {showSelectText && + { + const range = document.createRange(); + const sel = window.getSelection(); + range.selectNodeContents(this.pushPreviewResultsStepup); + sel.removeAllRanges(); + sel.addRange(range); + }}> + Select all JSON + + } + {pushPreviewResultsStepup && +
this.pushPreviewResultsStepup = ref}> + {json} +
} +
+ ); + }; + renderValidate = () => { const {validationResults, loading} = this.state; return ( @@ -489,6 +637,12 @@ export default class System extends React.PureComponent { return this.renderPushPreviewOIDC(); case "push_preview_pdp": return this.renderPushPreviewPdP(); + case "push_preview_sfo": + return this.renderPushPreviewSFO(); + case "push_preview_institution": + return this.renderPushPreviewInstitution(); + case "push_preview_stepup": + return this.renderPushPreviewStepup(); case "find_my_data": return this.renderFindMyData(); case "stats": diff --git a/manage-server/src/main/java/manage/control/DatabaseController.java b/manage-server/src/main/java/manage/control/DatabaseController.java index 5dbddb31..ef0b35d0 100644 --- a/manage-server/src/main/java/manage/control/DatabaseController.java +++ b/manage-server/src/main/java/manage/control/DatabaseController.java @@ -1,5 +1,7 @@ package manage.control; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import manage.format.EngineBlockFormatter; import manage.model.EntityType; import manage.model.MetaData; @@ -13,6 +15,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.core.env.Profiles; +import org.springframework.core.io.Resource; import org.springframework.data.mongodb.core.query.Query; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -25,7 +28,13 @@ import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestTemplate; -import java.util.*; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -51,6 +60,7 @@ public class DatabaseController { private final RestTemplate stepUpRestTemplate; private final String stepUpPushUri; private final boolean stepUpEnabled; + private final Map stepUpConfiguration; private final boolean excludeEduGainImported; private final boolean excludeOidcRP; @@ -83,7 +93,9 @@ public class DatabaseController { @Value("${push.stepup.url}") String stepUpPushUri, @Value("${push.stepup.user}") String stepUpUser, @Value("${push.stepup.password}") String stepUpPassword, - Environment environment) { + @Value("${push.stepup.configuration_file}") Resource stepupConfigurationResource, + ObjectMapper objectMapper, + Environment environment) throws IOException { this.metaDataRepository = metaDataRepository; this.pushUri = pushUri; @@ -103,6 +115,8 @@ public class DatabaseController { this.stepUpRestTemplate = RestTemplateIdiom.buildRestTemplate(stepUpPushUri, stepUpUser, stepUpPassword); this.stepUpPushUri = stepUpPushUri; this.stepUpEnabled = stepUpEnabled; + this.stepUpConfiguration = objectMapper.readValue(stepupConfigurationResource.getInputStream(), new TypeReference<>() { + }); this.environment = environment; } @@ -123,12 +137,12 @@ public ResponseEntity doPush(PushOptions pushOptions) { result.put("pdp", Map.of("status", "OK")); } catch (HttpStatusCodeException e) { String message = String.format("Error in push to PDP (%s) status %s and response %s", - pdpPushUri, e.getStatusCode(), e.getResponseBodyAsString()); + pdpPushUri, e.getStatusCode(), e.getResponseBodyAsString()); LOG.error(message); return new ResponseEntity<>(Map.of("message", message), HttpStatus.INTERNAL_SERVER_ERROR); } catch (Exception e) { String message = String.format("Error in push to PDP (%s) error %s", - pdpPushUri, e.getMessage()); + pdpPushUri, e.getMessage()); LOG.error(message); return new ResponseEntity<>(Map.of("message", message), HttpStatus.INTERNAL_SERVER_ERROR); } @@ -143,16 +157,16 @@ public ResponseEntity doPush(PushOptions pushOptions) { String body = response.getBody(); result.put("eb", Map.of( - "status", response.getStatusCode().is2xxSuccessful() ? "OK" : "ERROR", - "response", StringUtils.hasText(body) ? body : "")); + "status", response.getStatusCode().is2xxSuccessful() ? "OK" : "ERROR", + "response", StringUtils.hasText(body) ? body : "")); } catch (HttpStatusCodeException e) { String message = String.format("Error in push to EngineBlock (%s) status %s and response %s", - pushUri, e.getStatusCode(), e.getResponseBodyAsString()); + pushUri, e.getStatusCode(), e.getResponseBodyAsString()); LOG.error(message); return new ResponseEntity<>(Map.of("message", message), HttpStatus.INTERNAL_SERVER_ERROR); } catch (Exception e) { String message = String.format("Error in push to EngineBlock (%s) error %s", - pushUri, e.getMessage()); + pushUri, e.getMessage()); LOG.error(message); return new ResponseEntity<>(Map.of("message", message), HttpStatus.INTERNAL_SERVER_ERROR); } @@ -166,15 +180,15 @@ public ResponseEntity doPush(PushOptions pushOptions) { try { ResponseEntity response = this.oidcRestTemplate.postForEntity(oidcPushUri, filteredEntities, Void.class); result.put("oidc", Map.of( - "status", response.getStatusCode().is2xxSuccessful() ? "OK" : "ERROR")); + "status", response.getStatusCode().is2xxSuccessful() ? "OK" : "ERROR")); } catch (HttpStatusCodeException e) { String message = String.format("Error in push to OIDC (%s) status %s and response %s", - oidcPushUri, e.getStatusCode(), e.getResponseBodyAsString()); + oidcPushUri, e.getStatusCode(), e.getResponseBodyAsString()); LOG.error(message); return new ResponseEntity<>(Map.of("message", message), HttpStatus.INTERNAL_SERVER_ERROR); } catch (Exception e) { String message = String.format("Error in push to OIDC (%s) error %s", - oidcPushUri, e.getMessage()); + oidcPushUri, e.getMessage()); LOG.error(message); return new ResponseEntity<>(Map.of("message", message), HttpStatus.INTERNAL_SERVER_ERROR); } @@ -193,6 +207,68 @@ private List pushPreviewPdP() { return policies; } + private Map pushPreviewSFO() { + List sfoEntities = metaDataRepository.getMongoTemplate().findAll(MetaData.class, EntityType.SFO.getType()); + Map results = new HashMap<>(); + results.put("sraa", stepUpConfiguration.get("sraa")); + results.put("email_templates", stepUpConfiguration.get("email_templates")); + List> serviceProviders = sfoEntities.stream() + .map(MetaData::getData) + .map(data -> Map.of( + "entity_id", data.get("entityid"), + "public_key", data.get("public_key"), + "acs", data.getOrDefault("acs", List.of()), + "loa", Map.of("__default__", data.get("loa")), + "assertion_encryption_enabled", data.getOrDefault("assertion_encryption_enabled", false), + "second_factor_only", data.getOrDefault("second_factor_only", false), + "second_factor_only_nameid_patterns", data.getOrDefault("second_factor_only_nameid_patterns", List.of()), + "blacklisted_encryption_algorithms", data.getOrDefault("blacklisted_encryption_algorithms", List.of()) + )) + .toList(); + results.put("gateway", Map.of("service_providers", serviceProviders)); + return results; + } + + private Map> pushPreviewStepup() { + List institutions = metaDataRepository.getMongoTemplate().findAll(MetaData.class, EntityType.STEPUP.getType()); + return Map.of( + "institutions", + institutions.stream() + .map(MetaData::getData) + .map(data -> (String) data.get("identifier")) + .toList() + ); + } + + private Map> pushPreviewInstitution() { + List institutions = metaDataRepository.getMongoTemplate().findAll(MetaData.class, EntityType.STEPUP.getType()); + List properties = new ArrayList<>(); + properties.add("use_ra_locations"); + properties.add("show_raa_contact_information"); + properties.add("verify_email"); + properties.add("allowed_second_factors"); + properties.add("number_of_tokens_per_identity"); + properties.add("use_ra"); + properties.add("use_raa"); + properties.add("select_raa"); + properties.add("self_vet"); + properties.add("allow_self_asserted_tokens"); + properties.add("sso_on_2fa"); + properties.add("use_ra_locations"); + properties.add("stepup-client"); + + return institutions.stream().map(MetaData::getData) + .collect(toMap( + data -> (String) data.get("identifier"), + data -> data.keySet().stream() + .filter(key -> properties.contains(key)) + .collect(toMap( + key -> key, + key -> data.get(key) + )) + )); + } + private List pushPreviewOIDC() { List relyingParties = metaDataRepository.getMongoTemplate().findAll(MetaData.class, EntityType.RP.getType()); List resourceServers = metaDataRepository.getMongoTemplate().findAll(MetaData.class, EntityType.RS.getType()); @@ -367,19 +443,19 @@ public List pushPreviewPdPEndpoint() { @PreAuthorize("hasRole('ADMIN')") @GetMapping("/client/playground/pushPreviewSFO") - public List pushPreviewSFOEndpoint() { + public Map pushPreviewSFOEndpoint() { return this.pushPreviewSFO(); } @PreAuthorize("hasRole('ADMIN')") @GetMapping("/client/playground/pushPreviewInstitution") - public List pushPreviewInstitutionEndpoint() { + public Map> pushPreviewInstitutionEndpoint() { return this.pushPreviewInstitution(); } @PreAuthorize("hasRole('ADMIN')") @GetMapping("/client/playground/pushPreviewStepup") - public List pushPreviewStepupEndpoint() { + public Map> pushPreviewStepupEndpoint() { return this.pushPreviewStepup(); } diff --git a/manage-server/src/main/java/manage/repository/MetaDataRepository.java b/manage-server/src/main/java/manage/repository/MetaDataRepository.java index 2477129c..8847c51b 100644 --- a/manage-server/src/main/java/manage/repository/MetaDataRepository.java +++ b/manage-server/src/main/java/manage/repository/MetaDataRepository.java @@ -479,6 +479,10 @@ private Query queryWithSamlFields(EntityType entityType) { "data.name", "data.kvkNumber", "data.notes"); + } else if (entityType.equals(EntityType.STEPUP) || entityType.equals(EntityType.SFO)) { + fields.include( + "data.name", + "data.identifier"); } else { this.supportedLanguages.forEach(lang -> { fields.include("data.metaDataFields.name:" + lang); diff --git a/manage-server/src/main/resources/application.yml b/manage-server/src/main/resources/application.yml index ea705828..c0e4c2d3 100644 --- a/manage-server/src/main/resources/application.yml +++ b/manage-server/src/main/resources/application.yml @@ -46,6 +46,12 @@ push: name: OpenConext PDP password: secret enabled: true + stepup: + url: http://localhost:8082/stepup/api + user: manage + configuration_file: classpath:/stepup_config.json + password: secret + enabled: true product: name: Manage diff --git a/manage-server/src/main/resources/metadata_configuration/institution.schema.json b/manage-server/src/main/resources/metadata_configuration/institution.schema.json index cad717f0..ac8f66e8 100644 --- a/manage-server/src/main/resources/metadata_configuration/institution.schema.json +++ b/manage-server/src/main/resources/metadata_configuration/institution.schema.json @@ -7,6 +7,10 @@ "eid": { "type": "number" }, + "name": { + "type": "string", + "minLength": 1 + }, "entityid": { "type": "string", "minLength": 1 @@ -102,9 +106,9 @@ } }, "required": [ + "name", "entityid", "identifier", - "allowed_second_factors", "stepup-client" ], "additionalProperties": false, diff --git a/manage-server/src/main/resources/metadata_configuration/sfo.schema.json b/manage-server/src/main/resources/metadata_configuration/sfo.schema.json index 90a4d9a9..80ada67d 100644 --- a/manage-server/src/main/resources/metadata_configuration/sfo.schema.json +++ b/manage-server/src/main/resources/metadata_configuration/sfo.schema.json @@ -7,6 +7,10 @@ "eid": { "type": "number" }, + "name": { + "type": "string", + "minLength": 1 + }, "entityid": { "type": "string", "minLength": 1 @@ -78,6 +82,7 @@ } }, "required": [ + "name", "entityid", "public_key", "acs", diff --git a/manage-server/src/main/resources/metadata_templates/sfo.template.json b/manage-server/src/main/resources/metadata_templates/sfo.template.json index 709f14c4..4a455a97 100644 --- a/manage-server/src/main/resources/metadata_templates/sfo.template.json +++ b/manage-server/src/main/resources/metadata_templates/sfo.template.json @@ -1,4 +1,5 @@ { + "name": "", "entityid": "", "metaDataFields": {}, "public_key": "", diff --git a/manage-server/src/main/resources/stepup_config.json b/manage-server/src/main/resources/stepup_config.json new file mode 100644 index 00000000..00a5b8d4 --- /dev/null +++ b/manage-server/src/main/resources/stepup_config.json @@ -0,0 +1,48 @@ +{ + "sraa": [ + "urn:collab:person:example.com:john", + "urn:collab:person:example.com:peter", + "urn:collab:person:example.com:jeroen", + "urn:collab:person:example.com:mike", + "urn:collab:person:hardewijk.nl:test", + "urn:collab:person:hardewijk.nl:doe" + ], + "email_templates": { + "confirm_email": { + "en_GB": "

Dear {{ commonName }},

Thank you for registering your token. Please visit this link to verify your email address:

{{ verificationUrl }}

If you can not click on the URL, please copy the link and paste it in the address bar of your browser.

SURFnet

", + "nl_NL": "

Beste {{ commonName }},

Bedankt voor het registreren van je token. Klik op onderstaande link om je e-mailadres te bevestigen:

{{ verificationUrl }}

Is klikken op de link niet mogelijk? Kopieer dan de link en plak deze in de adresbalk van je browser.

SURFnet

" + }, + "registration_code_with_ras": { + "en_GB": "

Dear {{ commonName }},

Thank you for registering your token. Please visit one of the locations below within 14 days to get your token activated. After {{ expirationDate | localizeddate('full', 'none', locale) }} your activation code is no longer valid.

Please bring the following:

  • Your token
  • A valid proof of identity (passport, drivers license or national ID-card)
  • The activation code from this e-mail

Activation code: {{ registrationCode }}

Location(s) to activate your token:

{% if ras is empty %}

No RAs are known.

{% else %}
    {% for ra in ras %}
  • {{ ra.commonName }}
    {{ ra.location }}
    {{ ra.contactInformation }}
  • {% endfor %}
{% endif %}", + "nl_NL": "

Beste {{ commonName }},

Bedankt voor het registreren van je token. Ga binnen 14 dagen naar een van de onderstaande locaties om je token te laten activeren. Je activatiecode is geldig tot en met {{ expirationDate | localizeddate('full', 'none', locale) }}.

Neem daarbij het volgende mee:

  • Je token
  • Een geldig legitimatiebewijs (paspoort, rijbewijs of nationale ID-kaart)
  • De activatiecode uit deze e-mail

Activatiecode: {{ registrationCode }}

Locatie(s) om je token te activeren:

{% if ras is empty %}

Er zijn geen RAs bekend.

{% else %}
    {% for ra in ras %}
  • {{ ra.commonName }}
    {{ ra.location }}
    {{ ra.contactInformation }}
  • {% endfor %}
{% endif %}" + }, + "second_factor_verification_reminder_with_ras": { + "en_GB": "

Dear {{ commonName }},

You have registered, but not yet activated, a token. Please visit one of the locations below to get your token activated. After {{ expirationDate | localizeddate('full', 'none', locale) }} your activation code is no longer valid.

Please bring the following:

  • Your token
  • A valid proof of identity (passport, drivers license or national ID-card).
  • The activation code from this e-mail

Activation code: {{ registrationCode }}

Location(s) to activate your token:

{% if ras is empty %}

No RAs are known.

{% else %}
    {% for ra in ras %}
  • {{ ra.commonName }}
    {{ ra.location }}
    {{ ra.contactInformation }}
  • {% endfor %}
{% endif %}", + "nl_NL": "

Beste {{ commonName }},

Je hebt een token geregistreerd, maar het nog niet laten activeren. Je kunt tot en met {{ expirationDate | localizeddate('full', 'none', locale) }} bij een van de onderstaande locaties terecht om je token te laten activeren.

Neem daarbij het volgende mee:

  • Je token
  • Een geldig legitimatiebewijs (paspoort, rijbewijs of nationale ID-kaart)
  • De activatiecode uit deze e-mail

Activatiecode: {{ registrationCode }}

Locatie(s) om je token te activeren:

{% if ras is empty %}

Er zijn geen RAs bekend.

{% else %}
    {% for ra in ras %}
  • {{ ra.commonName }}
    {{ ra.location }}
    {{ ra.contactInformation }}
  • {% endfor %}
{% endif %}" + }, + "registration_code_with_ra_locations": { + "en_GB": "

Dear {{ commonName }},

Thank you for registering your token. Please visit one of the locations below within 14 days to get your token activated. After {{ expirationDate | localizeddate('full', 'none', locale) }} your activation code is no longer valid.

Please bring the following:

  • Your token
  • A valid proof of identity (passport, drivers license or national ID-card)
  • The activation code from this e-mail

Activation code: {{ registrationCode }}

Location(s) to activate your token:

{% if raLocations is empty %}

No locations known.

{% else %}
    {% for ra in raLocations %}
  • {{ ra.name }}
    {{ ra.location }}
    {{ ra.contactInformation }}
  • {% endfor %}
{% endif %}", + "nl_NL": "

Beste {{ commonName }},

Bedankt voor het registreren van je token. Ga binnen 14 dagen naar een van de onderstaande locaties om je token te laten activeren. Je activatiecode is geldig tot en met {{ expirationDate | localizeddate('full', 'none', locale) }}.

Neem daarbij het volgende mee:

  • Je token
  • Een geldig legitimatiebewijs (paspoort, rijbewijs of nationale ID-kaart)
  • De activatiecode uit deze e-mail

Activatiecode: {{ registrationCode }}

Locatie(s) om je token te activeren:

{% if raLocations is empty %}

Er zijn geen Locaties bekend.

{% else %}
    {% for ra in raLocations %}
  • {{ ra.name }}
    {{ ra.location }}
    {{ ra.contactInformation }}
  • {% endfor %}
{% endif %}" + }, + "second_factor_verification_reminder_with_ra_locations": { + "en_GB": "

Dear {{ commonName }},

You have registered, but not yet activated, a token. Please visit one of the locations below to get your token activated. After {{ expirationDate | localizeddate('full', 'none', locale) }} your activation code is no longer valid.

Please bring the following:

  • Your token
  • A valid proof of identity (passport, drivers license or national ID-card)
  • The activation code from this e-mail

Activation code: {{ registrationCode }}

Location(s) to activate your token:

{% if raLocations is empty %}

No locations known.

{% else %}
    {% for ra in raLocations %}
  • {{ ra.name }}
    {{ ra.location }}
    {{ ra.contactInformation }}
  • {% endfor %}
{% endif %}", + "nl_NL": "

Beste {{ commonName }},

Je hebt een token geregistreerd, maar het nog niet laten activeren. Je kunt tot en met {{ expirationDate | localizeddate('full', 'none', locale) }} bij een van de onderstaande locaties terecht om je token te laten activeren.

Neem daarbij het volgende mee:

  • Je token
  • Een geldig legitimatiebewijs (paspoort, rijbewijs of nationale ID-kaart)
  • De activatiecode uit deze e-mail

Activatiecode: {{ registrationCode }}

Locatie(s) om je token te activeren:

{% if raLocations is empty %}

Er zijn geen Locaties bekend.

{% else %}
    {% for ra in raLocations %}
  • {{ ra.name }}
    {{ ra.location }}
    {{ ra.contactInformation }}
  • {% endfor %}
{% endif %}" + }, + "vetted": { + "en_GB": "

Dear {{ commonName }},

Thank you for registering your token. Your token is ready to use. You can use this token for services connected to SURFconext that require two-step authentication. This e-mail contains more info on how to use your token.

Handle your token with care

  • Your token is private, do not share your token with others
  • Never leave your token unattended
  • Lock your phone, e.g. with a code or fingerprint

Token lost?
Did you lose your token? Please visit {{ selfServiceUrl }} and remove your token registration. This way no one can take advantage of your token.

Replace token
Do you want to replace your token? Please visit {{ selfServiceUrl }}, remove your activated token and start the token registration process again.

Test token
Do you want to test your token? Please visit {{ selfServiceUrl }} and select the \"Test\" button next to the token you want to test.

", + "nl_NL": "

Beste {{ commonName }},

Bedankt voor het registreren van je token. Je token is nu klaar voor gebruik. Je kunt dit token gebruiken wanneer op SURFconext aangesloten services een tweede inlogstap vereisen. In deze e-mail vind je meer informatie over het gebruik van je token.

Ga zorgvuldig om met je token

  • Je token is persoonlijk, deel deze niet met anderen
  • Laat je token nooit onbeheerd achter
  • Vergrendel je telefoon met bijvoorbeeld een code of vingerafdruk

Token verloren?
Wat moet je doen als je jouw token verloren bent? Ga naar {{ selfServiceUrl }} en verwijder je tokenregistratie. Zo kan niemand misbruik maken van jouw token.

Nieuw token aanvragen
Wil je jouw token vervangen? Log in op {{ selfServiceUrl }}, verwijder je geactiveerde token en doorloop het registratieproces opnieuw.

Token testen
Wil je de werking van je token testen? Log in op {{ selfServiceUrl }} en selecteer de \"Testen\" knop naast het token dat je wil testen.

" + }, + "second_factor_revoked": { + "en_GB": "

Dear {{ commonName }},

{% if isRevokedByRa %} The registration of your {{ tokenType }} with ID {{ tokenIdentifier }} was deleted by an administrator. {% else %} You have deleted the registration of your {{ tokenType }} token with ID {{ tokenIdentifier }}. If you did not delete your token you must immediately contact the support desk of your institution, as this may indicate that your account has been compromised. {% endif %}

You can no longer use this token to access SURFconext services that require two-step authentication.

Do you want to replace your token? Please visit {{ selfServiceUrl }} and register a new token.

", + "nl_NL": "

Beste {{ commonName }},

{% if isRevokedByRa %} De registratie van je {{ tokenType }} token met ID {{ tokenIdentifier }} is verwijderd door een beheerder. {% else %} Je hebt de registratie voor je {{ tokenType }} token met ID {{ tokenIdentifier }} verwijderd. Neem direct contact op met de helpdesk van je instelling als je dit zelf niet gedaan hebt, omdat dit kan betekenen dat je account gecompromitteerd is. {% endif %}

Je kunt dit token niet meer gebruiken om in te loggen bij op SURFconext aangesloten services die een tweede inlogstap vereisen.

Wil je een nieuw token aanvragen? Ga dan naar {{ selfServiceUrl }} en doorloop het registratieproces opnieuw.

" + }, + "recovery_token_created": { + "en_GB": "

Dear {{ commonName }},

Thank you for registering a recovery method. You can use this method if you want to reactivate a SURFsecureID token that you have lost.

Always make sure you have at least one recovery method available.

Best regards,

SURFnet

", + "nl_NL": "

Beste {{ commonName }},

Bedankt voor het registreren een herstelmethode. Je kunt deze methode gebruiken wanneer je een SURFsecureID token dat je verloren bent opnieuw wilt activeren.

Zorg er altijd voor dat je tenminste één herstelmethode beschikbaar hebt

Met vriendelijke groet,

SURF

" + }, + "recovery_token_revoked": { + "en_GB": "

Dear {{ commonName }},

{% if isRevokedByRa %} Your SURFsecureID recovery method was removed by an administrator. {% else %} Your SURFsecureID recovery method has been removed. Please contact your institution's helpdesk immediately if you did not do this yourself, as this could mean that your account has been compromised. {% endif %}

You can no longer use this recovery method to activate a SURFsecureID token.

Always make sure you have at least one recovery method available.

Best regards,

SURF

", + "nl_NL": "

Beste {{ commonName }},

{% if isRevokedByRa %} Je SURFsecureID herstelmethode is verwijderd door een beheerder. {% else %} Je SURFsecureID herstelmethode is verwijderd. Neem direct contact op met de helpdesk van je instelling als je dit niet zelf gedaan hebt, omdat dit kan betekenen dat je account gecompromitteerd is. {% endif %}

Je kunt deze herstelmethode niet meer gebruiken om een SURFsecureID token te activeren.

Zorg er altijd voor dat je tenminste één herstelmethode beschikbaar hebt.

Met vriendelijke groet,

SURF

" + } + } +} diff --git a/manage-server/src/test/java/manage/control/DatabaseControllerTest.java b/manage-server/src/test/java/manage/control/DatabaseControllerTest.java index 5c09da47..21aae953 100644 --- a/manage-server/src/test/java/manage/control/DatabaseControllerTest.java +++ b/manage-server/src/test/java/manage/control/DatabaseControllerTest.java @@ -1,6 +1,8 @@ package manage.control; +import io.restassured.common.mapper.TypeRef; import manage.AbstractIntegrationTest; +import manage.policies.PdpPolicyDefinition; import org.junit.jupiter.api.Test; import java.util.List; @@ -10,36 +12,35 @@ import static io.restassured.RestAssured.given; import static org.apache.http.HttpStatus.SC_OK; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +@SuppressWarnings("unchecked") public class DatabaseControllerTest extends AbstractIntegrationTest { @Test - @SuppressWarnings("unchecked") public void pushPreview() throws Exception { Map connections = given() - .when() - .get("manage/api/client/playground/pushPreview") - .then() - .statusCode(SC_OK) - .extract().as(Map.class); + .when() + .get("manage/api/client/playground/pushPreview") + .then() + .statusCode(SC_OK) + .extract().as(Map.class); //System.out.println(objectMapper.writeValueAsString(connections)); Map expected = objectMapper.readValue(readFile("push/push.expected_connections.json"), Map.class); assertEquals(expected, connections); //ensure the Sp with "coin:imported_from_edugain": true is included Object importFromEdugain = ((Map) ((Map) ((Map) ((Map) connections.get("connections")) - .get("11")) - .get("metadata")) - .get("coin")) - .get("imported_from_edugain"); + .get("11")) + .get("metadata")) + .get("coin")) + .get("imported_from_edugain"); assertEquals("0", importFromEdugain); //ensure the correct ARP is exported List> arpGivenNames = (List>) ((Map) ((Map) ((Map) connections.get("connections")) - .get("11")) - .get("arp_attributes")) - .get("urn:mace:dir:attribute-def:givenName"); + .get("11")) + .get("arp_attributes")) + .get("urn:mace:dir:attribute-def:givenName"); Map arpGivenName = arpGivenNames.get(0); List keys = arpGivenName.keySet().stream().sorted().collect(Collectors.toList()); assertEquals(List.of("motivation", "release_as", "use_as_nameid", "value"), keys); @@ -47,17 +48,75 @@ public void pushPreview() throws Exception { assertEquals(true, arpGivenName.get("use_as_nameid")); Map sramService = (Map) ((Map) connections.get("connections")) - .get("15"); + .get("15"); String nameSramRP = (String) sramService - .get("name"); + .get("name"); assertEquals("https://sram.service.api.oidc_rp", nameSramRP); Map coinAttributes = (Map) ((Map) sramService.get("metadata")).get("coin"); assertEquals("1", coinAttributes.get("collab_enabled")); String nameSramSP = (String) ((Map) ((Map) connections.get("connections")) - .get("16")) - .get("name"); + .get("16")) + .get("name"); assertEquals("https://sram.service.api.saml_sp", nameSramSP); } + @Test + public void pushPreviewPdP() { + List pdpPolicyDefinitions = given() + .when() + .get("manage/api/client/playground/pushPreviewPdP") + .then() + .statusCode(SC_OK) + .extract() + .as(new TypeRef<>() { + }); + assertEquals(2, pdpPolicyDefinitions.size()); + } + + @Test + public void pushPreviewSFO() { + Map sfoEntities = given() + .when() + .get("manage/api/client/playground/pushPreviewSFO") + .then() + .statusCode(SC_OK) + .extract() + .as(new TypeRef<>() { + }); + assertEquals(3, sfoEntities.size()); + assertEquals(6, ((List)sfoEntities.get("sraa")).size()); + assertEquals(9, ((Map)sfoEntities.get("email_templates")).size()); + Map gateway = (Map) sfoEntities.get("gateway"); + assertEquals(1, gateway.size()); + assertEquals(1, ((List)gateway.get("service_providers")).size()); + } + + @Test + public void pushPreviewStepup() { + Map> uniqueInstitutions = given() + .when() + .get("manage/api/client/playground/pushPreviewStepup") + .then() + .statusCode(SC_OK) + .extract() + .as(new TypeRef<>() { + }); + assertEquals(1, uniqueInstitutions.size()); + assertEquals(List.of("inst1"), uniqueInstitutions.get("institutions")); + } + + @Test + public void pushPreviewInstitution() { + Map> institutions = given() + .when() + .get("manage/api/client/playground/pushPreviewInstitution") + .then() + .statusCode(SC_OK) + .extract() + .as(new TypeRef<>() { + }); + assertEquals(1, institutions.size()); + assertEquals(12, institutions.get("inst1").size()); + } } diff --git a/manage-server/src/test/java/manage/control/DatabaseControllerUnitTest.java b/manage-server/src/test/java/manage/control/DatabaseControllerUnitTest.java index fd973294..1b7d7b3d 100644 --- a/manage-server/src/test/java/manage/control/DatabaseControllerUnitTest.java +++ b/manage-server/src/test/java/manage/control/DatabaseControllerUnitTest.java @@ -1,5 +1,6 @@ package manage.control; +import com.fasterxml.jackson.databind.ObjectMapper; import manage.model.PushOptions; import manage.repository.MetaDataRepository; import org.junit.jupiter.api.BeforeEach; @@ -7,6 +8,7 @@ import org.mockito.Mockito; import org.springframework.core.env.Environment; import org.springframework.core.env.Profiles; +import org.springframework.core.io.ClassPathResource; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.test.util.ReflectionTestUtils; @@ -14,6 +16,7 @@ import org.springframework.web.client.HttpServerErrorException; import org.springframework.web.client.RestTemplate; +import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Map; @@ -34,7 +37,7 @@ public class DatabaseControllerUnitTest { private final RestTemplate oidcRestTemplate = Mockito.mock(RestTemplate.class); @BeforeEach - public void before() { + public void before() throws IOException { when(metaDataRepository.getMongoTemplate()).thenReturn(mongoTemplate); subject = new DatabaseController( metaDataRepository, @@ -56,6 +59,8 @@ public void before() { "http://stepup-push", "user", "pass", + new ClassPathResource("stepup_config.json"), + new ObjectMapper(), environment); ReflectionTestUtils.setField(subject, "pdpRestTemplate", pdpRestTemplate); diff --git a/manage-server/src/test/resources/json/meta_data_seed.json b/manage-server/src/test/resources/json/meta_data_seed.json index 71695e4a..1e92131a 100644 --- a/manage-server/src/test/resources/json/meta_data_seed.json +++ b/manage-server/src/test/resources/json/meta_data_seed.json @@ -826,8 +826,6 @@ }, { "id": 18, - "_id": "750357b2-8cf1-462d-94fe-48342305fc3e", - "_class": "manage.model.MetaData", "data": { "metaDataFields": {}, "revisionnote": "Restore of revision: 4", @@ -845,7 +843,7 @@ "version": 6 }, { - "id": "cdeb5f7d-370c-46ed-b462-d44fedfd923f", + "id": "19", "version": 1, "type": "institution", "revision": { @@ -854,6 +852,7 @@ "updatedBy": "saml2_user.com" }, "data": { + "name": "Test Institution", "entityid": "inst1", "metaDataFields": {}, "identifier": "inst1", @@ -875,11 +874,10 @@ "stepup-client": "full", "revisionnote": "test", "eid": 13629 - }, - "_class": "manage.model.MetaData" + } }, { - "_id": "8291dd9c-9746-4ef2-9795-e2317641637e", + "id": "20", "version": 1, "type": "sfo", "revision": { @@ -888,6 +886,7 @@ "updatedBy": "saml2_user.com" }, "data": { + "name": "Test SFO", "entityid": "http://entity.id.changed", "metaDataFields": {}, "public_key": "MIIDEzCCAfugAwIBAgIJAKoK/heBjcOYMA0GCSqGSIb3DQEBBQUAMCAxHjAcBgNVBAoMFU9yZ2FuaXphdGlvbiwgQ049T0lEQzAeFw0xNTExMTExMDEyMTVaFw0yNTExMTAxMDEyMTVaMCAxHjAcBgNVBAoMFU9yZ2FuaXphdGlvbiwgQ049T0lEQzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANBGwJ/qpTQNiSgUglSE2UzEkUow+wS8r67etxoEhlzJZfgK/k5TfG1wICDqapHAxEVgUM10aBHRctNocA5wmlHtxdidhzRZroqHwpKy2BmsKX5Z2oK25RLpsyusB1KroemgA/CjUnI6rIL1xxFn3KyOFh1ZBLUQtKNQeMS7HFGgSDAp+sXuTFujz12LFDugX0T0KB5a1+0l8y0PEa0yGa1oi6seONx849ZHxM0PRvUunWkuTM+foZ0jZpFapXe02yWMqhc/2iYMieE/3GvOguJchJt6R+cut8VBb6ubKUIGK7pmoq/TB6DVXpvsHqsDJXechxcicu4pdKVDHSec850CAwEAAaNQME4wHQYDVR0OBBYEFK7RqjoodSYVXGTVEdLf3kJflP/sMB8GA1UdIwQYMBaAFK7RqjoodSYVXGTVEdLf3kJflP/sMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADNZkxlFXh4F45muCbnQd+WmaXlGvb9tkUyAIxVL8AIu8J18F420vpnGpoUAE+Hy3evBmp2nkrFAgmr055fAjpHeZFgDZBAPCwYd3TNMDeSyMta3Ka+oS7GRFDePkMEm+kH4/rITNKUF1sOvWBTSowk9TudEDyFqgGntcdu/l/zRxvx33y3LMG5USD0x4X4IKjRrRN1BbcKgi8dq10C3jdqNancTuPoqT3WWzRvVtB/q34B7F74/6JzgEoOCEHufBMp4ZFu54P0yEGtWfTwTzuoZobrChVVBt4w/XZagrRtUCDNwRpHNbpjxYudbqLqpi1MQpV9oht/BpTHVJG2i0ro=", @@ -906,7 +905,6 @@ ], "revisionnote": "test", "eid": 13628 - }, - "_class": "manage.model.MetaData" + } } ] From ad551305e7130cd5a2564486a56091ef4753e93f Mon Sep 17 00:00:00 2001 From: Okke Harsta Date: Thu, 12 Mar 2026 14:52:07 +0100 Subject: [PATCH 08/17] Fixed build --- manage-gui/eslint.config.mjs | 40 +-- manage-gui/package.json | 2 +- .../src/components/metadata/Institution.jsx | 27 +- .../src/components/metadata/RevisionDiff.jsx | 3 +- manage-gui/src/pages/Activity.scss | 4 + manage-gui/yarn.lock | 246 ++++++++++-------- .../control/MetaDataControllerTest.java | 4 +- 7 files changed, 178 insertions(+), 148 deletions(-) diff --git a/manage-gui/eslint.config.mjs b/manage-gui/eslint.config.mjs index 7649f518..3921d786 100644 --- a/manage-gui/eslint.config.mjs +++ b/manage-gui/eslint.config.mjs @@ -1,40 +1,46 @@ import js from "@eslint/js"; import globals from "globals"; -import pluginReact from "eslint-plugin-react"; -import reactHooks from 'eslint-plugin-react-hooks'; +import react from "eslint-plugin-react"; +import reactHooks from "eslint-plugin-react-hooks"; import { defineConfig } from "eslint/config"; export default defineConfig([ { - ignores: ["dist/**","node/**"], + ignores: ["dist/**", "node_modules/**"], }, + + js.configs.recommended, + react.configs.flat.recommended, + reactHooks.configs.flat.recommended, + { files: ["**/*.{js,mjs,cjs,jsx}"], + plugins: { - js , - 'react-hooks': reactHooks + react, + "react-hooks": reactHooks, }, - extends: ["js/recommended"], - languageOptions: { globals: globals.browser }, + + languageOptions: { + globals: globals.browser, + }, + settings: { react: { version: "detect", }, }, - }, - pluginReact.configs.flat.recommended, // React config first - reactHooks.configs.flat.recommended, - { + rules: { "react/prop-types": "off", "react/no-children-prop": "off", - 'react-hooks/exhaustive-deps': 'warn', - "react/react-in-jsx-scope" : "off", + "react/react-in-jsx-scope": "off", + "react/no-deprecated": "off", + "react/no-unsafe": "off", + + "react-hooks/exhaustive-deps": "warn", "react-hooks/set-state-in-effect": "warn", - "react-hooks/immutability":"off", - "react/no-deprecated": "off", // ReactDOM.unmountComponentAtNode / andere deprecated APIs - "react/no-unsafe": "off", // componentWillReceiveProps, componentWillMount, etc + "react-hooks/immutability": "off", }, }, - ]); diff --git a/manage-gui/package.json b/manage-gui/package.json index a2135fe4..c4c5827b 100644 --- a/manage-gui/package.json +++ b/manage-gui/package.json @@ -25,7 +25,7 @@ "devDependencies": { "@vitejs/plugin-react": "^5.1.2", "codemirror": "^5.65.1", - "eslint": "^10.0.3", + "eslint": "^9.39.2", "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^7.0.1", "events": "^3.3.0", diff --git a/manage-gui/src/components/metadata/Institution.jsx b/manage-gui/src/components/metadata/Institution.jsx index a26be167..1fab0b06 100644 --- a/manage-gui/src/components/metadata/Institution.jsx +++ b/manage-gui/src/components/metadata/Institution.jsx @@ -2,7 +2,7 @@ import React, {useEffect, useState} from "react"; import "./Institution.scss"; import I18n from "../../locale/I18n"; import {isEmpty} from "../../utils/Utils"; -import {search, uniqueEntityId, uniqueInstitutionIdentifier, validation} from "../../api"; +import {search, uniqueInstitutionIdentifier} from "../../api"; import Select from "../Select"; import {CheckBox} from "../index"; import SelectMulti from "../form/SelectMulti"; @@ -10,7 +10,6 @@ import SelectMulti from "../form/SelectMulti"; export default function Institution({ configuration, data, - errors, isNew, onChange, onError @@ -37,24 +36,6 @@ export default function Institution({ } } - const validateFormat = async (attribute, value, format) => { - if (isEmpty(value)) { - return true; - } - if (typeof value === "string") { - const valid = await validation(format, value); - onError(attribute, !valid); - } - - if (Array.isArray(value)) { - const validationValues = await Promise.all( - value.map(val => validation(format, val)) - ); - const valid = isEmpty(validationValues.filter(val => !val)); - onError(attribute, !valid); - } - } - const renderError = (attribute, formatInvalid = false) => { return (
@@ -250,7 +231,7 @@ export default function Institution({ ); } - const renderSelfVet= () => { + const renderSelfVet = () => { return (
{ + const renderAllowSelfAssertedTokens = () => { return (
{ + const renderSsoOn2fa = () => { return (
{ const [previousRevision, setPreviousRevision] = useState(null); const [loaded, setLoaded] = useState(false); const [error, setError] = useState(false); - const [noRevisions, setNoRevisions] = useState(false); + const [noRevisions, setNoRevisions] = useState(revisionNumber - 1 < 0); useEffect(() => { const prevNumber = revisionNumber - 1 if (prevNumber < 0) { - setNoRevisions(true); return; } const revisionParentId = parentId || id; diff --git a/manage-gui/src/pages/Activity.scss b/manage-gui/src/pages/Activity.scss index 9a7d7358..e53ade23 100644 --- a/manage-gui/src/pages/Activity.scss +++ b/manage-gui/src/pages/Activity.scss @@ -150,6 +150,10 @@ &.diff-row td { padding-bottom: 20px; } + + &:hover:not(.diff-row) { + background-color: vars.$light-blue; + } } td { diff --git a/manage-gui/yarn.lock b/manage-gui/yarn.lock index 733f14f4..6dd68a35 100644 --- a/manage-gui/yarn.lock +++ b/manage-gui/yarn.lock @@ -176,12 +176,12 @@ "@lezer/common" "^1.0.0" "@codemirror/commands@^6.0.0", "@codemirror/commands@^6.1.0": - version "6.10.2" - resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.10.2.tgz#338bf53ab146de7bb26da4a1d32c6a6ff4d36b39" - integrity sha512-vvX1fsih9HledO1c9zdotZYUZnE4xV0m6i3m25s5DIfXofuprk6cRcLUZvSk3CASUbwjQX21tOGbkY2BH8TpnQ== + version "6.10.3" + resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.10.3.tgz#01877060befdec352e8300dec1f185489c300635" + integrity sha512-JFRiqhKu+bvSkDLI+rUhJwSxQxYb759W5GBezE8Uc8mHLqC9aV/9aTC7yJSqCtB3F00pylrLCwnyS91Ap5ej4Q== dependencies: "@codemirror/language" "^6.0.0" - "@codemirror/state" "^6.4.0" + "@codemirror/state" "^6.6.0" "@codemirror/view" "^6.27.0" "@lezer/common" "^1.1.0" @@ -223,10 +223,10 @@ "@codemirror/view" "^6.37.0" crelt "^1.0.5" -"@codemirror/state@^6.0.0", "@codemirror/state@^6.1.1", "@codemirror/state@^6.4.0", "@codemirror/state@^6.5.0": - version "6.5.4" - resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.5.4.tgz#f5be4b8c0d2310180d5f15a9f641c21ca69faf19" - integrity sha512-8y7xqG/hpB53l25CIoit9/ngxdfoG+fx+V3SHBrinnhOtLvKHRyAJJuHzkWrR4YXXLX8eXBsejgAAxHUOdW1yw== +"@codemirror/state@^6.0.0", "@codemirror/state@^6.1.1", "@codemirror/state@^6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.6.0.tgz#b88dbdc14aea4ace3c6d67bb77fe28bb84e4394e" + integrity sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ== dependencies: "@marijn/find-cluster-break" "^1.0.0" @@ -241,11 +241,11 @@ "@lezer/highlight" "^1.0.0" "@codemirror/view@^6.0.0", "@codemirror/view@^6.17.0", "@codemirror/view@^6.23.0", "@codemirror/view@^6.27.0", "@codemirror/view@^6.35.0", "@codemirror/view@^6.37.0": - version "6.39.16" - resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.39.16.tgz#e9d876aba20b31df7858abd7c2a845319c70b302" - integrity sha512-m6S22fFpKtOWhq8HuhzsI1WzUP/hB9THbDj0Tl5KX4gbO6Y91hwBl7Yky33NdvB6IffuRFiBxf1R8kJMyXmA4Q== + version "6.40.0" + resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.40.0.tgz#97198fd717ebf471ef594a5bd557a9f2d1d4d165" + integrity sha512-WA0zdU7xfF10+5I3HhUUq3kqOx3KjqmtQ9lqZjfK7jtYk4G72YW9rezcSywpaUMCWOMlq+6E0pO1IWg1TNIhtg== dependencies: - "@codemirror/state" "^6.5.0" + "@codemirror/state" "^6.6.0" crelt "^1.0.6" style-mod "^4.1.0" w3c-keyname "^2.2.4" @@ -480,45 +480,65 @@ dependencies: eslint-visitor-keys "^3.4.3" -"@eslint-community/regexpp@^4.12.2": +"@eslint-community/regexpp@^4.12.1": version "4.12.2" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== -"@eslint/config-array@^0.23.3": - version "0.23.3" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.23.3.tgz#3f4a93dd546169c09130cbd10f2415b13a20a219" - integrity sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw== +"@eslint/config-array@^0.21.2": + version "0.21.2" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.2.tgz#f29e22057ad5316cf23836cee9a34c81fffcb7e6" + integrity sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw== dependencies: - "@eslint/object-schema" "^3.0.3" + "@eslint/object-schema" "^2.1.7" debug "^4.3.1" - minimatch "^10.2.4" + minimatch "^3.1.5" -"@eslint/config-helpers@^0.5.2": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.5.3.tgz#721fe6bbb90d74b0c80d6ff2428e5bbcb002becb" - integrity sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw== +"@eslint/config-helpers@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda" + integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw== dependencies: - "@eslint/core" "^1.1.1" + "@eslint/core" "^0.17.0" -"@eslint/core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-1.1.1.tgz#450f3d2be2d463ccd51119544092256b4e88df32" - integrity sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ== +"@eslint/core@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c" + integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ== dependencies: "@types/json-schema" "^7.0.15" -"@eslint/object-schema@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-3.0.3.tgz#5bf671e52e382e4adc47a9906f2699374637db6b" - integrity sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ== +"@eslint/eslintrc@^3.3.5": + version "3.3.5" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.5.tgz#c131793cfc1a7b96f24a83e0a8bbd4b881558c60" + integrity sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg== + dependencies: + ajv "^6.14.0" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.1" + minimatch "^3.1.5" + strip-json-comments "^3.1.1" + +"@eslint/js@9.39.4": + version "9.39.4" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.4.tgz#a3f83bfc6fd9bf33a853dfacd0b49b398eb596c1" + integrity sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw== -"@eslint/plugin-kit@^0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz#eb9e6689b56ce8bc1855bb33090e63f3fc115e8e" - integrity sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ== +"@eslint/object-schema@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" + integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== + +"@eslint/plugin-kit@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2" + integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA== dependencies: - "@eslint/core" "^1.1.1" + "@eslint/core" "^0.17.0" levn "^0.4.1" "@floating-ui/core@^1.7.5": @@ -913,11 +933,6 @@ resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== -"@types/esrecurse@^4.3.1": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@types/esrecurse/-/esrecurse-4.3.1.tgz#6f636af962fbe6191b830bd676ba5986926bccec" - integrity sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw== - "@types/estree-jsx@^1.0.0": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" @@ -925,7 +940,7 @@ dependencies: "@types/estree" "*" -"@types/estree@*", "@types/estree@1.0.8", "@types/estree@^1.0.0", "@types/estree@^1.0.6", "@types/estree@^1.0.8": +"@types/estree@*", "@types/estree@1.0.8", "@types/estree@^1.0.0", "@types/estree@^1.0.6": version "1.0.8" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== @@ -969,9 +984,9 @@ integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@*": - version "25.3.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.3.5.tgz#beccb5915561f7a9970ace547ad44d6cdbf39b46" - integrity sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA== + version "25.4.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.4.0.tgz#f25d8467984d6667cc4c1be1e2f79593834aaedb" + integrity sha512-9wLpoeWuBlcbBpOY3XmzSTG3oscB6xjBEEtn+pYXTfhyXhIxC5FsBer2KTopBlvKEiW9l13po9fq+SJY/5lkhw== dependencies: undici-types "~7.18.0" @@ -1144,7 +1159,7 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.16.0: +acorn@^8.15.0: version "8.16.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== @@ -1171,6 +1186,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" @@ -1382,9 +1402,9 @@ callsites@^3.0.0: integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== caniuse-lite@^1.0.30001759: - version "1.0.30001777" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001777.tgz#028f21e4b2718d138b55e692583e6810ccf60691" - integrity sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ== + version "1.0.30001778" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001778.tgz#79a8a124e3473a20b70616497b987c30d06570a0" + integrity sha512-PN7uxFL+ExFJO61aVmP1aIEG4i9whQd4eoSCebav62UwDyp5OHh06zN4jqKSMePVgxHifCw1QJxdRkA1Pisekg== ccount@^2.0.0: version "2.0.1" @@ -1396,7 +1416,7 @@ chai@^6.2.1: resolved "https://registry.yarnpkg.com/chai/-/chai-6.2.2.tgz#ae41b52c9aca87734505362717f3255facda360e" integrity sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg== -chalk@^4.1.0: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1675,9 +1695,9 @@ domhandler@^5.0.2: domelementtype "^2.3.0" dompurify@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.3.2.tgz#58c515d0f8508b8749452a028aa589ad80b36325" - integrity sha512-6obghkliLdmKa56xdbLOpUZ43pAR6xFy1uOrxBaIDjT+yaRuuybLjGS9eVBoSR/UPU5fq3OXClEHLJNGvbxKpQ== + version "3.3.3" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.3.3.tgz#680cae8af3e61320ddf3666a3bc843f7b291b2b6" + integrity sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA== optionalDependencies: "@types/trusted-types" "^2.0.7" @@ -1703,9 +1723,9 @@ ejs@^3.1.5: jake "^10.8.5" electron-to-chromium@^1.5.263: - version "1.5.307" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz#09f8973100c39fb0d003b890393cd1d58932b1c8" - integrity sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg== + version "1.5.313" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.313.tgz#193e9ae2c2ab6915acb41e833068381e4ef0b3e4" + integrity sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA== emoji-regex@^8.0.0: version "8.0.0" @@ -1800,9 +1820,9 @@ es-errors@^1.3.0: integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-iterator-helpers@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz#d979a9f686e2b0b72f88dbead7229924544720bc" - integrity sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.3.0.tgz#36ff394076e6ab50725bcd2b8cd64c4f5b4ea75b" + integrity sha512-04cg8iJFDOxWcYlu0GFFWgs7vtaEPCmr5w1nrj9V3z3axu/48HCMwK6VMp45Zh3ZB+xLP1ifbJfrq86+1ypKKQ== dependencies: call-bind "^1.0.8" call-bound "^1.0.4" @@ -1819,6 +1839,7 @@ es-iterator-helpers@^1.2.1: has-symbols "^1.1.0" internal-slot "^1.1.0" iterator.prototype "^1.1.5" + math-intrinsics "^1.1.0" safe-array-concat "^1.1.3" es-module-lexer@^1.7.0: @@ -1946,13 +1967,11 @@ eslint-plugin-react@^7.37.5: string.prototype.matchall "^4.0.12" string.prototype.repeat "^1.0.0" -eslint-scope@^9.1.2: - version "9.1.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-9.1.2.tgz#b9de6ace2fab1cff24d2e58d85b74c8fcea39802" - integrity sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ== +eslint-scope@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== dependencies: - "@types/esrecurse" "^4.3.1" - "@types/estree" "^1.0.8" esrecurse "^4.3.0" estraverse "^5.2.0" @@ -1961,34 +1980,37 @@ eslint-visitor-keys@^3.4.3: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint-visitor-keys@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz#9e3c9489697824d2d4ce3a8ad12628f91e9f59be" - integrity sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA== +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== -eslint@^10.0.3: - version "10.0.3" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-10.0.3.tgz#360a7de7f2706eb8a32caa17ca983f0089efe694" - integrity sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ== +eslint@^9.39.2: + version "9.39.4" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.4.tgz#855da1b2e2ad66dc5991195f35e262bcec8117b5" + integrity sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ== dependencies: "@eslint-community/eslint-utils" "^4.8.0" - "@eslint-community/regexpp" "^4.12.2" - "@eslint/config-array" "^0.23.3" - "@eslint/config-helpers" "^0.5.2" - "@eslint/core" "^1.1.1" - "@eslint/plugin-kit" "^0.6.1" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.21.2" + "@eslint/config-helpers" "^0.4.2" + "@eslint/core" "^0.17.0" + "@eslint/eslintrc" "^3.3.5" + "@eslint/js" "9.39.4" + "@eslint/plugin-kit" "^0.4.1" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.4.2" "@types/estree" "^1.0.6" ajv "^6.14.0" + chalk "^4.0.0" cross-spawn "^7.0.6" debug "^4.3.2" escape-string-regexp "^4.0.0" - eslint-scope "^9.1.2" - eslint-visitor-keys "^5.0.1" - espree "^11.1.1" - esquery "^1.7.0" + eslint-scope "^8.4.0" + eslint-visitor-keys "^4.2.1" + espree "^10.4.0" + esquery "^1.5.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^8.0.0" @@ -1998,20 +2020,21 @@ eslint@^10.0.3: imurmurhash "^0.1.4" is-glob "^4.0.0" json-stable-stringify-without-jsonify "^1.0.1" - minimatch "^10.2.4" + lodash.merge "^4.6.2" + minimatch "^3.1.5" natural-compare "^1.4.0" optionator "^0.9.3" -espree@^11.1.1: - version "11.2.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-11.2.0.tgz#01d5e47dc332aaba3059008362454a8cc34ccaa5" - integrity sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw== +espree@^10.0.1, espree@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== dependencies: - acorn "^8.16.0" + acorn "^8.15.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^5.0.1" + eslint-visitor-keys "^4.2.1" -esquery@^1.7.0: +esquery@^1.5.0: version "1.7.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== @@ -2160,9 +2183,9 @@ flat-cache@^4.0.0: keyv "^4.5.4" flatted@^3.2.9: - version "3.4.0" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.0.tgz#92ab2efec9b272eb85a3a25a106c3afbbc990d8b" - integrity sha512-kC6Bb+ooptOIvWj5B63EQWkF0FEnNjV2ZNkLMLZRDDduIiWeFF4iKnslwhiWxjAdbg4NzTNo6h0qLuvFrcx+Sw== + version "3.4.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.1.tgz#84ccd9579e76e9cc0d246c11d8be0beb019143e6" + integrity sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ== flux@^4.0.1: version "4.0.4" @@ -2288,6 +2311,11 @@ glob@^7.1.3, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + globals@^17.2.0: version "17.4.0" resolved "https://registry.yarnpkg.com/globals/-/globals-17.4.0.tgz#33d7d297ed1536b388a0e2f4bcd0ff19c8ff91b5" @@ -2613,7 +2641,7 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -immutable@^5.0.2: +immutable@^5.1.5: version "5.1.5" resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.5.tgz#93ee4db5c2a9ab42a4a783069f3c5d8847d40165" integrity sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A== @@ -2937,6 +2965,13 @@ js-cookie@^3.0.5: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== + dependencies: + argparse "^2.0.1" + jsesc@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" @@ -3558,7 +3593,7 @@ micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" -minimatch@10.2.4, minimatch@^10.2.4, minimatch@^3.1.1, minimatch@^3.1.2, minimatch@^5.0.1: +minimatch@10.2.4, minimatch@^3.1.1, minimatch@^3.1.2, minimatch@^3.1.5, minimatch@^5.0.1: version "10.2.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.4.tgz#465b3accbd0218b8281f5301e27cedc697f96fde" integrity sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg== @@ -4365,12 +4400,12 @@ safe-regex-test@^1.1.0: is-regex "^1.2.1" sass@^1.97.3: - version "1.97.3" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.97.3.tgz#9cb59339514fa7e2aec592b9700953ac6e331ab2" - integrity sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg== + version "1.98.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.98.0.tgz#924ce85a3745ccaccd976262fdc1bc0c13aa8e57" + integrity sha512-+4N/u9dZ4PrgzGgPlKnaaRQx64RO0JBKs9sDhQ2pLgN6JQZ25uPQZKQYaBJU48Kd5BxgXoJ4e09Dq7nMcOUW3A== dependencies: chokidar "^4.0.0" - immutable "^5.0.2" + immutable "^5.1.5" source-map-js ">=0.6.2 <2.0.0" optionalDependencies: "@parcel/watcher" "^2.4.1" @@ -4632,6 +4667,11 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + style-mod@^4.0.0, style-mod@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.1.3.tgz#6e9012255bb799bdac37e288f7671b5d71bf9f73" @@ -4695,9 +4735,9 @@ tinyglobby@^0.2.15: picomatch "^4.0.3" tinyrainbow@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-3.0.3.tgz#984a5b1c1b25854a9b6bccbe77964d0593d1ea42" - integrity sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q== + version "3.1.0" + resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-3.1.0.tgz#1d8a623893f95cf0a2ddb9e5d11150e191409421" + integrity sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw== to-regex-range@^5.0.1: version "5.0.1" diff --git a/manage-server/src/test/java/manage/control/MetaDataControllerTest.java b/manage-server/src/test/java/manage/control/MetaDataControllerTest.java index 9d87ecf5..1c6bbd52 100644 --- a/manage-server/src/test/java/manage/control/MetaDataControllerTest.java +++ b/manage-server/src/test/java/manage/control/MetaDataControllerTest.java @@ -153,9 +153,9 @@ public void configuration() { .get("manage/api/client/metadata/configuration") .then() .statusCode(SC_OK) - .body("size()", is(9)) + .body("size()", is(11)) .body("title", hasItems("saml20_sp", "saml20_idp", "single_tenant_template", "oidc10_rp", - "oauth20_rs", "organisation", "policy", "provisioning", "sram")); + "oauth20_rs", "organisation", "policy", "provisioning", "sram", "sfo", "institution")); } @Test From edd780fd08d11c07b51828a75b8dac74019f7029 Mon Sep 17 00:00:00 2001 From: Okke Harsta Date: Thu, 12 Mar 2026 15:33:18 +0100 Subject: [PATCH 09/17] Added attributes to SFO collection --- manage-gui/src/components/metadata/SFO.jsx | 24 +++++++++++++++++++ manage-gui/src/locale/en.js | 4 +++- manage-gui/src/pages/Detail.jsx | 1 - .../metadata_configuration/sfo.schema.json | 6 +++++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/manage-gui/src/components/metadata/SFO.jsx b/manage-gui/src/components/metadata/SFO.jsx index 3e895efa..9c84ec77 100644 --- a/manage-gui/src/components/metadata/SFO.jsx +++ b/manage-gui/src/components/metadata/SFO.jsx @@ -165,6 +165,28 @@ export default function SFO({ ); } + const renderAllowSsoOn2fa = () => { + return ( +
+ internalOnChange(e.target.checked, "allow_sso_on_2fa")}/> +
+ ); + } + + const renderSetSsoCookieOn2fa = () => { + return ( +
+ internalOnChange(e.target.checked, "set_sso_cookie_on_2fa")}/> +
+ ); + } + const renderSecondFactorOnlyNameidPatterns = () => { return (
@@ -214,6 +236,8 @@ export default function SFO({ {renderSecondFactorOnly()} {renderSecondFactorOnlyNameidPatterns()} {renderBlacklistedEncryptionAlgorithm()} + {renderAllowSsoOn2fa()} + {renderSetSsoCookieOn2fa()}
); diff --git a/manage-gui/src/locale/en.js b/manage-gui/src/locale/en.js index 032a2849..34b8b2e2 100644 --- a/manage-gui/src/locale/en.js +++ b/manage-gui/src/locale/en.js @@ -747,7 +747,9 @@ const en = { assertionEncryptionEnabled: "Assertion encryption enabled", secondFactorOnly: "Second factor only", secondFactorOnlyNameidPatterns: "Second factor only nameID patterns", - blacklistedEncryptionAlgorithm: "Blacklisted encryption algorithms" + blacklistedEncryptionAlgorithm: "Blacklisted encryption algorithms", + setSsoCookieOn2fa: "Set SSO Cookie on 2fa", + allowSsoOn2fa:"Allow SSO on 2fa" }, institution: { identifier: "Identifier", diff --git a/manage-gui/src/pages/Detail.jsx b/manage-gui/src/pages/Detail.jsx index 769b10f6..b05f33eb 100644 --- a/manage-gui/src/pages/Detail.jsx +++ b/manage-gui/src/pages/Detail.jsx @@ -96,7 +96,6 @@ const tabsSfo = [ const tabsInstitutions = [ "institution", - "overview", "revisions" ] diff --git a/manage-server/src/main/resources/metadata_configuration/sfo.schema.json b/manage-server/src/main/resources/metadata_configuration/sfo.schema.json index 80ada67d..05ee28ac 100644 --- a/manage-server/src/main/resources/metadata_configuration/sfo.schema.json +++ b/manage-server/src/main/resources/metadata_configuration/sfo.schema.json @@ -55,6 +55,12 @@ "type": "string" } }, + "allow_sso_on_2fa": { + "type": "boolean" + }, + "set_sso_cookie_on_2fa": { + "type": "boolean" + }, "revisionid": { "type": "number" }, From be3de6c477c7beb0021fbd50111431c601e004e2 Mon Sep 17 00:00:00 2001 From: Okke Harsta Date: Thu, 12 Mar 2026 15:54:22 +0100 Subject: [PATCH 10/17] Typo --- manage-gui/src/pages/System.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manage-gui/src/pages/System.jsx b/manage-gui/src/pages/System.jsx index d0d4f948..2298e72c 100644 --- a/manage-gui/src/pages/System.jsx +++ b/manage-gui/src/pages/System.jsx @@ -96,7 +96,7 @@ export default class System extends React.PureComponent { if (tab === "push_preview_pdp") { this.setState({pushPreviewResultsPDP: undefined}); } - if (tab === "push_preview_insititution") { + if (tab === "push_preview_institution") { this.setState({pushPreviewResultsInstitution: undefined}); } if (tab === "push_preview_sfo") { From 77e856375e8f52e96b566cd1c51c42bf18ba5f35 Mon Sep 17 00:00:00 2001 From: Okke Harsta Date: Thu, 12 Mar 2026 16:08:15 +0100 Subject: [PATCH 11/17] Only add the stepup_config sections if present Add stepup config to changelog (and formatted) --- Changelog.md | 45 ++++++++++++------- .../manage/control/DatabaseController.java | 8 +++- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/Changelog.md b/Changelog.md index 097cb51d..bbec9e6f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -3,29 +3,38 @@ Starting from version 9.0.0, we note changes and new features per release in this file. ## 9.7.0 + - Allow for CRUD Policies in regular internal MetaData API ([#613](https://github.com/OpenConext/OpenConext-manage/issues/613)) - Updated dependencies -- Adjusts CSV feature to only include the visible (requested) columns([#615](https://github.com/OpenConext/OpenConext-manage/pull/615)) +- Adjusts CSV feature to only include the visible (requested) + columns([#615](https://github.com/OpenConext/OpenConext-manage/pull/615)) - Delete for entities needs more friction ([#520](https://github.com/OpenConext/OpenConext-manage/issues/520)) - API tab doesn't work for Policies ([#584](https://github.com/OpenConext/OpenConext-manage/issues/584)) - CSV from API tab "Copy as CSV" is not properly quoted ([#494](https://github.com/OpenConext/OpenConext-manage/issues/494)) -- Add warning to UI if multiple certData fields have the same content ([#590](https://github.com/OpenConext/OpenConext-manage/issues/590)) +- Add warning to UI if multiple certData fields have the same + content ([#590](https://github.com/OpenConext/OpenConext-manage/issues/590)) - Switch to structured json logging ([#593](https://github.com/OpenConext/OpenConext-manage/issues/593)) - CSV contain all fields ([#609](https://github.com/OpenConext/OpenConext-manage/pull/609)) - Add column sorting in API output table ([#439](https://github.com/OpenConext/OpenConext-manage/issues/439)) - Increase size of manipulation window ([#592](https://github.com/OpenConext/OpenConext-manage/issues/592)) - Searching in API for integer-in-string doesn't work ([#102](https://github.com/OpenConext/OpenConext-manage/issues/102)) -- Full text searching in API leads to unexpected error if " is present in search string ([#487](https://github.com/OpenConext/OpenConext-manage/issues/487)) +- Full text searching in API leads to unexpected error if " is present in search + string ([#487](https://github.com/OpenConext/OpenConext-manage/issues/487)) - Migrate from react-scripts to vite ([#604](https://github.com/OpenConext/OpenConext-manage/issues/604)) -- Corporate proxy configuration is not respected when retrieving pdp xacml ([#598](https://github.com/OpenConext/OpenConext-manage/issues/598)) +- Corporate proxy configuration is not respected when retrieving pdp + xacml ([#598](https://github.com/OpenConext/OpenConext-manage/issues/598)) - Replace exceptions by regular logging ([#596](https://github.com/OpenConext/OpenConext-manage/issues/596)) - Resolve deprecations ([#546](https://github.com/OpenConext/OpenConext-manage/issues/546)) -- Corporate proxy configuration is not respected when retrieving pdp xacml ([#598](https://github.com/OpenConext/OpenConext-manage/issues/598)) +- Corporate proxy configuration is not respected when retrieving pdp + xacml ([#598](https://github.com/OpenConext/OpenConext-manage/issues/598)) - Migrate from react-scripts to vite ([#604](https://github.com/OpenConext/OpenConext-manage/issues/604)) - Linkify JIRA CXT any mention ([#432](https://github.com/OpenConext/OpenConext-manage/issues/432)) +- Added Step-up / middleware configuration to the metadata + collections ([#627](https://github.com/OpenConext/OpenConext-manage/issues/627)) ## 9.6.0 + - [#562](https://github.com/OpenConext/OpenConext-manage/issues/562) - Added `typeRequest` field to change requests - Added configuration for disabling unused schemas @@ -33,39 +42,43 @@ Starting from version 9.0.0, we note changes and new features per release in thi - Removed non-current endpoints when importing new SAML metadata ([#577](https://github.com/OpenConext/OpenConext-manage/issues/577)) - Added a copy-to-clipboard button for PDP requests and responses -- Removed the manual `coin:policy_enforcement_decision` toggle. It is now set automatically in the pushed metadata - (no longer visible in the UI) +- Removed the manual `coin:policy_enforcement_decision` toggle. It is now set automatically in the pushed metadata + (no longer visible in the UI) ([#477](https://github.com/OpenConext/OpenConext-manage/issues/477)) - Added `docker-compose.yml` and other plumbing for easier local development ([#570](https://github.com/OpenConext/OpenConext-manage/issues/570)) - Updated dependencies ### Upgrade note + The following configuration options have been changed: - - `disabled_metadata_schemas`: (**new**) a list of schemas that should be disabled. - Set to `[]` to keep the default behaviour to show all schemas. - - `cron.node-cron-job-responsible`: it is now possible to set this to `true` for more than one node, - but this is not required. - Keep it set to `true` on a single host to keep the current behaviour. + +- `disabled_metadata_schemas`: (**new**) a list of schemas that should be disabled. + Set to `[]` to keep the default behaviour to show all schemas. +- `cron.node-cron-job-responsible`: it is now possible to set this to `true` for more than one node, + but this is not required. + Keep it set to `true` on a single host to keep the current behaviour. The metadata field `coin:policy_enforcement_decision_required` is obsolete. -It will now be set automatically based on the defined policies but will not be visible in the UI; +It will now be set automatically based on the defined policies but will not be visible in the UI; manually set values (which _are_ still visible) will be ignored. A migration to remove this field from existing entities will follow in a future release. ## 9.5.1 -- Fixed bug that caused policy input fields to be extremely slow + +- Fixed bug that caused policy input fields to be extremely slow ([#568](https://github.com/OpenConext/OpenConext-manage/issues/568)) ## 9.5.0 + - Introduce a database lock to prevent multiple cron jobs running at the same time -- Fix bug that caused backend calls to be too persistent and stick to disabled load balancer backends +- Fix bug that caused backend calls to be too persistent and stick to disabled load balancer backends ([#565](https://github.com/OpenConext/OpenConext-manage/issues/565)) - Add a connection timeout of 15 seconds for the XML import (used in the metadata refresh) - Improve display of ARP in change requests ([#559](https://github.com/OpenConext/OpenConext-manage/issues/559)) - New metadata field `coin:application_name` -- Do not show error in policy form +- Do not show error in policy form - Make sure policy names are unique, because otherwise the push to the PDP will break ([#558](https://github.com/OpenConext/OpenConext-manage/issues/558)) - Updated dependencies diff --git a/manage-server/src/main/java/manage/control/DatabaseController.java b/manage-server/src/main/java/manage/control/DatabaseController.java index ef0b35d0..8f38d697 100644 --- a/manage-server/src/main/java/manage/control/DatabaseController.java +++ b/manage-server/src/main/java/manage/control/DatabaseController.java @@ -210,8 +210,12 @@ private List pushPreviewPdP() { private Map pushPreviewSFO() { List sfoEntities = metaDataRepository.getMongoTemplate().findAll(MetaData.class, EntityType.SFO.getType()); Map results = new HashMap<>(); - results.put("sraa", stepUpConfiguration.get("sraa")); - results.put("email_templates", stepUpConfiguration.get("email_templates")); + if (stepUpConfiguration.containsKey("sraa")) { + results.put("sraa", stepUpConfiguration.get("sraa")); + } + if (stepUpConfiguration.containsKey("email_templates")) { + results.put("email_templates", stepUpConfiguration.get("email_templates")); + } List> serviceProviders = sfoEntities.stream() .map(MetaData::getData) .map(data -> Map.of( From 553d82d082731ab12db8a9c0f039eb3fc882fd43 Mon Sep 17 00:00:00 2001 From: Okke Harsta Date: Fri, 13 Mar 2026 15:48:12 +0100 Subject: [PATCH 12/17] Push and import Stepup entities #627 --- README.md | 20 + manage-gui/src/api/index.js | 10 +- manage-gui/src/components/Navigation.jsx | 5 +- .../manage/control/DatabaseController.java | 73 +++- .../manage/control/MetaDataController.java | 6 +- .../manage/control/RestTemplateIdiom.java | 20 + .../control/StepUpImportController.java | 121 ++++++ .../java/manage/control/SystemController.java | 2 +- .../main/java/manage/model/PushOptions.java | 1 + .../manage/policies/PolicyController.java | 6 +- .../java/manage/service/MetaDataService.java | 2 +- .../jobs/MetadataAutoRefreshRunner.java | 2 +- .../metadata_configuration/sfo.schema.json | 7 +- .../control/DatabaseControllerUnitTest.java | 42 +- .../control/StepUpImportControllerTest.java | 57 +++ .../resources/stepup/middleware-config.json | 364 ++++++++++++++++++ .../stepup/middleware-institution.json | 235 +++++++++++ 17 files changed, 935 insertions(+), 38 deletions(-) create mode 100644 manage-server/src/main/java/manage/control/StepUpImportController.java create mode 100644 manage-server/src/test/java/manage/control/StepUpImportControllerTest.java create mode 100644 manage-server/src/test/resources/stepup/middleware-config.json create mode 100644 manage-server/src/test/resources/stepup/middleware-institution.json diff --git a/README.md b/README.md index ca130480..1f28daa9 100644 --- a/README.md +++ b/README.md @@ -133,3 +133,23 @@ Or the other supported flavour: an incremental change curl -u sp-portal:secret -X POST -H 'Content-Type: application/json' -d '@incremental_change_request.json' 'https://manage.test2.surfconext.nl/manage/api/internal/change-requests' curl -u sp-portal:secret -X POST -H 'Content-Type: application/json' -d '@incremental_change_request.json' 'http://localhost:8080/manage/api/internal/change-requests' ``` + +### Stepup import + +```bash +cd manage-server/src/test/resources/stepup +curl -XPOST -u sysadmin:secret \ + -H "Accept: application/json" \ + -H "Content-type: application/json" \ + -d @middleware-config.json \ + "http://localhost:8081/manage/api/internal/stepup/import/sfo" \ + | jq . | grep "entityid" + +curl -XPOST -u sysadmin:secret \ + -H "Accept: application/json" \ + -H "Content-type: application/json" \ + -d @middleware-institution.json \ + "http://localhost:8081/manage/api/internal/stepup/import/institution" \ + | jq . | grep "entityid" + +``` diff --git a/manage-gui/src/api/index.js b/manage-gui/src/api/index.js index 0f35dd29..529f6f85 100644 --- a/manage-gui/src/api/index.js +++ b/manage-gui/src/api/index.js @@ -266,8 +266,13 @@ export function logOut() { return fetchDelete("users/logout"); } -export function push(includeEB, includeOIDC, includePdP) { - return postPutJson("playground/push", {includeEB:includeEB, includeOIDC:includeOIDC, includePdP:includePdP}, "PUT"); +export function push(includeEB, includeOIDC, includePdP, includeStepUp) { + return postPutJson("playground/push", { + includeEB: includeEB, + includeOIDC: includeOIDC, + includePdP: includePdP, + includeStepUp: includeStepUp + }, "PUT"); } export function pushPreview() { @@ -365,6 +370,7 @@ export function getPlaygroundRelyingParties() { export function getPlaygroundIdentityProviders() { return search({}, "saml20_idp") } + //Policies export function idpPolicies(idpEntityID) { return fetchJson(`idpPolicies?entityId=${encodeURIComponent(idpEntityID)}`); diff --git a/manage-gui/src/components/Navigation.jsx b/manage-gui/src/components/Navigation.jsx index a41236c2..844d3746 100644 --- a/manage-gui/src/components/Navigation.jsx +++ b/manage-gui/src/components/Navigation.jsx @@ -62,10 +62,11 @@ export default class Navigation extends React.PureComponent { } this.setState({loading: true}); - push(true, true, true) + push(true, true, true, true) .then(json => { this.setState({loading: false}); - const success = json.eb?.status === "OK" && json.pdp?.status === "OK" && json.oidc?.status === "OK"; + const success = json.eb?.status === "OK" && json.pdp?.status === "OK" + && json.oidc?.status === "OK" && json.stepup?.status === "OK"; setFlash(pushFlash(success), success ? "info" : "error"); }); }; diff --git a/manage-server/src/main/java/manage/control/DatabaseController.java b/manage-server/src/main/java/manage/control/DatabaseController.java index 8f38d697..dca10170 100644 --- a/manage-server/src/main/java/manage/control/DatabaseController.java +++ b/manage-server/src/main/java/manage/control/DatabaseController.java @@ -9,15 +9,19 @@ import manage.model.Scope; import manage.policies.PdpPolicyDefinition; import manage.repository.MetaDataRepository; +import org.checkerframework.checker.nullness.qual.NonNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.graphql.GraphQlProperties; import org.springframework.core.env.Environment; import org.springframework.core.env.Profiles; import org.springframework.core.io.Resource; import org.springframework.data.mongodb.core.query.Query; +import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; +import org.springframework.http.RequestEntity; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Component; @@ -126,7 +130,8 @@ public ResponseEntity doPush(PushOptions pushOptions) { return new ResponseEntity<>(Map.of( "eb", Map.of("status", "OK"), "pdp", Map.of("status", "OK"), - "oidc", Map.of("status", "OK") + "oidc", Map.of("status", "OK"), + "stepup", Map.of("status", "OK") ), HttpStatus.OK); } Map result = new HashMap<>(); @@ -175,7 +180,7 @@ public ResponseEntity doPush(PushOptions pushOptions) { } // Now push all oidc_rp metadata to OIDC proxy - if (!environment.acceptsProfiles(Profiles.of("dev")) && oidcEnabled && pushOptions.isIncludeOIDC()) { + if (oidcEnabled && pushOptions.isIncludeOIDC()) { List filteredEntities = pushPreviewOIDC(); try { ResponseEntity response = this.oidcRestTemplate.postForEntity(oidcPushUri, filteredEntities, Void.class); @@ -195,6 +200,39 @@ public ResponseEntity doPush(PushOptions pushOptions) { } else { result.put("oidc", Map.of("status", "OK")); } + + if (stepUpEnabled && pushOptions.isIncludeStepUp()) { + Map> institutions = pushPreviewInstitution(); + Map stepUpConfiguration = pushPreviewSFO(); + Map> stepUpWhiteList = pushPreviewStepup(); + Map stepUpEndPoint = Map.of( + "/management/institution-configuration", institutions, + "/management/configuration", stepUpConfiguration, + "/management/whitelist/replace", stepUpWhiteList + ); + try { + stepUpEndPoint.forEach((key, value) -> { + ResponseEntity response = this.stepUpRestTemplate.postForEntity( + stepUpPushUri + key, + value, + Map.class); + boolean successFul = response.getStatusCode().is2xxSuccessful(); + result.put("stepup", Map.of("status", successFul ? "OK" : "ERROR")); + }); + } catch (HttpStatusCodeException e) { + String message = String.format("Error in push to Stepup (%s) status %s and response %s", + stepUpPushUri, e.getStatusCode(), e.getResponseBodyAsString()); + LOG.error(message); + return new ResponseEntity<>(Map.of("message", message), HttpStatus.INTERNAL_SERVER_ERROR); + } catch (Exception e) { + String message = String.format("Error in push to Stepup (%s) error %s", + stepUpPushUri, e.getMessage()); + LOG.error(message); + return new ResponseEntity<>(Map.of("message", message), HttpStatus.INTERNAL_SERVER_ERROR); + } + } else { + result.put("step", Map.of("status", "OK")); + } return new ResponseEntity<>(result, HttpStatus.OK); } @@ -226,7 +264,9 @@ private Map pushPreviewSFO() { "assertion_encryption_enabled", data.getOrDefault("assertion_encryption_enabled", false), "second_factor_only", data.getOrDefault("second_factor_only", false), "second_factor_only_nameid_patterns", data.getOrDefault("second_factor_only_nameid_patterns", List.of()), - "blacklisted_encryption_algorithms", data.getOrDefault("blacklisted_encryption_algorithms", List.of()) + "blacklisted_encryption_algorithms", data.getOrDefault("blacklisted_encryption_algorithms", List.of()), + "allow_sso_on_2fa", data.getOrDefault("allow_sso_on_2fa", false), + "set_sso_cookie_on_2fa", data.getOrDefault("set_sso_cookie_on_2fa", false) )) .toList(); results.put("gateway", Map.of("service_providers", serviceProviders)); @@ -246,6 +286,21 @@ private Map> pushPreviewStepup() { private Map> pushPreviewInstitution() { List institutions = metaDataRepository.getMongoTemplate().findAll(MetaData.class, EntityType.STEPUP.getType()); + List sfoAttributes = getSfoAttributes(); + + return institutions.stream().map(MetaData::getData) + .collect(toMap( + data -> (String) data.get("identifier"), + data -> data.keySet().stream() + .filter(key -> sfoAttributes.contains(key)) + .collect(toMap( + key -> key, + key -> data.get(key) + )) + )); + } + + private List getSfoAttributes() { List properties = new ArrayList<>(); properties.add("use_ra_locations"); properties.add("show_raa_contact_information"); @@ -260,17 +315,7 @@ private Map> pushPreviewInstitution() { properties.add("sso_on_2fa"); properties.add("use_ra_locations"); properties.add("stepup-client"); - - return institutions.stream().map(MetaData::getData) - .collect(toMap( - data -> (String) data.get("identifier"), - data -> data.keySet().stream() - .filter(key -> properties.contains(key)) - .collect(toMap( - key -> key, - key -> data.get(key) - )) - )); + return properties; } private List pushPreviewOIDC() { diff --git a/manage-server/src/main/java/manage/control/MetaDataController.java b/manage-server/src/main/java/manage/control/MetaDataController.java index 39c5c1e9..3c55fece 100644 --- a/manage-server/src/main/java/manage/control/MetaDataController.java +++ b/manage-server/src/main/java/manage/control/MetaDataController.java @@ -124,7 +124,7 @@ public MetaData postInternal(@Validated @RequestBody MetaData metaData, APIUser ScopeEnforcer.enforceWriteScope(apiUser, entityType); MetaData savedMetaData = metaDataService.doPost(metaData, apiUser, !apiUser.getScopes().contains(TEST)); if (entityType.equals(EntityType.PDP)) { - databaseController.doPush(new PushOptions(false, false, true)); + databaseController.doPush(new PushOptions(false, false, true, false)); } return savedMetaData; } @@ -229,7 +229,7 @@ public boolean removeInternal(@PathVariable("type") String type, ScopeEnforcer.enforceDeleteScope(apiUser, entityType); boolean removed = metaDataService.doRemove(type, id, apiUser, "Deleted by APIUser " + apiUser.getName()); if (removed && entityType.equals(EntityType.PDP)) { - databaseController.doPush(new PushOptions(false, false, true)); + databaseController.doPush(new PushOptions(false, false, true, false)); } return removed; } @@ -252,7 +252,7 @@ public MetaData putInternal(@Validated @RequestBody MetaData metaData, APIUser a ScopeEnforcer.enforceWriteScope(apiUser, entityType); MetaData updatedMetaData = metaDataService.doPut(metaData, apiUser, !apiUser.getScopes().contains(TEST)); if (entityType.equals(EntityType.PDP)) { - databaseController.doPush(new PushOptions(false, false, true)); + databaseController.doPush(new PushOptions(false, false, true, false)); } return updatedMetaData; } diff --git a/manage-server/src/main/java/manage/control/RestTemplateIdiom.java b/manage-server/src/main/java/manage/control/RestTemplateIdiom.java index e38fb23e..9619778c 100644 --- a/manage-server/src/main/java/manage/control/RestTemplateIdiom.java +++ b/manage-server/src/main/java/manage/control/RestTemplateIdiom.java @@ -10,6 +10,7 @@ import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpRequest; +import org.springframework.http.MediaType; import org.springframework.http.client.ClientHttpRequestExecution; import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.ClientHttpResponse; @@ -36,6 +37,9 @@ public static RestTemplate buildRestTemplate(String uri, String userName, String .disableCookieManagement(); if (StringUtils.hasText(uri)) { + if (uri.endsWith("/")) { + uri = uri.substring(0, uri.length() - 1); + } Optional optionalHttpHost = HttpHostProvider.resolveHttpHost(URI.create(uri).toURL()); optionalHttpHost.ifPresent(httpHost -> httpClientBuilder.setRoutePlanner(new DefaultProxyRoutePlanner(httpHost))); } @@ -50,10 +54,26 @@ public static RestTemplate buildRestTemplate(String uri, String userName, String .requestFactory(() -> requestFactory) .additionalInterceptors(List.of( new BasicAuthenticationInterceptor(userName, password), + new JSONHeaderInterceptor(), new CookieRemoveInterceptor())) .build(); } + private static class JSONHeaderInterceptor implements ClientHttpRequestInterceptor { + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { + HttpHeaders headers = request.getHeaders(); + if (!headers.containsKey(HttpHeaders.ACCEPT)) { + headers.setAccept(List.of(MediaType.APPLICATION_JSON)); + } + if (!headers.containsKey(HttpHeaders.CONTENT_TYPE)) { + headers.setContentType(MediaType.APPLICATION_JSON); + } + return execution.execute(request, body); + } + } + private static class CookieRemoveInterceptor implements ClientHttpRequestInterceptor { @Override diff --git a/manage-server/src/main/java/manage/control/StepUpImportController.java b/manage-server/src/main/java/manage/control/StepUpImportController.java new file mode 100644 index 00000000..f74c0c8f --- /dev/null +++ b/manage-server/src/main/java/manage/control/StepUpImportController.java @@ -0,0 +1,121 @@ +package manage.control; + +import manage.api.APIUser; +import manage.model.EntityType; +import manage.model.MetaData; +import manage.repository.MetaDataRepository; +import manage.service.MetaDataService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@SuppressWarnings("unchecked") +public class StepUpImportController { + + private static final Logger LOG = LoggerFactory.getLogger(StepUpImportController.class); + + private final MetaDataService metaDataService; + private final MetaDataRepository metaDataRepository; + + public StepUpImportController(MetaDataService metaDataService, MetaDataRepository metaDataRepository) { + this.metaDataService = metaDataService; + this.metaDataRepository = metaDataRepository; + } + + @PreAuthorize("hasAnyRole('SYSTEM')") + @PostMapping("/internal/stepup/import/sfo") + @Transactional + public ResponseEntity> importStepUpServiceProviders(@RequestBody Map middlewareConfigJSON, + APIUser apiUser) { + LOG.info("importStepUpServiceProviders called by {}", apiUser.getName()); + + metaDataRepository.getMongoTemplate().remove(new Query(), EntityType.SFO.getType()); + + Map>> middleware = (Map>>) middlewareConfigJSON.get("gateway"); + List> serviceProviders = middleware.get("service_providers"); + + List metaDataList = serviceProviders.stream() + .map(serviceProvider -> + metaDataService.doPost(new MetaData(EntityType.SFO.getType(), convertServiceProviderToMetaData(serviceProvider)) + , apiUser, false)) + .toList(); + return ResponseEntity.ok(metaDataList); + } + + @PreAuthorize("hasAnyRole('SYSTEM')") + @PostMapping("/internal/stepup/import/institution") + @Transactional + public ResponseEntity> importStepUpInstitution(@RequestBody Map> middlewareInstitutionJSON, + APIUser apiUser) { + LOG.info("importStepUpInstitution called by {}", apiUser.getName()); + + metaDataRepository.getMongoTemplate().remove(new Query(), EntityType.STEPUP.getType()); + + List metaDataList = middlewareInstitutionJSON.entrySet().stream() + .map(entry -> + metaDataService.doPost(new MetaData(EntityType.STEPUP.getType(), convertInstitutionToMetaData(entry.getKey(), entry.getValue())) + , apiUser, false)) + .toList(); + return ResponseEntity.ok(metaDataList); + } + + private Map convertInstitutionToMetaData(String entityId, Map institution) { + Map data = new HashMap<>(); + //We need a name, which is not provided by the middleware import + data.put("name", entityId); + data.put("entityid", entityId); + data.put("identifier", entityId); + data.put("revisionnote", String.format("Imported on %s by System API", new Date())); + + data.put("use_ra_locations", institution.getOrDefault("use_ra_locations", false)); + data.put("show_raa_contact_information", institution.getOrDefault("show_raa_contact_information", false)); + data.put("verify_email", institution.getOrDefault("verify_email", false)); + data.put("number_of_tokens_per_identity", institution.getOrDefault("number_of_tokens_per_identity", 0)); + data.put("allowed_second_factors", institution.getOrDefault("allowed_second_factors", List.of())); + data.put("use_ra", institution.getOrDefault("use_ra", List.of())); + data.put("use_raa", institution.getOrDefault("use_raa", List.of())); + data.put("select_raa", institution.getOrDefault("select_raa", List.of())); + data.put("self_vet", institution.getOrDefault("self_vet", false)); + data.put("allow_self_asserted_tokens", institution.getOrDefault("allow_self_asserted_tokens", false)); + data.put("sso_on_2fa", institution.getOrDefault("sso_on_2fa", false)); + data.put("stepup-client", institution.getOrDefault("stepup-client", "full")); + + return data; + } + + private Map convertServiceProviderToMetaData(Map serviceProvider) { + Map sfo = new HashMap<>(); + //We need a name, which is not provided by the middleware import + sfo.put("name", serviceProvider.get("entity_id")); + sfo.put("revisionnote", String.format("Imported on %s by System API", new Date())); + + sfo.put("entityid", serviceProvider.get("entity_id")); + sfo.put("public_key", serviceProvider.get("public_key")); + sfo.put("acs", serviceProvider.getOrDefault("acs", List.of())); + + Map loa = (Map) serviceProvider.getOrDefault("loa", Map.of("__default__", "http://test.surfconext.nl/assurance/loa2")); + sfo.put("loa", loa.get("__default__")); + + sfo.put("assertion_encryption_enabled", serviceProvider.getOrDefault("assertion_encryption_enabled", false)); + sfo.put("second_factor_only", serviceProvider.getOrDefault("second_factor_only", false)); + sfo.put("second_factor_only_nameid_patterns", serviceProvider.getOrDefault("second_factor_only_nameid_patterns", List.of())); + sfo.put("blacklisted_encryption_algorithms", serviceProvider.getOrDefault("blacklisted_encryption_algorithms", List.of())); + sfo.put("allow_sso_on_2fa", serviceProvider.getOrDefault("allow_sso_on_2fa", false)); + sfo.put("set_sso_cookie_on_2fa", serviceProvider.getOrDefault("set_sso_cookie_on_2fa", false)); + + return sfo; + } +} diff --git a/manage-server/src/main/java/manage/control/SystemController.java b/manage-server/src/main/java/manage/control/SystemController.java index 4177ff51..7198a906 100644 --- a/manage-server/src/main/java/manage/control/SystemController.java +++ b/manage-server/src/main/java/manage/control/SystemController.java @@ -61,7 +61,7 @@ public ResponseEntity push(@RequestBody PushOptions pushOptions, FederatedU @GetMapping("/internal/push") public ResponseEntity pushInternal(APIUser apiUser) { LOG.info("Push initiated by {}", apiUser.getName()); - return databaseController.doPush(new PushOptions(true, true, false)); + return databaseController.doPush(new PushOptions(true, true, false, false)); } @PreAuthorize("hasRole('ADMIN')") diff --git a/manage-server/src/main/java/manage/model/PushOptions.java b/manage-server/src/main/java/manage/model/PushOptions.java index ffa3b662..c09501df 100644 --- a/manage-server/src/main/java/manage/model/PushOptions.java +++ b/manage-server/src/main/java/manage/model/PushOptions.java @@ -14,4 +14,5 @@ public class PushOptions { private boolean includeEB; private boolean includeOIDC; private boolean includePdP; + private boolean includeStepUp ; } diff --git a/manage-server/src/main/java/manage/policies/PolicyController.java b/manage-server/src/main/java/manage/policies/PolicyController.java index 0e40f216..970fac93 100644 --- a/manage-server/src/main/java/manage/policies/PolicyController.java +++ b/manage-server/src/main/java/manage/policies/PolicyController.java @@ -97,7 +97,7 @@ public PdpPolicyDefinition create(APIUser apiUser, @RequestBody PdpPolicyDefinit MetaData metaData = new MetaData(EntityType.PDP.getType(), data); MetaData metaDataSaved = this.metaDataService.doPost(metaData, apiUser, false); policyDefinition.setId(metaDataSaved.getId()); - databaseController.doPush(new PushOptions(false, false, true)); + databaseController.doPush(new PushOptions(false, false, true,false)); return policyDefinition; } @@ -117,7 +117,7 @@ public PdpPolicyDefinition update(APIUser apiUser, @RequestBody PdpPolicyDefinit existingMetaData.setData(data); MetaData metaData = this.metaDataService.doPut(existingMetaData, apiUser, false); policyDefinition.setRevisionNbr(metaData.getRevision().getNumber()); - databaseController.doPush(new PushOptions(false, false, true)); + databaseController.doPush(new PushOptions(false, false, true, false)); return policyDefinition; } @@ -129,7 +129,7 @@ public void delete(APIUser apiUser, @PathVariable("id") String id) { policyIdpAccessEnforcer.actionAllowed(policyDefinition, PolicyAccess.WRITE, apiUser, true); this.metaDataService.doRemove(EntityType.PDP.getType(), id, apiUser, "Deleted by dashboard API"); - databaseController.doPush(new PushOptions(false, false, true)); + databaseController.doPush(new PushOptions(false, false, true, false)); } diff --git a/manage-server/src/main/java/manage/service/MetaDataService.java b/manage-server/src/main/java/manage/service/MetaDataService.java index 63676bab..e4a9e261 100644 --- a/manage-server/src/main/java/manage/service/MetaDataService.java +++ b/manage-server/src/main/java/manage/service/MetaDataService.java @@ -492,7 +492,7 @@ public void createConnectWithoutInteraction(Map connectionData, addAllowedEntity(sp, idpEntityId, connectionData, apiUser, false); addAllowedEntity(idp, spEntityId, connectionData, apiUser, true); - databaseController.doPush(new PushOptions(true, true, false)); + databaseController.doPush(new PushOptions(true, true, false, false)); } private void addAllowedEntity(MetaData metaData, diff --git a/manage-server/src/main/java/manage/service/jobs/MetadataAutoRefreshRunner.java b/manage-server/src/main/java/manage/service/jobs/MetadataAutoRefreshRunner.java index dec00092..6c5474a0 100644 --- a/manage-server/src/main/java/manage/service/jobs/MetadataAutoRefreshRunner.java +++ b/manage-server/src/main/java/manage/service/jobs/MetadataAutoRefreshRunner.java @@ -131,7 +131,7 @@ private void execute() { if (anyServiceProviderChanged || anyIdentityProviderChanged) { LOG.info("Pushing changes to IdP after auto-refresh"); - databaseController.doPush(new PushOptions(true, true, false)); + databaseController.doPush(new PushOptions(true, true, false, false)); } LOG.info(LOG_UPDATE_FINISHED); } diff --git a/manage-server/src/main/resources/metadata_configuration/sfo.schema.json b/manage-server/src/main/resources/metadata_configuration/sfo.schema.json index 05ee28ac..bf7b4963 100644 --- a/manage-server/src/main/resources/metadata_configuration/sfo.schema.json +++ b/manage-server/src/main/resources/metadata_configuration/sfo.schema.json @@ -31,9 +31,10 @@ "loa": { "type": "string", "enum": [ - "http://test.surfconext.nl/assurance/loa1.5", - "http://test.surfconext.nl/assurance/loa2", - "http://test.surfconext.nl/assurance/loa3" + "http://test2.surfconext.nl/assurance/loa1", + "http://test2.surfconext.nl/assurance/loa1.5", + "http://test2.surfconext.nl/assurance/loa2", + "http://test2.surfconext.nl/assurance/loa3" ], "default": "http://test.surfconext.nl/assurance/loa2" }, diff --git a/manage-server/src/test/java/manage/control/DatabaseControllerUnitTest.java b/manage-server/src/test/java/manage/control/DatabaseControllerUnitTest.java index 1b7d7b3d..05eca97d 100644 --- a/manage-server/src/test/java/manage/control/DatabaseControllerUnitTest.java +++ b/manage-server/src/test/java/manage/control/DatabaseControllerUnitTest.java @@ -35,6 +35,7 @@ public class DatabaseControllerUnitTest { private final RestTemplate pdpRestTemplate = Mockito.mock(RestTemplate.class); private final RestTemplate ebRestTemplate = Mockito.mock(RestTemplate.class); private final RestTemplate oidcRestTemplate = Mockito.mock(RestTemplate.class); + private final RestTemplate stepUpRestTemplate = Mockito.mock(RestTemplate.class); @BeforeEach public void before() throws IOException { @@ -66,6 +67,7 @@ public void before() throws IOException { ReflectionTestUtils.setField(subject, "pdpRestTemplate", pdpRestTemplate); ReflectionTestUtils.setField(subject, "restTemplate", ebRestTemplate); ReflectionTestUtils.setField(subject, "oidcRestTemplate", oidcRestTemplate); + ReflectionTestUtils.setField(subject, "stepUpRestTemplate", stepUpRestTemplate); when(environment.acceptsProfiles(any(Profiles.class))).thenReturn(false); } @@ -81,7 +83,7 @@ public void doPushPdpError() { doThrow(exception).when(pdpRestTemplate).put(eq("http://pdp-push"), anyList()); - ResponseEntity response = subject.doPush(new PushOptions(false, false, true)); + ResponseEntity response = subject.doPush(new PushOptions(false, false, true, false)); assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); String message = (String) response.getBody().get("message"); @@ -99,7 +101,7 @@ public void doPushPdpServiceUnavailable() { doThrow(exception).when(pdpRestTemplate).put(eq("http://pdp-push"), anyList()); - ResponseEntity response = subject.doPush(new PushOptions(false, false, true)); + ResponseEntity response = subject.doPush(new PushOptions(false, false, true, false)); assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); String message = (String) response.getBody().get("message"); @@ -110,7 +112,7 @@ public void doPushPdpServiceUnavailable() { public void doPushPdpGenericError() { doThrow(new RuntimeException("Connection refused")).when(pdpRestTemplate).put(eq("http://pdp-push"), anyList()); - ResponseEntity response = subject.doPush(new PushOptions(false, false, true)); + ResponseEntity response = subject.doPush(new PushOptions(false, false, true, false)); assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); String message = (String) response.getBody().get("message"); @@ -122,7 +124,7 @@ public void doPushSuccess() { when(mongoTemplate.stream(any(), any(), anyString())).thenAnswer(invocation -> java.util.stream.Stream.empty()); when(ebRestTemplate.postForEntity(eq("http://eb-push"), anyMap(), eq(String.class))).thenReturn(new ResponseEntity<>("OK", HttpStatus.OK)); - ResponseEntity response = subject.doPush(new PushOptions(true, false, false)); + ResponseEntity response = subject.doPush(new PushOptions(true, false, false, false)); assertEquals(HttpStatus.OK, response.getStatusCode()); Map ebResult = (Map) response.getBody().get("eb"); @@ -141,7 +143,7 @@ public void doPushEbError() { when(mongoTemplate.stream(any(), any(), anyString())).thenAnswer(invocation -> java.util.stream.Stream.empty()); when(ebRestTemplate.postForEntity(eq("http://eb-push"), anyMap(), eq(String.class))).thenThrow(exception); - ResponseEntity response = subject.doPush(new PushOptions(true, false, false)); + ResponseEntity response = subject.doPush(new PushOptions(true, false, false, false)); assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); String message = (String) response.getBody().get("message"); @@ -160,7 +162,7 @@ public void doPushEbServiceUnavailable() { when(mongoTemplate.stream(any(), any(), anyString())).thenAnswer(invocation -> java.util.stream.Stream.empty()); when(ebRestTemplate.postForEntity(eq("http://eb-push"), anyMap(), eq(String.class))).thenThrow(exception); - ResponseEntity response = subject.doPush(new PushOptions(true, false, false)); + ResponseEntity response = subject.doPush(new PushOptions(true, false, false, false)); assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); String message = (String) response.getBody().get("message"); @@ -178,7 +180,7 @@ public void doPushPdpForbidden() { doThrow(exception).when(pdpRestTemplate).put(eq("http://pdp-push"), anyList()); - ResponseEntity response = subject.doPush(new PushOptions(false, false, true)); + ResponseEntity response = subject.doPush(new PushOptions(false, false, true, false)); assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); String message = (String) response.getBody().get("message"); @@ -197,10 +199,34 @@ public void doPushOidcError() { when(mongoTemplate.findAll(any(), anyString())).thenReturn(java.util.Collections.emptyList()); when(oidcRestTemplate.postForEntity(eq("http://oidc-push"), anyList(), eq(Void.class))).thenThrow(exception); - ResponseEntity response = subject.doPush(new PushOptions(false, true, false)); + ResponseEntity response = subject.doPush(new PushOptions(false, true, false, false)); assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); String message = (String) response.getBody().get("message"); assertTrue(message.contains("Error in push to OIDC (http://oidc-push) status 503 SERVICE_UNAVAILABLE and response {\"error\":\"oidc error\"}")); } + + @Test + public void doPushStepUpError() { + HttpServerErrorException exception = HttpServerErrorException.create( + HttpStatus.SERVICE_UNAVAILABLE, + "Service Unavailable", + null, + "{\"error\":\"stepup error\"}".getBytes(StandardCharsets.UTF_8), + StandardCharsets.UTF_8); + + when(mongoTemplate.findAll(any(), anyString())).thenReturn(java.util.Collections.emptyList()); + when(stepUpRestTemplate.postForEntity(eq("http://stepup-push/management/institution-configuration"), anyMap(), eq(Map.class))) + .thenReturn(new ResponseEntity<>(Map.of(), HttpStatus.OK)); + when(stepUpRestTemplate.postForEntity(eq("http://stepup-push/management/configuration"), anyMap(), eq(Map.class))) + .thenThrow(exception); + when(stepUpRestTemplate.postForEntity(eq("http://stepup-push/management/whitelist/replace"), anyMap(), eq(Map.class))) + .thenReturn(new ResponseEntity<>(Map.of(), HttpStatus.OK)); + + ResponseEntity response = subject.doPush(new PushOptions(false, false, false, true)); + + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); + String message = (String) response.getBody().get("message"); + assertTrue(message.contains("Error in push to Stepup (http://stepup-push) status 503 SERVICE_UNAVAILABLE and response {\"error\":\"stepup error\"}")); + } } diff --git a/manage-server/src/test/java/manage/control/StepUpImportControllerTest.java b/manage-server/src/test/java/manage/control/StepUpImportControllerTest.java new file mode 100644 index 00000000..2842fe88 --- /dev/null +++ b/manage-server/src/test/java/manage/control/StepUpImportControllerTest.java @@ -0,0 +1,57 @@ +package manage.control; + +import io.restassured.common.mapper.TypeRef; +import manage.AbstractIntegrationTest; +import manage.model.EntityType; +import manage.model.MetaData; +import org.apache.commons.io.IOUtils; +import org.junit.jupiter.api.Test; +import org.springframework.core.io.ClassPathResource; + +import java.io.IOException; +import java.nio.charset.Charset; +import java.util.List; + +import static io.restassured.RestAssured.given; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class StepUpImportControllerTest extends AbstractIntegrationTest { + + @Test + void importStepUpServiceProviders() throws IOException { + String middlewareConfigJSON = IOUtils.toString( + new ClassPathResource("stepup/middleware-config.json").getInputStream(), Charset.defaultCharset()); + List metaDataList = given() + .auth() + .preemptive() + .basic("sysadmin", "secret") + .body(middlewareConfigJSON) + .header("Content-type", "application/json") + .when() + .post("/manage/api/internal/stepup/import/sfo") + .as(new TypeRef<>() { + }); + assertEquals(23, metaDataList.size()); + List metaDataFromDB = metaDataRepository.findAllByType(EntityType.SFO.getType()); + assertEquals(23, metaDataFromDB.size()); + } + + @Test + void importStepUpInstitution() throws IOException { + String middlewareInstitutionJSON = IOUtils.toString( + new ClassPathResource("stepup/middleware-institution.json").getInputStream(), Charset.defaultCharset()); + List metaDataList = given() + .auth() + .preemptive() + .basic("sysadmin", "secret") + .body(middlewareInstitutionJSON) + .header("Content-type", "application/json") + .when() + .post("/manage/api/internal/stepup/import/institution") + .as(new TypeRef<>() { + }); + assertEquals(15, metaDataList.size()); + List metaDataFromDB = metaDataRepository.findAllByType(EntityType.STEPUP.getType()); + assertEquals(15, metaDataFromDB.size()); + } +} diff --git a/manage-server/src/test/resources/stepup/middleware-config.json b/manage-server/src/test/resources/stepup/middleware-config.json new file mode 100644 index 00000000..31e28c89 --- /dev/null +++ b/manage-server/src/test/resources/stepup/middleware-config.json @@ -0,0 +1,364 @@ +{ + "sraa": [], + "email_templates": {}, + "gateway": { + "service_providers": [ + { + "entity_id": "https://ra.test2.example.org/authentication/metadata", + "public_key": "MIICpjCCAY4CCQDjB5uDeAL2/DANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDDApyYV9zYW1sX3NwMB4XDTE1MDYxMzE2MjUzMFoXDTIwMDYxMTE2MjUzMFowFTETMBEGA1UEAwwKcmFfc2FtbF9zcDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPaMwRnarftEGzxDPMTFS1fnWdEix1dY3teWwMFdwsIzal2qIOiV4+TY2uxm6j85MfEQ6tQ8rnBz4/3eZhtCKUtpESHIOK77MdZNB0Rd11jWnp/kaEqTkWqSeJaAYc3fTp2d3VWxvyoc/pbpZG4/9GHdclT5R6tWaMB3WS5hduC5t20mvk9/+SQIT2m/EKqKuExQfPrpvbvFOfFi6GsrhXEdBLQryHn8gvgpM2uXjvNJ0fR7s8PSItDJyv7OcpPyxrP39gyxU2yy9FMFdRE2X4wKZS1xEvOunw5q6HYjY3ZpWluyQ+LKmvkQHCYOv1EcYDA3f8k2J3103ogKKMLlAOsCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAemd8o8/NZDrix1xGSBiHDKgdGYlZpqaF/Uk+xmOU4dlr5C2RBiuBlXnEJPpRuhEExwwgyH5o07RXacws01S0xPM5ThoBPVSVvnRzvlJ3DXVjIGgR9Vb/8aKm9ryt7YWNTgq5SJB9LQYTVMXz26G4vB83Tkxcbz8AUnWVgnaVWdj6A/LGKc+X74+uhEKTUrH+gDVUHvxYrgCwqibiXwz0tlZ0Ftc3qbLKO/XEsBa9eXZH14ITiLBzOmDSixSKVYjocLkDVghAvA274dUyOeTE2GGX5thTj0gDD5D0khi3aPlOFin45vIps+HoyH/BZyjIG85hRKWEpl3qwEbWowQ/XQ==", + "acs": [ + "https://ra.test2.example.org/authentication/consume-assertion" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa1" + }, + "assertion_encryption_enabled": false, + "second_factor_only": false, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "https://sa.test2.example.org/authentication/metadata", + "public_key": "MIICuDCCAaACCQDgGO42j1IVpzANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBNzZWxmc2VydmljZV9zYW1sX3NwMB4XDTE1MDYxMzE2MjUyOVoXDTIwMDYxMTE2MjUyOVowHjEcMBoGA1UEAwwTc2VsZnNlcnZpY2Vfc2FtbF9zcDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKeM6k17u1OeVNKZEVgQm7Qy8Asy15VvGLdgGJYiDnRxNjkhezbMkN1Rn2ct77PvNNY/Ih4vFym+28QQxoCTVm6PPDpmpyOqad4Xq6niS5AXM+XgIzXvc+/B/c/aGa9du/khmdwh+wk4R9Exjou0CG/iwJ276x6UdbTx8eJoSJp1oQ1vIi2im5QgstsMLDRu3+q2bNdQE2GBAIIpcRFPCN7guRGV2L9b0feIVwRNSEu8PSqdsR9FqAlqiWJE4XYb+0+sk4GEDKHH5nxEVu4GarZwPUHjEEGQAXA4KGQQuUQS+FwWcuuW+PGdq5mv0biOQcLSg1qLDsUG8YNMRQjSrvECAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAaDtNJ7npxVfs7bRWsxe3ZdnlopwcZXKOVEH4MxpQzjW08pzbuViuOjJ9QTGm/R3xWrHMxHTJSVw4DL4X+MPAHUPzsPViPHFUnOjBHzBAQN0rQfoUOZjFWBcel5YAksIj5XSaPRzr9CwgFwLePG7E8V+KXotwBU1Xfkh1VrLlYxAkypUjiIsn5SUO27GqUOh4xk0gI3j+HAuMWOXxhULM5p2H8UkmBuhouKuzfA90nmWLezPTq2Gx64ZWMvUId2BrjgxTjeE3a8r/JfAp2HcCQxOQ4MebNum/p3lykaEdg0Ig2WXXEbZwog0T1BCAfGyXxsqyAcoAtVArolPyO74mJg==", + "acs": [ + "https://sa.test2.example.org/authentication/consume-assertion" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa1" + }, + "assertion_encryption_enabled": false, + "second_factor_only": false, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "https://sa.test2.example.org/registration/gssf/tiqr/metadata", + "public_key": "MIICuDCCAaACCQCuCRJtlf/cnjANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBNzZWxmc2VydmljZV90aXFyX3NwMB4XDTE1MDYxMzE2MjUyOVoXDTIwMDYxMTE2MjUyOVowHjEcMBoGA1UEAwwTc2VsZnNlcnZpY2VfdGlxcl9zcDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKB1y2ErshXD+enEmtjp1qVMOjBGy1Z4SeptUbLxvMfq/vflNfdcNJ1rnuMkxPk4MS+Ojw7eanM5v7cdcKUOEvwsTMB8zEq9Xp/HXs+TiYu/hUCrTkhKs9FA+Uh5xsBoLWWh5ylfUvzrHUVf3ZoGnGGOvYE+YHXXRJLT474EK65V81SxA7TFJG6vW7y2Hjzu/9orFifRmbPVL+03OlvfSCQ62yR0Q07MBGnLqGSN9KnOxWNG1AsXlRf2QsxG3s7d5prohpQpGyB/G49CFz8gnpPEgXGBHGMr2SdOsoJM87CXcgypHS4RYmPdd7SCabywWGyOlyR+t9Ce0i2+40WJ4tkCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEATDMAeSOi/HD8FIoqil4jaVXcZCnMFnJwIM782PUvHE61JlENXYa4WhwmOZodc3jOyQ7PcqN/bgXPI2gBfltPk7/B9nAjKNRSb3o/NfFFbvn8T174LBZ2vr7J1CqUGSKXYtx7M6Zk7IE+Zt99IzCdTB/kXLR3Uof7k9ntDJd4yK9sksdVgpMwtsjEmedDSJcX09R4OUehWB9YXzOli6mK6tnctUtIcLTRwdIOeVEQbPMeggvjU1+IWAMjIGAxcT6cIPjHGNStCRUkeS7DiYwSc01fL99k2hZyi+FXX694d1hwWHsM2EY0kBebtUmQ6yjzCDVne2/yFJ6/SiM6+UlZMw==", + "acs": [ + "https://sa.test2.example.org/registration/gssf/tiqr/consume-assertion" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa1" + }, + "assertion_encryption_enabled": false, + "second_factor_only": false, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "https://ra.test2.example.org/vetting-procedure/gssf/tiqr/metadata", + "public_key": "MIICpjCCAY4CCQDrq/B5KtbGnzANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDDApyYV90aXFyX3NwMB4XDTE1MDYxMzE2MjUzMFoXDTIwMDYxMTE2MjUzMFowFTETMBEGA1UEAwwKcmFfdGlxcl9zcDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKV2zNUyiivL8b6HmB+xguhRjvpVnXUqny7IZ9fMTXcqYPEXXKanXeqgJFXhHQJpz+CbvAviF1xuppobMVDka/3sAKgpSRQ0v3obqHd7n7uVJSnJEcrWsJo4gnMayygxosF2KCDeiyVPqXyIHTfOj96tQX4vrQLChK4oDiUKUNZ5m1kB6d7pQx8z+19s8nlq1wZaeZ7qbvXGJItQIg9+sQ6GS4R6ZCimRSNi125lGzPVEKO/eZ8ZK0RgnvlCA9fHmpTfV26+vS3/GyKxum8tTYqdw77X/C/wqpKrERFWU1TlrPCEK6JSmw6aPY6RnjEYVl5hvoPXsP87ZSTPBzuC0FUCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAm9I0s4yIECMNHmsVTcpaiYB79Y/79YlSdFzo8DDDo3y7cHr63esmYmgwp5ILUqk+083tAUyxeIVkLSPgXg+/mwJ7hdNM7IZvqyezB+PgJ7J6+SLKKVo6bRK7/3iSiajdwhqVhgBfdSuyilJqorP9L6B17s9mJ4h76Z1TSJp329OfuDl+9NOTMPlOvNgwYnN1ALzm/lWbUB5BDcu4aASQwk0tCyzQGmvtmNw4KQKV7Z4vDlqc2H+SKPr1NdDLWwAaCQrgycaamGQB0gLQ0IIOZXlvac5633fB0N/ptxtVv3F5KB/satmRRFp9Vz4Ol3GJGPLOPIo7CanW8Laj9HqOwQ==", + "acs": [ + "https://ra.test2.example.org/vetting-procedure/gssf/tiqr/verify" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa1" + }, + "assertion_encryption_enabled": false, + "second_factor_only": false, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "https://sa.test2.example.org/registration/gssf/azuremfa/metadata", + "public_key": "MIICuDCCAaACCQCuCRJtlf/cnjANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBNzZWxmc2VydmljZV90aXFyX3NwMB4XDTE1MDYxMzE2MjUyOVoXDTIwMDYxMTE2MjUyOVowHjEcMBoGA1UEAwwTc2VsZnNlcnZpY2VfdGlxcl9zcDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKB1y2ErshXD+enEmtjp1qVMOjBGy1Z4SeptUbLxvMfq/vflNfdcNJ1rnuMkxPk4MS+Ojw7eanM5v7cdcKUOEvwsTMB8zEq9Xp/HXs+TiYu/hUCrTkhKs9FA+Uh5xsBoLWWh5ylfUvzrHUVf3ZoGnGGOvYE+YHXXRJLT474EK65V81SxA7TFJG6vW7y2Hjzu/9orFifRmbPVL+03OlvfSCQ62yR0Q07MBGnLqGSN9KnOxWNG1AsXlRf2QsxG3s7d5prohpQpGyB/G49CFz8gnpPEgXGBHGMr2SdOsoJM87CXcgypHS4RYmPdd7SCabywWGyOlyR+t9Ce0i2+40WJ4tkCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEATDMAeSOi/HD8FIoqil4jaVXcZCnMFnJwIM782PUvHE61JlENXYa4WhwmOZodc3jOyQ7PcqN/bgXPI2gBfltPk7/B9nAjKNRSb3o/NfFFbvn8T174LBZ2vr7J1CqUGSKXYtx7M6Zk7IE+Zt99IzCdTB/kXLR3Uof7k9ntDJd4yK9sksdVgpMwtsjEmedDSJcX09R4OUehWB9YXzOli6mK6tnctUtIcLTRwdIOeVEQbPMeggvjU1+IWAMjIGAxcT6cIPjHGNStCRUkeS7DiYwSc01fL99k2hZyi+FXX694d1hwWHsM2EY0kBebtUmQ6yjzCDVne2/yFJ6/SiM6+UlZMw==", + "acs": [ + "https://sa.test2.example.org/registration/gssf/azuremfa/consume-assertion" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa1" + }, + "assertion_encryption_enabled": false, + "second_factor_only": false, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "https://ra.test2.example.org/vetting-procedure/gssf/azuremfa/metadata", + "public_key": "MIICpjCCAY4CCQDrq/B5KtbGnzANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDDApyYV90aXFyX3NwMB4XDTE1MDYxMzE2MjUzMFoXDTIwMDYxMTE2MjUzMFowFTETMBEGA1UEAwwKcmFfdGlxcl9zcDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKV2zNUyiivL8b6HmB+xguhRjvpVnXUqny7IZ9fMTXcqYPEXXKanXeqgJFXhHQJpz+CbvAviF1xuppobMVDka/3sAKgpSRQ0v3obqHd7n7uVJSnJEcrWsJo4gnMayygxosF2KCDeiyVPqXyIHTfOj96tQX4vrQLChK4oDiUKUNZ5m1kB6d7pQx8z+19s8nlq1wZaeZ7qbvXGJItQIg9+sQ6GS4R6ZCimRSNi125lGzPVEKO/eZ8ZK0RgnvlCA9fHmpTfV26+vS3/GyKxum8tTYqdw77X/C/wqpKrERFWU1TlrPCEK6JSmw6aPY6RnjEYVl5hvoPXsP87ZSTPBzuC0FUCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAm9I0s4yIECMNHmsVTcpaiYB79Y/79YlSdFzo8DDDo3y7cHr63esmYmgwp5ILUqk+083tAUyxeIVkLSPgXg+/mwJ7hdNM7IZvqyezB+PgJ7J6+SLKKVo6bRK7/3iSiajdwhqVhgBfdSuyilJqorP9L6B17s9mJ4h76Z1TSJp329OfuDl+9NOTMPlOvNgwYnN1ALzm/lWbUB5BDcu4aASQwk0tCyzQGmvtmNw4KQKV7Z4vDlqc2H+SKPr1NdDLWwAaCQrgycaamGQB0gLQ0IIOZXlvac5633fB0N/ptxtVv3F5KB/satmRRFp9Vz4Ol3GJGPLOPIo7CanW8Laj9HqOwQ==", + "acs": [ + "https://ra.test2.example.org/vetting-procedure/gssf/azuremfa/verify" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa1" + }, + "assertion_encryption_enabled": false, + "second_factor_only": false, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "https://sa.test2.example.org/registration/gssf/webauthn/metadata", + "public_key": "MIICuDCCAaACCQCuCRJtlf/cnjANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBNzZWxmc2VydmljZV90aXFyX3NwMB4XDTE1MDYxMzE2MjUyOVoXDTIwMDYxMTE2MjUyOVowHjEcMBoGA1UEAwwTc2VsZnNlcnZpY2VfdGlxcl9zcDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKB1y2ErshXD+enEmtjp1qVMOjBGy1Z4SeptUbLxvMfq/vflNfdcNJ1rnuMkxPk4MS+Ojw7eanM5v7cdcKUOEvwsTMB8zEq9Xp/HXs+TiYu/hUCrTkhKs9FA+Uh5xsBoLWWh5ylfUvzrHUVf3ZoGnGGOvYE+YHXXRJLT474EK65V81SxA7TFJG6vW7y2Hjzu/9orFifRmbPVL+03OlvfSCQ62yR0Q07MBGnLqGSN9KnOxWNG1AsXlRf2QsxG3s7d5prohpQpGyB/G49CFz8gnpPEgXGBHGMr2SdOsoJM87CXcgypHS4RYmPdd7SCabywWGyOlyR+t9Ce0i2+40WJ4tkCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEATDMAeSOi/HD8FIoqil4jaVXcZCnMFnJwIM782PUvHE61JlENXYa4WhwmOZodc3jOyQ7PcqN/bgXPI2gBfltPk7/B9nAjKNRSb3o/NfFFbvn8T174LBZ2vr7J1CqUGSKXYtx7M6Zk7IE+Zt99IzCdTB/kXLR3Uof7k9ntDJd4yK9sksdVgpMwtsjEmedDSJcX09R4OUehWB9YXzOli6mK6tnctUtIcLTRwdIOeVEQbPMeggvjU1+IWAMjIGAxcT6cIPjHGNStCRUkeS7DiYwSc01fL99k2hZyi+FXX694d1hwWHsM2EY0kBebtUmQ6yjzCDVne2/yFJ6/SiM6+UlZMw==", + "acs": [ + "https://sa.test2.example.org/registration/gssf/webauthn/consume-assertion" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa1" + }, + "assertion_encryption_enabled": false, + "second_factor_only": false, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "https://ra.test2.example.org/vetting-procedure/gssf/webauthn/metadata", + "public_key": "MIICpjCCAY4CCQDrq/B5KtbGnzANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDDApyYV90aXFyX3NwMB4XDTE1MDYxMzE2MjUzMFoXDTIwMDYxMTE2MjUzMFowFTETMBEGA1UEAwwKcmFfdGlxcl9zcDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKV2zNUyiivL8b6HmB+xguhRjvpVnXUqny7IZ9fMTXcqYPEXXKanXeqgJFXhHQJpz+CbvAviF1xuppobMVDka/3sAKgpSRQ0v3obqHd7n7uVJSnJEcrWsJo4gnMayygxosF2KCDeiyVPqXyIHTfOj96tQX4vrQLChK4oDiUKUNZ5m1kB6d7pQx8z+19s8nlq1wZaeZ7qbvXGJItQIg9+sQ6GS4R6ZCimRSNi125lGzPVEKO/eZ8ZK0RgnvlCA9fHmpTfV26+vS3/GyKxum8tTYqdw77X/C/wqpKrERFWU1TlrPCEK6JSmw6aPY6RnjEYVl5hvoPXsP87ZSTPBzuC0FUCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAm9I0s4yIECMNHmsVTcpaiYB79Y/79YlSdFzo8DDDo3y7cHr63esmYmgwp5ILUqk+083tAUyxeIVkLSPgXg+/mwJ7hdNM7IZvqyezB+PgJ7J6+SLKKVo6bRK7/3iSiajdwhqVhgBfdSuyilJqorP9L6B17s9mJ4h76Z1TSJp329OfuDl+9NOTMPlOvNgwYnN1ALzm/lWbUB5BDcu4aASQwk0tCyzQGmvtmNw4KQKV7Z4vDlqc2H+SKPr1NdDLWwAaCQrgycaamGQB0gLQ0IIOZXlvac5633fB0N/ptxtVv3F5KB/satmRRFp9Vz4Ol3GJGPLOPIo7CanW8Laj9HqOwQ==", + "acs": [ + "https://ra.test2.example.org/vetting-procedure/gssf/webauthn/verify" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa1" + }, + "assertion_encryption_enabled": false, + "second_factor_only": false, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "https://pieter.aai.surfnet.nl/simplesamlphp/module.php/saml/sp/metadata.php/default-sp", + "public_key": "MIIDlDCCAnwCCQCEcEA84Q/IrDANBgkqhkiG9w0BAQUFADCBizELMAkGA1UEBhMCTkwxEDAOBgNVBAgMB1V0cmVjaHQxEDAOBgNVBAcMB1V0cmVjaHQxEzARBgNVBAoMClNVUkZuZXQgYnYxITAfBgNVBAMMGHBpZXRlci5hYWkuc3VyZm5ldC5ubCBTUDEgMB4GCSqGSIb3DQEJARYRcGlldGVyQHN1cmZuZXQubmwwHhcNMTQwMjE4MjEyODM0WhcNMjQwMjE2MjEyODM0WjCBizELMAkGA1UEBhMCTkwxEDAOBgNVBAgMB1V0cmVjaHQxEDAOBgNVBAcMB1V0cmVjaHQxEzARBgNVBAoMClNVUkZuZXQgYnYxITAfBgNVBAMMGHBpZXRlci5hYWkuc3VyZm5ldC5ubCBTUDEgMB4GCSqGSIb3DQEJARYRcGlldGVyQHN1cmZuZXQubmwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDMtxMLiNG70MDGjdOuU2taiB4Wb+3qr1HLBxlgitahe2e5Hq/xduk7S85e4kBxRphPF2wXGqjXp86e+lF9IUN5EwTxT1M6CoXEnFEjJltc+IhdfGw7rV85tg+pLQ+U/VZT8JowDKIRZ+4FaNb84K3bsLAK2xvkUtsT7J7VEYGyaz/hHhQKlLDpdgLCDDWF0dwD0MQz4hD4wG928DcV2MAHeCMOHnTcFA0K/Rn1mo97IpmObtgxk57cupElwsf8jh5ORUdXkc61Oq4tpfl2Uiyg9SyMuA1JroqC1bigepuCrWY5hv0xhP6knDVQaXVF79RuFGRJUcfv8g0ee2V5AZlDAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAB1QkdCjfmAlfLJm9q/2A+DtcABstqmnppIoPJv5hXlsKuBXZ/xtZwv1YyX4TND2JfZ222AGYX50p51F5kiW0jRdjIbCevp3zxrwGuGkpMQjnNTFJont5umNHYD/+GGG0FZwgeCGUG9XqvyArhm8kVE2N9GfpxE5pXhTbaphSuql86d7HddudrV4vMAwPftLpwxjFrUNIfnXV7Qf2dH0XxIVxUwY8IVjd+CoLLDAiz6FgoDJTx5ri7qIR/zgXBc2xC+3F7tXdJyqTzXt28P/uKH/KXGBl2qoM8TOKElumMEyB9b03B2x/6pJJAy8ZdEShk0f7QEj8SPUCkcoz3IZkkw=", + "acs": [ + "https://pieter.aai.surfnet.nl/simplesamlphp/module.php/saml/sp/saml2-acs.php/default-sp" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa1" + }, + "assertion_encryption_enabled": false, + "second_factor_only": false, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [], + "allow_sso_on_2fa": true, + "set_sso_cookie_on_2fa": true + }, + { + "entity_id": "https://pieter.aai.surfnet.nl/simplesamlphp/module.php/saml/sp/metadata.php/second-sp", + "public_key": "MIIDlDCCAnwCCQCEcEA84Q/IrDANBgkqhkiG9w0BAQUFADCBizELMAkGA1UEBhMCTkwxEDAOBgNVBAgMB1V0cmVjaHQxEDAOBgNVBAcMB1V0cmVjaHQxEzARBgNVBAoMClNVUkZuZXQgYnYxITAfBgNVBAMMGHBpZXRlci5hYWkuc3VyZm5ldC5ubCBTUDEgMB4GCSqGSIb3DQEJARYRcGlldGVyQHN1cmZuZXQubmwwHhcNMTQwMjE4MjEyODM0WhcNMjQwMjE2MjEyODM0WjCBizELMAkGA1UEBhMCTkwxEDAOBgNVBAgMB1V0cmVjaHQxEDAOBgNVBAcMB1V0cmVjaHQxEzARBgNVBAoMClNVUkZuZXQgYnYxITAfBgNVBAMMGHBpZXRlci5hYWkuc3VyZm5ldC5ubCBTUDEgMB4GCSqGSIb3DQEJARYRcGlldGVyQHN1cmZuZXQubmwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDMtxMLiNG70MDGjdOuU2taiB4Wb+3qr1HLBxlgitahe2e5Hq/xduk7S85e4kBxRphPF2wXGqjXp86e+lF9IUN5EwTxT1M6CoXEnFEjJltc+IhdfGw7rV85tg+pLQ+U/VZT8JowDKIRZ+4FaNb84K3bsLAK2xvkUtsT7J7VEYGyaz/hHhQKlLDpdgLCDDWF0dwD0MQz4hD4wG928DcV2MAHeCMOHnTcFA0K/Rn1mo97IpmObtgxk57cupElwsf8jh5ORUdXkc61Oq4tpfl2Uiyg9SyMuA1JroqC1bigepuCrWY5hv0xhP6knDVQaXVF79RuFGRJUcfv8g0ee2V5AZlDAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAB1QkdCjfmAlfLJm9q/2A+DtcABstqmnppIoPJv5hXlsKuBXZ/xtZwv1YyX4TND2JfZ222AGYX50p51F5kiW0jRdjIbCevp3zxrwGuGkpMQjnNTFJont5umNHYD/+GGG0FZwgeCGUG9XqvyArhm8kVE2N9GfpxE5pXhTbaphSuql86d7HddudrV4vMAwPftLpwxjFrUNIfnXV7Qf2dH0XxIVxUwY8IVjd+CoLLDAiz6FgoDJTx5ri7qIR/zgXBc2xC+3F7tXdJyqTzXt28P/uKH/KXGBl2qoM8TOKElumMEyB9b03B2x/6pJJAy8ZdEShk0f7QEj8SPUCkcoz3IZkkw=", + "acs": [ + "https://pieter.aai.surfnet.nl/simplesamlphp/module.php/DebugSP/sp/saml2-acs.php/second-sp", + "https://pieter.aai.surfnet.nl/simplesamlphp/module.php/saml/sp/saml2-acs.php/second-sp" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa2" + }, + "assertion_encryption_enabled": false, + "second_factor_only": true, + "second_factor_only_nameid_patterns": [ + "urn:collab:person:institution-a.nl:*", + "urn:collab:person:institution-b.nl:*", + "urn:collab:person:Institution-D.NL:*", + "urn:collab:person:institution-f.nl:*" + ], + "blacklisted_encryption_algorithms": [], + "allow_sso_on_2fa": true, + "set_sso_cookie_on_2fa": true + }, + { + "entity_id": "https://pieter.aai.surfnet.nl/simplesamlphp/module.php/saml/sp/metadata.php/third-sp", + "public_key": "MIIDlDCCAnwCCQCEcEA84Q/IrDANBgkqhkiG9w0BAQUFADCBizELMAkGA1UEBhMCTkwxEDAOBgNVBAgMB1V0cmVjaHQxEDAOBgNVBAcMB1V0cmVjaHQxEzARBgNVBAoMClNVUkZuZXQgYnYxITAfBgNVBAMMGHBpZXRlci5hYWkuc3VyZm5ldC5ubCBTUDEgMB4GCSqGSIb3DQEJARYRcGlldGVyQHN1cmZuZXQubmwwHhcNMTQwMjE4MjEyODM0WhcNMjQwMjE2MjEyODM0WjCBizELMAkGA1UEBhMCTkwxEDAOBgNVBAgMB1V0cmVjaHQxEDAOBgNVBAcMB1V0cmVjaHQxEzARBgNVBAoMClNVUkZuZXQgYnYxITAfBgNVBAMMGHBpZXRlci5hYWkuc3VyZm5ldC5ubCBTUDEgMB4GCSqGSIb3DQEJARYRcGlldGVyQHN1cmZuZXQubmwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDMtxMLiNG70MDGjdOuU2taiB4Wb+3qr1HLBxlgitahe2e5Hq/xduk7S85e4kBxRphPF2wXGqjXp86e+lF9IUN5EwTxT1M6CoXEnFEjJltc+IhdfGw7rV85tg+pLQ+U/VZT8JowDKIRZ+4FaNb84K3bsLAK2xvkUtsT7J7VEYGyaz/hHhQKlLDpdgLCDDWF0dwD0MQz4hD4wG928DcV2MAHeCMOHnTcFA0K/Rn1mo97IpmObtgxk57cupElwsf8jh5ORUdXkc61Oq4tpfl2Uiyg9SyMuA1JroqC1bigepuCrWY5hv0xhP6knDVQaXVF79RuFGRJUcfv8g0ee2V5AZlDAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAB1QkdCjfmAlfLJm9q/2A+DtcABstqmnppIoPJv5hXlsKuBXZ/xtZwv1YyX4TND2JfZ222AGYX50p51F5kiW0jRdjIbCevp3zxrwGuGkpMQjnNTFJont5umNHYD/+GGG0FZwgeCGUG9XqvyArhm8kVE2N9GfpxE5pXhTbaphSuql86d7HddudrV4vMAwPftLpwxjFrUNIfnXV7Qf2dH0XxIVxUwY8IVjd+CoLLDAiz6FgoDJTx5ri7qIR/zgXBc2xC+3F7tXdJyqTzXt28P/uKH/KXGBl2qoM8TOKElumMEyB9b03B2x/6pJJAy8ZdEShk0f7QEj8SPUCkcoz3IZkkw=", + "acs": [ + "https://pieter.aai.surfnet.nl/simplesamlphp/module.php/saml/sp/saml2-acs.php/third-sp" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa2" + }, + "assertion_encryption_enabled": false, + "second_factor_only": false, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [], + "allow_sso_on_2fa": false, + "set_sso_cookie_on_2fa": true + }, + { + "entity_id": "https://pieter.aai.surfnet.nl/simplesamlphp/module.php/saml/sp/metadata.php/fourth-sp", + "public_key": "MIIDlDCCAnwCCQCEcEA84Q/IrDANBgkqhkiG9w0BAQUFADCBizELMAkGA1UEBhMCTkwxEDAOBgNVBAgMB1V0cmVjaHQxEDAOBgNVBAcMB1V0cmVjaHQxEzARBgNVBAoMClNVUkZuZXQgYnYxITAfBgNVBAMMGHBpZXRlci5hYWkuc3VyZm5ldC5ubCBTUDEgMB4GCSqGSIb3DQEJARYRcGlldGVyQHN1cmZuZXQubmwwHhcNMTQwMjE4MjEyODM0WhcNMjQwMjE2MjEyODM0WjCBizELMAkGA1UEBhMCTkwxEDAOBgNVBAgMB1V0cmVjaHQxEDAOBgNVBAcMB1V0cmVjaHQxEzARBgNVBAoMClNVUkZuZXQgYnYxITAfBgNVBAMMGHBpZXRlci5hYWkuc3VyZm5ldC5ubCBTUDEgMB4GCSqGSIb3DQEJARYRcGlldGVyQHN1cmZuZXQubmwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDMtxMLiNG70MDGjdOuU2taiB4Wb+3qr1HLBxlgitahe2e5Hq/xduk7S85e4kBxRphPF2wXGqjXp86e+lF9IUN5EwTxT1M6CoXEnFEjJltc+IhdfGw7rV85tg+pLQ+U/VZT8JowDKIRZ+4FaNb84K3bsLAK2xvkUtsT7J7VEYGyaz/hHhQKlLDpdgLCDDWF0dwD0MQz4hD4wG928DcV2MAHeCMOHnTcFA0K/Rn1mo97IpmObtgxk57cupElwsf8jh5ORUdXkc61Oq4tpfl2Uiyg9SyMuA1JroqC1bigepuCrWY5hv0xhP6knDVQaXVF79RuFGRJUcfv8g0ee2V5AZlDAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAB1QkdCjfmAlfLJm9q/2A+DtcABstqmnppIoPJv5hXlsKuBXZ/xtZwv1YyX4TND2JfZ222AGYX50p51F5kiW0jRdjIbCevp3zxrwGuGkpMQjnNTFJont5umNHYD/+GGG0FZwgeCGUG9XqvyArhm8kVE2N9GfpxE5pXhTbaphSuql86d7HddudrV4vMAwPftLpwxjFrUNIfnXV7Qf2dH0XxIVxUwY8IVjd+CoLLDAiz6FgoDJTx5ri7qIR/zgXBc2xC+3F7tXdJyqTzXt28P/uKH/KXGBl2qoM8TOKElumMEyB9b03B2x/6pJJAy8ZdEShk0f7QEj8SPUCkcoz3IZkkw=", + "acs": [ + "https://pieter.aai.surfnet.nl/simplesamlphp/module.php/saml/sp/saml2-acs.php/fourth-sp" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa1", + "institution-a.nl": "http://test2.surfconext.nl/assurance/loa2", + "institution-d.nl": "http://test2.surfconext.nl/assurance/loa2" + }, + "assertion_encryption_enabled": false, + "second_factor_only": false, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "https://saproxy.moonshot.utr.surfcloud.nl/simplesamlphp/module.php/saml/sp/metadata.php/test-sp", + "public_key": "MIIC9zCCAd+gAwIBAgIJAOILkrmFVk2kMA0GCSqGSIb3DQEBCwUAMBIxEDAOBgNVBAMMB1NBTUwgU1AwHhcNMTcwMTEyMTI0MDUxWhcNMjcwMTEyMTI0MDUxWjASMRAwDgYDVQQDDAdTQU1MIFNQMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtAbCyKFpOnB9eCdC1pLkFOdhAS5omxWbRapGE3QSFEe05R1nOBzskE+PuBzc5mTSyaAIAtoMiFk00YIHq/VjVe1jhqhy2DrMjODIUH1bSu5CgA97NwWCsBZLp2A5ziMKnmSKTTHg/Mn/3derCXo4WQyUGILGtVtgqkgluq9/EjrJkeun9oUNptpfTr9bdyUdBqPBuMq1uhkpSocH+X8X2uOBd580rurvarOEVv2LdjSbdvyRz9xVOmi/vWyydIug+azlQp7iWk9lpNJcHACzCPxgvPNjvpZTaLrPP7jhJX0e48tOIjFENBj495ni41HcWfzMwW0s/ThfOCs1q+kZqQIDAQABo1AwTjAdBgNVHQ4EFgQUYvbzODZr4zHR4MbbT0DuMgPOJHUwHwYDVR0jBBgwFoAUYvbzODZr4zHR4MbbT0DuMgPOJHUwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAqrjqm+nCcGRz2Ncu/nJH3GjPt5DdK8bvI/Hks6t2nBI6AhcuvX8eyEYQyGvgK0fmOMtALa+h+Qa3itYo7VjgjMLm7+R4EYyr9DBANpU499h0YOc9vowzNEmw8ku4+5iCUPKhanrLTr8AcRLsNh6H2lGxy3ncNbcXLBPsor+vwZQwmf48yqA6uWAYLUYloDcnLshJIIvYLM60Vxi/QqdF7GMOeHE8FBUYJ1eYXvWyv35ZMPSP5feoEbUz5byE37p7vaXy4aX6vH9OTZcenkyQ42SU/TjW7kyD9mNPYNGnTOymNOYytX9WAAfFis1GLgcdse47cDEdK0UJ7zF7xtp+BA==", + "acs": [ + "https://saproxy.moonshot.utr.surfcloud.nl/simplesamlphp/module.php/saml/sp/saml2-acs.php/test-sp" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa2" + }, + "assertion_encryption_enabled": false, + "second_factor_only": false, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "http://localhost:8080/simplesaml/module.php/saml/sp/metadata.php/sfo-sp", + "public_key": "MIIDmTCCAoGgAwIBAgIJAKyUXzwGwcqhMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNVBAYTAk5MMRAwDgYDVQQKDAdFeGFtcGxlMR4wHAYDVQQDDBVTRk8gRGVtbyBTQU1MIHNpZ25pbmcxIjAgBgkqhkiG9w0BCQEWE3N1cHBvcnRAZXhhbXBsZS5vcmcwHhcNMTYxMTA2MDgxOTIzWhcNMjYxMTA0MDgxOTIzWjBjMQswCQYDVQQGEwJOTDEQMA4GA1UECgwHRXhhbXBsZTEeMBwGA1UEAwwVU0ZPIERlbW8gU0FNTCBzaWduaW5nMSIwIAYJKoZIhvcNAQkBFhNzdXBwb3J0QGV4YW1wbGUub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA03h5x2cV6+JKLYHO2BxHhiYoRQi/vMQHW7EHRTyfAptf+1AwuDT83LF4OA82oXw1PTO9ffkb9beFHMxBkHQ7fI7Qq4jjhw9ljtB7BPdN9S+uOhNPAhFHb0hHAIngCGg82PEi9hD18lPfS8OJIK+cSOgrCp2H5N2vel1yRXm4laCc8/nssoIoAkV6wnATBE3oSyDMKpK+evUz/oltryf7iLvfnB8XdP3dDMERaOFqstKrj50SCpMpA6AsKZ674aIHuvO/dUD0v5+UVnDjGl2Pbfz0vp+KhV8sWSQ6oBE44yxpYQBiHJi+1Wq0Vi4Vf+hZjiH4fI+qp2BmV0HAOD0mbwIDAQABo1AwTjAdBgNVHQ4EFgQU2em7W0TJzKoNNV3LNoVHeJaJpG0wHwYDVR0jBBgwFoAU2em7W0TJzKoNNV3LNoVHeJaJpG0wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEALBmM0fMx8fnNabWIIHsElk6qVGpJ6+4583pYoNT/nXrf/Lx2jwYhyyHTdFONMoHbobY0e28t4sao8GqprGFynHs5ssjhOWpADAYHV2l0lcAt0YISmRbSJk7SfHGNYr4JHI+wgt4Cfwlw6BUsVdiBM0gxFPPQrLMoPmY4ZgQoV3YyJKvq6AhhxGvyl5b54wfaEDmGuANfDSz4c3xAX8KxIOTNevUToyMY3Z2uwwEqHSyp0ayjsMoPsZymKUoNzwHQrWyGd2glqukHEPZuP0ZeHLL6dc6/zVhHt+Pwbrvq2Q1aOfiWfLljYZZZ5PNxMEXsh2ZHTkvw2IA/pYVd59Gabg==", + "acs": [ + "http://localhost:8080/simplesaml/module.php/saml/sp/saml2-acs.php/sfo-sp" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa2" + }, + "assertion_encryption_enabled": false, + "second_factor_only": true, + "second_factor_only_nameid_patterns": [ + "urn:collab:person:surfnet.nl:*" + ], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "https://manage.test2.example.org/shibboleth", + "public_key": "MIIDoDCCAoigAwIBAgIJAPPRU9G+n7LNMA0GCSqGSIb3DQEBCwUAMHIxCzAJBgNVBAYTAk5MMRwwGgYDVQQKDBN0ZXN0Mi5zdXJmY29uZXh0Lm5sMRwwGgYDVQQDDBN0ZXN0Mi5zdXJmY29uZXh0Lm5sMScwJQYJKoZIhvcNAQkBFhhpbmZvQHRlc3QyLnN1cmZjb25leHQubmwwHhcNMTgwOTE5MTQxNTU2WhcNMjgwOTE4MTQxNTU2WjByMQswCQYDVQQGEwJOTDEcMBoGA1UECgwTdGVzdDIuc3VyZmNvbmV4dC5ubDEcMBoGA1UEAwwTdGVzdDIuc3VyZmNvbmV4dC5ubDEnMCUGCSqGSIb3DQEJARYYaW5mb0B0ZXN0Mi5zdXJmY29uZXh0Lm5sMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1NzIeW3d0uQjXTJBMjU8YlXJry5mcAVoyPbIZtOny2d3ITvaJx4UAGFr2aE/idHWajONWfsLxse6pp3WeRw8qRNhR4szDNtTb0YU0Fxm7doLguddlN8guWwowf/Y82jfS9rpM7FC+JzJGQkHlvmrb9WUOTr8SUa5b9m8mxydZjSqAbYqwsqkDbBLtpC2rxeoOe6Aq3SMJ1o0GoHmMuFcczzfzcj1mscy0OqnYokJoHqKVMJ+X5mkHCkKP/LQkWDN2x+6gmAzVOm+ShKKdgl4QJ2AZpU0WpzS924dNkkTmYZfenAfLu7NyfQrPVQArkZl9YPK/GPxdmGHy5knoqU9swIDAQABozkwNzA1BgNVHREELjAsghN0ZXN0Mi5zdXJmY29uZXh0Lm5sghUqLnRlc3QyLnN1cmZjb25leHQubmwwDQYJKoZIhvcNAQELBQADggEBANCSM493uMWz361QOpqF+Ogyl+BcaehZJlWMY+oAQnsICFdaNV2d9gm7X2eMDPzR+86NiEUv1IKFiAaNWGecnHQ7DhecmNlhKWJkvRvXvdItv/Bhqyg9o47+TEfNgV1UEwNZRSkPYjsSszxyp4OkoAjcUb04PPsOEHIJ+pqx/T48p0IDjZdYDgnwdVXSKRNn4pmssR1PxmaY0AefoNMA0+FnMTZ5RAbqp1SABg5KDCg0cJMX3CkDd7d6kpHpbhg79FmwnBDK5FICixsrFRiO3h33xfuNz4i6UYcMSyLI1mmmAnc+NnMHHgMKFpx5XY5kRf0GVbgHo1imE6qBVeLUQww=", + "acs": [ + "https://manage.test2.example.org/Shibboleth.sso/SAML2/POST" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa2" + }, + "assertion_encryption_enabled": false, + "second_factor_only": false, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "http://adfs-2016.test2.example.org/adfs-sfo-extension", + "public_key": "MIIDEzCCAfugAwIBAgIQHqdytiDCqrxGGeY5rz3icTANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFzaWduaW5nLmQyMDE2LnRlc3QyLnN1cmZjb25leHQubmwwHhcNMTgxMDI5MTM0MjQ4WhcNMjMxMDMwMTM0MjQ4WjAsMSowKAYDVQQDDCFzaWduaW5nLmQyMDE2LnRlc3QyLnN1cmZjb25leHQubmwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCiOJFNgb4TlDyDx/U0mhW2GQqgfsN7WVjLlM6fIwqR2Ae2S56dOHjNJhS/Bm4X8K7h46bcdQz79g2+hwaYvojnEVGHYAvuoCzfqhBJXk4WCqC7WCb5jvWA10s66UCD7PG0iNee+7rGeEXFfmRD/UkZRpYq9gdC1C+ki+R7nRHv25adF4yWmeGgQer0dYT6Ico5xiy1I4U6FsVWRI26m9IkYKbwalq//AJFVCX9xfgQWTuWBk4xOQlgNsDXrcMKvTs1ZoEMaRGbr4xtphGXPUn+BRQQ1M7RsphXH3Ahj915uB9sZQns96f4iPgtYW4dT/M9CUd110JvpA+ia5J0+WQPAgMBAAGjMTAvMA4GA1UdDwEB/wQEAwIHgDAdBgNVHQ4EFgQU4labhn+sj1cKw2rb9maZvHQ0PZowDQYJKoZIhvcNAQELBQADggEBAHDU0Y9GW/NWkDrxCriZUmeyIn+FnpV6v4b/WFJdcaP5hzc7udG2qlPVl0my5Hdn943jwpNSK6p/E6JiFG/gTjzGFGuLFT71MrMBRBs40/r8OTDkYpxShjJNFyrFJK6d/0RL3i7qTrpZCy5w78IkWJnyeu2Quy1iqhLI0s9E0BDPCqI/vo4dm/wz27GVWFGa8uuLyKM7GsRgCj4LB77rAbyYFm2MLthuTeOEWCof8zc66bQLUMnG1P1wy6lgpu5nglzwF83L0ib06eqVxdHxBDYoVwbyoly12q6GWaKye31g2vLwegP3wfBPPN4g5RoJg1xNPYd7mOwMkOo3fSHOmFI=", + "acs": [ + "https://adfs-2016.test2.example.org:443/adfs/ls/" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa2" + }, + "assertion_encryption_enabled": false, + "second_factor_only": true, + "second_factor_only_nameid_patterns": [ + "urn:collab:person:institution-a.nl:*" + ], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "http://adfs-2012.test2.example.org", + "public_key": "MIIDEzCCAfugAwIBAgIQSN8zW6CYlIJOAFzdStTT+jANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFzaWduaW5nLmQyMDEyLnRlc3QyLnN1cmZjb25leHQubmwwHhcNMTcwOTI0MTYzNDE3WhcNMjIwOTI1MTYzNDE3WjAsMSowKAYDVQQDDCFzaWduaW5nLmQyMDEyLnRlc3QyLnN1cmZjb25leHQubmwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCd/TW1JocNOWl5iFl7RkY40kP5SciBYB6tIEywflF4tkEDwKRqsQ2EsZ93uiggB/pXUa6TGvS7vzQjRqdhFgCpohmhepS9Pwu//I+p68VZCtslt1UJGt62AFOZwaTSQPn4eGdhDr4sX9Mr+uUOSZeeiDtuEhiMIjkd2IabOySd9LS+NMsoicShXGy0DYGNr7h2hyu/lT+uLJvlPRtWoZ47iKY0UGiqSI7MwZSPB0hOjyeopl+/XLD4hD+3VUAC2KmH6ZO0Aaa+sRQe+MTYU4vo7oXN+dhFh8oUpQk63x20ma157tRSYjBUpMDdrS/vN/5d7smTFt5tUxvUGLcFGA8JAgMBAAGjMTAvMA4GA1UdDwEB/wQEAwIHgDAdBgNVHQ4EFgQUFvg4wwprL0eZ/Y/OsH92T3++tlUwDQYJKoZIhvcNAQELBQADggEBAEq/Cjy7btLqfZzxvVpPBXfufbNQHrAxV5Bp6kD2cCXS9VCK0uGJvFlzdU03CLOn0N1a2AQNIJfOeX6uySCQuYq4h4VyLUIU2XMPKUw8avqhn3JqllxYBn8OWtCbE/AY7KSiLXy9WPXptatZry5xOLuK61d+lK2ku9UslUq69opHdxMgujWA/9EuJDH4EDnRtsICOZ2flblIeBx8UNsza1Z2w6R1RkVASwaVC/rW9ZIixdN7rC51AMjSf3RpTsG/OV6nSEprMkhUYdhHWRoOWfO+Pbfda5Jo9Hs2xvD4N7/hOJ43t/0WJ5nx76Cq13GpiEbiHmvHAMcKtxhuAKc84I4=", + "acs": [ + "https://adfs-2012.test2.example.org:443/adfs/ls" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa2" + }, + "assertion_encryption_enabled": false, + "second_factor_only": true, + "second_factor_only_nameid_patterns": [ + "urn:collab:person:institution-a.nl:*", + "urn:collab:person:institution-b.nl:*" + ], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "http://adfs2-2012.test2.example.org", + "public_key": "MIIDEzCCAfugAwIBAgIQSN8zW6CYlIJOAFzdStTT+jANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFzaWduaW5nLmQyMDEyLnRlc3QyLnN1cmZjb25leHQubmwwHhcNMTcwOTI0MTYzNDE3WhcNMjIwOTI1MTYzNDE3WjAsMSowKAYDVQQDDCFzaWduaW5nLmQyMDEyLnRlc3QyLnN1cmZjb25leHQubmwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCd/TW1JocNOWl5iFl7RkY40kP5SciBYB6tIEywflF4tkEDwKRqsQ2EsZ93uiggB/pXUa6TGvS7vzQjRqdhFgCpohmhepS9Pwu//I+p68VZCtslt1UJGt62AFOZwaTSQPn4eGdhDr4sX9Mr+uUOSZeeiDtuEhiMIjkd2IabOySd9LS+NMsoicShXGy0DYGNr7h2hyu/lT+uLJvlPRtWoZ47iKY0UGiqSI7MwZSPB0hOjyeopl+/XLD4hD+3VUAC2KmH6ZO0Aaa+sRQe+MTYU4vo7oXN+dhFh8oUpQk63x20ma157tRSYjBUpMDdrS/vN/5d7smTFt5tUxvUGLcFGA8JAgMBAAGjMTAvMA4GA1UdDwEB/wQEAwIHgDAdBgNVHQ4EFgQUFvg4wwprL0eZ/Y/OsH92T3++tlUwDQYJKoZIhvcNAQELBQADggEBAEq/Cjy7btLqfZzxvVpPBXfufbNQHrAxV5Bp6kD2cCXS9VCK0uGJvFlzdU03CLOn0N1a2AQNIJfOeX6uySCQuYq4h4VyLUIU2XMPKUw8avqhn3JqllxYBn8OWtCbE/AY7KSiLXy9WPXptatZry5xOLuK61d+lK2ku9UslUq69opHdxMgujWA/9EuJDH4EDnRtsICOZ2flblIeBx8UNsza1Z2w6R1RkVASwaVC/rW9ZIixdN7rC51AMjSf3RpTsG/OV6nSEprMkhUYdhHWRoOWfO+Pbfda5Jo9Hs2xvD4N7/hOJ43t/0WJ5nx76Cq13GpiEbiHmvHAMcKtxhuAKc84I4=", + "acs": [ + "https://adfs2-2012.test2.example.org/adfs/ls/" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa2" + }, + "assertion_encryption_enabled": false, + "second_factor_only": true, + "second_factor_only_nameid_patterns": [ + "urn:collab:person:institution-a.nl:*", + "urn:collab:person:institution-b.nl:*" + ], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "https://authz-admin.test2.example.org/shibboleth", + "public_key": "MIIDoDCCAoigAwIBAgIJAPPRU9G+n7LNMA0GCSqGSIb3DQEBCwUAMHIxCzAJBgNVBAYTAk5MMRwwGgYDVQQKDBN0ZXN0Mi5zdXJmY29uZXh0Lm5sMRwwGgYDVQQDDBN0ZXN0Mi5zdXJmY29uZXh0Lm5sMScwJQYJKoZIhvcNAQkBFhhpbmZvQHRlc3QyLnN1cmZjb25leHQubmwwHhcNMTgwOTE5MTQxNTU2WhcNMjgwOTE4MTQxNTU2WjByMQswCQYDVQQGEwJOTDEcMBoGA1UECgwTdGVzdDIuc3VyZmNvbmV4dC5ubDEcMBoGA1UEAwwTdGVzdDIuc3VyZmNvbmV4dC5ubDEnMCUGCSqGSIb3DQEJARYYaW5mb0B0ZXN0Mi5zdXJmY29uZXh0Lm5sMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1NzIeW3d0uQjXTJBMjU8YlXJry5mcAVoyPbIZtOny2d3ITvaJx4UAGFr2aE/idHWajONWfsLxse6pp3WeRw8qRNhR4szDNtTb0YU0Fxm7doLguddlN8guWwowf/Y82jfS9rpM7FC+JzJGQkHlvmrb9WUOTr8SUa5b9m8mxydZjSqAbYqwsqkDbBLtpC2rxeoOe6Aq3SMJ1o0GoHmMuFcczzfzcj1mscy0OqnYokJoHqKVMJ+X5mkHCkKP/LQkWDN2x+6gmAzVOm+ShKKdgl4QJ2AZpU0WpzS924dNkkTmYZfenAfLu7NyfQrPVQArkZl9YPK/GPxdmGHy5knoqU9swIDAQABozkwNzA1BgNVHREELjAsghN0ZXN0Mi5zdXJmY29uZXh0Lm5sghUqLnRlc3QyLnN1cmZjb25leHQubmwwDQYJKoZIhvcNAQELBQADggEBANCSM493uMWz361QOpqF+Ogyl+BcaehZJlWMY+oAQnsICFdaNV2d9gm7X2eMDPzR+86NiEUv1IKFiAaNWGecnHQ7DhecmNlhKWJkvRvXvdItv/Bhqyg9o47+TEfNgV1UEwNZRSkPYjsSszxyp4OkoAjcUb04PPsOEHIJ+pqx/T48p0IDjZdYDgnwdVXSKRNn4pmssR1PxmaY0AefoNMA0+FnMTZ5RAbqp1SABg5KDCg0cJMX3CkDd7d6kpHpbhg79FmwnBDK5FICixsrFRiO3h33xfuNz4i6UYcMSyLI1mmmAnc+NnMHHgMKFpx5XY5kRf0GVbgHo1imE6qBVeLUQww=", + "acs": [ + "https://authz-admin.test2.example.org/Shibboleth.sso/SAML2/POST" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa2" + }, + "assertion_encryption_enabled": false, + "second_factor_only": false, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "https://pdp.test2.example.org/shibboleth", + "public_key": "MIIDoDCCAoigAwIBAgIJAPPRU9G+n7LNMA0GCSqGSIb3DQEBCwUAMHIxCzAJBgNVBAYTAk5MMRwwGgYDVQQKDBN0ZXN0Mi5zdXJmY29uZXh0Lm5sMRwwGgYDVQQDDBN0ZXN0Mi5zdXJmY29uZXh0Lm5sMScwJQYJKoZIhvcNAQkBFhhpbmZvQHRlc3QyLnN1cmZjb25leHQubmwwHhcNMTgwOTE5MTQxNTU2WhcNMjgwOTE4MTQxNTU2WjByMQswCQYDVQQGEwJOTDEcMBoGA1UECgwTdGVzdDIuc3VyZmNvbmV4dC5ubDEcMBoGA1UEAwwTdGVzdDIuc3VyZmNvbmV4dC5ubDEnMCUGCSqGSIb3DQEJARYYaW5mb0B0ZXN0Mi5zdXJmY29uZXh0Lm5sMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1NzIeW3d0uQjXTJBMjU8YlXJry5mcAVoyPbIZtOny2d3ITvaJx4UAGFr2aE/idHWajONWfsLxse6pp3WeRw8qRNhR4szDNtTb0YU0Fxm7doLguddlN8guWwowf/Y82jfS9rpM7FC+JzJGQkHlvmrb9WUOTr8SUa5b9m8mxydZjSqAbYqwsqkDbBLtpC2rxeoOe6Aq3SMJ1o0GoHmMuFcczzfzcj1mscy0OqnYokJoHqKVMJ+X5mkHCkKP/LQkWDN2x+6gmAzVOm+ShKKdgl4QJ2AZpU0WpzS924dNkkTmYZfenAfLu7NyfQrPVQArkZl9YPK/GPxdmGHy5knoqU9swIDAQABozkwNzA1BgNVHREELjAsghN0ZXN0Mi5zdXJmY29uZXh0Lm5sghUqLnRlc3QyLnN1cmZjb25leHQubmwwDQYJKoZIhvcNAQELBQADggEBANCSM493uMWz361QOpqF+Ogyl+BcaehZJlWMY+oAQnsICFdaNV2d9gm7X2eMDPzR+86NiEUv1IKFiAaNWGecnHQ7DhecmNlhKWJkvRvXvdItv/Bhqyg9o47+TEfNgV1UEwNZRSkPYjsSszxyp4OkoAjcUb04PPsOEHIJ+pqx/T48p0IDjZdYDgnwdVXSKRNn4pmssR1PxmaY0AefoNMA0+FnMTZ5RAbqp1SABg5KDCg0cJMX3CkDd7d6kpHpbhg79FmwnBDK5FICixsrFRiO3h33xfuNz4i6UYcMSyLI1mmmAnc+NnMHHgMKFpx5XY5kRf0GVbgHo1imE6qBVeLUQww=", + "acs": [ + "https://pdp.test2.example.org/Shibboleth.sso/SAML2/POST" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa2" + }, + "assertion_encryption_enabled": false, + "second_factor_only": false, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "https://aa.test2.example.org/shibboleth", + "public_key": "MIIDoDCCAoigAwIBAgIJAPPRU9G+n7LNMA0GCSqGSIb3DQEBCwUAMHIxCzAJBgNVBAYTAk5MMRwwGgYDVQQKDBN0ZXN0Mi5zdXJmY29uZXh0Lm5sMRwwGgYDVQQDDBN0ZXN0Mi5zdXJmY29uZXh0Lm5sMScwJQYJKoZIhvcNAQkBFhhpbmZvQHRlc3QyLnN1cmZjb25leHQubmwwHhcNMTgwOTE5MTQxNTU2WhcNMjgwOTE4MTQxNTU2WjByMQswCQYDVQQGEwJOTDEcMBoGA1UECgwTdGVzdDIuc3VyZmNvbmV4dC5ubDEcMBoGA1UEAwwTdGVzdDIuc3VyZmNvbmV4dC5ubDEnMCUGCSqGSIb3DQEJARYYaW5mb0B0ZXN0Mi5zdXJmY29uZXh0Lm5sMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1NzIeW3d0uQjXTJBMjU8YlXJry5mcAVoyPbIZtOny2d3ITvaJx4UAGFr2aE/idHWajONWfsLxse6pp3WeRw8qRNhR4szDNtTb0YU0Fxm7doLguddlN8guWwowf/Y82jfS9rpM7FC+JzJGQkHlvmrb9WUOTr8SUa5b9m8mxydZjSqAbYqwsqkDbBLtpC2rxeoOe6Aq3SMJ1o0GoHmMuFcczzfzcj1mscy0OqnYokJoHqKVMJ+X5mkHCkKP/LQkWDN2x+6gmAzVOm+ShKKdgl4QJ2AZpU0WpzS924dNkkTmYZfenAfLu7NyfQrPVQArkZl9YPK/GPxdmGHy5knoqU9swIDAQABozkwNzA1BgNVHREELjAsghN0ZXN0Mi5zdXJmY29uZXh0Lm5sghUqLnRlc3QyLnN1cmZjb25leHQubmwwDQYJKoZIhvcNAQELBQADggEBANCSM493uMWz361QOpqF+Ogyl+BcaehZJlWMY+oAQnsICFdaNV2d9gm7X2eMDPzR+86NiEUv1IKFiAaNWGecnHQ7DhecmNlhKWJkvRvXvdItv/Bhqyg9o47+TEfNgV1UEwNZRSkPYjsSszxyp4OkoAjcUb04PPsOEHIJ+pqx/T48p0IDjZdYDgnwdVXSKRNn4pmssR1PxmaY0AefoNMA0+FnMTZ5RAbqp1SABg5KDCg0cJMX3CkDd7d6kpHpbhg79FmwnBDK5FICixsrFRiO3h33xfuNz4i6UYcMSyLI1mmmAnc+NnMHHgMKFpx5XY5kRf0GVbgHo1imE6qBVeLUQww=", + "acs": [ + "https://aa.test2.example.org/Shibboleth.sso/SAML2/POST" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa2" + }, + "assertion_encryption_enabled": false, + "second_factor_only": false, + "second_factor_only_nameid_patterns": [], + "blacklisted_encryption_algorithms": [] + }, + { + "entity_id": "https://engine.test2.example.org/authentication/stepup/metadata", + "public_key": "MIIDYDCCAkigAwIBAgIJANN/l9DYjIVPMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTgxMTI3MTQzMDU0WhcNMTkwMzA3MTQzMDU0WjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+bVH25y9v+a+XK8FHKPLto2PnWbNTC/a5BlHLCoFL/JvycPuoDwgkYKaI4DLc50iMkrA7Grw10JVESdxeDANxlDUr9YS5HIRfGx6KCBGcKkvr+FK5Y3dxaEq27ADKNKxSl7e6wRg4pMwOvbw8JxUyWQcQZICNSwImSeQ2NOju+B5kE8CjS0uvBqpsXovuGeJUHvycdETYXnFpAdRKoOa3KxrnHjTP9o72QZGULBvPLu1X9KzwUli6YxRK2q8MawqMdLqONm+J022M/fa75tTicNTVoYfeRg7mITmrBw/0NT2uRtW3vClmmXh3JB3/BO/9z4v7gwhBX3tgBeBBDyZowIDAQABo1MwUTAdBgNVHQ4EFgQU9DLhS+n5J4Uw05wHlyAYk+YLSPowHwYDVR0jBBgwFoAU9DLhS+n5J4Uw05wHlyAYk+YLSPowDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAJt8KYOoJqgXTk01qGl6fc8nSNvreMNlIcc+sq71mYJ1GUlxx+vZ0Uf0NCnb3A4EQKMGh0A0eSTKjlLHHvHYVJOzrRziSu/RtAdA+2C809AG4YL7wtKg/JI2rBUI0ysZozFSNba6AnLq1K97LefC0pcniuBqV89SmMW2+So3v8yvrPzfKNXDAtR73nCkVLNuK5d8RZpOmgN4BHJ2VL34HYfMMwA/AE1JakWs8o5iu2+wlBrX0CQ/FFYxlcsLnFcv4K2+t/24IqGfNjymf3YizQ2Zs4h4dsg9Hn+HjxGR3bLOZGf3THFwP/A3VWH8tllxx9y9DKRm0eLJqg7MATah5Ag==", + "acs": [ + "https://engine.test2.example.org/authentication/stepup/consume-assertion" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa1.5" + }, + "assertion_encryption_enabled": false, + "second_factor_only": true, + "second_factor_only_nameid_patterns": [ + "urn:collab:person:*" + ], + "blacklisted_encryption_algorithms": [], + "allow_sso_on_2fa": true, + "set_sso_cookie_on_2fa": true + }, + { + "entity_id": "https://engine.test2.example.org/authentication/stepup/metadata/20230403", + "public_key": "MIIEjjCCAvYCCQCUtPzYh2xy0zANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCTkwxEDAOBgNVBAgMB1V0cmVjaHQxEDAOBgNVBAcMB1V0cmVjaHQxEjAQBgNVBAoMCVNVUkYgQi5WLjETMBEGA1UECwwKU1VSRmNvbmV4dDEsMCoGA1UEAwwjZW5naW5lLnRlc3QyLnN1cmZjb25leHQubmwgMjAyMzA0MDMwHhcNMjMwNDAzMDcwMjU4WhcNMjgwNDAyMDcwMjU4WjCBiDELMAkGA1UEBhMCTkwxEDAOBgNVBAgMB1V0cmVjaHQxEDAOBgNVBAcMB1V0cmVjaHQxEjAQBgNVBAoMCVNVUkYgQi5WLjETMBEGA1UECwwKU1VSRmNvbmV4dDEsMCoGA1UEAwwjZW5naW5lLnRlc3QyLnN1cmZjb25leHQubmwgMjAyMzA0MDMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDX6Fg5KzN/ay1tDf/lXXY9ifYW7Om4E7Ok19+9SE8M7GCYKXMC3oQQUg9vEvBsCgOfxpvWqQjMcrmjDWes0IvHom3lsDPRYpMku5rznntE49ijzupGrucSOupW/6WaKivAM13WgDmJLUwwgMWLvv4n24jS+gJ5UwgWyv7VXcMBftDTmXnnk9eU4o4U00haFPCKGD/7jITlyb540iR7OpVLx3fBYdNHd1aL8cbg82VDnBecaCHXwHoPctek70Q7n3JvkIc+zHSu33/qMby7ORZYVadqtuePyTr7aQtDl0EY9xLyKTa0RDl3GaT8JbO08KIAS3IhO+diZCpNZlxcYsQCYSmn89Kj1KRsJLe85zgfvYI3AUvsCmKxrmRoFHyUhnrA12h90Qcr1vnYOPXiCmjpdNf362J0XK/OtM7acxnnbTa+iVI7T3xYiaS5KXP2+42XOxCbZVbk/MPoK+BdzIEU2F5qLC62OxF2uWVVn/3HWnVf3phmE3qU/K/xy3PUaeECAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAE2+G3VJIN1ZKSAHB4eHh+0mzjy82GqOqD42b8cQHR1odvGRKp08UYIICd6ihM173w+G3/p7CV67J2a35crQCwb2XHsGUFrNtWxyYvxlXQ6LlVi2Obv3EcOc5gpee4Z46FONWfJERBIduDIScFjzYBYkWqGhSqDqfrk1F85v3oey6D7FA+i2zEHeLTdepGFavJVZVcvkX/3kYSdoLoXukimQpvQ7X8a3FwnVEYzkL1A9Fdu+tI3Ho24CxRiOVzNmbEORT1n9fQVJHffZipqZ5hkyGL7b7cKp2FXxBSlSA0koIImy1HgiXm+QDe8sWzHKiV8vYl5Kxdw8HKa/V83bpHxtTy8GJURFN4AMnSA+lWOcnURCtNdMQO4vgiRVddYR0glBMBotma0GXSFDv9pa+463aaKdvdRUPPxLReX+VkJmofLojgpuoaIBb4yohLyIlwff6Gf6ikDT+mVG1Mz8mOmNcGmWFPzShCoPy9ecpnWriSZLojrrJ2ZCVWsDqD678", + "acs": [ + "https://engine.test2.example.org/authentication/stepup/consume-assertion" + ], + "loa": { + "__default__": "http://test2.surfconext.nl/assurance/loa1.5" + }, + "assertion_encryption_enabled": false, + "second_factor_only": true, + "second_factor_only_nameid_patterns": [ + "urn:collab:person:*" + ], + "blacklisted_encryption_algorithms": [], + "allow_sso_on_2fa": true, + "set_sso_cookie_on_2fa": true + } + ], + "identity_providers": [ + ] + } +} diff --git a/manage-server/src/test/resources/stepup/middleware-institution.json b/manage-server/src/test/resources/stepup/middleware-institution.json new file mode 100644 index 00000000..5d1b93ea --- /dev/null +++ b/manage-server/src/test/resources/stepup/middleware-institution.json @@ -0,0 +1,235 @@ +{ + "open.nl": { + "use_ra_locations": true, + "show_raa_contact_information": true, + "verify_email": true, + "allowed_second_factors": [], + "number_of_tokens_per_identity": 9, + "self_vet": true, + "allow_self_asserted_tokens": true + }, + "institution-a.nl": { + "use_ra_locations": true, + "show_raa_contact_information": true, + "verify_email": true, + "allowed_second_factors": [], + "number_of_tokens_per_identity": 2, + "self_vet": true, + "allow_self_asserted_tokens": true, + "sso_on_2fa": true + }, + "institution-b.nl": { + "use_ra_locations": false, + "show_raa_contact_information": true, + "verify_email": false, + "allowed_second_factors": [], + "number_of_tokens_per_identity": 3, + "self_vet": false, + "allow_self_asserted_tokens": true, + "sso_on_2fa": true + }, + "institution-d.nl": { + "use_ra_locations": true, + "show_raa_contact_information": false, + "verify_email": true, + "allowed_second_factors": [ + "yubikey", + "tiqr" + ], + "number_of_tokens_per_identity": 1, + "self_vet": false, + "allow_self_asserted_tokens": false + }, + "pop.aai.open.nl": { + "use_ra_locations": true, + "show_raa_contact_information": true, + "verify_email": true, + "allowed_second_factors": [ + "yubikey", + "tiqr" + ], + "number_of_tokens_per_identity": 1, + "self_vet": true, + "allow_self_asserted_tokens": false + }, + "example.com": { + "use_ra_locations": false, + "show_raa_contact_information": true, + "verify_email": false, + "allowed_second_factors": [ + "sms", + "yubikey", + "tiqr", + "webauthn" + ], + "number_of_tokens_per_identity": 3, + "self_vet": true, + "allow_self_asserted_tokens": false, + "sso_on_2fa": true + }, + "institution-f.nl": { + "use_ra_locations": true, + "show_raa_contact_information": false, + "verify_email": false, + "allowed_second_factors": [], + "number_of_tokens_per_identity": 2, + "use_ra": [ + "institution-f.nl", + "institution-a.nl", + "institution-b.nl" + ], + "use_raa": [ + "institution-f.nl", + "institution-a.nl" + ], + "select_raa": [ + "institution-f.nl" + ], + "self_vet": false, + "allow_self_asserted_tokens": false + }, + "institution-g.nl": { + "use_ra_locations": true, + "show_raa_contact_information": true, + "verify_email": false, + "allowed_second_factors": [], + "number_of_tokens_per_identity": 2, + "use_ra": [ + "institution-g.nl" + ], + "use_raa": [ + "institution-g.nl" + ], + "select_raa": [ + "institution-g.nl", + "institution-h.nl" + ], + "self_vet": false, + "allow_self_asserted_tokens": false + }, + "institution-h.nl": { + "use_ra_locations": true, + "show_raa_contact_information": true, + "verify_email": false, + "allowed_second_factors": [], + "number_of_tokens_per_identity": 2, + "use_ra": [ + "institution-h.nl" + ], + "use_raa": [ + "institution-h.nl" + ], + "select_raa": [ + "institution-h.nl", + "institution-g.nl" + ], + "self_vet": true, + "allow_self_asserted_tokens": true + }, + "institution-v.nl": { + "use_ra_locations": true, + "show_raa_contact_information": true, + "verify_email": false, + "allowed_second_factors": [], + "number_of_tokens_per_identity": 2, + "use_ra": [], + "use_raa": [], + "select_raa": [ + "institution-a.nl", + "institution-b.nl" + ], + "self_vet": false, + "allow_self_asserted_tokens": false + }, + "institution-i.nl": { + "use_ra_locations": true, + "show_raa_contact_information": true, + "verify_email": false, + "allowed_second_factors": [], + "number_of_tokens_per_identity": 2, + "use_ra": [ + "institution-v.nl" + ], + "use_raa": [ + "institution-v.nl" + ], + "select_raa": [], + "self_vet": false, + "allow_self_asserted_tokens": false + }, + "hardewijk.nl": { + "use_ra_locations": true, + "show_raa_contact_information": true, + "verify_email": false, + "allowed_second_factors": [], + "number_of_tokens_per_identity": 9, + "use_ra": [ + "hardewijk.nl" + ], + "use_raa": [ + "hardewijk.nl" + ], + "select_raa": [ + "hardewijk.nl" + ], + "self_vet": true, + "allow_self_asserted_tokens": false + }, + "eduid.nl": { + "use_ra_locations": true, + "show_raa_contact_information": true, + "verify_email": false, + "allowed_second_factors": [], + "number_of_tokens_per_identity": 9, + "use_ra": [ + "eduid.nl", + "open.nl" + ], + "use_raa": [ + "eduid.nl", + "open.nl" + ], + "select_raa": [ + "eduid.nl" + ], + "self_vet": true, + "allow_self_asserted_tokens": false + }, + "0pr0h.onmicrosoft.com": { + "use_ra_locations": true, + "show_raa_contact_information": true, + "verify_email": false, + "allowed_second_factors": [], + "number_of_tokens_per_identity": 9, + "use_ra": [ + "0pr0h.onmicrosoft.com" + ], + "use_raa": [ + "0pr0h.onmicrosoft.com" + ], + "select_raa": [ + "0pr0h.onmicrosoft.com" + ], + "self_vet": true, + "allow_self_asserted_tokens": true + }, + "test.onmicrosoft.com": { + "use_ra_locations": true, + "show_raa_contact_information": true, + "verify_email": false, + "allowed_second_factors": [], + "number_of_tokens_per_identity": 9, + "use_ra": [ + "test.onmicrosoft.com" + ], + "use_raa": [ + "test.onmicrosoft.com" + ], + "select_raa": [ + "test.onmicrosoft.com" + ], + "self_vet": true, + "allow_self_asserted_tokens": true, + "sso_registration_bypass": true + } +} From 7ef325562cdb7e34df3ef5f8d69a7050fe93bff6 Mon Sep 17 00:00:00 2001 From: Okke Harsta Date: Fri, 13 Mar 2026 16:02:08 +0100 Subject: [PATCH 13/17] Fixed #627 build --- .../manage/hook/EntityIdDuplicationHook.java | 18 ++++++++++-------- .../hook/EntityIdDuplicationHookTest.java | 2 +- .../test/resources/json/meta_data_seed.json | 2 +- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/manage-server/src/main/java/manage/hook/EntityIdDuplicationHook.java b/manage-server/src/main/java/manage/hook/EntityIdDuplicationHook.java index 35b5e6b1..159602ad 100644 --- a/manage-server/src/main/java/manage/hook/EntityIdDuplicationHook.java +++ b/manage-server/src/main/java/manage/hook/EntityIdDuplicationHook.java @@ -47,20 +47,22 @@ private void validate(MetaData newMetaData, boolean isNew) { List entityTypes = new ArrayList<>(); EntityType entityType = fromType(newMetaData.getType()); switch (entityType) { - case EntityType.IDP: - case EntityType.PDP: - case EntityType.PROV: - case EntityType.STT: - case EntityType.ORG: + case IDP: + case PDP: + case PROV: + case STT: + case STEPUP: + case SFO: + case ORG: entityTypes.add(entityType); break; case EntityType.RS: entityTypes.add(entityType); entityTypes.add(EntityType.RP); break; - case EntityType.SP: - case EntityType.SRAM: - case EntityType.RP: + case SP: + case SRAM: + case RP: entityTypes.addAll(List.of(EntityType.SP, EntityType.SRAM, EntityType.RP)); break; diff --git a/manage-server/src/test/java/manage/hook/EntityIdDuplicationHookTest.java b/manage-server/src/test/java/manage/hook/EntityIdDuplicationHookTest.java index 674efa9c..9d18afef 100644 --- a/manage-server/src/test/java/manage/hook/EntityIdDuplicationHookTest.java +++ b/manage-server/src/test/java/manage/hook/EntityIdDuplicationHookTest.java @@ -59,7 +59,7 @@ void prePutValid() { void prePutInValid() { Arrays.stream(EntityType.values()) .forEach(entityType -> { - if (!EntityType.ORG.equals(entityType)) { + if (!EntityType.ORG.equals(entityType) ) { List allByType = metaDataRepository.findAllByType(entityType.getType()); if (!allByType.isEmpty()) { MetaData metaData = allByType.get(0); diff --git a/manage-server/src/test/resources/json/meta_data_seed.json b/manage-server/src/test/resources/json/meta_data_seed.json index 1e92131a..768d37c8 100644 --- a/manage-server/src/test/resources/json/meta_data_seed.json +++ b/manage-server/src/test/resources/json/meta_data_seed.json @@ -894,7 +894,7 @@ "https://acs.com", "https://acs2.org" ], - "loa": "http://test.surfconext.nl/assurance/loa2", + "loa": "http://test2.surfconext.nl/assurance/loa2", "assertion_encryption_enabled": false, "second_factor_only": true, "second_factor_only_nameid_patterns": [ From 4db9e3ac4421d897b58655fc07f5bc630d376e00 Mon Sep 17 00:00:00 2001 From: Okke Harsta Date: Fri, 13 Mar 2026 16:37:19 +0100 Subject: [PATCH 14/17] #627 Delete SFO and institution entities --- ...yMaintenance.jsx => EntityMaintenance.jsx} | 8 +++--- ...aintenance.scss => EntityMaintenance.scss} | 2 +- manage-gui/src/locale/en.js | 2 +- manage-gui/src/pages/Activity.jsx | 3 ++- manage-gui/src/pages/Detail.jsx | 25 +++++++++++-------- .../conf/MetaDataAutoConfiguration.java | 4 ++- .../manage/control/DatabaseController.java | 4 --- 7 files changed, 25 insertions(+), 23 deletions(-) rename manage-gui/src/components/metadata/{PolicyMaintenance.jsx => EntityMaintenance.jsx} (92%) rename manage-gui/src/components/metadata/{PolicyMaintenance.scss => EntityMaintenance.scss} (97%) diff --git a/manage-gui/src/components/metadata/PolicyMaintenance.jsx b/manage-gui/src/components/metadata/EntityMaintenance.jsx similarity index 92% rename from manage-gui/src/components/metadata/PolicyMaintenance.jsx rename to manage-gui/src/components/metadata/EntityMaintenance.jsx index 2b7d1ea5..0d97b962 100644 --- a/manage-gui/src/components/metadata/PolicyMaintenance.jsx +++ b/manage-gui/src/components/metadata/EntityMaintenance.jsx @@ -2,9 +2,9 @@ import React from "react"; import PropTypes from "prop-types"; import I18n from "../../locale/I18n"; -import "./PolicyMaintenance.scss"; +import "./EntityMaintenance.scss"; -export default class PolicyMaintenance extends React.PureComponent { +export default class EntityMaintenance extends React.PureComponent { constructor(props) { super(props); @@ -26,7 +26,7 @@ export default class PolicyMaintenance extends React.PureComponent { } = this.props; return ( -
+
{I18n.t("metadata_autocomplete.name")}{I18n.t("metadata_autocomplete.organization")}{I18n.t("metadata_autocomplete.organization")}{I18n.t("metadata_autocomplete.policy")}{I18n.t("metadata_autocomplete.institution")}{I18n.t("metadata_autocomplete.type")}{I18n.t("metadata_autocomplete.state")}{I18n.t("metadata_autocomplete.entity_id")}
{index + 1} - {!isPolicy && this.item(getNameForLanguage(item.data.metaDataFields), query)} - {isPolicy && this.item(item.data.name, query)} + {!isPolicy && !isInstitution && !isSfo && this.item(getNameForLanguage(item.data.metaDataFields), query)} + {(isPolicy || isInstitution || isSfo) && this.item(item.data.name, query)} - {!isPolicy && this.item(getOrganisationForLanguage(item.data.metaDataFields), query)} + {!isPolicy && isInstitution && this.item(getOrganisationForLanguage(item.data.metaDataFields), query)} + {isInstitution && this.item(item.data.identifier, query)} {isPolicy && I18n.t(`topBannerDetails.${item.data.type}`)} {item.type}
@@ -72,7 +72,7 @@ export default class PolicyMaintenance extends React.PureComponent { } } -PolicyMaintenance.propTypes = { +EntityMaintenance.propTypes = { metaData: PropTypes.object.isRequired, configuration: PropTypes.object.isRequired, revisionNote: PropTypes.string, diff --git a/manage-gui/src/components/metadata/PolicyMaintenance.scss b/manage-gui/src/components/metadata/EntityMaintenance.scss similarity index 97% rename from manage-gui/src/components/metadata/PolicyMaintenance.scss rename to manage-gui/src/components/metadata/EntityMaintenance.scss index e90ef98a..2fb8148d 100644 --- a/manage-gui/src/components/metadata/PolicyMaintenance.scss +++ b/manage-gui/src/components/metadata/EntityMaintenance.scss @@ -1,6 +1,6 @@ @use "../../stylesheets/vars.scss"; -.metadata-policy-maintenance { +.metadata-entity-maintenance { background-color: white; padding: 20px; diff --git a/manage-gui/src/locale/en.js b/manage-gui/src/locale/en.js index 34b8b2e2..adbc349c 100644 --- a/manage-gui/src/locale/en.js +++ b/manage-gui/src/locale/en.js @@ -80,7 +80,7 @@ const en = { policy_json: "JSON", policy_xml: "XACML", policies: "Policies ({{nbr}})", - policy_maintenance: "Maintenance", + entity_maintenance: "Maintenance", organisation: "Organisation", organisation_entity: "Connected entities", sp_organisation: "Organisation", diff --git a/manage-gui/src/pages/Activity.jsx b/manage-gui/src/pages/Activity.jsx index f13245dc..595ae439 100644 --- a/manage-gui/src/pages/Activity.jsx +++ b/manage-gui/src/pages/Activity.jsx @@ -23,7 +23,8 @@ export default class Activity extends React.Component { filteredActivity: [], types: ["saml20_idp", "saml20_sp", "oidc10_rp"], reverse: false, - allTypes: ["saml20_idp", "saml20_sp", "oidc10_rp", "oauth20_rs", "provisioning", "policy", "sram", "single_tenant_template"], + allTypes: ["saml20_idp", "saml20_sp", "oidc10_rp", "oauth20_rs", "provisioning", "policy", "sram", + "sfo", "institution"], limit: "25", query: "", loaded: false, diff --git a/manage-gui/src/pages/Detail.jsx b/manage-gui/src/pages/Detail.jsx index b05f33eb..23db76b7 100644 --- a/manage-gui/src/pages/Detail.jsx +++ b/manage-gui/src/pages/Detail.jsx @@ -60,7 +60,7 @@ import {isReadOnly} from "../utils/EntityTypes"; import PolicyXML from "../components/metadata/PolicyXML"; import PolicyJSON from "../components/metadata/PolicyJSON"; import ErrorDialog from "../components/ErrorDialog"; -import PolicyMaintenance from "../components/metadata/PolicyMaintenance"; +import EntityMaintenance from "../components/metadata/EntityMaintenance"; import SFO from "../components/metadata/SFO"; import Institution from "../components/metadata/Institution"; @@ -91,11 +91,13 @@ const tabsOrganisation = [ const tabsSfo = [ "sfo", + "entity_maintenance", "revisions" ] const tabsInstitutions = [ "institution", + "entity_maintenance", "revisions" ] @@ -147,7 +149,7 @@ const tabsPr = [ const tabsPolicy = [ "policy_form", - "policy_maintenance", + "entity_maintenance", "policy_xml", "policy_json", "revisions" @@ -509,11 +511,11 @@ class Detail extends React.PureComponent { required.forEach(req => { sfoErrors[req] = isEmpty(metaData.data[req]); }); - }else if ("institution" === type) { + } else if ("institution" === type) { required.forEach(req => { institutionErrors[req] = isEmpty(metaData.data[req]); }); - } else { + } else { Object.keys(metaData.data).forEach(key => { connectionErrors[key] = isEmpty(metaData.data[key]) && required.indexOf(key) > -1; }); @@ -1005,9 +1007,9 @@ class Detail extends React.PureComponent { onRemove={this.handleRemove} /> ); - case "policy_maintenance": + case "entity_maintenance": return ( - + onError={this.onError("institution")}/> ); default: throw new Error(`Unknown tab ${tab}`); @@ -1353,7 +1355,8 @@ class Detail extends React.PureComponent { {!isPolicy && !isOrganisation && !isStepUp && } - {isPolicy && !isOrganisation && !isStepUp && } + {isPolicy && !isOrganisation && !isStepUp && + } {(isSp || isRp) && } diff --git a/manage-server/src/main/java/manage/conf/MetaDataAutoConfiguration.java b/manage-server/src/main/java/manage/conf/MetaDataAutoConfiguration.java index 4cd0b1d7..68262cca 100644 --- a/manage-server/src/main/java/manage/conf/MetaDataAutoConfiguration.java +++ b/manage-server/src/main/java/manage/conf/MetaDataAutoConfiguration.java @@ -93,7 +93,9 @@ public void validate(Map data, String type) throws JsonProcessin schema.validate(jsonObject); } catch (ValidationException e) { //We want to log the actual violations - throw new CustomValidationException(e, data); + Map newData = new HashMap<>(data); + newData.put("type", type); + throw new CustomValidationException(e, newData); } } diff --git a/manage-server/src/main/java/manage/control/DatabaseController.java b/manage-server/src/main/java/manage/control/DatabaseController.java index dca10170..917d7aeb 100644 --- a/manage-server/src/main/java/manage/control/DatabaseController.java +++ b/manage-server/src/main/java/manage/control/DatabaseController.java @@ -9,19 +9,15 @@ import manage.model.Scope; import manage.policies.PdpPolicyDefinition; import manage.repository.MetaDataRepository; -import org.checkerframework.checker.nullness.qual.NonNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.graphql.GraphQlProperties; import org.springframework.core.env.Environment; import org.springframework.core.env.Profiles; import org.springframework.core.io.Resource; import org.springframework.data.mongodb.core.query.Query; -import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; -import org.springframework.http.RequestEntity; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Component; From 9adba680cf7ff9e19e6fdf7d9ee76755784d3500 Mon Sep 17 00:00:00 2001 From: Okke Harsta Date: Fri, 13 Mar 2026 16:59:11 +0100 Subject: [PATCH 15/17] Bugfix for errors --- manage-gui/src/pages/Detail.jsx | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/manage-gui/src/pages/Detail.jsx b/manage-gui/src/pages/Detail.jsx index 23db76b7..345da5e8 100644 --- a/manage-gui/src/pages/Detail.jsx +++ b/manage-gui/src/pages/Detail.jsx @@ -253,8 +253,11 @@ class Detail extends React.PureComponent { const isResourceServer = type === "oauth20_rs"; const isProvisioning = type === "provisioning"; const isPolicy = type === "policy"; + const isSfo = type === "sfo"; + const isInstitution = type === "institution"; const whiteListingType = isSp ? "saml20_idp" : "saml20_sp"; - const errorKeys = isSp ? tabsSp : isProvisioning ? tabsPr : isPolicy ? tabsPolicy : tabsIdP; + const errorKeys = isSp ? tabsSp : isProvisioning ? tabsPr : isPolicy ? tabsPolicy : isSfo ? tabsSfo : + isInstitution ? tabsInstitutions : tabsIdP ; const autoRefreshFeature = "AUTO_REFRESH"; if (this.props.clone) { //Clean all @@ -1233,7 +1236,7 @@ class Detail extends React.PureComponent { ); @@ -1295,9 +1298,9 @@ class Detail extends React.PureComponent { const isOrganisation = type === "organisation"; const isPolicy = type === "policy"; const nonExistentAllowedEntities = this.renderWarningNonExistentAllowedEntities(); - const importedFromEdugain = metaData.data.metaDataFields["coin:imported_from_edugain"]; - const excludedFromPush = metaData.data.metaDataFields["coin:exclude_from_push"]; - const pushEnabled = metaData.data.metaDataFields["coin:push_enabled"]; + const importedFromEdugain = metaData.data?.metaDataFields?.["coin:imported_from_edugain"]; + const excludedFromPush = metaData.data?.metaDataFields?.["coin:exclude_from_push"]; + const pushEnabled = metaData.data?.metaDataFields?.["coin:push_enabled"]; const isActive = metaData.data.active; const connectedEntities = whiteListing .filter(idp => idp.data.allowedall || (idp.data.allowedEntities || []).some(entity => entity.name === entityid)) From 1740405b01a34f5add1a71ac1e313254dc22e5a7 Mon Sep 17 00:00:00 2001 From: Okke Harsta Date: Mon, 16 Mar 2026 11:33:43 +0100 Subject: [PATCH 16/17] Stepu push --- .gitignore | 2 +- .../java/manage/control/DatabaseController.java | 15 +++++++++++---- .../manage/control/StepUpImportController.java | 10 ++++++++-- .../metadata_configuration/sfo.schema.json | 1 + 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index f8ddaed4..535920e4 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,4 @@ NOTES.md yarn.list spiel-data manage-server/src/test/resources/change_requests - +manage-server/src/test/resources/stepup/test2 diff --git a/manage-server/src/main/java/manage/control/DatabaseController.java b/manage-server/src/main/java/manage/control/DatabaseController.java index 917d7aeb..8fdf1f71 100644 --- a/manage-server/src/main/java/manage/control/DatabaseController.java +++ b/manage-server/src/main/java/manage/control/DatabaseController.java @@ -207,13 +207,20 @@ public ResponseEntity doPush(PushOptions pushOptions) { "/management/whitelist/replace", stepUpWhiteList ); try { - stepUpEndPoint.forEach((key, value) -> { + //The ordering matters + List ordering = List.of( + "/management/whitelist/replace", + "/management/institution-configuration", + "/management/configuration" + ); + ordering.forEach(key -> { ResponseEntity response = this.stepUpRestTemplate.postForEntity( stepUpPushUri + key, - value, + stepUpEndPoint.get(key), Map.class); boolean successFul = response.getStatusCode().is2xxSuccessful(); result.put("stepup", Map.of("status", successFul ? "OK" : "ERROR")); + }); } catch (HttpStatusCodeException e) { String message = String.format("Error in push to Stepup (%s) status %s and response %s", @@ -265,7 +272,7 @@ private Map pushPreviewSFO() { "set_sso_cookie_on_2fa", data.getOrDefault("set_sso_cookie_on_2fa", false) )) .toList(); - results.put("gateway", Map.of("service_providers", serviceProviders)); + results.put("gateway", Map.of("service_providers", serviceProviders, "identity_providers", List.of())); return results; } @@ -275,6 +282,7 @@ private Map> pushPreviewStepup() { "institutions", institutions.stream() .map(MetaData::getData) + .filter(data -> "full".equals(data.get("stepup-client"))) .map(data -> (String) data.get("identifier")) .toList() ); @@ -310,7 +318,6 @@ private List getSfoAttributes() { properties.add("allow_self_asserted_tokens"); properties.add("sso_on_2fa"); properties.add("use_ra_locations"); - properties.add("stepup-client"); return properties; } diff --git a/manage-server/src/main/java/manage/control/StepUpImportController.java b/manage-server/src/main/java/manage/control/StepUpImportController.java index f74c0c8f..fd77e445 100644 --- a/manage-server/src/main/java/manage/control/StepUpImportController.java +++ b/manage-server/src/main/java/manage/control/StepUpImportController.java @@ -49,8 +49,10 @@ public ResponseEntity> importStepUpServiceProviders(@RequestBody List metaDataList = serviceProviders.stream() .map(serviceProvider -> - metaDataService.doPost(new MetaData(EntityType.SFO.getType(), convertServiceProviderToMetaData(serviceProvider)) - , apiUser, false)) + { + MetaData metaData = new MetaData(EntityType.SFO.getType(), convertServiceProviderToMetaData(serviceProvider)); + return metaDataService.doPost(metaData, apiUser, false); + }) .toList(); return ResponseEntity.ok(metaDataList); } @@ -92,6 +94,8 @@ private Map convertInstitutionToMetaData(String entityId, Map convertServiceProviderToMetaData(Map sfo.put("blacklisted_encryption_algorithms", serviceProvider.getOrDefault("blacklisted_encryption_algorithms", List.of())); sfo.put("allow_sso_on_2fa", serviceProvider.getOrDefault("allow_sso_on_2fa", false)); sfo.put("set_sso_cookie_on_2fa", serviceProvider.getOrDefault("set_sso_cookie_on_2fa", false)); + //We don't use metaDataFields, but the GUI does expect it + sfo.put("metaDataFields", Map.of()); return sfo; } diff --git a/manage-server/src/main/resources/metadata_configuration/sfo.schema.json b/manage-server/src/main/resources/metadata_configuration/sfo.schema.json index bf7b4963..8c879f60 100644 --- a/manage-server/src/main/resources/metadata_configuration/sfo.schema.json +++ b/manage-server/src/main/resources/metadata_configuration/sfo.schema.json @@ -34,6 +34,7 @@ "http://test2.surfconext.nl/assurance/loa1", "http://test2.surfconext.nl/assurance/loa1.5", "http://test2.surfconext.nl/assurance/loa2", + "http://test2.surfconext.nl/assurance/sfo-level2", "http://test2.surfconext.nl/assurance/loa3" ], "default": "http://test.surfconext.nl/assurance/loa2" From fb345a154f7762c62f9aa79c92bbbcf756cdca64 Mon Sep 17 00:00:00 2001 From: Okke Harsta Date: Mon, 16 Mar 2026 11:47:01 +0100 Subject: [PATCH 17/17] Fixed tests --- .../src/test/java/manage/control/DatabaseControllerTest.java | 5 +++-- .../src/test/java/manage/control/MetaDataControllerTest.java | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/manage-server/src/test/java/manage/control/DatabaseControllerTest.java b/manage-server/src/test/java/manage/control/DatabaseControllerTest.java index 21aae953..1955f806 100644 --- a/manage-server/src/test/java/manage/control/DatabaseControllerTest.java +++ b/manage-server/src/test/java/manage/control/DatabaseControllerTest.java @@ -88,8 +88,9 @@ public void pushPreviewSFO() { assertEquals(6, ((List)sfoEntities.get("sraa")).size()); assertEquals(9, ((Map)sfoEntities.get("email_templates")).size()); Map gateway = (Map) sfoEntities.get("gateway"); - assertEquals(1, gateway.size()); + assertEquals(2, gateway.size()); assertEquals(1, ((List)gateway.get("service_providers")).size()); + assertEquals(0, ((List)gateway.get("identity_providers")).size()); } @Test @@ -117,6 +118,6 @@ public void pushPreviewInstitution() { .as(new TypeRef<>() { }); assertEquals(1, institutions.size()); - assertEquals(12, institutions.get("inst1").size()); + assertEquals(11, institutions.get("inst1").size()); } } diff --git a/manage-server/src/test/java/manage/control/MetaDataControllerTest.java b/manage-server/src/test/java/manage/control/MetaDataControllerTest.java index 1c6bbd52..710e9ded 100644 --- a/manage-server/src/test/java/manage/control/MetaDataControllerTest.java +++ b/manage-server/src/test/java/manage/control/MetaDataControllerTest.java @@ -984,7 +984,7 @@ public void validateWithErrors() throws java.io.IOException { .post("manage/api/internal/validate/metadata") .then() .statusCode(SC_BAD_REQUEST) - .body("validations", containsString("Validation failed for entity Duis ad do 2 (unknown type)")) + .body("validations", containsString("Validation failed for entity Duis ad do 2 (saml20_sp)")) .body("validations", containsString("#/metaDataFields/AssertionConsumerService:0:Binding: bogus is not a valid enum value")) .body("validations", containsString("in schema #/definitions/AssertionConsumerService_Binding")); } @@ -2144,7 +2144,7 @@ public void saveWithInvalidationNameIDFormat() { .as(new TypeRef<>() { }); String validations = (String) results.get("validations"); - assertTrue(validations.contains("Validation failed for entity https://unique_entity_id (unknown type)")); + assertTrue(validations.contains("Validation failed for entity https://unique_entity_id (saml20_idp)")); assertTrue(validations.contains("#/metaDataFields/NameIDFormat: urn:oasis:names:tc:SAML:2.0:nameid-format:bogus is not a valid enum value")); assertTrue(validations.contains("in schema #/definitions/NameIDFormat")); }
{typeMetaData}{state}{I18n.t(`topBannerDetails.${metaData.data.type}`)}{I18n.t(`topBannerDetails.${metaData.data.type}`)} {excludedFromPush ? I18n.t("topBannerDetails.staging") : I18n.t("topBannerDetails.production")}