From 80b1204f88022ccb3e0e8fff00ff260b444742cb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Aug 2024 12:51:50 -0500 Subject: [PATCH 1/9] Bump qs from 6.12.3 to 6.13.0 (#7099) Bumps [qs](https://github.com/ljharb/qs) from 6.12.3 to 6.13.0. - [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md) - [Commits](https://github.com/ljharb/qs/compare/v6.12.3...v6.13.0) --- updated-dependencies: - dependency-name: qs dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 8d3b429c06..a0acf699a3 100644 --- a/package.json +++ b/package.json @@ -194,7 +194,7 @@ "prom-client": "^15.1.3", "prop-types": "^15.8.1", "qrcode.react": "^3.1.0", - "qs": "^6.12.3", + "qs": "^6.13.0", "react": "^18.3.1", "react-color": "^2.19.3", "react-datepicker": "7.3.0", diff --git a/yarn.lock b/yarn.lock index 4f422fc234..0f12fc379c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15003,10 +15003,10 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" -qs@^6.10.0, qs@^6.11.0, qs@^6.11.2, qs@^6.12.3: - version "6.12.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.3.tgz#e43ce03c8521b9c7fd7f1f13e514e5ca37727754" - integrity sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ== +qs@^6.10.0, qs@^6.11.0, qs@^6.11.2, qs@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: side-channel "^1.0.6" From 1bfe72c312c125aeba962197368cc3734f2ad34b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Aug 2024 17:13:01 -0500 Subject: [PATCH 2/9] Bump @babel/parser from 7.25.0 to 7.25.3 (#7086) Bumps [@babel/parser](https://github.com/babel/babel/tree/HEAD/packages/babel-parser) from 7.25.0 to 7.25.3. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.25.3/packages/babel-parser) --- updated-dependencies: - dependency-name: "@babel/parser" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index a0acf699a3..c1dc7121c1 100644 --- a/package.json +++ b/package.json @@ -257,7 +257,7 @@ "@babel/helper-call-delegate": "^7.12.13", "@babel/helper-get-function-arity": "^7.16.7", "@babel/helper-string-parser": "^7.24.8", - "@babel/parser": "^7.24.8", + "@babel/parser": "^7.25.3", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", diff --git a/yarn.lock b/yarn.lock index 0f12fc379c..32ac048a44 100644 --- a/yarn.lock +++ b/yarn.lock @@ -929,10 +929,12 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.9", "@babel/parser@^7.24.4", "@babel/parser@^7.24.8", "@babel/parser@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.0.tgz#9fdc9237504d797b6e7b8f66e78ea7f570d256ad" - integrity sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.9", "@babel/parser@^7.24.4", "@babel/parser@^7.24.8", "@babel/parser@^7.25.0", "@babel/parser@^7.25.3": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.3.tgz#91fb126768d944966263f0657ab222a642b82065" + integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== + dependencies: + "@babel/types" "^7.25.2" "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.7": version "7.24.7" From 4e960ed42996527c3f054faa33970ff42a3d0e2f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Aug 2024 20:54:55 -0500 Subject: [PATCH 3/9] Bump @babel/traverse from 7.25.2 to 7.25.3 (#7081) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.25.2 to 7.25.3. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.25.3/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index c1dc7121c1..3506a4857f 100644 --- a/package.json +++ b/package.json @@ -270,7 +270,7 @@ "@babel/preset-react": "^7.24.7", "@babel/preset-typescript": "^7.24.7", "@babel/register": "^7.24.6", - "@babel/traverse": "^7.25.2", + "@babel/traverse": "^7.25.3", "@cfaester/enzyme-adapter-react-18": "^0.8.0", "@chromatic-com/storybook": "^1.6.1", "@cypress/react18": "^2.0.1", diff --git a/yarn.lock b/yarn.lock index 32ac048a44..364ab2a2f1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1777,14 +1777,14 @@ "@babel/parser" "^7.25.0" "@babel/types" "^7.25.0" -"@babel/traverse@^7.18.9", "@babel/traverse@^7.24.1", "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.2.tgz#1a0a4aef53177bead359ccd0c89f4426c805b2ae" - integrity sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ== +"@babel/traverse@^7.18.9", "@babel/traverse@^7.24.1", "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.3": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.3.tgz#f1b901951c83eda2f3e29450ce92743783373490" + integrity sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ== dependencies: "@babel/code-frame" "^7.24.7" "@babel/generator" "^7.25.0" - "@babel/parser" "^7.25.0" + "@babel/parser" "^7.25.3" "@babel/template" "^7.25.0" "@babel/types" "^7.25.2" debug "^4.3.1" From 4a433661b1368b673185b983276dda6d240a082d Mon Sep 17 00:00:00 2001 From: Santiago <71732018+Zasa-san@users.noreply.github.com> Date: Tue, 6 Aug 2024 14:59:12 -0300 Subject: [PATCH 4/9] 4632 - Update text selection library (#7103) * update package * specify usage of left click --- cypress/support/commands.js | 3 +-- package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/cypress/support/commands.js b/cypress/support/commands.js index a91eee9d56..ba0b1dd160 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -85,8 +85,7 @@ function setBaseAndExtent(...args) { Cypress.Commands.add('selection', { prevSubject: true }, (subject, fn) => { // eslint-disable-next-line cypress/unsafe-to-chain-command - cy.wrap(subject).trigger('mousedown').then(fn).trigger('mouseup'); - + cy.wrap(subject).trigger('mousedown', { button: 0 }).then(fn).trigger('mouseup', { button: 0 }); cy.document().trigger('selectionchange'); return cy.wrap(subject); }); diff --git a/package.json b/package.json index 3506a4857f..3a2806e946 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "@headlessui/react": "1.7.17", "@heroicons/react": "^2.1.5", "@hookform/error-message": "^2.0.1", - "@huridocs/react-text-selection-handler": "^0.2.11", + "@huridocs/react-text-selection-handler": "^0.3.0", "@loadable/component": "^5.16.4", "@popperjs/core": "^2.11.8", "@remix-run/router": "^1.16.1", diff --git a/yarn.lock b/yarn.lock index 364ab2a2f1..62e7f5d2a8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2248,10 +2248,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== -"@huridocs/react-text-selection-handler@^0.2.11": - version "0.2.11" - resolved "https://registry.yarnpkg.com/@huridocs/react-text-selection-handler/-/react-text-selection-handler-0.2.11.tgz#9aec24b20e98fec238dfbb271955b0a372a4f393" - integrity sha512-4Rk36gC2/ce32QpwiqqBKp5FKmPQ1IMBnJjvxrPDF7jwR7fcTD9RFPEIvoLCCoDV2Jhkt0CqVTA03h6mDFbP3w== +"@huridocs/react-text-selection-handler@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@huridocs/react-text-selection-handler/-/react-text-selection-handler-0.3.0.tgz#297c535fd96af6b16bcc70e37542de934083710c" + integrity sha512-kIhGlGT6oOos1nsVpK5RAPeJ3n6Vo7R6L9cqzACTqphfNb3/Jvwc5i77LtEk9mpWNoxmVHiO0M3mtHiz+Yv9vw== "@icons/material@^0.2.4": version "0.2.4" From 6680b7a224149e450c88d0fafebeeeaed6a82269 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 08:20:50 +0200 Subject: [PATCH 5/9] Bump @aws-sdk/client-s3 from 3.617.0 to 3.624.0 (#7104) Bumps [@aws-sdk/client-s3](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3) from 3.617.0 to 3.624.0. - [Release notes](https://github.com/aws/aws-sdk-js-v3/releases) - [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-s3/CHANGELOG.md) - [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.624.0/clients/client-s3) --- updated-dependencies: - dependency-name: "@aws-sdk/client-s3" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 543 +++++++++++++++++++++++++-------------------------- 2 files changed, 269 insertions(+), 276 deletions(-) diff --git a/package.json b/package.json index 3a2806e946..4a9960db3e 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "@types/react-dom": "^18.0.9 || ^18.3.0" }, "dependencies": { - "@aws-sdk/client-s3": "3.617.0", + "@aws-sdk/client-s3": "3.624.0", "@dnd-kit/core": "^6.1.0", "@dnd-kit/modifiers": "^7.0.0", "@dnd-kit/sortable": "^8.0.0", diff --git a/yarn.lock b/yarn.lock index 62e7f5d2a8..c1a40763b0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -105,282 +105,284 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.6.2" -"@aws-sdk/client-s3@3.617.0": - version "3.617.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.617.0.tgz#05c19d2813b75db20c99f5da1bdc79f89cf448f4" - integrity sha512-0f954CU42BhPFVRQCCBc1jAvV9N4XW9I3D4h7tJ8tzxft7fS62MSJkgxRIXNKgWKLeGR7DUbz+XGZ1R5e7pyjA== +"@aws-sdk/client-s3@3.624.0": + version "3.624.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.624.0.tgz#4114c3cb4bf820e0aa480d3783c3cd2ae2575737" + integrity sha512-A18tgTKC4ZTAwV8i3pkyAL1XDLgH7WGS5hZA/0FOntI5l+icztGZFF8CdeYWEAFnZA7SfHK6vmtEbIQDOzTTAA== dependencies: "@aws-crypto/sha1-browser" "5.2.0" "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.616.0" - "@aws-sdk/client-sts" "3.616.0" - "@aws-sdk/core" "3.616.0" - "@aws-sdk/credential-provider-node" "3.616.0" - "@aws-sdk/middleware-bucket-endpoint" "3.616.0" - "@aws-sdk/middleware-expect-continue" "3.616.0" - "@aws-sdk/middleware-flexible-checksums" "3.616.0" - "@aws-sdk/middleware-host-header" "3.616.0" + "@aws-sdk/client-sso-oidc" "3.624.0" + "@aws-sdk/client-sts" "3.624.0" + "@aws-sdk/core" "3.624.0" + "@aws-sdk/credential-provider-node" "3.624.0" + "@aws-sdk/middleware-bucket-endpoint" "3.620.0" + "@aws-sdk/middleware-expect-continue" "3.620.0" + "@aws-sdk/middleware-flexible-checksums" "3.620.0" + "@aws-sdk/middleware-host-header" "3.620.0" "@aws-sdk/middleware-location-constraint" "3.609.0" "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.616.0" - "@aws-sdk/middleware-sdk-s3" "3.617.0" - "@aws-sdk/middleware-signing" "3.616.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-sdk-s3" "3.624.0" "@aws-sdk/middleware-ssec" "3.609.0" - "@aws-sdk/middleware-user-agent" "3.616.0" + "@aws-sdk/middleware-user-agent" "3.620.0" "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/signature-v4-multi-region" "3.617.0" + "@aws-sdk/signature-v4-multi-region" "3.624.0" "@aws-sdk/types" "3.609.0" "@aws-sdk/util-endpoints" "3.614.0" "@aws-sdk/util-user-agent-browser" "3.609.0" "@aws-sdk/util-user-agent-node" "3.614.0" "@aws-sdk/xml-builder" "3.609.0" "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.2.7" - "@smithy/eventstream-serde-browser" "^3.0.4" + "@smithy/core" "^2.3.2" + "@smithy/eventstream-serde-browser" "^3.0.5" "@smithy/eventstream-serde-config-resolver" "^3.0.3" "@smithy/eventstream-serde-node" "^3.0.4" - "@smithy/fetch-http-handler" "^3.2.2" + "@smithy/fetch-http-handler" "^3.2.4" "@smithy/hash-blob-browser" "^3.1.2" "@smithy/hash-node" "^3.0.3" "@smithy/hash-stream-node" "^3.1.2" "@smithy/invalid-dependency" "^3.0.3" "@smithy/md5-js" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.4" - "@smithy/middleware-endpoint" "^3.0.5" - "@smithy/middleware-retry" "^3.0.10" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.14" "@smithy/middleware-serde" "^3.0.3" "@smithy/middleware-stack" "^3.0.3" "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.3" - "@smithy/protocol-http" "^4.0.4" - "@smithy/smithy-client" "^3.1.8" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" "@smithy/types" "^3.3.0" "@smithy/url-parser" "^3.0.3" "@smithy/util-base64" "^3.0.0" "@smithy/util-body-length-browser" "^3.0.0" "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.10" - "@smithy/util-defaults-mode-node" "^3.0.10" + "@smithy/util-defaults-mode-browser" "^3.0.14" + "@smithy/util-defaults-mode-node" "^3.0.14" "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" "@smithy/util-retry" "^3.0.3" - "@smithy/util-stream" "^3.1.0" + "@smithy/util-stream" "^3.1.3" "@smithy/util-utf8" "^3.0.0" "@smithy/util-waiter" "^3.1.2" tslib "^2.6.2" -"@aws-sdk/client-sso-oidc@3.616.0": - version "3.616.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.616.0.tgz#eb298b1c543465a5f7ebd28f8148d68654edf9d1" - integrity sha512-YY1hpYS/G1uRGjQf88dL8VLHkP/IjGxKeXdhy+JnzMdCkAWl3V9j0fEALw40NZe0x79gr6R2KUOUH/IKYQfUmg== +"@aws-sdk/client-sso-oidc@3.624.0": + version "3.624.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.624.0.tgz#33d0927519de333387ee07cb7f6483b0bd4db2f2" + integrity sha512-Ki2uKYJKKtfHxxZsiMTOvJoVRP6b2pZ1u3rcUb2m/nVgBPUfLdl8ZkGpqE29I+t5/QaS/sEdbn6cgMUZwl+3Dg== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.616.0" - "@aws-sdk/credential-provider-node" "3.616.0" - "@aws-sdk/middleware-host-header" "3.616.0" + "@aws-sdk/core" "3.624.0" + "@aws-sdk/credential-provider-node" "3.624.0" + "@aws-sdk/middleware-host-header" "3.620.0" "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.616.0" - "@aws-sdk/middleware-user-agent" "3.616.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" "@aws-sdk/region-config-resolver" "3.614.0" "@aws-sdk/types" "3.609.0" "@aws-sdk/util-endpoints" "3.614.0" "@aws-sdk/util-user-agent-browser" "3.609.0" "@aws-sdk/util-user-agent-node" "3.614.0" "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.2.7" - "@smithy/fetch-http-handler" "^3.2.2" + "@smithy/core" "^2.3.2" + "@smithy/fetch-http-handler" "^3.2.4" "@smithy/hash-node" "^3.0.3" "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.4" - "@smithy/middleware-endpoint" "^3.0.5" - "@smithy/middleware-retry" "^3.0.10" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.14" "@smithy/middleware-serde" "^3.0.3" "@smithy/middleware-stack" "^3.0.3" "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.3" - "@smithy/protocol-http" "^4.0.4" - "@smithy/smithy-client" "^3.1.8" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" "@smithy/types" "^3.3.0" "@smithy/url-parser" "^3.0.3" "@smithy/util-base64" "^3.0.0" "@smithy/util-body-length-browser" "^3.0.0" "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.10" - "@smithy/util-defaults-mode-node" "^3.0.10" + "@smithy/util-defaults-mode-browser" "^3.0.14" + "@smithy/util-defaults-mode-node" "^3.0.14" "@smithy/util-endpoints" "^2.0.5" "@smithy/util-middleware" "^3.0.3" "@smithy/util-retry" "^3.0.3" "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/client-sso@3.616.0": - version "3.616.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.616.0.tgz#d4bbb279daf6b4fde7ec2df9243526eb5119b0c0" - integrity sha512-hwW0u1f8U4dSloAe61/eupUiGd5Q13B72BuzGxvRk0cIpYX/2m0KBG8DDl7jW1b2QQ+CflTLpG2XUf2+vRJxGA== +"@aws-sdk/client-sso@3.624.0": + version "3.624.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.624.0.tgz#5d6bd308c1a6bb876c0bffc369c31a4916271219" + integrity sha512-EX6EF+rJzMPC5dcdsu40xSi2To7GSvdGQNIpe97pD9WvZwM9tRNQnNM4T6HA4gjV1L6Jwk8rBlG/CnveXtLEMw== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.616.0" - "@aws-sdk/middleware-host-header" "3.616.0" + "@aws-sdk/core" "3.624.0" + "@aws-sdk/middleware-host-header" "3.620.0" "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.616.0" - "@aws-sdk/middleware-user-agent" "3.616.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" "@aws-sdk/region-config-resolver" "3.614.0" "@aws-sdk/types" "3.609.0" "@aws-sdk/util-endpoints" "3.614.0" "@aws-sdk/util-user-agent-browser" "3.609.0" "@aws-sdk/util-user-agent-node" "3.614.0" "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.2.7" - "@smithy/fetch-http-handler" "^3.2.2" + "@smithy/core" "^2.3.2" + "@smithy/fetch-http-handler" "^3.2.4" "@smithy/hash-node" "^3.0.3" "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.4" - "@smithy/middleware-endpoint" "^3.0.5" - "@smithy/middleware-retry" "^3.0.10" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.14" "@smithy/middleware-serde" "^3.0.3" "@smithy/middleware-stack" "^3.0.3" "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.3" - "@smithy/protocol-http" "^4.0.4" - "@smithy/smithy-client" "^3.1.8" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" "@smithy/types" "^3.3.0" "@smithy/url-parser" "^3.0.3" "@smithy/util-base64" "^3.0.0" "@smithy/util-body-length-browser" "^3.0.0" "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.10" - "@smithy/util-defaults-mode-node" "^3.0.10" + "@smithy/util-defaults-mode-browser" "^3.0.14" + "@smithy/util-defaults-mode-node" "^3.0.14" "@smithy/util-endpoints" "^2.0.5" "@smithy/util-middleware" "^3.0.3" "@smithy/util-retry" "^3.0.3" "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/client-sts@3.616.0": - version "3.616.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.616.0.tgz#9616c3693d9ae5232ccc12d570f46abe4ec49d2b" - integrity sha512-FP7i7hS5FpReqnysQP1ukQF1OUWy8lkomaOnbu15H415YUrfCp947SIx6+BItjmx+esKxPkEjh/fbCVzw2D6hQ== +"@aws-sdk/client-sts@3.624.0": + version "3.624.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.624.0.tgz#ee19e08835a04d173f4997285e26558ac431d938" + integrity sha512-k36fLZCb2nfoV/DKK3jbRgO/Yf7/R80pgYfMiotkGjnZwDmRvNN08z4l06L9C+CieazzkgRxNUzyppsYcYsQaw== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.616.0" - "@aws-sdk/core" "3.616.0" - "@aws-sdk/credential-provider-node" "3.616.0" - "@aws-sdk/middleware-host-header" "3.616.0" + "@aws-sdk/client-sso-oidc" "3.624.0" + "@aws-sdk/core" "3.624.0" + "@aws-sdk/credential-provider-node" "3.624.0" + "@aws-sdk/middleware-host-header" "3.620.0" "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.616.0" - "@aws-sdk/middleware-user-agent" "3.616.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" "@aws-sdk/region-config-resolver" "3.614.0" "@aws-sdk/types" "3.609.0" "@aws-sdk/util-endpoints" "3.614.0" "@aws-sdk/util-user-agent-browser" "3.609.0" "@aws-sdk/util-user-agent-node" "3.614.0" "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.2.7" - "@smithy/fetch-http-handler" "^3.2.2" + "@smithy/core" "^2.3.2" + "@smithy/fetch-http-handler" "^3.2.4" "@smithy/hash-node" "^3.0.3" "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.4" - "@smithy/middleware-endpoint" "^3.0.5" - "@smithy/middleware-retry" "^3.0.10" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.14" "@smithy/middleware-serde" "^3.0.3" "@smithy/middleware-stack" "^3.0.3" "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.3" - "@smithy/protocol-http" "^4.0.4" - "@smithy/smithy-client" "^3.1.8" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" "@smithy/types" "^3.3.0" "@smithy/url-parser" "^3.0.3" "@smithy/util-base64" "^3.0.0" "@smithy/util-body-length-browser" "^3.0.0" "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.10" - "@smithy/util-defaults-mode-node" "^3.0.10" + "@smithy/util-defaults-mode-browser" "^3.0.14" + "@smithy/util-defaults-mode-node" "^3.0.14" "@smithy/util-endpoints" "^2.0.5" "@smithy/util-middleware" "^3.0.3" "@smithy/util-retry" "^3.0.3" "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/core@3.616.0": - version "3.616.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.616.0.tgz#4d7f79cd62e545e6db677216a17dab84c2b4cda3" - integrity sha512-O/urkh2kECs/IqZIVZxyeyHZ7OR2ZWhLNK7btsVQBQvJKrEspLrk/Fp20Qfg5JDerQfBN83ZbyRXLJOOucdZpw== +"@aws-sdk/core@3.624.0": + version "3.624.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.624.0.tgz#ff0d7745bd662f53d99dbb7293416a45ddde5aa6" + integrity sha512-WyFmPbhRIvtWi7hBp8uSFy+iPpj8ccNV/eX86hwF4irMjfc/FtsGVIAeBXxXM/vGCjkdfEzOnl+tJ2XACD4OXg== dependencies: - "@smithy/core" "^2.2.7" - "@smithy/protocol-http" "^4.0.4" - "@smithy/signature-v4" "^4.0.0" - "@smithy/smithy-client" "^3.1.8" + "@smithy/core" "^2.3.2" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" "@smithy/types" "^3.3.0" - fast-xml-parser "4.2.5" + "@smithy/util-middleware" "^3.0.3" + fast-xml-parser "4.4.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-env@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.609.0.tgz#b3f32e5a8ff8b541e151eadadfb60283aa3d835e" - integrity sha512-v69ZCWcec2iuV9vLVJMa6fAb5xwkzN4jYIT8yjo2c4Ia/j976Q+TPf35Pnz5My48Xr94EFcaBazrWedF+kwfuQ== +"@aws-sdk/credential-provider-env@3.620.1": + version "3.620.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz#d4692c49a65ebc11dae3f7f8b053fee9268a953c" + integrity sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg== dependencies: "@aws-sdk/types" "3.609.0" "@smithy/property-provider" "^3.1.3" "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-http@3.616.0": - version "3.616.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.616.0.tgz#207cbe3e74c6c55208fd4bf0ff59df6e765d2c41" - integrity sha512-1rgCkr7XvEMBl7qWCo5BKu3yAxJs71dRaZ55Xnjte/0ZHH6Oc93ZrHzyYy6UH6t0nZrH+FAuw7Yko2YtDDwDeg== +"@aws-sdk/credential-provider-http@3.622.0": + version "3.622.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.622.0.tgz#db481fdef859849d07dd5870894f45df2debab3d" + integrity sha512-VUHbr24Oll1RK3WR8XLUugLpgK9ZuxEm/NVeVqyFts1Ck9gsKpRg1x4eH7L7tW3SJ4TDEQNMbD7/7J+eoL2svg== dependencies: "@aws-sdk/types" "3.609.0" - "@smithy/fetch-http-handler" "^3.2.2" - "@smithy/node-http-handler" "^3.1.3" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/node-http-handler" "^3.1.4" "@smithy/property-provider" "^3.1.3" - "@smithy/protocol-http" "^4.0.4" - "@smithy/smithy-client" "^3.1.8" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" "@smithy/types" "^3.3.0" - "@smithy/util-stream" "^3.1.0" + "@smithy/util-stream" "^3.1.3" tslib "^2.6.2" -"@aws-sdk/credential-provider-ini@3.616.0": - version "3.616.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.616.0.tgz#5bb726e969908a28e960d65016e7440b78056209" - integrity sha512-5gQdMr9cca3xV7FF2SxpxWGH2t6+t4o+XBGiwsHm8muEjf4nUmw7Ij863x25Tjt2viPYV0UStczSb5Sihp7bkA== +"@aws-sdk/credential-provider-ini@3.624.0": + version "3.624.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.624.0.tgz#af4b485e9ceeca97e1681b2402c50dc192c1dc06" + integrity sha512-mMoNIy7MO2WTBbdqMyLpbt6SZpthE6e0GkRYpsd0yozPt0RZopcBhEh+HG1U9Y1PVODo+jcMk353vAi61CfnhQ== dependencies: - "@aws-sdk/credential-provider-env" "3.609.0" - "@aws-sdk/credential-provider-http" "3.616.0" - "@aws-sdk/credential-provider-process" "3.614.0" - "@aws-sdk/credential-provider-sso" "3.616.0" - "@aws-sdk/credential-provider-web-identity" "3.609.0" + "@aws-sdk/credential-provider-env" "3.620.1" + "@aws-sdk/credential-provider-http" "3.622.0" + "@aws-sdk/credential-provider-process" "3.620.1" + "@aws-sdk/credential-provider-sso" "3.624.0" + "@aws-sdk/credential-provider-web-identity" "3.621.0" "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.1.4" + "@smithy/credential-provider-imds" "^3.2.0" "@smithy/property-provider" "^3.1.3" "@smithy/shared-ini-file-loader" "^3.1.4" "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-node@3.616.0": - version "3.616.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.616.0.tgz#0887ab7b9bab3031fe3ed8aaee2d4abb5091a67f" - integrity sha512-Se+u6DAxjDPjKE3vX1X2uxjkWgGq69BTo0uTB0vDUiWwBVgh16s9BsBhSAlKEH1CCbbJHvOg4YdTrzjwzqyClg== - dependencies: - "@aws-sdk/credential-provider-env" "3.609.0" - "@aws-sdk/credential-provider-http" "3.616.0" - "@aws-sdk/credential-provider-ini" "3.616.0" - "@aws-sdk/credential-provider-process" "3.614.0" - "@aws-sdk/credential-provider-sso" "3.616.0" - "@aws-sdk/credential-provider-web-identity" "3.609.0" +"@aws-sdk/credential-provider-node@3.624.0": + version "3.624.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.624.0.tgz#d7ebe191194eb09764b313c1f4e259cb42795079" + integrity sha512-vYyGK7oNpd81BdbH5IlmQ6zfaQqU+rPwsKTDDBeLRjshtrGXOEpfoahVpG9PX0ibu32IOWp4ZyXBNyVrnvcMOw== + dependencies: + "@aws-sdk/credential-provider-env" "3.620.1" + "@aws-sdk/credential-provider-http" "3.622.0" + "@aws-sdk/credential-provider-ini" "3.624.0" + "@aws-sdk/credential-provider-process" "3.620.1" + "@aws-sdk/credential-provider-sso" "3.624.0" + "@aws-sdk/credential-provider-web-identity" "3.621.0" "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.1.4" + "@smithy/credential-provider-imds" "^3.2.0" "@smithy/property-provider" "^3.1.3" "@smithy/shared-ini-file-loader" "^3.1.4" "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-process@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.614.0.tgz#b6b9382346dfe51c8fb448595ae55b930532c897" - integrity sha512-Q0SI0sTRwi8iNODLs5+bbv8vgz8Qy2QdxbCHnPk/6Cx6LMf7i3dqmWquFbspqFRd8QiqxStrblwxrUYZi09tkA== +"@aws-sdk/credential-provider-process@3.620.1": + version "3.620.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz#10387cf85400420bb4bbda9cc56937dcc6d6d0ee" + integrity sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg== dependencies: "@aws-sdk/types" "3.609.0" "@smithy/property-provider" "^3.1.3" @@ -388,12 +390,12 @@ "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@3.616.0": - version "3.616.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.616.0.tgz#051b1a2eb31fa30866f2c1e95bbcf965911b16c3" - integrity sha512-3rsWs9GBi8Z8Gps5ROwqguxtw+J6OIg1vawZMLRNMqqZoBvbOToe9wEnpid8ylU+27+oG8uibJNlNuRyXApUjw== +"@aws-sdk/credential-provider-sso@3.624.0": + version "3.624.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.624.0.tgz#4a617577d04b23f80e86e1f76cc15dc3e9895c21" + integrity sha512-A02bayIjU9APEPKr3HudrFHEx0WfghoSPsPopckDkW7VBqO4wizzcxr75Q9A3vNX+cwg0wCN6UitTNe6pVlRaQ== dependencies: - "@aws-sdk/client-sso" "3.616.0" + "@aws-sdk/client-sso" "3.624.0" "@aws-sdk/token-providers" "3.614.0" "@aws-sdk/types" "3.609.0" "@smithy/property-provider" "^3.1.3" @@ -401,60 +403,60 @@ "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.609.0.tgz#d29222d6894347ee89c781ea090d388656df1d2a" - integrity sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg== +"@aws-sdk/credential-provider-web-identity@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz#b25878c0a05dad60cd5f91e7e5a31a145c2f14be" + integrity sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w== dependencies: "@aws-sdk/types" "3.609.0" "@smithy/property-provider" "^3.1.3" "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/middleware-bucket-endpoint@3.616.0": - version "3.616.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.616.0.tgz#76b32df698a6d9fddeb64d166df477d4632ce0f9" - integrity sha512-KZv78s8UE7+s3qZCfG3pE9U9XV5WTP478aNWis5gDXmsb5LF7QWzEeR8kve5dnjNlK6qVQ33v+mUZa6lR5PwMw== +"@aws-sdk/middleware-bucket-endpoint@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz#c5dc0e98b6209a91479cad6c2c74fbc5a3429fab" + integrity sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg== dependencies: "@aws-sdk/types" "3.609.0" "@aws-sdk/util-arn-parser" "3.568.0" "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.0.4" + "@smithy/protocol-http" "^4.1.0" "@smithy/types" "^3.3.0" "@smithy/util-config-provider" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-expect-continue@3.616.0": - version "3.616.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.616.0.tgz#02e4dcee8044c60050dcf4da221b3bdbae36ccf8" - integrity sha512-IM1pfJPm7pDUXa55js9bnGjS8o3ldzDwf95mL9ZAYdEsm10q6i0ZxZbbro2gTq25Ap5ykdeeS34lOSzIqPiW1A== +"@aws-sdk/middleware-expect-continue@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz#6a362c0f0696dc6749108a33de9998e0fa6b50ec" + integrity sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A== dependencies: "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.0.4" + "@smithy/protocol-http" "^4.1.0" "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/middleware-flexible-checksums@3.616.0": - version "3.616.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.616.0.tgz#7fac7de33f366fb769ba4d3f1f29129456908339" - integrity sha512-Mrco/dURoTXVqwcnYRcyrFaPTIg36ifg2PK0kUYfSVTGEOClZOQXlVG5zYCZoo3yEMgy/gLT907FjUQxwoifIw== +"@aws-sdk/middleware-flexible-checksums@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz#42cd48cdc0ad9639545be000bf537969210ce8c5" + integrity sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA== dependencies: "@aws-crypto/crc32" "5.2.0" "@aws-crypto/crc32c" "5.2.0" "@aws-sdk/types" "3.609.0" "@smithy/is-array-buffer" "^3.0.0" - "@smithy/protocol-http" "^4.0.4" + "@smithy/protocol-http" "^4.1.0" "@smithy/types" "^3.3.0" "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-host-header@3.616.0": - version "3.616.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.616.0.tgz#542dac3370374ba3733c96a6bb153e6fe53fafe6" - integrity sha512-mhNfHuGhCDZwYCABebaOvTgOM44UCZZRq2cBpgPZLVKP0ydAv5aFHXv01goexxXHqgHoEGx0uXWxlw0s2EpFDg== +"@aws-sdk/middleware-host-header@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz#b561d419a08a984ba364c193376b482ff5224d74" + integrity sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg== dependencies: "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.0.4" + "@smithy/protocol-http" "^4.1.0" "@smithy/types" "^3.3.0" tslib "^2.6.2" @@ -476,44 +478,34 @@ "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/middleware-recursion-detection@3.616.0": - version "3.616.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.616.0.tgz#fa87c9d77c6f85d02b9cf8394f52b2d6334a63af" - integrity sha512-LQKAcrZRrR9EGez4fdCIVjdn0Ot2HMN12ChnoMGEU6oIxnQ2aSC7iASFFCV39IYfeMh7iSCPj7Wopqw8rAouzg== +"@aws-sdk/middleware-recursion-detection@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz#f8270dfff843fd756be971e5673f89c6a24c6513" + integrity sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w== dependencies: "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.0.4" + "@smithy/protocol-http" "^4.1.0" "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/middleware-sdk-s3@3.617.0": - version "3.617.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.617.0.tgz#515082f2d67bb1fe61e34d0d1205e9034b5c0087" - integrity sha512-zVOS6sNGcLGhq7i+5POmVqmSPNmrQYDFsynpnWMSLsNaej+xvkdSOnytLrUvag3Du4kAxfO5NNIC0GuNj9lcCg== +"@aws-sdk/middleware-sdk-s3@3.624.0": + version "3.624.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.624.0.tgz#770cbc3f91b99ed70de6f7b9552917de99ee7e78" + integrity sha512-HUiaZ6+JXcG0qQda10ZxDGJvbT71YUp1zX+oikIsfTUeq0N75O82OY3Noqd7cyjEVtsGSo/y0e6U3aV1hO+wPw== dependencies: + "@aws-sdk/core" "3.624.0" "@aws-sdk/types" "3.609.0" "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/core" "^2.3.2" "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.0.4" - "@smithy/signature-v4" "^4.0.0" - "@smithy/smithy-client" "^3.1.8" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" "@smithy/types" "^3.3.0" "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-stream" "^3.1.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-signing@3.616.0": - version "3.616.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.616.0.tgz#7270662413c6c092c2680aa37a80358e8338ec35" - integrity sha512-wwzZFlXyURwo40oz1NmufreQa5DqwnCF8hR8tIP5+oKCyhbkmlmv8xG4Wn51bzY2WEbQhvFebgZSFTEvelCoCg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/protocol-http" "^4.0.4" - "@smithy/signature-v4" "^4.0.0" - "@smithy/types" "^3.3.0" "@smithy/util-middleware" "^3.0.3" + "@smithy/util-stream" "^3.1.3" + "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" "@aws-sdk/middleware-ssec@3.609.0": @@ -525,14 +517,14 @@ "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/middleware-user-agent@3.616.0": - version "3.616.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.616.0.tgz#fe11d62e9cdc96a354c37968499fa32637a70f45" - integrity sha512-iMcAb4E+Z3vuEcrDsG6T2OBNiqWAquwahP9qepHqfmnmJqHr1mSHtXDYTGBNid31+621sUQmneUQ+fagpGAe4w== +"@aws-sdk/middleware-user-agent@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.620.0.tgz#1fe3104f04f576a942cf0469bfbd73c38eef3d9e" + integrity sha512-bvS6etn+KsuL32ubY5D3xNof1qkenpbJXf/ugGXbg0n98DvDFQ/F+SMLxHgbnER5dsKYchNnhmtI6/FC3HFu/A== dependencies: "@aws-sdk/types" "3.609.0" "@aws-sdk/util-endpoints" "3.614.0" - "@smithy/protocol-http" "^4.0.4" + "@smithy/protocol-http" "^4.1.0" "@smithy/types" "^3.3.0" tslib "^2.6.2" @@ -548,15 +540,15 @@ "@smithy/util-middleware" "^3.0.3" tslib "^2.6.2" -"@aws-sdk/signature-v4-multi-region@3.617.0": - version "3.617.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.617.0.tgz#2c28e5cb2e937140ee7293000443cbf857515f4c" - integrity sha512-kGbLs9q0/ziuzA1huf0BBh05ChxDeZ8ZWc/kedb80ocq6izOLaGgeqqUR8oB0ianwjel4AQq/iv1fsOIt3wmAA== +"@aws-sdk/signature-v4-multi-region@3.624.0": + version "3.624.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.624.0.tgz#86829acc07871758a592dd50812ca4d370f641ed" + integrity sha512-gu1SfCyUPnq4s0AI1xdAl0whHwhkTyltg4QZWc4vnZvEVudCpJVVxEcroUHYQIO51YyVUT9jSMS1SVRe5VqPEw== dependencies: - "@aws-sdk/middleware-sdk-s3" "3.617.0" + "@aws-sdk/middleware-sdk-s3" "3.624.0" "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.0.4" - "@smithy/signature-v4" "^4.0.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" "@smithy/types" "^3.3.0" tslib "^2.6.2" @@ -3474,24 +3466,24 @@ "@smithy/util-middleware" "^3.0.3" tslib "^2.6.2" -"@smithy/core@^2.2.7": - version "2.2.8" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.2.8.tgz#d1edc47584497c58aec741b0a2814cdc1db7b72c" - integrity sha512-1Y0XX0Ucyg0LWTfTVLWpmvSRtFRniykUl3dQ0os1sTd03mKDudR6mVyX+2ak1phwPXx2aEWMAAdW52JNi0mc3A== +"@smithy/core@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.3.2.tgz#4a1e3da41d2a3a494cbc6bd1fc6eeb26b2e27184" + integrity sha512-in5wwt6chDBcUv1Lw1+QzZxN9fBffi+qOixfb65yK4sDuKG7zAUO9HAFqmVzsZM3N+3tTyvZjtnDXePpvp007Q== dependencies: - "@smithy/middleware-endpoint" "^3.0.5" - "@smithy/middleware-retry" "^3.0.11" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.14" "@smithy/middleware-serde" "^3.0.3" - "@smithy/protocol-http" "^4.0.4" - "@smithy/smithy-client" "^3.1.9" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" "@smithy/types" "^3.3.0" "@smithy/util-middleware" "^3.0.3" tslib "^2.6.2" -"@smithy/credential-provider-imds@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.4.tgz#797116f68cc3ffa658469558cc014f25d9febe09" - integrity sha512-NKyH01m97Xa5xf3pB2QOF3lnuE8RIK0hTVNU5zvZAwZU8uspYO4DHQVlK+Y5gwSrujTfHvbfd1D9UFJAc0iYKQ== +"@smithy/credential-provider-imds@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz#0e0e7ddaff1a8633cb927aee1056c0ab506b7ecf" + integrity sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA== dependencies: "@smithy/node-config-provider" "^3.1.4" "@smithy/property-provider" "^3.1.3" @@ -3509,7 +3501,7 @@ "@smithy/util-hex-encoding" "^3.0.0" tslib "^2.6.2" -"@smithy/eventstream-serde-browser@^3.0.4": +"@smithy/eventstream-serde-browser@^3.0.5": version "3.0.5" resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.5.tgz#3e971afd2b8a02a098af8decc4b9e3f35296d6a2" integrity sha512-dEyiUYL/ekDfk+2Ra4GxV+xNnFoCmk1nuIXg+fMChFTrM2uI/1r9AdiTYzPqgb72yIv/NtAj6C3dG//1wwgakQ== @@ -3544,12 +3536,12 @@ "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/fetch-http-handler@^3.2.2": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.2.tgz#67e29be8815dcf793d14186cae00bccaeffb963c" - integrity sha512-3LaWlBZObyGrOOd7e5MlacnAKEwFBmAeiW/TOj2eR9475Vnq30uS2510+tnKbxrGjROfNdOhQqGo5j3sqLT6bA== +"@smithy/fetch-http-handler@^3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz#c754de7e0ff2541b73ac9ba7cc955940114b3d62" + integrity sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg== dependencies: - "@smithy/protocol-http" "^4.0.4" + "@smithy/protocol-http" "^4.1.0" "@smithy/querystring-builder" "^3.0.3" "@smithy/types" "^3.3.0" "@smithy/util-base64" "^3.0.0" @@ -3615,19 +3607,19 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@smithy/middleware-content-length@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.4.tgz#7c5804775da0d3d0c045d52293298f608e72311b" - integrity sha512-wySGje/KfhsnF8YSh9hP16pZcl3C+X6zRsvSfItQGvCyte92LliilU3SD0nR7kTlxnAJwxY8vE/k4Eoezj847Q== +"@smithy/middleware-content-length@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz#1680aa4fb2a1c0505756103c9a5c2916307d9035" + integrity sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw== dependencies: - "@smithy/protocol-http" "^4.0.4" + "@smithy/protocol-http" "^4.1.0" "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/middleware-endpoint@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.5.tgz#76e8a559e891282d3ede9ab8e228e66cbee89b21" - integrity sha512-V4acqqrh5tDxUEGVTOgf2lYMZqPQsoGntCrjrJZEeBzEzDry2d2vcI1QCXhGltXPPY+BMc6eksZMguA9fIY8vA== +"@smithy/middleware-endpoint@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz#9b8a496d87a68ec43f3f1a0139868d6765a88119" + integrity sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw== dependencies: "@smithy/middleware-serde" "^3.0.3" "@smithy/node-config-provider" "^3.1.4" @@ -3637,15 +3629,15 @@ "@smithy/util-middleware" "^3.0.3" tslib "^2.6.2" -"@smithy/middleware-retry@^3.0.10", "@smithy/middleware-retry@^3.0.11": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.11.tgz#4a8137a45247233aa83707ff9da3b8ee3dfefbba" - integrity sha512-/TIRWmhwMpv99JCGuMhJPnH7ggk/Lah7s/uNDyr7faF02BxNsyD/fz9Tw7pgCf9tYOKgjimm2Qml1Aq1pbkt6g== +"@smithy/middleware-retry@^3.0.14": + version "3.0.14" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.14.tgz#739e8bac6e465e0cda26446999db614418e79da3" + integrity sha512-7ZaWZJOjUxa5hgmuMspyt8v/zVsh0GXYuF7OvCmdcbVa/xbnKQoYC+uYKunAqRGTkxjOyuOCw9rmFUFOqqC0eQ== dependencies: "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.0.4" + "@smithy/protocol-http" "^4.1.0" "@smithy/service-error-classification" "^3.0.3" - "@smithy/smithy-client" "^3.1.9" + "@smithy/smithy-client" "^3.1.12" "@smithy/types" "^3.3.0" "@smithy/util-middleware" "^3.0.3" "@smithy/util-retry" "^3.0.3" @@ -3678,13 +3670,13 @@ "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/node-http-handler@^3.1.2", "@smithy/node-http-handler@^3.1.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.3.tgz#1b729a8a2ca6b84618a1e92c53c49a1fcf3a3e5a" - integrity sha512-UiKZm8KHb/JeOPzHZtRUfyaRDO1KPKPpsd7iplhiwVGOeVdkiVJ5bVe7+NhWREMOKomrDIDdSZyglvMothLg0Q== +"@smithy/node-http-handler@^3.1.2", "@smithy/node-http-handler@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz#be4195e45639e690d522cd5f11513ea822ff9d5f" + integrity sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg== dependencies: "@smithy/abort-controller" "^3.1.1" - "@smithy/protocol-http" "^4.0.4" + "@smithy/protocol-http" "^4.1.0" "@smithy/querystring-builder" "^3.0.3" "@smithy/types" "^3.3.0" tslib "^2.6.2" @@ -3697,10 +3689,10 @@ "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/protocol-http@^4.0.4": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.0.4.tgz#f784a03460b971cf10027d0e7f6673835ed7e637" - integrity sha512-fAA2O4EFyNRyYdFLVIv5xMMeRb+3fRKc/Rt2flh5k831vLvUmNFXcydeg7V3UeEhGURJI4c1asmGJBjvmF6j8Q== +"@smithy/protocol-http@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.0.tgz#23519d8f45bf4f33960ea5415847bc2b620a010b" + integrity sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA== dependencies: "@smithy/types" "^3.3.0" tslib "^2.6.2" @@ -3737,12 +3729,13 @@ "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/signature-v4@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.0.0.tgz#0583baba98819eab49e028166b186ce927c42128" - integrity sha512-ervYjQ+ZvmNG51Ui77IOTPri7nOyo8Kembzt9uwwlmtXJPmFXvslOahbA1blvAVs7G0KlYMiOBog1rAt7RVXxg== +"@smithy/signature-v4@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.1.0.tgz#251ff43dc1f4ad66776122732fea9e56efc56443" + integrity sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag== dependencies: "@smithy/is-array-buffer" "^3.0.0" + "@smithy/protocol-http" "^4.1.0" "@smithy/types" "^3.3.0" "@smithy/util-hex-encoding" "^3.0.0" "@smithy/util-middleware" "^3.0.3" @@ -3750,16 +3743,16 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@smithy/smithy-client@^3.1.8", "@smithy/smithy-client@^3.1.9": - version "3.1.9" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.1.9.tgz#a0d8e867165db64c2a66762df0db279d1f8029eb" - integrity sha512-My2RaInZ4gSwJUPMaiLR/Nk82+c4LlvqpXA+n7lonGYgCZq23Tg+/xFhgmiejJ6XPElYJysTPyV90vKyp17+1g== +"@smithy/smithy-client@^3.1.12": + version "3.1.12" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.1.12.tgz#fb6386816ff8a5c50eab7503d4ee3ba2e4ebac63" + integrity sha512-wtm8JtsycthkHy1YA4zjIh2thJgIQ9vGkoR639DBx5lLlLNU0v4GARpQZkr2WjXue74nZ7MiTSWfVrLkyD8RkA== dependencies: - "@smithy/middleware-endpoint" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" "@smithy/middleware-stack" "^3.0.3" - "@smithy/protocol-http" "^4.0.4" + "@smithy/protocol-http" "^4.1.0" "@smithy/types" "^3.3.0" - "@smithy/util-stream" "^3.1.1" + "@smithy/util-stream" "^3.1.3" tslib "^2.6.2" "@smithy/types@^3.3.0": @@ -3824,27 +3817,27 @@ dependencies: tslib "^2.6.2" -"@smithy/util-defaults-mode-browser@^3.0.10": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.11.tgz#c8a74369405f55d39492b9ec15458cc2fe56b783" - integrity sha512-O3s9DGb3bmRvEKmT8RwvSWK4A9r6svfd+MnJB+UMi9ZcCkAnoRtliulOnGF0qCMkKF9mwk2tkopBBstalPY/vg== +"@smithy/util-defaults-mode-browser@^3.0.14": + version "3.0.14" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.14.tgz#21f3ebcb07b9d6ae1274b9d655c38bdac59e5c06" + integrity sha512-0iwTgKKmAIf+vFLV8fji21Jb2px11ktKVxbX6LIDPAUJyWQqGqBVfwba7xwa1f2FZUoolYQgLvxQEpJycXuQ5w== dependencies: "@smithy/property-provider" "^3.1.3" - "@smithy/smithy-client" "^3.1.9" + "@smithy/smithy-client" "^3.1.12" "@smithy/types" "^3.3.0" bowser "^2.11.0" tslib "^2.6.2" -"@smithy/util-defaults-mode-node@^3.0.10": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.11.tgz#288f443b65554597082858c4b6624cd362a2caaa" - integrity sha512-qd4a9qtyOa/WY14aHHOkMafhh9z8D2QTwlcBoXMTPnEwtcY+xpe1JyFm9vya7VsB8hHsfn3XodEtwqREiu4ygQ== +"@smithy/util-defaults-mode-node@^3.0.14": + version "3.0.14" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.14.tgz#6bb9e837282e84bbf5093dbcd120fcd296593f7a" + integrity sha512-e9uQarJKfXApkTMMruIdxHprhcXivH1flYCe8JRDTzkkLx8dA3V5J8GZlST9yfDiRWkJpZJlUXGN9Rc9Ade3OQ== dependencies: "@smithy/config-resolver" "^3.0.5" - "@smithy/credential-provider-imds" "^3.1.4" + "@smithy/credential-provider-imds" "^3.2.0" "@smithy/node-config-provider" "^3.1.4" "@smithy/property-provider" "^3.1.3" - "@smithy/smithy-client" "^3.1.9" + "@smithy/smithy-client" "^3.1.12" "@smithy/types" "^3.3.0" tslib "^2.6.2" @@ -3881,13 +3874,13 @@ "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/util-stream@^3.1.0", "@smithy/util-stream@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.1.1.tgz#2fffe56d9cdf70e94a7cd690e980454b1b35ad23" - integrity sha512-EhRnVvl3AhoHAT2rGQ5o+oSDRM/BUSMPLZZdRJZLcNVUsFAjOs4vHaPdNQivTSzRcFxf5DA4gtO46WWU2zimaw== +"@smithy/util-stream@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.1.3.tgz#699ee2397cc1d474e46d2034039d5263812dca64" + integrity sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw== dependencies: - "@smithy/fetch-http-handler" "^3.2.2" - "@smithy/node-http-handler" "^3.1.3" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/node-http-handler" "^3.1.4" "@smithy/types" "^3.3.0" "@smithy/util-base64" "^3.0.0" "@smithy/util-buffer-from" "^3.0.0" @@ -9852,10 +9845,10 @@ fast-uri@^3.0.1: resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== -fast-xml-parser@4.2.5: - version "4.2.5" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f" - integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== +fast-xml-parser@4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" + integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== dependencies: strnum "^1.0.5" From d50227a54fc9d0189eebb7a542c7a389bc470e7d Mon Sep 17 00:00:00 2001 From: Alberto Casado Torres Date: Wed, 7 Aug 2024 15:54:19 +0200 Subject: [PATCH 6/9] Select and search button and colors (#7108) * Select and search button and colors * gave editors access to IX * missing translations * remoeved unnecesary tests * deleted unused vars --- app/api/suggestions/extractorsRoutes.ts | 8 +- app/api/suggestions/routes.ts | 12 +- app/api/suggestions/specs/routes.spec.ts | 52 ----- app/react/App/styles/globals.css | 30 ++- app/react/ProtectedRoute.tsx | 15 +- app/react/Routes.tsx | 19 +- .../components/SettingsNavigation.tsx | 2 +- .../V2/Components/Forms/MultiselectList.tsx | 9 +- .../V2/Routes/Settings/IX/IXSuggestions.tsx | 4 +- .../Settings/IX/components/PDFSidepanel.tsx | 199 +++++++++++------- .../Settings/IX/components/TableElements.tsx | 15 +- contents/ui-translations/ar.csv | 1 + contents/ui-translations/en.csv | 1 + contents/ui-translations/es.csv | 1 + contents/ui-translations/fr.csv | 1 + contents/ui-translations/ko.csv | 1 + contents/ui-translations/my.csv | 1 + contents/ui-translations/ru.csv | 1 + contents/ui-translations/th.csv | 1 + contents/ui-translations/tr.csv | 1 + 20 files changed, 213 insertions(+), 161 deletions(-) diff --git a/app/api/suggestions/extractorsRoutes.ts b/app/api/suggestions/extractorsRoutes.ts index 592ef5b22a..c25fe66991 100644 --- a/app/api/suggestions/extractorsRoutes.ts +++ b/app/api/suggestions/extractorsRoutes.ts @@ -11,7 +11,7 @@ export const extractorsRoutes = (app: Application) => { app.post( '/api/ixextractors', serviceMiddleware, - needsAuthorization(['admin']), + needsAuthorization(['admin', 'editor']), validateAndCoerceRequest({ type: 'object', properties: { @@ -36,7 +36,7 @@ export const extractorsRoutes = (app: Application) => { app.put( '/api/ixextractors', serviceMiddleware, - needsAuthorization(['admin']), + needsAuthorization(['admin', 'editor']), validateAndCoerceRequest({ type: 'object', properties: { @@ -67,7 +67,7 @@ export const extractorsRoutes = (app: Application) => { app.delete( '/api/ixextractors', serviceMiddleware, - needsAuthorization(['admin']), + needsAuthorization(['admin', 'editor']), parseQuery, validateAndCoerceRequest({ type: 'object', @@ -90,7 +90,7 @@ export const extractorsRoutes = (app: Application) => { app.get( '/api/ixextractors', serviceMiddleware, - needsAuthorization(['admin']), + needsAuthorization(['admin', 'editor']), validateAndCoerceRequest({ type: 'object', properties: { diff --git a/app/api/suggestions/routes.ts b/app/api/suggestions/routes.ts index 64c07f4c50..99e728ca38 100644 --- a/app/api/suggestions/routes.ts +++ b/app/api/suggestions/routes.ts @@ -56,7 +56,7 @@ export const suggestionsRoutes = (app: Application) => { app.get( '/api/suggestions/', serviceMiddleware, - needsAuthorization(['admin']), + needsAuthorization(['admin', 'editor']), parseQuery, validateAndCoerceRequest({ type: 'object', @@ -101,7 +101,7 @@ export const suggestionsRoutes = (app: Application) => { app.get( '/api/suggestions/aggregation', serviceMiddleware, - needsAuthorization(['admin']), + needsAuthorization(['admin', 'editor']), parseQuery, validateAndCoerceRequest({ type: 'object', @@ -132,7 +132,7 @@ export const suggestionsRoutes = (app: Application) => { app.post( '/api/suggestions/stop', serviceMiddleware, - needsAuthorization(['admin']), + needsAuthorization(['admin', 'editor']), extractorIdRequestValidation('body'), async (req, res, _next) => { await processTrainFunction(IX.stopModel, req, res); @@ -142,7 +142,7 @@ export const suggestionsRoutes = (app: Application) => { app.post( '/api/suggestions/train', serviceMiddleware, - needsAuthorization(['admin']), + needsAuthorization(['admin', 'editor']), extractorIdRequestValidation('body'), async (req, res, _next) => { await processTrainFunction(IX.trainModel, req, res); @@ -152,7 +152,7 @@ export const suggestionsRoutes = (app: Application) => { app.post( '/api/suggestions/status', serviceMiddleware, - needsAuthorization(['admin']), + needsAuthorization(['admin', 'editor']), extractorIdRequestValidation('body'), async (req, res, _next) => { await processTrainFunction(IX.status, req, res); @@ -162,7 +162,7 @@ export const suggestionsRoutes = (app: Application) => { app.post( '/api/suggestions/accept', serviceMiddleware, - needsAuthorization(['admin']), + needsAuthorization(['admin', 'editor']), validateAndCoerceRequest({ type: 'object', properties: { diff --git a/app/api/suggestions/specs/routes.spec.ts b/app/api/suggestions/specs/routes.spec.ts index c9f38ef54e..68b97b1756 100644 --- a/app/api/suggestions/specs/routes.spec.ts +++ b/app/api/suggestions/specs/routes.spec.ts @@ -11,7 +11,6 @@ import { shared2esId, shared6enId, stateFilterFixtures, - suggestionSharedId6Enemy, suggestionSharedId6Title, } from 'api/suggestions/specs/fixtures'; import { suggestionsRoutes } from 'api/suggestions/routes'; @@ -317,14 +316,6 @@ describe('suggestions routes', () => { expect(response.status).toBe(400); }); }); - - describe('authentication', () => { - it('should reject with unauthorized when the user does not have the admin role', async () => { - user = { username: 'user 1', role: 'editor' }; - const response = await request(app).get('/api/suggestions/').query({}).expect(401); - expect(response.unauthorized).toBe(true); - }); - }); }); describe('POST /api/suggestions/status', () => { @@ -338,14 +329,6 @@ describe('suggestions routes', () => { expect(response.body).toMatchObject({ status: 'ready' }); }); - it('should reject with unauthorized when user has not admin role', async () => { - user = { username: 'user 1', role: 'editor' }; - const response = await request(app) - .post('/api/suggestions/status') - .send({ extractorId: factory.id('super_powers_extractor').toString() }) - .expect(401); - expect(response.unauthorized).toBe(true); - }); }); describe('POST /api/suggestions/train', () => { @@ -357,14 +340,6 @@ describe('suggestions routes', () => { expect(response.body).toMatchObject({ status: 'processing' }); }); - it('should reject with unauthorized when user has not admin role', async () => { - user = { username: 'user 1', role: 'editor' }; - const response = await request(app) - .post('/api/suggestions/train') - .send({ extractorId: factory.id('super_powers_extractor').toString() }) - .expect(401); - expect(response.unauthorized).toBe(true); - }); }); describe('POST /api/suggestions/accept', () => { @@ -397,22 +372,6 @@ describe('suggestions routes', () => { expect(search.indexEntities).toHaveBeenCalledWith({ sharedId: 'shared6' }, '+fullText'); }); - it('should reject with unauthorized when user has not admin role', async () => { - user = { username: 'user 1', role: 'editor' }; - const response = await request(app) - .post('/api/suggestions/accept') - .send({ - allLanguages: true, - suggestion: { - _id: suggestionSharedId6Enemy, - sharedId: 'shared6', - entityId: shared6enId, - }, - }) - .expect(401); - expect(response.unauthorized).toBe(true); - }); - it('should handle partial acceptance parameters for multiselects', async () => { await request(app) .post('/api/suggestions/accept') @@ -461,17 +420,6 @@ describe('aggregation routes', () => { }); }); - describe('authentication', () => { - it('should reject with unauthorized when the user does not have the admin role', async () => { - user = { username: 'user 1', role: 'editor' }; - const response = await request(app) - .get('/api/suggestions/aggregation') - .query({}) - .expect(401); - expect(response.unauthorized).toBe(true); - }); - }); - it('should return the aggregation of suggestions', async () => { const response = await request(app) .get('/api/suggestions/aggregation') diff --git a/app/react/App/styles/globals.css b/app/react/App/styles/globals.css index cfc214aedc..d2e22e69b3 100644 --- a/app/react/App/styles/globals.css +++ b/app/react/App/styles/globals.css @@ -1733,11 +1733,6 @@ input[type="range"]::-ms-fill-lower { margin-right: 0.25rem; } -.mx-2 { - margin-left: 0.5rem; - margin-right: 0.5rem; -} - .mx-4 { margin-left: 1rem; margin-right: 1rem; @@ -1758,6 +1753,11 @@ input[type="range"]::-ms-fill-lower { margin-bottom: 1rem; } +.mx-2 { + margin-left: 0.5rem; + margin-right: 0.5rem; +} + .-ml-0 { margin-left: -0px; } @@ -2984,6 +2984,11 @@ input[type="range"]::-ms-fill-lower { background-color: rgb(253 246 178 / var(--tw-bg-opacity)); } +.bg-success-50 { + --tw-bg-opacity: 1; + background-color: rgb(240 253 244 / var(--tw-bg-opacity)); +} + .bg-opacity-50 { --tw-bg-opacity: 0.5; } @@ -3555,6 +3560,11 @@ input[type="range"]::-ms-fill-lower { color: rgb(114 59 19 / var(--tw-text-opacity)); } +.text-orange-800 { + --tw-text-opacity: 1; + color: rgb(138 44 13 / var(--tw-text-opacity)); +} + .underline { text-decoration-line: underline; } @@ -3779,6 +3789,11 @@ input[type="range"]::-ms-fill-lower { border-color: rgb(165 180 252 / var(--tw-border-opacity)); } +.hover\:border-primary-800:hover { + --tw-border-opacity: 1; + border-color: rgb(55 48 163 / var(--tw-border-opacity)); +} + .hover\:border-success-700:hover { --tw-border-opacity: 1; border-color: rgb(21 128 61 / var(--tw-border-opacity)); @@ -3829,6 +3844,11 @@ input[type="range"]::-ms-fill-lower { background-color: rgb(205 219 254 / var(--tw-bg-opacity)); } +.hover\:bg-primary-50:hover { + --tw-bg-opacity: 1; + background-color: rgb(238 242 255 / var(--tw-bg-opacity)); +} + .hover\:bg-primary-800:hover { --tw-bg-opacity: 1; background-color: rgb(55 48 163 / var(--tw-bg-opacity)); diff --git a/app/react/ProtectedRoute.tsx b/app/react/ProtectedRoute.tsx index ecb736f00c..b313c3d0b9 100644 --- a/app/react/ProtectedRoute.tsx +++ b/app/react/ProtectedRoute.tsx @@ -1,23 +1,22 @@ import React, { ReactElement } from 'react'; import { Navigate, Outlet } from 'react-router-dom'; import { store } from 'app/store'; -import { UserRole } from 'shared/types/userSchema'; import { ClientSettings } from 'app/apiResponseTypes'; const ProtectedRoute = ({ children, - onlyAdmin, + allowedRoles, }: { children: ReactElement; - onlyAdmin?: boolean; + allowedRoles?: string[]; }) => { const userId = store?.getState().user.get('_id'); - - if (onlyAdmin && store?.getState().user.get('role') === UserRole.ADMIN) { + const userRole = store?.getState().user.get('role') || ''; + if (allowedRoles && allowedRoles.includes(userRole)) { return children || ; } - if (!onlyAdmin && userId) { + if (!allowedRoles && userId) { return children || ; } @@ -25,11 +24,11 @@ const ProtectedRoute = ({ }; const adminsOnlyRoute = (element: ReactElement) => ( - {element} + {element} ); const privateRoute = (element: ReactElement, settings: ClientSettings | undefined) => !settings?.private ? element : {element}; const loggedInUsersRoute = (element: ReactElement) => {element}; -export { loggedInUsersRoute, adminsOnlyRoute, privateRoute }; +export { loggedInUsersRoute, adminsOnlyRoute, privateRoute, ProtectedRoute }; diff --git a/app/react/Routes.tsx b/app/react/Routes.tsx index 7a586d3b51..5009080494 100644 --- a/app/react/Routes.tsx +++ b/app/react/Routes.tsx @@ -47,7 +47,12 @@ import { ActivityLog, activityLogLoader } from 'V2/Routes/Settings/ActivityLog'; import { CustomUploads, customUploadsLoader } from 'V2/Routes/Settings/CustomUploads/CustomUploads'; import { FiltersTable, filtersLoader } from 'V2/Routes/Settings/Filters'; import { RouteErrorBoundary, GeneralError } from 'V2/Components/ErrorHandling'; -import { loggedInUsersRoute, adminsOnlyRoute, privateRoute } from './ProtectedRoute'; +import { + loggedInUsersRoute, + adminsOnlyRoute, + privateRoute, + ProtectedRoute, +} from './ProtectedRoute'; import { getIndexElement } from './getIndexElement'; import { PageView } from './Pages/PageView'; import ResetPassword from './Users/ResetPassword'; @@ -116,13 +121,21 @@ const getRoutesLayout = ( )} + element={ + + + + } loader={IXdashboardLoader(headers)} /> )} + element={ + + + + } /> diff --git a/app/react/Settings/components/SettingsNavigation.tsx b/app/react/Settings/components/SettingsNavigation.tsx index 654b781fdd..15e383f7aa 100644 --- a/app/react/Settings/components/SettingsNavigation.tsx +++ b/app/react/Settings/components/SettingsNavigation.tsx @@ -71,7 +71,7 @@ const SettingsNavigationComponent = ({ allowcustomJS }: { allowcustomJS: boolean - + (value || []); const [showAll, setShowAll] = useState(!(startOnSelected && selectedItems.length)); const [searchTerm, setSearchTerm] = useState(''); - const [externalSearchTerm, setExternalSearchTerm] = useState(search); const [filteredItems, setFilteredItems] = useState(items); const [openGroups, setOpenGroups] = useState([]); const optionsRef = useRef(null); @@ -71,14 +70,13 @@ const MultiselectList = ({ useEffect(() => { setSearchTerm(search); - setExternalSearchTerm(search); }, [search]); useEffect(() => { - if (externalSearchTerm) { + if (search) { optionsRef.current?.querySelector('input')?.focus(); } - }, [externalSearchTerm, filteredItems]); + }, [search, filteredItems]); useEffect(() => { if (value) { @@ -132,7 +130,6 @@ const MultiselectList = ({ }, [items, searchTerm, showAll, selectedItems]); const handleSelect = (_value: string) => { - setExternalSearchTerm(''); let newValues; if (singleSelect) { newValues = selectedItems.includes(_value) ? [] : [_value]; @@ -240,7 +237,7 @@ const MultiselectList = ({
{isOpen ? : }
- Properties + Group {isOpen &&
    {group.items?.map(renderItem)}
} diff --git a/app/react/V2/Routes/Settings/IX/IXSuggestions.tsx b/app/react/V2/Routes/Settings/IX/IXSuggestions.tsx index aeac211301..0aa50bd95b 100644 --- a/app/react/V2/Routes/Settings/IX/IXSuggestions.tsx +++ b/app/react/V2/Routes/Settings/IX/IXSuggestions.tsx @@ -293,7 +293,7 @@ const IXSuggestions = () => { {selected.length ? ( -
+
) : ( -
+
); }; - const renderLabel = () => { + const renderForm = () => { switch (property?.type) { case 'text': case 'date': @@ -395,79 +435,94 @@ const PDFSidepanel = ({ }; return ( -
- setShowSidepanel(false)} - > -
-
-
- {pdf && ( - { - if (!selection.selectionRectangles.length) { - setSelectionError('Could not detect the area for the selected text'); - setSelectedText(undefined); - } else { - setSelectionError(undefined); - setSelectedText(selection); - } - }} - size={{ - width: '100%', - }} - scrollToPage={!selectedText ? Object.keys(highlights || {})[0] : undefined} - /> - )} -
-
{' '} -
- setShowSidepanel(false)} + > +
+
-
-
-

- - {property?.label} - {' '} - {selectionError && {selectionError}} -

- setLabelInputIsOpen(old => !old)} className="cursor-pointer"> - {labelInputIsOpen ? : } - -
- {renderLabel()} -
-
+ +
+
+

+ - Cancel - - -

+ {property?.label} + {' '} + {SELECT_TYPES.includes(property?.type || '') && ( + + )} + {selectionError && {selectionError}} +

+ setLabelInputIsOpen(old => !old)} className="cursor-pointer"> + {labelInputIsOpen ? : } +
-
- -
+ {renderForm()} +
+ + +
+
+
+
); }; diff --git a/app/react/V2/Routes/Settings/IX/components/TableElements.tsx b/app/react/V2/Routes/Settings/IX/components/TableElements.tsx index fe1791be24..8f8de352c0 100644 --- a/app/react/V2/Routes/Settings/IX/components/TableElements.tsx +++ b/app/react/V2/Routes/Settings/IX/components/TableElements.tsx @@ -30,6 +30,17 @@ const statusColor = (suggestion: TableSuggestion): Color => { return 'green'; } + if ( + Array.isArray(suggestion.currentValue) && + Array.isArray(suggestion.suggestedValue) && + suggestion.currentValue.length === suggestion.suggestedValue.length && + suggestion.currentValue.every( + value => Array.isArray(suggestion.suggestedValue) && suggestion.suggestedValue.includes(value) + ) + ) { + return 'green'; + } + return 'orange'; }; @@ -59,7 +70,7 @@ const ActionHeader = () => Action; const PropertyCell = ({ cell }: CellContext) => { const property = cell.getValue(); return ( -
+
{propertyIcons[property]}

{cell.row.original.propertyLabel}

@@ -133,7 +144,7 @@ const AcceptButton = ({ const suggestionHasEntity = Boolean(cell.row.original.entityId); if (color === 'green') { - return
{getIcon(color)}
; + return
{getIcon(color)}
; } return ( diff --git a/contents/ui-translations/ar.csv b/contents/ui-translations/ar.csv index 11ea783c17..353df63ca0 100644 --- a/contents/ui-translations/ar.csv +++ b/contents/ui-translations/ar.csv @@ -704,6 +704,7 @@ Search Tips: wildcard,نصائح البحث: Wildcard Secret keys,Secret keys Security,Security Select,Select +Select & Search,Select & Search Select all,اختار الكل Select files on your device,اختر الملفات في جهازك Select from computer,Select from computer diff --git a/contents/ui-translations/en.csv b/contents/ui-translations/en.csv index d4421ee564..82fbebf141 100644 --- a/contents/ui-translations/en.csv +++ b/contents/ui-translations/en.csv @@ -707,6 +707,7 @@ Search Tips: wildcard,"Use an * for wildcard search. Ie: ""juris*"" will match w Secret keys,Secret keys Security,Security Select,Select +Select & Search,Select & Search Select all,Select all Select files on your device,Select files on your device Select from computer,Select from computer diff --git a/contents/ui-translations/es.csv b/contents/ui-translations/es.csv index 2da321a7a6..a5320e9e1b 100644 --- a/contents/ui-translations/es.csv +++ b/contents/ui-translations/es.csv @@ -703,6 +703,7 @@ Search Tips: wildcard,"Utilice un * para la búsqueda con comodines. Es decir: " Secret keys,Secret keys Security,Security Select,Seleccionar +Select & Search,Select & Search Select all,Seleccionar todo Select files on your device,Seleccionar archivos de tu dispositivo Select from computer,Seleccionar desde la computadora diff --git a/contents/ui-translations/fr.csv b/contents/ui-translations/fr.csv index 1afef6d8f2..953cddecab 100644 --- a/contents/ui-translations/fr.csv +++ b/contents/ui-translations/fr.csv @@ -704,6 +704,7 @@ Search Tips: wildcard,Astuces de recherche: caractère générique Secret keys,Secret keys Security,Security Select,Select +Select & Search,Select & Search Select all,Tout sélectionner Select files on your device,Sélectionnez les fichiers sur votre appareil Select from computer,Select from computer diff --git a/contents/ui-translations/ko.csv b/contents/ui-translations/ko.csv index 186577d37f..e6645f9515 100644 --- a/contents/ui-translations/ko.csv +++ b/contents/ui-translations/ko.csv @@ -705,6 +705,7 @@ Search Tips: wildcard,검색 팁: wildcard Secret keys,Secret keys Security,Security Select,Select +Select & Search,Select & Search Select all,전체 선택 Select files on your device,기기에서 파일을 선택하십시오. Select from computer,Select from computer diff --git a/contents/ui-translations/my.csv b/contents/ui-translations/my.csv index f6d0958a40..902d3ff351 100644 --- a/contents/ui-translations/my.csv +++ b/contents/ui-translations/my.csv @@ -705,6 +705,7 @@ Search Tips: wildcard,ရှာဖွေမှု အကြံပြုချက Secret keys,Secret keys Security,Security Select,Select +Select & Search,Select & Search Select all,အားလုံးကို ရွေးရန် Select files on your device,သင့်စက်ပေါ်ရှိ ဖိုင်များကို ရွေးချယ်ရန် Select from computer,Select from computer diff --git a/contents/ui-translations/ru.csv b/contents/ui-translations/ru.csv index e04d44c4c4..e20c0fbbe1 100644 --- a/contents/ui-translations/ru.csv +++ b/contents/ui-translations/ru.csv @@ -702,6 +702,7 @@ Search Tips: wildcard,Советы по поиску: подстановочны Secret keys,Secret keys Security,Security Select,Select +Select & Search,Select & Search Select all,Выбрать все Select files on your device,Выбрать файлы на вашем устройстве Select from computer,Select from computer diff --git a/contents/ui-translations/th.csv b/contents/ui-translations/th.csv index 4738044afa..e462838fe0 100644 --- a/contents/ui-translations/th.csv +++ b/contents/ui-translations/th.csv @@ -705,6 +705,7 @@ Search Tips: wildcard,เคล็ดลับการค้นหา: ไว Secret keys,Secret keys Security,Security Select,Select +Select & Search,Select & Search Select all,เลือกทั้งหมด Select files on your device,เลือกไฟล์บนอุปกรณ์ของคุณ Select from computer,Select from computer diff --git a/contents/ui-translations/tr.csv b/contents/ui-translations/tr.csv index 8c0d9e21dd..3b9f7bce83 100644 --- a/contents/ui-translations/tr.csv +++ b/contents/ui-translations/tr.csv @@ -705,6 +705,7 @@ Search Tips: wildcard,Arama İpuçları: Wildcard Secret keys,Secret keys Security,Security Select,Select +Select & Search,Select & Search Select all,Hepsini seç Select files on your device,Cihazınızdaki dosyaları seçin Select from computer,Select from computer From 1c558c48fb8736cc85c2b40523cab0a4fbf8aadd Mon Sep 17 00:00:00 2001 From: RafaPolit Date: Wed, 7 Aug 2024 15:30:54 -0500 Subject: [PATCH 7/9] Upped version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4a9960db3e..5bf1f7ccff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uwazi", - "version": "1.179.0-rc2", + "version": "1.179.0-rc3", "description": "Uwazi is a free, open-source solution for organising, analysing and publishing your documents.", "keywords": [ "react" From fa6727a1871f3860dfdc3f2035e3dc4bc2babf75 Mon Sep 17 00:00:00 2001 From: Joan Gallego Girona Date: Tue, 13 Aug 2024 16:40:42 +0200 Subject: [PATCH 8/9] Automatic translation config schema (#7112) * Automatic translation config schema * WIP, GetAutomaticTranslationConfig * Wip, GetAutomaticTranslationConfig service * Filter out wrong configs - Filter out configs belonging to non existent templates - Filter out properties belonging to other templates * GetAutomaticTranslation filters languages. Filters configured languages by the languages supported by the external service * Typo and naming fix * Moved service to externalIntegrations folder * Fixed ESLint suggestion * Create Models for the service and refined tests * Fixed Typo * Moved logic to model and updated type definitions * Implemented getByNames method. * Prepared script for Generating AT Config from Semantic data * commonProperties on the Template model * Fix Test * Remove AT config from settingsDS moved responsability to the new AutomaticTranslationConfigDS * WIP Red test to implement invalid config test case * AutomaticTranslationConfigDataSource fix now returns and accepts domain object instead of a db raw type * GenerateAutomaticTranslationConfig use case * generateAutomaticTranslation cli script - scripts.v2 included in tsconfig * tenants tearDown, closes mongo model change stream * Fixed type errors * WIP, input data shape validation * Renamed to AT most of the internal module files. * Moved validator to own contract * Changed Validator to return array of strings * Return all error params. * Implemented typeguard for validator * Fixed prettier desync with ESLint * Fixed eslint errors * Removed prettier exceptions * Removed extra eslintrc rule. --------- Co-authored-by: RafaPolit --- .../database/MongoEntitiesDataSource.ts | 4 +- .../AutomaticTranslationFactory.ts | 18 ++ .../GenerateAutomaticTranslationConfig.ts | 63 +++++++ .../contracts/ATConfigDataSource.ts | 6 + .../contracts/ATConfigValidator.ts | 6 + .../contracts/ATGateway.ts | 5 + .../errors/generateATErrors.ts | 3 + .../infrastructure/AJVATConfigValidator.ts | 38 ++++ .../infrastructure/ATExternalAPI.ts | 10 ++ .../infrastructure/MongoATConfigDataSource.ts | 32 ++++ .../automaticTranslation/model/ATConfig.ts | 32 ++++ .../automaticTranslation/model/RawATConfig.ts | 44 +++++ .../services/GetAutomaticTranslationConfig.ts | 39 ++++ .../GetAutomaticTranslationConfig.spec.ts | 135 ++++++++++++++ ...GenerateAutomaticTranslationConfig.spec.ts | 167 ++++++++++++++++++ .../types/SemanticConfig.ts | 10 ++ .../database/MongoSettingsDataSource.ts | 4 +- .../contracts/TemplatesDataSource.ts | 2 + .../database/MongoTemplatesDataSource.ts | 33 +++- .../templates.v2/database/TemplateMappers.ts | 3 +- .../database/schemas/TemplateDBO.ts | 1 + .../specs/MongoTemplatesDataSource.spec.ts | 18 ++ app/api/templates.v2/model/Template.ts | 10 +- app/api/tenants/tenantContext.ts | 7 + app/api/tenants/tenantsModel.ts | 16 +- app/api/utils/fixturesFactory.ts | 56 +++--- app/shared/types/pageSchema.ts | 3 +- app/shared/types/settingsSchema.ts | 26 +++ app/shared/types/settingsType.d.ts | 10 ++ package.json | 1 + .../generateAutomaticTranslationConfig.ts | 39 ++++ tsconfig.json | 2 +- 32 files changed, 805 insertions(+), 38 deletions(-) create mode 100644 app/api/externalIntegrations.v2/automaticTranslation/AutomaticTranslationFactory.ts create mode 100644 app/api/externalIntegrations.v2/automaticTranslation/GenerateAutomaticTranslationConfig.ts create mode 100644 app/api/externalIntegrations.v2/automaticTranslation/contracts/ATConfigDataSource.ts create mode 100644 app/api/externalIntegrations.v2/automaticTranslation/contracts/ATConfigValidator.ts create mode 100644 app/api/externalIntegrations.v2/automaticTranslation/contracts/ATGateway.ts create mode 100644 app/api/externalIntegrations.v2/automaticTranslation/errors/generateATErrors.ts create mode 100644 app/api/externalIntegrations.v2/automaticTranslation/infrastructure/AJVATConfigValidator.ts create mode 100644 app/api/externalIntegrations.v2/automaticTranslation/infrastructure/ATExternalAPI.ts create mode 100644 app/api/externalIntegrations.v2/automaticTranslation/infrastructure/MongoATConfigDataSource.ts create mode 100644 app/api/externalIntegrations.v2/automaticTranslation/model/ATConfig.ts create mode 100644 app/api/externalIntegrations.v2/automaticTranslation/model/RawATConfig.ts create mode 100644 app/api/externalIntegrations.v2/automaticTranslation/services/GetAutomaticTranslationConfig.ts create mode 100644 app/api/externalIntegrations.v2/automaticTranslation/services/specs/GetAutomaticTranslationConfig.spec.ts create mode 100644 app/api/externalIntegrations.v2/automaticTranslation/specs/GenerateAutomaticTranslationConfig.spec.ts create mode 100644 app/api/externalIntegrations.v2/automaticTranslation/types/SemanticConfig.ts create mode 100644 scripts/scripts.v2/generateAutomaticTranslationConfig.ts diff --git a/app/api/entities.v2/database/MongoEntitiesDataSource.ts b/app/api/entities.v2/database/MongoEntitiesDataSource.ts index bab6b23f0c..48498120fc 100644 --- a/app/api/entities.v2/database/MongoEntitiesDataSource.ts +++ b/app/api/entities.v2/database/MongoEntitiesDataSource.ts @@ -13,8 +13,8 @@ import { Entity, MetadataValue } from '../model/Entity'; export class MongoEntitiesDataSource extends MongoDataSource - // eslint-disable-next-line prettier/prettier - implements EntitiesDataSource { + implements EntitiesDataSource +{ protected collectionName = 'entities'; private settingsDS: MongoSettingsDataSource; diff --git a/app/api/externalIntegrations.v2/automaticTranslation/AutomaticTranslationFactory.ts b/app/api/externalIntegrations.v2/automaticTranslation/AutomaticTranslationFactory.ts new file mode 100644 index 0000000000..80433d762c --- /dev/null +++ b/app/api/externalIntegrations.v2/automaticTranslation/AutomaticTranslationFactory.ts @@ -0,0 +1,18 @@ +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; +import { MongoTemplatesDataSource } from 'api/templates.v2/database/MongoTemplatesDataSource'; +import { GenerateAutomaticTranslationsCofig } from './GenerateAutomaticTranslationConfig'; +import { MongoATConfigDataSource } from './infrastructure/MongoATConfigDataSource'; +import { AJVATConfigValidator } from './infrastructure/AJVATConfigValidator'; + +const AutomaticTranslationFactory = { + defaultGenerateATConfig() { + return new GenerateAutomaticTranslationsCofig( + new MongoATConfigDataSource(getConnection(), DefaultTransactionManager()), + new MongoTemplatesDataSource(getConnection(), DefaultTransactionManager()), + new AJVATConfigValidator() + ); + }, +}; + +export { AutomaticTranslationFactory }; diff --git a/app/api/externalIntegrations.v2/automaticTranslation/GenerateAutomaticTranslationConfig.ts b/app/api/externalIntegrations.v2/automaticTranslation/GenerateAutomaticTranslationConfig.ts new file mode 100644 index 0000000000..ffcb536462 --- /dev/null +++ b/app/api/externalIntegrations.v2/automaticTranslation/GenerateAutomaticTranslationConfig.ts @@ -0,0 +1,63 @@ +import { TemplatesDataSource } from 'api/templates.v2/contracts/TemplatesDataSource'; +import { ATConfigDataSource } from './contracts/ATConfigDataSource'; +import { ATTemplateConfig } from './model/ATConfig'; +import { RawATConfig } from './model/RawATConfig'; +import { GenerateATConfigError, InvalidInputDataFormat } from './errors/generateATErrors'; +import { ATConfigValidator } from './contracts/ATConfigValidator'; +import { SemanticConfig } from './types/SemanticConfig'; + +export class GenerateAutomaticTranslationsCofig { + private atuomaticTranslationConfigDS: ATConfigDataSource; + + private templatsDS: TemplatesDataSource; + + private validator: ATConfigValidator; + + constructor( + atuomaticTranslationConfigDS: ATConfigDataSource, + templatesDS: TemplatesDataSource, + validator: ATConfigValidator + ) { + this.atuomaticTranslationConfigDS = atuomaticTranslationConfigDS; + this.templatsDS = templatesDS; + this.validator = validator; + } + + async execute(semanticConfig: SemanticConfig | unknown) { + if (!this.validator.validate(semanticConfig)) { + throw new InvalidInputDataFormat(this.validator.getErrors()[0]); + } + + const templatesData = await this.templatsDS + .getByNames(semanticConfig.templates.map(t => t.template)) + .all(); + + const templates = semanticConfig.templates.map(configData => { + const templateData = templatesData.find(t => t.name === configData.template); + if (!templateData) { + throw new GenerateATConfigError(`Template not found: ${configData.template}`); + } + return new ATTemplateConfig( + templateData?.id, + (configData.properties || []).map(label => { + const foundProperty = templateData.properties.find(p => p.label === label); + if (!foundProperty) { + throw new GenerateATConfigError(`Property not found: ${label}`); + } + return foundProperty.id; + }), + (configData.commonProperties || []).map(label => { + const foundProperty = templateData?.commonProperties.find(p => p.label === label); + if (!foundProperty) { + throw new GenerateATConfigError(`Common property not found: ${label}`); + } + return foundProperty.id; + }) + ); + }); + + return this.atuomaticTranslationConfigDS.update( + new RawATConfig(semanticConfig.active, templates) + ); + } +} diff --git a/app/api/externalIntegrations.v2/automaticTranslation/contracts/ATConfigDataSource.ts b/app/api/externalIntegrations.v2/automaticTranslation/contracts/ATConfigDataSource.ts new file mode 100644 index 0000000000..fef9482ec8 --- /dev/null +++ b/app/api/externalIntegrations.v2/automaticTranslation/contracts/ATConfigDataSource.ts @@ -0,0 +1,6 @@ +import { RawATConfig } from '../model/RawATConfig'; + +export interface ATConfigDataSource { + get(): Promise; + update(config: RawATConfig): Promise; +} diff --git a/app/api/externalIntegrations.v2/automaticTranslation/contracts/ATConfigValidator.ts b/app/api/externalIntegrations.v2/automaticTranslation/contracts/ATConfigValidator.ts new file mode 100644 index 0000000000..56fb42e068 --- /dev/null +++ b/app/api/externalIntegrations.v2/automaticTranslation/contracts/ATConfigValidator.ts @@ -0,0 +1,6 @@ +import { SemanticConfig } from '../types/SemanticConfig'; + +export interface ATConfigValidator { + getErrors(): string[]; + validate(data: unknown): data is SemanticConfig; +} diff --git a/app/api/externalIntegrations.v2/automaticTranslation/contracts/ATGateway.ts b/app/api/externalIntegrations.v2/automaticTranslation/contracts/ATGateway.ts new file mode 100644 index 0000000000..f07201ef9a --- /dev/null +++ b/app/api/externalIntegrations.v2/automaticTranslation/contracts/ATGateway.ts @@ -0,0 +1,5 @@ +import { LanguageISO6391 } from 'shared/types/commonTypes'; + +export interface ATGateway { + supportedLanguages(): Promise; +} diff --git a/app/api/externalIntegrations.v2/automaticTranslation/errors/generateATErrors.ts b/app/api/externalIntegrations.v2/automaticTranslation/errors/generateATErrors.ts new file mode 100644 index 0000000000..dbe3da8275 --- /dev/null +++ b/app/api/externalIntegrations.v2/automaticTranslation/errors/generateATErrors.ts @@ -0,0 +1,3 @@ +/* eslint-disable max-classes-per-file */ +export class GenerateATConfigError extends Error {} +export class InvalidInputDataFormat extends Error {} diff --git a/app/api/externalIntegrations.v2/automaticTranslation/infrastructure/AJVATConfigValidator.ts b/app/api/externalIntegrations.v2/automaticTranslation/infrastructure/AJVATConfigValidator.ts new file mode 100644 index 0000000000..d881113cd3 --- /dev/null +++ b/app/api/externalIntegrations.v2/automaticTranslation/infrastructure/AJVATConfigValidator.ts @@ -0,0 +1,38 @@ +import { Ajv } from 'ajv'; +import { JTDSchemaType } from 'ajv/dist/core'; +import { ATConfigValidator } from '../contracts/ATConfigValidator'; +import { SemanticConfig } from '../types/SemanticConfig'; + +const schema: JTDSchemaType = { + additionalProperties: false, + properties: { + active: { type: 'boolean' }, + templates: { + elements: { + properties: { + template: { type: 'string' }, + }, + optionalProperties: { + properties: { elements: { type: 'string' } }, + commonProperties: { elements: { type: 'string' } }, + }, + }, + }, + }, +}; + +export class AJVATConfigValidator implements ATConfigValidator { + private errors: string[] = []; + + getErrors() { + return this.errors; + } + + validate(data: unknown) { + const ajv = new Ajv({ strict: false }); + const validate = ajv.compile(schema); + const result = validate(data); + this.errors = validate.errors ? validate.errors?.map(e => JSON.stringify(e.params)) : []; + return result; + } +} diff --git a/app/api/externalIntegrations.v2/automaticTranslation/infrastructure/ATExternalAPI.ts b/app/api/externalIntegrations.v2/automaticTranslation/infrastructure/ATExternalAPI.ts new file mode 100644 index 0000000000..3eeb3d1631 --- /dev/null +++ b/app/api/externalIntegrations.v2/automaticTranslation/infrastructure/ATExternalAPI.ts @@ -0,0 +1,10 @@ +import { LanguageISO6391 } from 'shared/types/commonTypes'; +import { ATGateway } from '../contracts/ATGateway'; + +export class ATExternalAPI implements ATGateway { + // eslint-disable-next-line class-methods-use-this + async supportedLanguages() { + const result: LanguageISO6391[] = ['ru', 'en', 'fr', 'es']; + return result; + } +} diff --git a/app/api/externalIntegrations.v2/automaticTranslation/infrastructure/MongoATConfigDataSource.ts b/app/api/externalIntegrations.v2/automaticTranslation/infrastructure/MongoATConfigDataSource.ts new file mode 100644 index 0000000000..471276da3a --- /dev/null +++ b/app/api/externalIntegrations.v2/automaticTranslation/infrastructure/MongoATConfigDataSource.ts @@ -0,0 +1,32 @@ +import { MongoDataSource } from 'api/common.v2/database/MongoDataSource'; +import { Settings as SettingsType } from 'shared/types/settingsType'; +import { ATConfigDataSource } from '../contracts/ATConfigDataSource'; +import { RawATConfig } from '../model/RawATConfig'; +import { ATTemplateConfig } from '../model/ATConfig'; + +export class MongoATConfigDataSource + extends MongoDataSource + implements ATConfigDataSource +{ + protected collectionName = 'settings'; + + async get() { + const settings = await this.getCollection().findOne(); + const config = settings?.features?.automaticTranslation ?? { active: false }; + + return new RawATConfig( + config.active, + (config.templates || []).map( + t => new ATTemplateConfig(t.template, t.properties || [], t.commonProperties) + ) + ); + } + + async update(config: RawATConfig) { + await this.getCollection().findOneAndUpdate( + {}, + { $set: { 'features.automaticTranslation': config } } + ); + return this.get(); + } +} diff --git a/app/api/externalIntegrations.v2/automaticTranslation/model/ATConfig.ts b/app/api/externalIntegrations.v2/automaticTranslation/model/ATConfig.ts new file mode 100644 index 0000000000..a7aeded969 --- /dev/null +++ b/app/api/externalIntegrations.v2/automaticTranslation/model/ATConfig.ts @@ -0,0 +1,32 @@ +/* eslint-disable max-classes-per-file */ +import { LanguageISO6391 } from 'shared/types/commonTypes'; + +class ATTemplateConfig { + readonly template: string; + + readonly commonProperties: string[]; + + readonly properties: string[]; + + constructor(template: string, properties: string[], commonProperties: string[] = []) { + this.template = template; + this.commonProperties = commonProperties; + this.properties = properties; + } +} + +class ATConfig { + readonly active: boolean; + + readonly languages: LanguageISO6391[]; + + readonly templates: ATTemplateConfig[]; + + constructor(active: boolean, languages: LanguageISO6391[], templates: ATTemplateConfig[]) { + this.active = active; + this.languages = languages; + this.templates = templates.filter(t => t.commonProperties.length || t.properties.length); + } +} + +export { ATConfig, ATTemplateConfig }; diff --git a/app/api/externalIntegrations.v2/automaticTranslation/model/RawATConfig.ts b/app/api/externalIntegrations.v2/automaticTranslation/model/RawATConfig.ts new file mode 100644 index 0000000000..3f58dba186 --- /dev/null +++ b/app/api/externalIntegrations.v2/automaticTranslation/model/RawATConfig.ts @@ -0,0 +1,44 @@ +import { LanguageISO6391 } from 'shared/types/commonTypes'; +import { Property } from 'api/templates.v2/model/Property'; +import { ATConfig, ATTemplateConfig } from './ATConfig'; + +class RawATConfig { + readonly active: boolean; + + readonly templates: ATTemplateConfig[]; + + constructor(active: boolean, templates: ATTemplateConfig[]) { + this.active = active; + this.templates = templates; + } + + getCompleteConfig(languages: LanguageISO6391[], validProperties: Property[]): ATConfig { + const validPropertiesMap = validProperties.reduce( + (memo, property) => { + // eslint-disable-next-line no-param-reassign + memo[property.id] = property; + return memo; + }, + {} as { [k: string]: Property } + ); + + const validPropertiesIds = Object.keys(validPropertiesMap); + + const templates = (this.templates || []).map( + templateConfig => + new ATTemplateConfig( + templateConfig.template, + (templateConfig.properties || []).filter( + propertyId => + validPropertiesIds.includes(propertyId) && + validPropertiesMap[propertyId].template === templateConfig.template + ), + templateConfig.commonProperties + ) + ); + + return new ATConfig(this.active, languages, templates); + } +} + +export { RawATConfig }; diff --git a/app/api/externalIntegrations.v2/automaticTranslation/services/GetAutomaticTranslationConfig.ts b/app/api/externalIntegrations.v2/automaticTranslation/services/GetAutomaticTranslationConfig.ts new file mode 100644 index 0000000000..c5caaa1437 --- /dev/null +++ b/app/api/externalIntegrations.v2/automaticTranslation/services/GetAutomaticTranslationConfig.ts @@ -0,0 +1,39 @@ +import { SettingsDataSource } from 'api/settings.v2/contracts/SettingsDataSource'; +import { TemplatesDataSource } from 'api/templates.v2/contracts/TemplatesDataSource'; +import { ATGateway } from '../contracts/ATGateway'; +import { ATConfigDataSource } from '../contracts/ATConfigDataSource'; + +export class GetAutomaticTranslationConfig { + private settings: SettingsDataSource; + + private config: ATConfigDataSource; + + private templates: TemplatesDataSource; + + private automaticTranslation: ATGateway; + + constructor( + settings: SettingsDataSource, + config: ATConfigDataSource, + templates: TemplatesDataSource, + automaticTranslation: ATGateway + ) { + this.settings = settings; + this.config = config; + this.templates = templates; + this.automaticTranslation = automaticTranslation; + } + + async execute() { + const config = await this.config.get(); + + const validProperties = await this.templates.getAllTextProperties().all(); + const configuredLanguages = await this.settings.getLanguageKeys(); + const supportedLanguages = await this.automaticTranslation.supportedLanguages(); + + return config.getCompleteConfig( + configuredLanguages.filter(languageKey => supportedLanguages.includes(languageKey)), + validProperties + ); + } +} diff --git a/app/api/externalIntegrations.v2/automaticTranslation/services/specs/GetAutomaticTranslationConfig.spec.ts b/app/api/externalIntegrations.v2/automaticTranslation/services/specs/GetAutomaticTranslationConfig.spec.ts new file mode 100644 index 0000000000..2181008369 --- /dev/null +++ b/app/api/externalIntegrations.v2/automaticTranslation/services/specs/GetAutomaticTranslationConfig.spec.ts @@ -0,0 +1,135 @@ +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; +import { DefaultSettingsDataSource } from 'api/settings.v2/database/data_source_defaults'; +import { DefaultTemplatesDataSource } from 'api/templates.v2/database/data_source_defaults'; +import { getFixturesFactory } from 'api/utils/fixturesFactory'; +import { testingEnvironment } from 'api/utils/testingEnvironment'; +import { MongoATConfigDataSource } from '../../infrastructure/MongoATConfigDataSource'; +import { ATExternalAPI } from '../../infrastructure/ATExternalAPI'; +import { GetAutomaticTranslationConfig } from '../GetAutomaticTranslationConfig'; + +const createService = () => { + const transactionManager = DefaultTransactionManager(); + return new GetAutomaticTranslationConfig( + DefaultSettingsDataSource(transactionManager), + new MongoATConfigDataSource(getConnection(), transactionManager), + DefaultTemplatesDataSource(transactionManager), + new ATExternalAPI() + ); +}; + +const fixtures = getFixturesFactory(); + +beforeEach(async () => { + await testingEnvironment.setUp({ + templates: [ + fixtures.template('template 1', [ + fixtures.property('text property', 'text'), + fixtures.property('select property', 'select'), + fixtures.property('rich text', 'markdown'), + fixtures.property('multiselect_property', 'multiselect'), + ]), + fixtures.template('template 2', [ + fixtures.property('text property 2', 'text'), + fixtures.property('text property 3', 'markdown'), + fixtures.property('multiselect_property', 'multiselect'), + ]), + fixtures.template('template 3', []), + ], + settings: [ + { + languages: [ + { default: true, label: 'English', key: 'en' }, + { label: 'Spanish', key: 'es' }, + { label: 'Norwegian', key: 'nb' }, + { label: 'Lithuanian', key: 'lt' }, + ], + features: { + automaticTranslation: { + active: true, + templates: [ + { + template: fixtures.id('template 1').toString(), + commonProperties: [fixtures.commonPropertiesTitleId('template 1')], + properties: [ + fixtures.id('text property').toString(), + fixtures.id('select property').toString(), + fixtures.id('rich text').toString(), + fixtures.id('multiselect_property').toString(), + fixtures.id('this property does not exist on the template').toString(), + ], + }, + { + template: fixtures.id('template 2').toString(), + properties: [ + fixtures.id('text property').toString(), + fixtures.id('text property 2').toString(), + ], + }, + { + template: fixtures.id('template 3').toString(), + commonProperties: [fixtures.commonPropertiesTitleId('template 3')], + properties: [], + }, + { + template: fixtures.id('non existent template').toString(), + properties: [fixtures.id('text property non existent template').toString()], + }, + ], + }, + }, + }, + ], + }); +}); + +afterAll(async () => { + await testingEnvironment.tearDown(); +}); + +describe('GetAutomaticTranslationConfig', () => { + it('should return only title, text and markdown properties', async () => { + const config = await createService().execute(); + expect(config.templates[0]).toEqual({ + template: fixtures.id('template 1').toString(), + commonProperties: [fixtures.commonPropertiesTitleId('template 1')], + properties: [fixtures.id('text property').toString(), fixtures.id('rich text').toString()], + }); + }); + + it('should not include properties that no longer exist', async () => { + const config = await createService().execute(); + expect(config.templates[0].properties).toEqual([ + fixtures.id('text property').toString(), + fixtures.id('rich text').toString(), + ]); + }); + + it('should not include properties belonging to other templates', async () => { + const config = await createService().execute(); + expect(config.templates[1]).toEqual({ + template: fixtures.id('template 2').toString(), + commonProperties: [], + properties: [fixtures.id('text property 2').toString()], + }); + }); + + it('should return languages available filtered by the supported languages of automatic translation', async () => { + const config = await createService().execute(); + expect(config.languages).toEqual(['en', 'es']); + }); + + it('should allow configuring only title without any properties', async () => { + const config = await createService().execute(); + expect(config.templates[2]).toEqual({ + template: fixtures.id('template 3').toString(), + commonProperties: [fixtures.commonPropertiesTitleId('template 3')], + properties: [], + }); + }); + + it('should not include properties configurations belonging to an unexistent template', async () => { + const config = await createService().execute(); + expect(config.templates[3]).toBeUndefined(); + }); +}); diff --git a/app/api/externalIntegrations.v2/automaticTranslation/specs/GenerateAutomaticTranslationConfig.spec.ts b/app/api/externalIntegrations.v2/automaticTranslation/specs/GenerateAutomaticTranslationConfig.spec.ts new file mode 100644 index 0000000000..9e24996e6b --- /dev/null +++ b/app/api/externalIntegrations.v2/automaticTranslation/specs/GenerateAutomaticTranslationConfig.spec.ts @@ -0,0 +1,167 @@ +import { testingEnvironment } from 'api/utils/testingEnvironment'; +import { getFixturesFactory } from 'api/utils/fixturesFactory'; +import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant'; +import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults'; +import { MongoTemplatesDataSource } from 'api/templates.v2/database/MongoTemplatesDataSource'; +import { GenerateAutomaticTranslationsCofig } from '../GenerateAutomaticTranslationConfig'; +import { MongoATConfigDataSource } from '../infrastructure/MongoATConfigDataSource'; +import { GenerateATConfigError, InvalidInputDataFormat } from '../errors/generateATErrors'; +import { SemanticConfig } from '../types/SemanticConfig'; +import { AJVATConfigValidator } from '../infrastructure/AJVATConfigValidator'; + +const factory = getFixturesFactory(); + +const validPassedConfig: SemanticConfig = { + active: true, + templates: [ + { template: 'Template 1 name', properties: ['Prop 1', 'Prop 2'], commonProperties: ['Title'] }, + { template: 'Template 2 name', commonProperties: ['Title'] }, + { template: 'Template 3 name', properties: ['Prop 5'] }, + ], +}; + +const fixtures = { + templates: [ + factory.template('Template 1 name', [ + { + _id: factory.id('t1p1'), + name: 'prop_1', + type: 'text', + label: 'Prop 1', + }, + { + _id: factory.id('t1p2'), + name: 'prop_2', + type: 'text', + label: 'Prop 2', + }, + { + _id: factory.id('t1p3'), + name: 'prop_3', + type: 'date', + label: 'Prop 3', + }, + ]), + factory.template('Template 2 name', [ + { + _id: factory.id('t2p4'), + name: 'prop_4', + type: 'text', + label: 'Prop 1', + }, + ]), + factory.template('Template 3 name', [ + { + _id: factory.id('t3p5'), + name: 'prop_5', + type: 'markdown', + label: 'Prop 5', + }, + ]), + factory.template('Not used template', []), + ], + settings: [{}], +}; + +beforeEach(async () => { + await testingEnvironment.setUp(fixtures); +}); + +afterAll(async () => { + await testingEnvironment.tearDown(); +}); + +describe('GenerateAutomaticTranslationConfig', () => { + let generateAutomaticTranslationConfig: GenerateAutomaticTranslationsCofig; + let automaticTranslationConfigDS: MongoATConfigDataSource; + + beforeEach(() => { + automaticTranslationConfigDS = new MongoATConfigDataSource( + getConnection(), + DefaultTransactionManager() + ); + generateAutomaticTranslationConfig = new GenerateAutomaticTranslationsCofig( + automaticTranslationConfigDS, + new MongoTemplatesDataSource(getConnection(), DefaultTransactionManager()), + new AJVATConfigValidator() + ); + }); + + it('should deactivate the service properly', async () => { + await generateAutomaticTranslationConfig.execute({ active: false, templates: [] }); + const settingsData = await automaticTranslationConfigDS.get(); + expect(settingsData.active).toBe(false); + }); + + it('should generate and persist the passed config', async () => { + await generateAutomaticTranslationConfig.execute(validPassedConfig); + + const settingsData = await automaticTranslationConfigDS.get(); + + expect(settingsData.active).toBe(true); + expect(settingsData.templates).toEqual([ + { + template: factory.idString('Template 1 name'), + properties: [factory.idString('t1p1').toString(), factory.idString('t1p2').toString()], + commonProperties: [factory.commonPropertiesTitleId('Template 1 name')], + }, + { + template: factory.idString('Template 2 name'), + properties: [], + commonProperties: [factory.commonPropertiesTitleId('Template 2 name')], + }, + { + template: factory.idString('Template 3 name'), + properties: [factory.idString('t3p5')], + commonProperties: [], + }, + ]); + }); + + describe('when template does not match', () => { + it('should throw a template not found error error', async () => { + const invalidConfig: SemanticConfig = { + active: true, + templates: [{ template: 'template name does not exist' }], + }; + await expect(generateAutomaticTranslationConfig.execute(invalidConfig)).rejects.toEqual( + new GenerateATConfigError('Template not found: template name does not exist') + ); + }); + }); + + describe('when a property does not match', () => { + it('should throw a property not found error', async () => { + const invalidConfig: SemanticConfig = { + active: true, + templates: [ + { template: 'Template 1 name', properties: ['prop 1 does not exist', 'Prop 2'] }, + ], + }; + await expect(generateAutomaticTranslationConfig.execute(invalidConfig)).rejects.toEqual( + new GenerateATConfigError('Property not found: prop 1 does not exist') + ); + }); + }); + + describe('when a common property does not match', () => { + it('should throw a common property not found error', async () => { + const invalidConfig: SemanticConfig = { + active: true, + templates: [ + { template: 'Template 1 name', commonProperties: ['common property does not exist'] }, + ], + }; + await expect(generateAutomaticTranslationConfig.execute(invalidConfig)).rejects.toEqual( + new GenerateATConfigError('Common property not found: common property does not exist') + ); + }); + }); + + it('should validate input has proper shape at runtime', async () => { + const invalidConfig = { invalid_prop: true }; + await expect(generateAutomaticTranslationConfig.execute(invalidConfig)).rejects.toEqual( + new InvalidInputDataFormat('{"additionalProperty":"invalid_prop"}') + ); + }); +}); diff --git a/app/api/externalIntegrations.v2/automaticTranslation/types/SemanticConfig.ts b/app/api/externalIntegrations.v2/automaticTranslation/types/SemanticConfig.ts new file mode 100644 index 0000000000..54fbf284c1 --- /dev/null +++ b/app/api/externalIntegrations.v2/automaticTranslation/types/SemanticConfig.ts @@ -0,0 +1,10 @@ +interface SemanticConfig { + active: boolean; + templates: { + template: string; + commonProperties?: string[]; + properties?: string[]; + }[]; +} + +export type { SemanticConfig }; diff --git a/app/api/settings.v2/database/MongoSettingsDataSource.ts b/app/api/settings.v2/database/MongoSettingsDataSource.ts index e8b24e74a4..fc6b097fab 100644 --- a/app/api/settings.v2/database/MongoSettingsDataSource.ts +++ b/app/api/settings.v2/database/MongoSettingsDataSource.ts @@ -5,8 +5,8 @@ import { DefaultLanguageMissingError } from '../errors/settingsErrors'; export class MongoSettingsDataSource extends MongoDataSource - // eslint-disable-next-line prettier/prettier - implements SettingsDataSource { + implements SettingsDataSource +{ protected collectionName = 'settings'; protected async readSettings(): Promise { diff --git a/app/api/templates.v2/contracts/TemplatesDataSource.ts b/app/api/templates.v2/contracts/TemplatesDataSource.ts index b66b8800b8..f27359adad 100644 --- a/app/api/templates.v2/contracts/TemplatesDataSource.ts +++ b/app/api/templates.v2/contracts/TemplatesDataSource.ts @@ -7,8 +7,10 @@ export interface TemplatesDataSource { getAllTemplatesIds(): ResultSet; getAllRelationshipProperties(): ResultSet; getAllProperties(): ResultSet; + getAllTextProperties(): ResultSet; getPropertyByName(name: string): Promise; getTemplatesIdsHavingProperty(propertyName: string): ResultSet; getByIds(ids: Template['id'][]): ResultSet