From 84a766a219a5842080d71ea7474d3e39022acf17 Mon Sep 17 00:00:00 2001 From: Brendan Myers <6362494+BearHanded@users.noreply.github.com> Date: Tue, 6 Aug 2024 14:26:59 -0400 Subject: [PATCH 01/18] [CMDCT-3896] Upgrade Serverless - Custom Lambda Runtime (#139735) --- package.json | 2 +- yarn.lock | 1234 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 1229 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 5bfe1bb5d..64d442968 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "eslint-plugin-react": "^7.24.0", "eslint-plugin-react-hooks": "^2.x", "prettier": "^2.4.1", - "serverless": "^3.38.0", + "serverless": "^3.39.0", "serverless-bundle": "^6.1.0", "serverless-cloudfront-invalidate": "^1.12.2", "serverless-dotenv-plugin": "^3.0.0", diff --git a/yarn.lock b/yarn.lock index db382a571..d1296e2f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -47,6 +47,15 @@ "@aws-sdk/types" "^3.222.0" tslib "^1.11.1" +"@aws-crypto/crc32@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1" + integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + "@aws-crypto/crc32c@3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" @@ -56,6 +65,15 @@ "@aws-sdk/types" "^3.222.0" tslib "^1.11.1" +"@aws-crypto/crc32c@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz#4e34aab7f419307821509a98b9b08e84e0c1917e" + integrity sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + "@aws-crypto/ie11-detection@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" @@ -76,6 +94,18 @@ "@aws-sdk/util-utf8-browser" "^3.0.0" tslib "^1.11.1" +"@aws-crypto/sha1-browser@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz#b0ee2d2821d3861f017e965ef3b4cb38e3b6a0f4" + integrity sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg== + dependencies: + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + "@aws-crypto/sha256-browser@3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" @@ -90,6 +120,19 @@ "@aws-sdk/util-utf8-browser" "^3.0.0" tslib "^1.11.1" +"@aws-crypto/sha256-browser@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" + integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== + dependencies: + "@aws-crypto/sha256-js" "^5.2.0" + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + "@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" @@ -99,6 +142,15 @@ "@aws-sdk/types" "^3.222.0" tslib "^1.11.1" +"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" + integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + "@aws-crypto/supports-web-crypto@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" @@ -106,6 +158,13 @@ dependencies: tslib "^1.11.1" +"@aws-crypto/supports-web-crypto@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" + integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== + dependencies: + tslib "^2.6.2" + "@aws-crypto/util@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" @@ -115,6 +174,64 @@ "@aws-sdk/util-utf8-browser" "^3.0.0" tslib "^1.11.1" +"@aws-crypto/util@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" + integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-api-gateway@^3.588.0": + version "3.624.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-api-gateway/-/client-api-gateway-3.624.0.tgz#3d65ddb227b4c8b1a432ed297f1a1be2186ef969" + integrity sha512-9DeJihU48KVVYlymg9/pfgiLNQ4Kiss5Ei2Ph9SUxZwGBw7uKZwHnE8dfBoGGq1KwDo+hEtQSd+/i/K6p/GwYQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.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-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-sdk-api-gateway" "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.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.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.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.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.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@aws-sdk/client-cloudformation@^3.128.0": version "3.576.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-cloudformation/-/client-cloudformation-3.576.0.tgz#aac4b796d5998d722cded31a755731b4aec636a4" @@ -261,6 +378,149 @@ tslib "^2.6.2" uuid "^9.0.1" +"@aws-sdk/client-cognito-identity-provider@^3.588.0": + version "3.624.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity-provider/-/client-cognito-identity-provider-3.624.0.tgz#2113f44296454ec1f10f3fcea6fe43a596a7828d" + integrity sha512-AKzSCARzVUqclaXxxRE7UXZAhF+HoJGbAdYvQxj9LJdejuBRCo49LUqmiCTr7pUEPDK/RkDtv3+JLhxqN4z8YA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.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-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.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.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.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.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.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-eventbridge@^3.588.0": + version "3.624.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-eventbridge/-/client-eventbridge-3.624.0.tgz#aadd03846b7881e49da6b7c105c8f002669948e8" + integrity sha512-02HxeImNQv+yA+36Y+gn5ZM2v3JhG9gbbtXokv1YoByh9Ot9WG5Xm5Fsj9i6Dno34LneA2HCQqdMws67woXxVg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.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-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.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/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" + "@smithy/config-resolver" "^3.0.5" + "@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.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.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.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-iam@^3.588.0": + version "3.624.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-iam/-/client-iam-3.624.0.tgz#89c57b70a15c44a007483088d7f6f20844800cb8" + integrity sha512-a3Qy7AIht2nHiZPJ/HiMdyiOLiDN+iKp1R916SEbgFi9MiOyRHFeLCCPQHMf1O8YXfb0hbHr5IFnfZLfUcJaWQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.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-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.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.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.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.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.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" + "@smithy/util-waiter" "^3.1.2" + tslib "^2.6.2" + "@aws-sdk/client-lambda@^3.509.0": version "3.569.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-lambda/-/client-lambda-3.569.0.tgz#b95b6c5186c87ce53b3de2607faebdad1031eddc" @@ -313,6 +573,58 @@ "@smithy/util-waiter" "^2.2.0" tslib "^2.6.2" +"@aws-sdk/client-lambda@^3.588.0": + version "3.624.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-lambda/-/client-lambda-3.624.0.tgz#9d674bc061ba9ca5057426ae6940f5fbb1f73c6b" + integrity sha512-bfhFeg6LoC6AFM68+Gyogq9UpyW83Jwkwobo9CtxSTfaNIOYdKgTOdYtn4pM/bRYrWon4CstJQymIsPbY7ra5Q== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.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-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.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.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.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@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.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.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.3" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.1.2" + tslib "^2.6.2" + "@aws-sdk/client-s3@^3.128.0": version "3.576.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.576.0.tgz#0e2f8f8fdbf1548ed2bd7d782f8fdf2e90131de1" @@ -441,6 +753,70 @@ "@smithy/util-waiter" "^2.2.0" tslib "^2.6.2" +"@aws-sdk/client-s3@^3.588.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.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.620.0" + "@aws-sdk/middleware-sdk-s3" "3.624.0" + "@aws-sdk/middleware-ssec" "3.609.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.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.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.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.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.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.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.3" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.1.2" + tslib "^2.6.2" + "@aws-sdk/client-sso-oidc@3.554.0": version "3.554.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.554.0.tgz#c4002879c89cf5e4a45f39c63b2963f8fab88385" @@ -624,6 +1000,51 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@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.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.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.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.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.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.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.554.0": version "3.554.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.554.0.tgz#fef7b7ee47cad3987b50e9218ec1d11dcd42e32b" @@ -800,6 +1221,50 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@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.624.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.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.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.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.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.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.554.0", "@aws-sdk/client-sts@^3.410.0": version "3.554.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.554.0.tgz#511f1bafe628613f1824274f9c11a9df31ac0b09" @@ -982,6 +1447,52 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@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.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.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.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.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.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.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.554.0": version "3.554.0" resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.554.0.tgz#84def70777ace823efb54451da403bfc125a8571" @@ -1034,6 +1545,21 @@ fast-xml-parser "4.2.5" tslib "^2.6.2" +"@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.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" + "@smithy/util-middleware" "^3.0.3" + fast-xml-parser "4.4.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-env@3.535.0": version "3.535.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz#26248e263a8107953d5496cb3760d4e7c877abcf" @@ -1064,6 +1590,16 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@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.552.0": version "3.552.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.552.0.tgz#ecc88d02cba95621887e6b85b2583e756ad29eb6" @@ -1109,6 +1645,21 @@ "@smithy/util-stream" "^3.0.0" tslib "^2.6.2" +"@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.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" + "@smithy/util-stream" "^3.1.3" + tslib "^2.6.2" + "@aws-sdk/credential-provider-imds@^3.81.0": version "3.374.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.374.0.tgz#19f1d6625b2b91114f3d5c2a479b86a4114620a6" @@ -1182,6 +1733,23 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@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.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.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.554.0": version "3.554.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.554.0.tgz#74e8ae0b69cfba716e57881ace9d6466deedfb5e" @@ -1254,6 +1822,24 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@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.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.535.0": version "3.535.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz#ea1e8a38a32e36bbdc3f75eb03352e6eafa0c659" @@ -1298,6 +1884,17 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@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" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-sso@3.554.0": version "3.554.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.554.0.tgz#83e950685aaadb18d48d51c39f6201d820a5de41" @@ -1350,6 +1947,19 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@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.624.0" + "@aws-sdk/token-providers" "3.614.0" + "@aws-sdk/types" "3.609.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-web-identity@3.554.0": version "3.554.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.554.0.tgz#6076a32066b633a18fc90cae7ed0b874db78a556" @@ -1381,6 +1991,16 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@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.568.0": version "3.568.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.568.0.tgz#790c0943cc097d3a83665131bc9e0743598cc6ca" @@ -1407,6 +2027,19 @@ "@smithy/util-config-provider" "^3.0.0" tslib "^2.6.2" +"@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.1.0" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + tslib "^2.6.2" + "@aws-sdk/middleware-expect-continue@3.572.0": version "3.572.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.572.0.tgz#91df3b88a0a109450db84577609ed19520dfff38" @@ -1427,6 +2060,16 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@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.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/middleware-flexible-checksums@3.572.0": version "3.572.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.572.0.tgz#639ee54f838a5382a69f07351cd783488b6ad89b" @@ -1455,6 +2098,20 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@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.1.0" + "@smithy/types" "^3.3.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@aws-sdk/middleware-host-header@3.535.0": version "3.535.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz#d5264f813592f5e77df25e5a14bbb0e6441812db" @@ -1485,6 +2142,16 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@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.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/middleware-location-constraint@3.567.0": version "3.567.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.567.0.tgz#c469e745a3fa146dd29d0024a9f4d2a498985822" @@ -1503,6 +2170,15 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/middleware-location-constraint@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.609.0.tgz#7ed82d71e5ddcd50683ef2bbde10d1cc2492057e" + integrity sha512-xzsdoTkszGVqGVPjUmgoP7TORiByLueMHieI1fhQL888WPdqctwAx3ES6d/bA9Q/i8jnc6hs+Fjhy8UvBTkE9A== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/middleware-logger@3.535.0": version "3.535.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz#1a8ffd6c368edd6cb32e1edf7b1dced95c1820ee" @@ -1530,6 +2206,15 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/middleware-logger@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz#ed44d201f091b8bac908cbf14724c7a4d492553f" + integrity sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/middleware-recursion-detection@3.535.0": version "3.535.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz#6aa1e1bd1e84730d58a73021b745e20d4341a92d" @@ -1560,6 +2245,26 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@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.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-api-gateway@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-api-gateway/-/middleware-sdk-api-gateway-3.620.0.tgz#479e839455bcfa22952a1080d5598061a1f1f0e3" + integrity sha512-JH8JzZb5CTry5Xit51jwyES8cqihaUWJVS3pcr5L73g8qLDUnvfg2IJJJ7pXs0hVAaCNjDs4L97DW3ity76CUA== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/middleware-sdk-s3@3.572.0": version "3.572.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.572.0.tgz#62534ecbfc55d91fcb768b97bb14f73577c3b00e" @@ -1590,6 +2295,26 @@ "@smithy/util-config-provider" "^3.0.0" tslib "^2.6.2" +"@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.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-middleware" "^3.0.3" + "@smithy/util-stream" "^3.1.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@aws-sdk/middleware-signing@3.572.0": version "3.572.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.572.0.tgz#d3c648e3a280774115003d7ea07860f80f79a19d" @@ -1634,6 +2359,15 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/middleware-ssec@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.609.0.tgz#b87a8bc6133f3f6bdc6801183d0f9dad3f93cf9f" + integrity sha512-GZSD1s7+JswWOTamVap79QiDaIV7byJFssBW68GYjyRS5EBjNfwA/8s+6uE6g39R3ojyTbYOmvcANoZEhSULXg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/middleware-user-agent@3.540.0": version "3.540.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz#4981c64c1eeb6b5c453bce02d060b8c71d44994d" @@ -1678,6 +2412,17 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@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.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/property-provider@^3.78.0": version "3.374.0" resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.374.0.tgz#ba302bfd9cdd4751efdb50ef60e7ee3cbd09c62a" @@ -1734,6 +2479,18 @@ "@smithy/util-middleware" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/region-config-resolver@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz#9cebb31a5bcfea2a41891fff7f28d0164cde179a" + integrity sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.3" + tslib "^2.6.2" + "@aws-sdk/shared-ini-file-loader@^3.80.0": version "3.374.0" resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.374.0.tgz#dc992051b59169a33cf1acef2d268b7c8e3470f5" @@ -1766,6 +2523,18 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@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.624.0" + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/token-providers@3.554.0": version "3.554.0" resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.554.0.tgz#5a20ce273451654a1382f772ef119a9a156f537c" @@ -1811,6 +2580,17 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/token-providers@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz#88da04f6d4ce916b0b0f6e045676d04201fb47fd" + integrity sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw== + dependencies: + "@aws-sdk/types" "3.609.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/types@3.535.0", "@aws-sdk/types@^3.222.0": version "3.535.0" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.535.0.tgz#5e6479f31299dd9df170e63f4d10fe739008cf04" @@ -1835,6 +2615,14 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/types@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.609.0.tgz#06b39d799c9f197a7b43670243e8e78a3bf7d6a5" + integrity sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/util-arn-parser@3.568.0": version "3.568.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz#6a19a8c6bbaa520b6be1c278b2b8c17875b91527" @@ -1882,6 +2670,16 @@ "@smithy/util-endpoints" "^2.0.0" tslib "^2.6.2" +"@aws-sdk/util-endpoints@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz#6564b0ffd7dc3728221e9f9821f5aab1cc58468e" + integrity sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + "@smithy/util-endpoints" "^2.0.5" + tslib "^2.6.2" + "@aws-sdk/util-locate-window@^3.0.0": version "3.535.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz#0200a336fddd47dd6567ce15d01f62be50a315d7" @@ -1919,6 +2717,16 @@ bowser "^2.11.0" tslib "^2.6.2" +"@aws-sdk/util-user-agent-browser@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz#aa15421b2e32ae8bc589dac2bd6e8969832ce588" + integrity sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + bowser "^2.11.0" + tslib "^2.6.2" + "@aws-sdk/util-user-agent-node@3.535.0": version "3.535.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz#f5c26fb6f3f561d3cf35f96f303b1775afad0a5b" @@ -1949,6 +2757,16 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/util-user-agent-node@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz#1e3f49a80f841a3f21647baed2adce01aac5beb5" + integrity sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/util-utf8-browser@^3.0.0": version "3.259.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" @@ -1972,6 +2790,14 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/xml-builder@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.609.0.tgz#eeb3d5cde000a23cfeeefe0354b6193440dc7d87" + integrity sha512-l9XxNcA4HX98rwCC2/KoiWcmEiRfZe4G+mYwDbCFT87JIMj6GBhLDkAzr/W8KAaA2IDr8Vc6J8fZPgVulxxfMA== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@babel/code-frame@7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" @@ -3880,6 +4706,14 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/abort-controller@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.1.tgz#291210611ff6afecfc198d0ca72d5771d8461d16" + integrity sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/chunked-blob-reader-native@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz#aff8bddf9fdc1052f885e1b15aa81e4d274e541e" @@ -3932,6 +4766,17 @@ "@smithy/util-middleware" "^3.0.0" tslib "^2.6.2" +"@smithy/config-resolver@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.5.tgz#727978bba7ace754c741c259486a19d3083431fd" + integrity sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA== + dependencies: + "@smithy/node-config-provider" "^3.1.4" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.3" + tslib "^2.6.2" + "@smithy/core@^1.4.2": version "1.4.2" resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.4.2.tgz#1c3ed886d403041ce5bd2d816448420c57baa19c" @@ -3960,6 +4805,20 @@ "@smithy/util-middleware" "^3.0.0" tslib "^2.6.2" +"@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.1.0" + "@smithy/middleware-retry" "^3.0.14" + "@smithy/middleware-serde" "^3.0.3" + "@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@^1.0.1": version "1.1.0" resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-1.1.0.tgz#4d9444c4c8de70143c3f16bdba188b0e42cb48f9" @@ -3993,6 +4852,17 @@ "@smithy/url-parser" "^3.0.0" tslib "^2.6.2" +"@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" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + tslib "^2.6.2" + "@smithy/eventstream-codec@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz#63d74fa817188995eb55e792a38060b0ede98dc4" @@ -4013,6 +4883,16 @@ "@smithy/util-hex-encoding" "^3.0.0" tslib "^2.6.2" +"@smithy/eventstream-codec@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.2.tgz#4a1c72b34400631b829241151984a1ad8c4f963c" + integrity sha512-0mBcu49JWt4MXhrhRAlxASNy0IjDRFU+aWNDRal9OtUJvJNiwDuyKMUONSOjLjSCeGwZaE0wOErdqULer8r7yw== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^3.3.0" + "@smithy/util-hex-encoding" "^3.0.0" + tslib "^2.6.2" + "@smithy/eventstream-serde-browser@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz#69c93cc0210f04caeb0770856ef88c9a82564e11" @@ -4031,6 +4911,15 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@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== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/eventstream-serde-config-resolver@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz#23c8698ce594a128bcc556153efb7fecf6d04f87" @@ -4047,6 +4936,14 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/eventstream-serde-config-resolver@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.3.tgz#f852e096d0ad112363b4685e1d441088d1fce67a" + integrity sha512-NVTYjOuYpGfrN/VbRQgn31x73KDLfCXCsFdad8DiIc3IcdxL+dYA9zEQPyOP7Fy2QL8CPy2WE4WCUD+ZsLNfaQ== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/eventstream-serde-node@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz#b82870a838b1bd32ad6e0cf33a520191a325508e" @@ -4065,6 +4962,15 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/eventstream-serde-node@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.4.tgz#6301752ca51b3ebabcd2dec112f1dacd990de4c1" + integrity sha512-mjlG0OzGAYuUpdUpflfb9zyLrBGgmQmrobNT8b42ZTsGv/J03+t24uhhtVEKG/b2jFtPIHF74Bq+VUtbzEKOKg== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/eventstream-serde-universal@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz#a75e330040d5e2ca2ac0d8bccde3e390ac5afd38" @@ -4083,6 +4989,15 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/eventstream-serde-universal@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.4.tgz#6754de5b94bdc286d8ef1d6bcf22d80f6ab68f30" + integrity sha512-Od9dv8zh3PgOD7Vj4T3HSuox16n0VG8jJIM2gvKASL6aCtcS8CfHZDWe1Ik3ZXW6xBouU+45Q5wgoliWDZiJ0A== + dependencies: + "@smithy/eventstream-codec" "^3.1.2" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/fetch-http-handler@^2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz#0b8e1562807fdf91fe7dd5cde620d7a03ddc10ac" @@ -4105,6 +5020,17 @@ "@smithy/util-base64" "^3.0.0" tslib "^2.6.2" +"@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.1.0" + "@smithy/querystring-builder" "^3.0.3" + "@smithy/types" "^3.3.0" + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + "@smithy/hash-blob-browser@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz#d26db0e88b8fc4b59ee487bd026363ea9b48cf3a" @@ -4125,6 +5051,16 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/hash-blob-browser@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.2.tgz#90281c1f183d93686fb4f26107f1819644d68829" + integrity sha512-hAbfqN2UbISltakCC2TP0kx4LqXBttEv2MqSPE98gVuDFMf05lU+TpC41QtqGP3Ff5A3GwZMPfKnEy0VmEUpmg== + dependencies: + "@smithy/chunked-blob-reader" "^3.0.0" + "@smithy/chunked-blob-reader-native" "^3.0.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/hash-node@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.2.0.tgz#df29e1e64811be905cb3577703b0e2d0b07fc5cc" @@ -4145,6 +5081,16 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@smithy/hash-node@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.3.tgz#82c5cb7b0f1a29ee7319081853d2d158c07dff24" + integrity sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw== + dependencies: + "@smithy/types" "^3.3.0" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@smithy/hash-stream-node@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz#7b341fdc89851af6b98d8c01e47185caf0a4b2d9" @@ -4163,6 +5109,15 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@smithy/hash-stream-node@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.1.2.tgz#89f0290ae44b113863878e75b10c484ff48af71c" + integrity sha512-PBgDMeEdDzi6JxKwbfBtwQG9eT9cVwsf0dZzLXoJF4sHKHs5HEo/3lJWpn6jibfJwT34I1EBXpBnZE8AxAft6g== + dependencies: + "@smithy/types" "^3.3.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@smithy/invalid-dependency@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz#ee3d8980022cb5edb514ac187d159b3e773640f0" @@ -4179,6 +5134,14 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/invalid-dependency@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz#8d9fd70e3a94b565a4eba4ffbdc95238e1930528" + integrity sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/is-array-buffer@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" @@ -4211,6 +5174,15 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@smithy/md5-js@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.3.tgz#55ee40aa24075b096c39f7910590c18ff7660c98" + integrity sha512-O/SAkGVwpWmelpj/8yDtsaVe6sINHLB1q8YE/+ZQbDxIw3SRLbTZuRaI10K12sVoENdnHqzPp5i3/H+BcZ3m3Q== + dependencies: + "@smithy/types" "^3.3.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@smithy/middleware-content-length@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz#a82e97bd83d8deab69e07fea4512563bedb9461a" @@ -4229,6 +5201,15 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@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.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/middleware-endpoint@^2.5.1": version "2.5.1" resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz#1333c58304aff4d843e8ef4b85c8cb88975dd5ad" @@ -4255,6 +5236,19 @@ "@smithy/util-middleware" "^3.0.0" tslib "^2.6.2" +"@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" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-middleware" "^3.0.3" + tslib "^2.6.2" + "@smithy/middleware-retry@^2.3.1": version "2.3.1" resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz#d6fdce94f2f826642c01b4448e97a509c4556ede" @@ -4285,6 +5279,21 @@ tslib "^2.6.2" uuid "^9.0.1" +"@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.1.0" + "@smithy/service-error-classification" "^3.0.3" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + tslib "^2.6.2" + uuid "^9.0.1" + "@smithy/middleware-serde@^2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz#a7615ba646a88b6f695f2d55de13d8158181dd13" @@ -4301,6 +5310,14 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/middleware-serde@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz#74d974460f74d99f38c861e6862984543a880a66" + integrity sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/middleware-stack@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz#3fb49eae6313f16f6f30fdaf28e11a7321f34d9f" @@ -4317,6 +5334,14 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/middleware-stack@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz#91845c7e61e6f137fa912b623b6def719a4f6ce7" + integrity sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/node-config-provider@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-1.1.0.tgz#86c64e4ef6a557863422a236ba10aa7ed51ad85d" @@ -4347,6 +5372,16 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/node-config-provider@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz#05647bed666aa8036a1ad72323c1942e5d421be1" + integrity sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ== + dependencies: + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/node-http-handler@^2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz#7b5e0565dd23d340380489bd5fe4316d2bed32de" @@ -4369,6 +5404,17 @@ "@smithy/types" "^3.0.0" tslib "^2.6.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.1.0" + "@smithy/querystring-builder" "^3.0.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/property-provider@^1.0.1", "@smithy/property-provider@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-1.2.0.tgz#2e4ca34b0994ec6de734316c0093e671a1bfa5c7" @@ -4393,6 +5439,14 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/property-provider@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.3.tgz#afd57ea82a3f6c79fbda95e3cb85c0ee0a79f39a" + integrity sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/protocol-http@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.3.0.tgz#a37df7b4bb4960cdda560ce49acfd64c455e4090" @@ -4409,6 +5463,14 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@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" + "@smithy/querystring-builder@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz#22937e19fcd0aaa1a3e614ef8cb6f8e86756a4ef" @@ -4427,6 +5489,15 @@ "@smithy/util-uri-escape" "^3.0.0" tslib "^2.6.2" +"@smithy/querystring-builder@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz#6b0e566f885bb84938d077c69e8f8555f686af13" + integrity sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw== + dependencies: + "@smithy/types" "^3.3.0" + "@smithy/util-uri-escape" "^3.0.0" + tslib "^2.6.2" + "@smithy/querystring-parser@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-1.1.0.tgz#4bf4be6d1db8b769d346a0d98c5b0db4e99a8ba6" @@ -4451,6 +5522,14 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/querystring-parser@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz#272a6b83f88dfcbbec8283d72a6bde850cc00091" + integrity sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/service-error-classification@^2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz#0568a977cc0db36299d8703a5d8609c1f600c005" @@ -4465,6 +5544,13 @@ dependencies: "@smithy/types" "^3.0.0" +"@smithy/service-error-classification@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz#73484255060a094aa9372f6cd972dcaf97e3ce80" + integrity sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ== + dependencies: + "@smithy/types" "^3.3.0" + "@smithy/shared-ini-file-loader@^1.0.1", "@smithy/shared-ini-file-loader@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-1.1.0.tgz#144a03a303590ef7d465ebcb21ffc2a52efc3389" @@ -4489,6 +5575,14 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/shared-ini-file-loader@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz#7dceaf5a5307a2ee347ace8aba17312a1a3ede15" + integrity sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/signature-v4@^2.2.1", "@smithy/signature-v4@^2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.3.0.tgz#c30dd4028ae50c607db99459981cce8cdab7a3fd" @@ -4515,6 +5609,20 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@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" + "@smithy/util-uri-escape" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@smithy/smithy-client@^2.5.1": version "2.5.1" resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.5.1.tgz#0fd2efff09dc65500d260e590f7541f8a387eae3" @@ -4539,6 +5647,18 @@ "@smithy/util-stream" "^3.0.1" tslib "^2.6.2" +"@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.1.0" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + "@smithy/util-stream" "^3.1.3" + tslib "^2.6.2" + "@smithy/types@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@smithy/types/-/types-1.2.0.tgz#9dc65767b0ee3d6681704fcc67665d6fc9b6a34e" @@ -4560,6 +5680,13 @@ dependencies: tslib "^2.6.2" +"@smithy/types@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.3.0.tgz#fae037c733d09bc758946a01a3de0ef6e210b16b" + integrity sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA== + dependencies: + tslib "^2.6.2" + "@smithy/url-parser@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-1.1.0.tgz#1d88af653b02fda0be59064bfe5420c0b34b4dcb" @@ -4587,6 +5714,15 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/url-parser@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.3.tgz#e8a060d9810b24b1870385fc2b02485b8a6c5955" + integrity sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A== + dependencies: + "@smithy/querystring-parser" "^3.0.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/util-base64@^2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.3.0.tgz#312dbb4d73fb94249c7261aee52de4195c2dd8e2" @@ -4685,6 +5821,17 @@ bowser "^2.11.0" tslib "^2.6.2" +"@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.12" + "@smithy/types" "^3.3.0" + bowser "^2.11.0" + tslib "^2.6.2" + "@smithy/util-defaults-mode-node@^2.3.1": version "2.3.1" resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz#4613210a3d107aadb3f85bd80cb71c796dd8bf0a" @@ -4711,6 +5858,19 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@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.2.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/util-endpoints@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz#b8b805f47e8044c158372f69b88337703117665d" @@ -4729,6 +5889,15 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/util-endpoints@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz#e3a7a4d1c41250bfd2b2d890d591273a7d8934be" + integrity sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg== + dependencies: + "@smithy/node-config-provider" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/util-hex-encoding@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz#87edb7c88c2f422cfca4bb21f1394ae9602c5085" @@ -4759,6 +5928,14 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/util-middleware@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.3.tgz#07bf9602682f5a6c55bc2f0384303f85fc68c87e" + integrity sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/util-retry@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.2.0.tgz#e8e019537ab47ba6b2e87e723ec51ee223422d85" @@ -4777,6 +5954,15 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/util-retry@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.3.tgz#9b2ac0dbb1c81f69812a8affa4d772bebfc0e049" + integrity sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w== + dependencies: + "@smithy/service-error-classification" "^3.0.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@smithy/util-stream@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.2.0.tgz#b1279e417992a0f74afa78d7501658f174ed7370" @@ -4805,6 +5991,20 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@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.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" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@smithy/util-uri-escape@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz#56f5764051a33b67bc93fdd2a869f971b0635406" @@ -4819,7 +6019,7 @@ dependencies: tslib "^2.6.2" -"@smithy/util-utf8@^2.3.0": +"@smithy/util-utf8@^2.0.0", "@smithy/util-utf8@^2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== @@ -4853,6 +6053,15 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@smithy/util-waiter@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.1.2.tgz#2d40c3312f3537feee763459a19acafab4c75cf3" + integrity sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw== + dependencies: + "@smithy/abort-controller" "^3.1.1" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@stratiformdigital/serverless-stage-destroyer@^2.0.0": version "2.1.1" resolved "https://registry.yarnpkg.com/@stratiformdigital/serverless-stage-destroyer/-/serverless-stage-destroyer-2.1.1.tgz#6c0a5bde84d8e0646aa4ddf9ea0b0b9b099495fb" @@ -7975,6 +9184,13 @@ fast-xml-parser@4.2.5: dependencies: strnum "^1.0.5" +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" + fastest-levenshtein@^1.0.16: version "1.0.16" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" @@ -11927,11 +13143,17 @@ serverless-webpack@^5.6.1: optionalDependencies: ts-node ">= 8.3.0" -serverless@^3.38.0: - version "3.38.0" - resolved "https://registry.yarnpkg.com/serverless/-/serverless-3.38.0.tgz#9275763cab3ec1cd29635520cf24b9b5e7202583" - integrity sha512-NJE1vOn8XmQEqfU9UxmVhkUFaCRmx6FhYw/jITN863WlOt4Y3PQbj3hwQyIb5QS1ZrXFq5ojklwewUXH7xGpdA== - dependencies: +serverless@^3.39.0: + version "3.39.0" + resolved "https://registry.yarnpkg.com/serverless/-/serverless-3.39.0.tgz#699fbea4d0b0ba0baba0510be743f9d025ac363d" + integrity sha512-FHI3fhe4TRS8+ez/KA7HmO3lt3fAynO+N1pCCzYRThMWG0J8RWCI0BI+K0mw9+sEV+QpBCpZRZbuGyUaTsaQew== + dependencies: + "@aws-sdk/client-api-gateway" "^3.588.0" + "@aws-sdk/client-cognito-identity-provider" "^3.588.0" + "@aws-sdk/client-eventbridge" "^3.588.0" + "@aws-sdk/client-iam" "^3.588.0" + "@aws-sdk/client-lambda" "^3.588.0" + "@aws-sdk/client-s3" "^3.588.0" "@serverless/dashboard-plugin" "^7.2.0" "@serverless/platform-client" "^4.5.1" "@serverless/utils" "^6.13.1" From dcc2318ad77c4d7baa8bf587f54d8b0247c0d356 Mon Sep 17 00:00:00 2001 From: Garrett Rabian <57802560+gmrabian@users.noreply.github.com> Date: Wed, 7 Aug 2024 10:39:30 -0400 Subject: [PATCH 02/18] remove references to branch master (#139727) --- .github/workflows/deploy.yml | 2 +- README.md | 9 +++------ services/carts-bigmac-streams/serverless.yml | 8 ++------ services/database/serverless.yml | 1 - services/ui-auth/serverless.yml | 1 - services/ui-src/serverless.yml | 1 - services/uploads/serverless.yml | 1 - 7 files changed, 6 insertions(+), 17 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 69d5d21c5..4b00500a5 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -7,7 +7,7 @@ on: - "!skipci*" concurrency: - # Ensuring group key matches the destroy workflow currently in master + # Ensuring group key matches the destroy workflow currently in main group: ${{ github.workflow }}-${{ github.ref_name }} cancel-in-progress: false diff --git a/README.md b/README.md index 3d65460e6..13d33b354 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![Maintainability](https://api.codeclimate.com/v1/badges/f1775f53aedf747e85b2/maintainability)](https://codeclimate.com/repos/6449718c21275100df510ea9/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/f1775f53aedf747e85b2/test_coverage)](https://codeclimate.com/repos/6449718c21275100df510ea9/test_coverage) -### Integration Environment Deploy Status: +## Integration Environment Deploy Status: | Branch | Build Status | | ------------- | ------------- | | main | ![deploy](https://github.com/Enterprise-CMCS/macpro-mdct-carts/actions/workflows/deploy.yml/badge.svg) | @@ -16,7 +16,7 @@ CARTS is the CMCS MDCT application for collecting state data related to coverage Under section 2108(a) of the Act, states must assess the operation of their separate CHIP and Medicaid expansion programs and the progress made in reducing the number of uncovered, low-income children. The results of the assessment are reported to the Secretary by January 1 following the end of the FY in the CHIP Annual Reporting Template System (CARTS). CARTS collects information about programmatic changes, performance goals, program operation, program financing, program challenges and accomplishments. -_Note: The [`main`](https://github.com/Enterprise-CMCS/macpro-mdct-carts/tree/main) branch contains CARTSv3. All code related to CARTSv2 (legacy) can be found in the [`master`](https://github.com/Enterprise-CMCS/macpro-mdct-carts/tree/master) branch._ +_Note: The [`main`](https://github.com/Enterprise-CMCS/macpro-mdct-carts/tree/main) branch contains CARTSv3. All code related to CARTSv2 (legacy) can be found in the [`skipci-archive-master`](https://github.com/Enterprise-CMCS/macpro-mdct-carts/tree/skipci-archive-master) branch._ ## Table of contents @@ -115,10 +115,7 @@ On the SEDS side, this topic is updated on every submission of seds data, but CA - 4th quarter data. - The rollover for a "new year" is October, and future submissions are not recognized until that threshold -Updates outside of that time frame will need to be manually corrected in CARTS, or the integration will need to be modifed to collect data for old forms. CARTS additionally looks for the `enrollmentCounts` property which is only included in forms 21E and 64.21E (question 7), either by manual trigger or update. See SEDS files: - -- [generateEnrollmentTotals](https://github.com/Enterprise-CMCS/macpro-mdct-seds/blob/master/services/app-api/handlers/state-forms/post/generateEnrollmentTotals.js) -- [updateStateForms](https://github.com/Enterprise-CMCS/macpro-mdct-seds/blob/master/services/app-api/handlers/state-forms/post/updateStateForms.js) +Updates outside of that time frame will need to be manually corrected in CARTS, or the integration will need to be modifed to collect data for old forms. CARTS additionally looks for the `enrollmentCounts` property which is only included in forms 21E and 64.21E (question 7), either by manual trigger or update. For testing convenience, stateuser2 points at AL in CARTS and the stateuser points at AL in SEDS. diff --git a/services/carts-bigmac-streams/serverless.yml b/services/carts-bigmac-streams/serverless.yml index 2738c7ed2..362d3f800 100644 --- a/services/carts-bigmac-streams/serverless.yml +++ b/services/carts-bigmac-streams/serverless.yml @@ -19,14 +19,10 @@ custom: stage: ${opt:stage, self:provider.stage} region: ${opt:region, self:provider.region} serverlessTerminationProtection: - stages: # This is a list of common names for important envs that should not be destroyed. You can remove the stage names your project doesn't use; this list is meant to be inclusive. - - master + stages: + - main - val - production - - develop - - main - - impl - - prod kafkaConnectImage: ${ssm:/configuration/${self:custom.stage}/kafka_connect_image, ssm:/configuration/default/kafka_connect_image,"confluentinc/cp-kafka-connect:6.2.0"} bootstrapBrokerStringTls: ${ssm:/configuration/${self:custom.stage}/bigmac/bootstrapBrokerStringTls, ssm:/configuration/default/bigmac/bootstrapBrokerStringTls} vpcId: ${ssm:/configuration/${self:custom.stage}/vpc/id, ssm:/configuration/default/vpc/id} diff --git a/services/database/serverless.yml b/services/database/serverless.yml index 4cb11570c..cd23c4b87 100644 --- a/services/database/serverless.yml +++ b/services/database/serverless.yml @@ -21,7 +21,6 @@ custom: serverlessTerminationProtection: stages: - main - - master - val - production acsTableName: ${self:custom.stage}-acs diff --git a/services/ui-auth/serverless.yml b/services/ui-auth/serverless.yml index 068112c66..f309f8443 100644 --- a/services/ui-auth/serverless.yml +++ b/services/ui-auth/serverless.yml @@ -42,7 +42,6 @@ custom: serverlessTerminationProtection: stages: - main - - master - val - production sesSourceEmailAddress: ${ssm:/configuration/${self:custom.stage}/sesSourceEmailAddress, ssm:/configuration/default/sesSourceEmailAddress, ""} diff --git a/services/ui-src/serverless.yml b/services/ui-src/serverless.yml index 711d6d61f..eff1d6bdf 100644 --- a/services/ui-src/serverless.yml +++ b/services/ui-src/serverless.yml @@ -29,7 +29,6 @@ custom: serverlessTerminationProtection: stages: - main - - master - val - production api_region: ${param:ApiRegion} diff --git a/services/uploads/serverless.yml b/services/uploads/serverless.yml index 074a35739..f08d11186 100644 --- a/services/uploads/serverless.yml +++ b/services/uploads/serverless.yml @@ -46,7 +46,6 @@ custom: serverlessTerminationProtection: stages: - main - - master - val - production scripts: From 24509fef17d1e63b0df4ad264bb6ff2b7fdfcb55 Mon Sep 17 00:00:00 2001 From: Garrett Rabian <57802560+gmrabian@users.noreply.github.com> Date: Wed, 7 Aug 2024 11:01:22 -0400 Subject: [PATCH 03/18] Fix readme branch reference (#139736) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 13d33b354..872ff60c8 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ CARTS is the CMCS MDCT application for collecting state data related to coverage Under section 2108(a) of the Act, states must assess the operation of their separate CHIP and Medicaid expansion programs and the progress made in reducing the number of uncovered, low-income children. The results of the assessment are reported to the Secretary by January 1 following the end of the FY in the CHIP Annual Reporting Template System (CARTS). CARTS collects information about programmatic changes, performance goals, program operation, program financing, program challenges and accomplishments. -_Note: The [`main`](https://github.com/Enterprise-CMCS/macpro-mdct-carts/tree/main) branch contains CARTSv3. All code related to CARTSv2 (legacy) can be found in the [`skipci-archive-master`](https://github.com/Enterprise-CMCS/macpro-mdct-carts/tree/skipci-archive-master) branch._ +_Note: The [`main`](https://github.com/Enterprise-CMCS/macpro-mdct-carts/tree/main) branch contains CARTSv3. All code related to CARTSv2 (legacy) can be found in the [`skipci-archive-carts-v2`](https://github.com/Enterprise-CMCS/macpro-mdct-carts/tree/skipci-archive-carts-v2) branch._ ## Table of contents From d46be2964c0e623dcde29160ada7067c4c8ccce1 Mon Sep 17 00:00:00 2001 From: dwhitestratiform <52459927+dwhitestratiform@users.noreply.github.com> Date: Mon, 12 Aug 2024 10:27:56 -0400 Subject: [PATCH 04/18] Adding WAF to sit in front of cognito for additional security (#139738) --- services/ui-auth/serverless.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/services/ui-auth/serverless.yml b/services/ui-auth/serverless.yml index f309f8443..b8b50f50b 100644 --- a/services/ui-auth/serverless.yml +++ b/services/ui-auth/serverless.yml @@ -29,6 +29,7 @@ plugins: - serverless-bundle - serverless-iam-helper - serverless-s3-bucket-helper + - "@enterprise-cmcs/serverless-waf-plugin" s3BucketHelper: loggingConfiguration: @@ -39,6 +40,11 @@ custom: project: "carts" stage: ${opt:stage, self:provider.stage} region: ${opt:region, self:provider.region} + wafPlugin: + name: ${self:service}-${self:custom.stage}-webacl-waf + wafExcludeRules: + awsCommon: + - "SizeRestrictions_BODY" serverlessTerminationProtection: stages: - main @@ -115,6 +121,18 @@ resources: StringAttributeConstraints: MinLength: 0 MaxLength: 256 + UserPoolAddOns: + AdvancedSecurityMode: ENFORCED + UserPoolTags: + Name: ${self:custom.stage}-user-pool + + # Associate the WAF Web ACL with the Cognito User Pool + CognitoUserPoolWAFAssociation: + Type: 'AWS::WAFv2::WebACLAssociation' + Properties: + ResourceArn: !GetAtt CognitoUserPool.Arn + WebACLArn: !GetAtt WafPluginAcl.Arn + CognitoUserPoolClient: Type: AWS::Cognito::UserPoolClient Properties: From b30579228b4747296a20753a7ba53b0945927af6 Mon Sep 17 00:00:00 2001 From: Nick Summers Date: Wed, 14 Aug 2024 12:26:10 -0400 Subject: [PATCH 05/18] Convert Stateheader to functional component (#139728) --- .../src/components/layout/StateHeader.jsx | 38 ++++++++----------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/services/ui-src/src/components/layout/StateHeader.jsx b/services/ui-src/src/components/layout/StateHeader.jsx index b37c25366..2b8e09e95 100644 --- a/services/ui-src/src/components/layout/StateHeader.jsx +++ b/services/ui-src/src/components/layout/StateHeader.jsx @@ -1,27 +1,21 @@ import React from "react"; -import PropTypes from "prop-types"; -import { connect } from "react-redux"; +import { useSelector } from "react-redux"; -const StateHeader = ({ imageURI, name }) => ( -
-
- {name} +const StateHeader = () => { + const { name, imageURI } = useSelector((state) => state.stateUser); + + return ( +
+
+ {name} +
+
{name}
-
{name}
-
-); -StateHeader.propTypes = { - imageURI: PropTypes.string.isRequired, - name: PropTypes.string.isRequired, + ); }; -const mapStateToProps = (state) => ({ - name: state.stateUser.name, - imageURI: state.stateUser.imageURI, -}); - -export default connect(mapStateToProps)(StateHeader); +export default StateHeader; From 736ed2ee692c379e6875dd588b0ca513d773250e Mon Sep 17 00:00:00 2001 From: Nick Summers Date: Wed, 14 Aug 2024 12:26:47 -0400 Subject: [PATCH 06/18] Convert Timeout to functional component (#139729) --- .../ui-src/src/components/layout/Timeout.jsx | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/services/ui-src/src/components/layout/Timeout.jsx b/services/ui-src/src/components/layout/Timeout.jsx index 38f60b036..5a56ada11 100644 --- a/services/ui-src/src/components/layout/Timeout.jsx +++ b/services/ui-src/src/components/layout/Timeout.jsx @@ -1,24 +1,30 @@ import React, { useEffect, useState } from "react"; -import { connect } from "react-redux"; -import PropTypes from "prop-types"; -import { Dialog } from "@cmsgov/design-system"; +import { useSelector } from "react-redux"; import { useHistory } from "react-router-dom"; +//components +import { Dialog } from "@cmsgov/design-system"; +import moment from "moment"; +//auth import { refreshCredentials, updateTimeout, useUser, } from "../../hooks/authHooks"; -import moment from "moment"; +//types +import PropTypes from "prop-types"; const calculateTimeLeft = (expiresAt) => { if (!expiresAt) return 0; return expiresAt.diff(moment()) / 1000; }; -const Timeout = ({ showTimeout, expiresAt }) => { +const Timeout = () => { + const { showTimeout, expiresAt } = useSelector((state) => state.stateUser); const { logout } = useUser(); - const [timeLeft, setTimeLeft] = useState(calculateTimeLeft(expiresAt)); const history = useHistory(); + + const [timeLeft, setTimeLeft] = useState(calculateTimeLeft(expiresAt)); + useEffect(() => { const unlisten = history.listen(() => { updateTimeout(); @@ -93,9 +99,4 @@ Timeout.propTypes = { expiresAt: PropTypes.any.isRequired, }; -const mapState = (state) => ({ - showTimeout: state.stateUser.showTimeout, - expiresAt: state.stateUser.expiresAt, -}); - -export default connect(mapState)(Timeout); +export default Timeout; From ddfc2e4633e92e2b6967a6581701d1f40897b800 Mon Sep 17 00:00:00 2001 From: Nick Summers Date: Wed, 14 Aug 2024 12:27:40 -0400 Subject: [PATCH 07/18] Convert Form Actions Component to use hooks (#139732) --- .../src/components/layout/FormActions.jsx | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/services/ui-src/src/components/layout/FormActions.jsx b/services/ui-src/src/components/layout/FormActions.jsx index cd2f3114d..8013054bd 100644 --- a/services/ui-src/src/components/layout/FormActions.jsx +++ b/services/ui-src/src/components/layout/FormActions.jsx @@ -1,9 +1,10 @@ import React, { useState, useEffect, useRef } from "react"; +import { useSelector, shallowEqual } from "react-redux"; +// components import { Button } from "@cmsgov/design-system"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faPrint, faWindowClose } from "@fortawesome/free-solid-svg-icons"; -import { connect } from "react-redux"; -import PropTypes from "prop-types"; +//types import { AppRoles } from "../../types"; /** @@ -12,10 +13,14 @@ import { AppRoles } from "../../types"; * @returns {JSX.Element} * @constructor */ -const FormActions = (props) => { +const FormActions = () => { + const [currentUser, formYear] = useSelector( + (state) => [state.stateUser.currentUser, state.global.formYear], + shallowEqual + ); + // Initialise printDialogeRef const printDialogeRef = useRef(null); - const { currentUser, formYear } = props; // Get section IDs and subsection IDs for printing single section let searchParams = document.location.pathname @@ -163,15 +168,4 @@ const FormActions = (props) => { ); }; -FormActions.propTypes = { - currentUser: PropTypes.object.isRequired, - formYear: PropTypes.number.isRequired, -}; - -export const mapStateToProps = (state) => ({ - currentUser: state.stateUser.currentUser, - formYear: state.global.formYear, - printType: state.global.printType, -}); - -export default connect(mapStateToProps)(FormActions); +export default FormActions; From e98c3cb609cf335a4a56104ccf0faf378abd068f Mon Sep 17 00:00:00 2001 From: Nick Summers Date: Wed, 14 Aug 2024 12:28:21 -0400 Subject: [PATCH 08/18] Convert FormNavigation to use hooks (#139733) --- .../src/components/layout/FormNavigation.jsx | 35 +++++++++---------- services/ui-src/src/store/selectors.js | 7 ++-- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/services/ui-src/src/components/layout/FormNavigation.jsx b/services/ui-src/src/components/layout/FormNavigation.jsx index 8f3d3222e..967c5c242 100644 --- a/services/ui-src/src/components/layout/FormNavigation.jsx +++ b/services/ui-src/src/components/layout/FormNavigation.jsx @@ -1,17 +1,28 @@ import React from "react"; -import PropTypes from "prop-types"; +import { useSelector, shallowEqual } from "react-redux"; +import { useHistory, useLocation } from "react-router-dom"; + +//components import { Button } from "@cmsgov/design-system"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faAngleLeft, faAngleRight } from "@fortawesome/free-solid-svg-icons"; -import { connect } from "react-redux"; -import { withRouter } from "react-router-dom"; +//selectors import { selectSectionsForNav } from "../../store/selectors"; +//types import { AppRoles } from "../../types"; const idToUrl = (id) => `/sections/${id.replace(/-/g, "/")}`; -const FormNavigation = (props) => { - const { history, location, sections, role } = props; +const FormNavigation = () => { + const history = useHistory(); + const location = useLocation(); + + const [formData, role] = useSelector( + (state) => [state.formData, state.stateUser?.currentUser?.role], + shallowEqual + ); + + const sections = selectSectionsForNav(formData); const items = []; sections.forEach((section) => { @@ -120,16 +131,4 @@ const FormNavigation = (props) => { ); }; -FormNavigation.propTypes = { - history: PropTypes.object.isRequired, - location: PropTypes.object.isRequired, - sections: PropTypes.array.isRequired, - role: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]).isRequired, -}; - -const mapStateToProps = (state) => ({ - sections: selectSectionsForNav(state), - role: state.stateUser?.currentUser?.role, -}); - -export default connect(mapStateToProps)(withRouter(FormNavigation)); +export default FormNavigation; diff --git a/services/ui-src/src/store/selectors.js b/services/ui-src/src/store/selectors.js index fcd1b9c16..2fec44467 100644 --- a/services/ui-src/src/store/selectors.js +++ b/services/ui-src/src/store/selectors.js @@ -122,10 +122,9 @@ export const selectQuestionsForPart = (state, partId) => { return filteredQuestions; }; -export const selectSectionsForNav = (state) => { - if (state.formData) { - const sections = state.formData; - return sections.map( +export const selectSectionsForNav = (formData) => { + if (formData) { + return formData.map( ({ contents: { section: { id, ordinal, subsections, title }, From 052a08fae18484e48f65c756dd758252c8e2f710 Mon Sep 17 00:00:00 2001 From: Nick Summers Date: Thu, 15 Aug 2024 15:36:25 -0400 Subject: [PATCH 09/18] Script to remove readonly fields in Section 3c (#139744) --- .../scripts/remove-readonly-in-section-3c.js | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 services/database/scripts/remove-readonly-in-section-3c.js diff --git a/services/database/scripts/remove-readonly-in-section-3c.js b/services/database/scripts/remove-readonly-in-section-3c.js new file mode 100644 index 000000000..22bead5f1 --- /dev/null +++ b/services/database/scripts/remove-readonly-in-section-3c.js @@ -0,0 +1,99 @@ +/* eslint-disable no-console */ +/* + * Local: + * `DYNAMODB_URL="http://localhost:8000" dynamoPrefix="local" node services/database/scripts/remove-readonly-in-section-3c.js` + * Branch: + * dynamoPrefix="YOUR BRANCH NAME" node services/database/scripts/remove-readonly-in-section-3c.js + */ + +const { buildDynamoClient, scan, update } = require("./utils/dynamodb.js"); + +const isLocal = !!process.env.DYNAMODB_URL; + +const sectionTable = isLocal + ? "local-section" + : process.env.dynamoPrefix + "-section"; + +async function handler() { + try { + console.log("Searching for 2023 Forms"); + + buildDynamoClient(); + + console.log(`Processing table ${sectionTable}`); + const existingItems = await scan({ + TableName: sectionTable, + }); + const filteredItems = filter(existingItems); + const transformedItems = await transform(filteredItems); + await update(sectionTable, transformedItems); + console.log(`Touched ${transformedItems.length} in table ${sectionTable}`); + console.debug("Data fix complete"); + + return { + statusCode: 200, + body: "All done!", + }; + } catch (err) { + console.error(err); + return { + statusCode: 500, + body: err.message, + }; + } +} + +function filter(items) { + return items.filter((item) => item.year === 2023 && item.sectionId === 3); +} + +async function transform(items) { + // Touch sync field only + const transformed = items.map((section) => { + console.log("Transforming section!", section); + return updateSection3(section); + }); + + return transformed; +} + +const updateSection3 = (section) => { + section.contents.section.subsections[2].parts.map((part) => { + return recurseAndUpdateQuestions(part.questions, section.pk); + }); + return section; +}; + +const recurseAndUpdateQuestions = (questions, reportBeingTransformed) => { + const fieldstoRemoveReadonly = [ + "2023-03-c-05-19-a", + "2023-03-c-06-10-a", + "2023-03-c-06-11-a", + "2023-03-c-06-12-a", + "2023-03-c-06-13-a", + "2023-03-c-06-14-a", + "2023-03-c-06-15-a", + "2023-03-c-06-16-a", + "2023-03-c-06-17-a", + "2023-03-c-06-18-a", + "2023-03-c-06-19-a", + ]; + for (let question of questions) { + if ( + fieldstoRemoveReadonly.includes(question?.id) && + question?.answer?.readonly + ) { + console.log( + reportBeingTransformed, + "Found and deleting readonly field from question", + question.id + ); + delete question.answer.readonly; + } + if (question?.questions) { + recurseAndUpdateQuestions(question.questions, reportBeingTransformed); + } + } +}; + +handler(); From f7e8cc288639e95ac3bd61fe9a84a75ea742303d Mon Sep 17 00:00:00 2001 From: Nick Summers Date: Fri, 16 Aug 2024 10:31:39 -0400 Subject: [PATCH 10/18] Convert Title to use hooks (#139730) --- .../ui-src/src/components/layout/Title.jsx | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/services/ui-src/src/components/layout/Title.jsx b/services/ui-src/src/components/layout/Title.jsx index e315f2247..5812673a5 100644 --- a/services/ui-src/src/components/layout/Title.jsx +++ b/services/ui-src/src/components/layout/Title.jsx @@ -1,8 +1,17 @@ import React from "react"; +import { useSelector, shallowEqual } from "react-redux"; +//types import PropTypes from "prop-types"; -import { connect } from "react-redux"; -const Title = ({ name, stateName, formYear, urlStateName }) => { +const Title = ({ urlStateName }) => { + const [name, stateName, formYear] = useSelector( + (state) => [ + state.stateUser.name, + state.global.stateName, + state.global.formYear, + ], + shallowEqual + ); const displayStateName = name || urlStateName || stateName || ""; return ( @@ -14,16 +23,7 @@ const Title = ({ name, stateName, formYear, urlStateName }) => { ); }; Title.propTypes = { - name: PropTypes.string, - stateName: PropTypes.string, urlStateName: PropTypes.string, - formYear: PropTypes.number.isRequired, }; -const mapStateToProps = (state) => ({ - name: state.stateUser.name, - stateName: state.global.stateName, - formYear: state.global.formYear, -}); - -export default connect(mapStateToProps)(Title); +export default Title; From 36b01726c1ce7994a0433fb136e3ce91aec4b946 Mon Sep 17 00:00:00 2001 From: Nick Summers Date: Fri, 16 Aug 2024 12:16:42 -0400 Subject: [PATCH 11/18] Remove Section 3cs readonly fields when seeding (#139745) --- .../data/seed-local/seed-section.json | 33 +++++++------------ .../data/seed/seed-section-base-2023.json | 33 +++++++------------ 2 files changed, 22 insertions(+), 44 deletions(-) diff --git a/services/database/data/seed-local/seed-section.json b/services/database/data/seed-local/seed-section.json index ec098c54d..faa2eab30 100644 --- a/services/database/data/seed-local/seed-section.json +++ b/services/database/data/seed-local/seed-section.json @@ -4896,8 +4896,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -5648,8 +5647,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -5744,8 +5742,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -5840,8 +5837,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -5937,8 +5933,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -6033,8 +6028,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -6136,8 +6130,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -6232,8 +6225,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -6328,8 +6320,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -6425,8 +6416,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -6521,8 +6511,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { diff --git a/services/database/data/seed/seed-section-base-2023.json b/services/database/data/seed/seed-section-base-2023.json index bba4ec5ad..f8d6c8d01 100644 --- a/services/database/data/seed/seed-section-base-2023.json +++ b/services/database/data/seed/seed-section-base-2023.json @@ -4888,8 +4888,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -5640,8 +5639,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -5736,8 +5734,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -5832,8 +5829,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -5929,8 +5925,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -6025,8 +6020,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -6128,8 +6122,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -6224,8 +6217,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -6320,8 +6312,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -6417,8 +6408,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { @@ -6513,8 +6503,7 @@ "type": "integer", "label": "Total for all ages (0-16)", "answer": { - "entry": null, - "readonly": true + "entry": null }, "context_data": { "conditional_display": { From a9b56c4e95c7b8b0ac4c7c0f0bab25dc03ab6098 Mon Sep 17 00:00:00 2001 From: dwhitestratiform <52459927+dwhitestratiform@users.noreply.github.com> Date: Mon, 19 Aug 2024 07:41:36 -0400 Subject: [PATCH 12/18] Remove Snyk auto merge and slack notifications (#139747) --- .../post-deploy-slack-notification.yml | 15 ------------ .github/workflows/pull-request.yml | 19 +-------------- .github/workflows/snyk-auto-merge.yml | 24 ------------------- 3 files changed, 1 insertion(+), 57 deletions(-) delete mode 100644 .github/workflows/snyk-auto-merge.yml diff --git a/.github/workflows/post-deploy-slack-notification.yml b/.github/workflows/post-deploy-slack-notification.yml index 9a06a1e06..2fa4ee199 100755 --- a/.github/workflows/post-deploy-slack-notification.yml +++ b/.github/workflows/post-deploy-slack-notification.yml @@ -8,7 +8,6 @@ on: - 'main' - 'val' - 'production' - - 'snyk-**' jobs: notify_on_failure: @@ -24,20 +23,6 @@ jobs: MSG_MINIMAL: true SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} - # Notify the integrations channel only when a Snyk auto merge fails - notify_failed_snyk_auto_merge: - runs-on: ubuntu-latest - #only check branch names that begin with snyk- - if: ${{ github.event.workflow_run.conclusion == 'failure' && startsWith(github.event.workflow_run.head_branch, 'snyk-') }} - steps: - - name: Slack Notification - uses: rtCamp/action-slack-notify@v2 - env: - SLACK_TITLE: ":boom: A Synk auto merge has failed in ${{ github.repository }}" - SLACK_MESSAGE: "${{ github.event.workflow_run.html_url }}" - MSG_MINIMAL: true - SLACK_WEBHOOK: ${{ secrets.INTEGRATIONS_SLACK_WEBHOOK }} - # Sends a slack message to the mdct-prod-releases channel in CMS slack notify_on_prod_release: runs-on: ubuntu-latest diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 90e039c4e..e6cb288b1 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -44,21 +44,4 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PRNUM: ${{ github.event.pull_request.number }} - PR_AUTHOR: ${{ github.event.pull_request.user.login }} - - #Notify the integrations channel only when a Snyk auto merge fails pr checks - notify_on_pr_failure: - runs-on: ubuntu-latest - needs: - - linting - - jest-frontend - - jest-backend - #only check branch names that begin with snyk- - if: ${{ failure() && startsWith(github.head_ref, 'snyk-') }} - steps: - - name: Slack Notification - uses: rtCamp/action-slack-notify@v2 - env: - SLACK_TITLE: ":boom: A Synk auto merge has failed pull request checks in ${{ github.repository }}." - MSG_MINIMAL: true - SLACK_WEBHOOK: ${{ secrets.INTEGRATIONS_SLACK_WEBHOOK }} + PR_AUTHOR: ${{ github.event.pull_request.user.login }} \ No newline at end of file diff --git a/.github/workflows/snyk-auto-merge.yml b/.github/workflows/snyk-auto-merge.yml deleted file mode 100644 index 0694c999a..000000000 --- a/.github/workflows/snyk-auto-merge.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Snyk auto-merge -on: - pull_request: - workflow_dispatch: - -permissions: - pull-requests: write - contents: write - -jobs: - snyk: - runs-on: ubuntu-latest - if: ${{ github.actor == 'mdct-github-service-account' }} - steps: - - name: Auto-approve Snyk PR - run: gh pr review --approve "$PR_URL" - env: - PR_URL: ${{github.event.pull_request.html_url}} - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - - name: Enable auto-merge for Snyk PRs - run: gh pr merge --auto --squash "$PR_URL" - env: - PR_URL: ${{github.event.pull_request.html_url}} - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} From 5de7eab9d3a00c2911efbe2aacb0b4c25037b401 Mon Sep 17 00:00:00 2001 From: Nick Summers Date: Tue, 20 Aug 2024 10:53:55 -0400 Subject: [PATCH 13/18] Convert Part and Subsection (#139737) --- .../ui-src/src/components/layout/Part.jsx | 58 ++++-- .../src/components/layout/Part.test.jsx | 3 + .../src/components/layout/Subsection.jsx | 36 ++-- services/ui-src/src/store/formData.js | 18 +- services/ui-src/src/store/selectors.js | 74 +++++--- services/ui-src/src/util/shouldDisplay.js | 72 ++++---- .../ui-src/src/util/shouldDisplay.test.js | 172 ++++++++++++++---- 7 files changed, 304 insertions(+), 129 deletions(-) diff --git a/services/ui-src/src/components/layout/Part.jsx b/services/ui-src/src/components/layout/Part.jsx index 894793d14..0e5a8b9a5 100644 --- a/services/ui-src/src/components/layout/Part.jsx +++ b/services/ui-src/src/components/layout/Part.jsx @@ -11,11 +11,51 @@ import { shouldDisplay } from "../../util/shouldDisplay"; const Part = ({ partId, partNumber, nestedSubsectionTitle }) => { const [, section] = partId.split("-"); - const { contextData, questions, show, text, title } = useSelector( - (state) => mapStateToProps(state, partId), + + const [ + formData, + currentUserRole, + reportStatus, + allStatesData, + stateUserAbbr, + chipEnrollments, + ] = useSelector( + (state) => [ + state.formData, + state.stateUser.currentUser.role, + state.reportStatus, + state.allStatesData, + state.stateUser.abbr, + state.enrollmentCounts.chipEnrollments, + ], shallowEqual ); + const part = selectFragment(formData, partId); + const partContextData = part.context_data; + + const contextData = partContextData; + const questions = selectQuestionsForPart( + formData, + currentUserRole, + reportStatus, + allStatesData, + stateUserAbbr, + chipEnrollments, + partId + ); + const show = shouldDisplay( + currentUserRole, + formData, + reportStatus, + allStatesData, + stateUserAbbr, + chipEnrollments, + partContextData + ); + const text = part ? part.text : null; + const title = part ? part.title : null; + const getPartContent = () => { if (show) { return ( @@ -62,18 +102,4 @@ const Part = ({ partId, partNumber, nestedSubsectionTitle }) => {
); }; - -const mapStateToProps = (state, partId) => { - const part = selectFragment(state, partId); - const partContextData = part.context_data; - - return { - contextData: partContextData, - questions: selectQuestionsForPart(state, partId), - show: shouldDisplay(state, partContextData), - text: part ? part.text : null, - title: part ? part.title : null, - }; -}; - export default Part; diff --git a/services/ui-src/src/components/layout/Part.test.jsx b/services/ui-src/src/components/layout/Part.test.jsx index 8053313a9..44cdeb951 100644 --- a/services/ui-src/src/components/layout/Part.test.jsx +++ b/services/ui-src/src/components/layout/Part.test.jsx @@ -87,6 +87,9 @@ const store = mockStore({ stateId: "AL", }, ], + enrollmentCounts: { + chipEnrollments: {}, + }, global: { isFetching: false, }, diff --git a/services/ui-src/src/components/layout/Subsection.jsx b/services/ui-src/src/components/layout/Subsection.jsx index 60799cede..67433a5b5 100644 --- a/services/ui-src/src/components/layout/Subsection.jsx +++ b/services/ui-src/src/components/layout/Subsection.jsx @@ -1,11 +1,22 @@ import React from "react"; -import PropTypes from "prop-types"; -import { connect } from "react-redux"; -import { selectSubsectionTitleAndPartIDs } from "../../store/selectors"; +import { useSelector } from "react-redux"; +//components import Part from "./Part"; import Text from "./Text"; +//selectors +import { selectSubsectionTitleAndPartIDs } from "../../store/selectors"; +//types +import PropTypes from "prop-types"; + +const Subsection = ({ subsectionId }) => { + const formData = useSelector((state) => state.formData); + + const subsection = selectSubsectionTitleAndPartIDs(formData, subsectionId); + + const partIds = subsection ? subsection.parts : []; + const title = subsection ? subsection.title : null; + const text = subsection ? subsection.text : null; -const Subsection = ({ partIds, subsectionId, title, text }) => { return (
{title &&

{title}

} @@ -26,25 +37,10 @@ const Subsection = ({ partIds, subsectionId, title, text }) => { ); }; Subsection.propTypes = { - partIds: PropTypes.array.isRequired, subsectionId: PropTypes.string.isRequired, - text: PropTypes.oneOf([PropTypes.string, null]), - title: PropTypes.string, }; Subsection.defaultProps = { text: null, }; -const mapStateToProps = (state, ownProps) => { - const subsection = selectSubsectionTitleAndPartIDs( - state, - ownProps.subsectionId - ); - return { - partIds: subsection ? subsection.parts : [], - title: subsection ? subsection.title : null, - text: subsection ? subsection.text : null, - }; -}; - -export default connect(mapStateToProps)(Subsection); +export default Subsection; diff --git a/services/ui-src/src/store/formData.js b/services/ui-src/src/store/formData.js index ff00206cc..b6d86bf5b 100644 --- a/services/ui-src/src/store/formData.js +++ b/services/ui-src/src/store/formData.js @@ -107,8 +107,8 @@ export default (state = initialState, action) => { }; /* Helper functions for getting values from the JSON returned by the API */ -export const selectSectionByOrdinal = (state, ordinal) => { - const section = state.formData.filter( +export const selectSectionByOrdinal = (formData, ordinal) => { + const section = formData.filter( (c) => c.contents.section.ordinal === ordinal ); if (section.length > 0) { @@ -158,22 +158,22 @@ export const extractJsonPathExpressionFromQuestionLike = ( }; export const selectFragmentByJsonPath = ( - state, + formData, expr, sectionOrdinal = false ) => { const sectionNumber = sectionOrdinal || extractSectionOrdinalFromJPExpr(expr); - const section = selectSectionByOrdinal(state, sectionNumber); + const section = selectSectionByOrdinal(formData, sectionNumber); // Note that the following assumes that there's only one matching result. const fragment = jsonpath.query(section, expr)[0]; return fragment; }; -export const selectFragmentById = (state, id) => { +export const selectFragmentById = (formData, id) => { const sectionOrdinal = extractSectionOrdinalFromId(id); const jpexpr = `$..*[?(@ && @.id=='${id}')]`; - return selectFragmentByJsonPath(state, jpexpr, sectionOrdinal); + return selectFragmentByJsonPath(formData, jpexpr, sectionOrdinal); }; /** @@ -199,8 +199,8 @@ export const selectFragmentFromTarget = (target, expr) => { * @param {string} id - The id of what we're looking for, e.g. 2020-01-a-01-01-a-01. * @param {string} jp - JSONPath expression, although if id is not supplied it must be a JSONPath expression with an id lookup in it. */ -export const selectFragment = (state, id = null, jp = null) => { - if (!state.formData || state.formData.length === 0) { +export const selectFragment = (formData, id = null, jp = null) => { + if (!formData || formData.length === 0) { return null; } if (!id && !jp) { @@ -208,7 +208,7 @@ export const selectFragment = (state, id = null, jp = null) => { } const idValue = id ?? jp.split("id=='")[1].split("'")[0]; const sectionOrdinal = extractSectionOrdinalFromId(idValue); - const section = selectSectionByOrdinal(state, sectionOrdinal); + const section = selectSectionByOrdinal(formData, sectionOrdinal); let targetObject = section; const chunks = idValue.split("-").slice(2); // Year is irrelevant so we skip it; same for section since we just got it above. if (chunks.length >= 2) { diff --git a/services/ui-src/src/store/selectors.js b/services/ui-src/src/store/selectors.js index 2fec44467..a64834d0c 100644 --- a/services/ui-src/src/store/selectors.js +++ b/services/ui-src/src/store/selectors.js @@ -24,8 +24,8 @@ export const selectSectionTitle = (state, sectionId) => { return null; }; -export const selectSubsectionTitleAndPartIDs = (state, subsectionId) => { - const subsection = selectFragment(state, subsectionId); +export const selectSubsectionTitleAndPartIDs = (formData, subsectionId) => { + const subsection = selectFragment(formData, subsectionId); if (subsection) { return { @@ -37,18 +37,6 @@ export const selectSubsectionTitleAndPartIDs = (state, subsectionId) => { return null; }; -export const selectPartTitle = (state, partId) => { - const part = selectFragment(state, partId); - - if (part) { - return { - text: part.text, - title: part.title, - }; - } - return null; -}; - export const selectQuestion = (state, id) => { const jp = `$..[*].contents.section.subsections[*].parts[*]..questions[?(@ && @.id=='${id}')]`; const questions = jsonpath.query(state, jp); @@ -63,11 +51,29 @@ export const selectQuestion = (state, id) => { * This function is a callback for the filter method in selectQuestionsForPart * @function filterDisplay * @param {object} question - single question from the unfilteredData array in selectQuestionsForPart. - * @param {object} state - the application state + * @param {object} currentUserRole - The role of the current user. Accessed at state.currentUser.role * @returns {boolean} - to be evaluated by the filter method */ -const filterDisplay = (question, state) => { - if (!shouldDisplay(state, question.context_data)) { +const filterDisplay = ( + question, + currentUserRole, + formData, + reportStatus, + allStatesData, + stateUserAbbr, + chipEnrollments +) => { + if ( + !shouldDisplay( + currentUserRole, + formData, + reportStatus, + allStatesData, + stateUserAbbr, + chipEnrollments, + question.context_data + ) + ) { // If context data and a variation of skip text exists if ( question.context_data && @@ -100,7 +106,15 @@ const filterDisplay = (question, state) => { question.questions = question.questions .map((singleQuestion) => { // reassign question.questions to be a filtered version of itself - return filterDisplay(singleQuestion, state); + return filterDisplay( + singleQuestion, + currentUserRole, + formData, + reportStatus, + allStatesData, + stateUserAbbr, + chipEnrollments + ); }) .filter((q) => q !== false); } @@ -108,14 +122,32 @@ const filterDisplay = (question, state) => { }; // Returns an array of questions for the QuestionComponent to map through -export const selectQuestionsForPart = (state, partId) => { +export const selectQuestionsForPart = ( + formData, + currentUserRole, + reportStatus, + allStatesData, + stateUserAbbr, + chipEnrollments, + partId +) => { const jp = `$..[*].contents.section.subsections[*].parts[?(@ && @.id=='${partId}')].questions[*]`; - const unfilteredData = JSON.parse(JSON.stringify(jsonpath.query(state, jp))); + const unfilteredData = JSON.parse( + JSON.stringify(jsonpath.query(formData, jp)) + ); // Filter the array of questions based on conditional logic const filteredQuestions = unfilteredData .map((question) => { - return filterDisplay(question, state); + return filterDisplay( + question, + currentUserRole, + formData, + reportStatus, + allStatesData, + stateUserAbbr, + chipEnrollments + ); }) .filter((q) => q !== false); diff --git a/services/ui-src/src/util/shouldDisplay.js b/services/ui-src/src/util/shouldDisplay.js index 0e2912916..14c39e493 100644 --- a/services/ui-src/src/util/shouldDisplay.js +++ b/services/ui-src/src/util/shouldDisplay.js @@ -14,8 +14,8 @@ import { * @param {object} hideIfInfo - the hide_if object from a question's context_data * @returns {boolean} - determines if an element should be filtered out, returning true hides a question */ -const hideIf = (state, hideIfInfo) => { - const targetAnswer = jsonpath.query(state, hideIfInfo.target)[0]; // User's selection from associated question +const hideIf = (formData, hideIfInfo) => { + const targetAnswer = jsonpath.query(formData, hideIfInfo.target)[0]; // User's selection from associated question const interactiveValues = hideIfInfo.values.interactive; // Array of values which if selected, should hide a question if (interactiveValues.includes(targetAnswer)) { @@ -27,10 +27,10 @@ const hideIf = (state, hideIfInfo) => { return false; }; -const hideIfAll = (state, hideIfAllInfo) => { +const hideIfAll = (formData, hideIfAllInfo) => { const answers = hideIfAllInfo.values.interactive; return hideIfAllInfo.targets - .map((target) => jsonpath.query(state, target)[0]) + .map((target) => jsonpath.query(formData, target)[0]) .every((answer) => answers.includes(answer)); }; @@ -41,8 +41,8 @@ const hideIfAll = (state, hideIfAllInfo) => { * @param {object} hideIfNotInfo - the hide_if_not object from a question's context_data * @returns {boolean} - determines if an element should be filtered out, returning true hides a question */ -const hideIfNot = (state, hideIfNotInfo) => { - const targetAnswer = jsonpath.query(state, hideIfNotInfo.target)[0]; // Array of user selections from associated question +const hideIfNot = (formData, hideIfNotInfo) => { + const targetAnswer = jsonpath.query(formData, hideIfNotInfo.target)[0]; // Array of user selections from associated question const interactiveValues = hideIfNotInfo.values.interactive; // Array of values which if present in a user's selections, should hide a question const includedBoolean = @@ -53,9 +53,15 @@ const hideIfNot = (state, hideIfNotInfo) => { return includedBoolean; }; -const hideIfTableValue = (state, hideIfTableValueInfo) => { +const hideIfTableValue = ( + formData, + allStatesData, + stateUserAbbr, + chipEnrollments, + hideIfTableValueInfo +) => { // Get table values - const targetValues = jsonpath.query(state, hideIfTableValueInfo.target)[0]; + const targetValues = jsonpath.query(formData, hideIfTableValueInfo.target)[0]; let computedValues = []; // If target needs to be calculated @@ -67,23 +73,16 @@ const hideIfTableValue = (state, hideIfTableValueInfo) => { // get computed value via lookup function and push into a multidimensional array if (item.compareACS) { computedRow.push( - compareACS( - state.allStatesData, - state.stateUser.abbr, - item.compareACS - ) + compareACS(allStatesData, stateUserAbbr, item.compareACS) ); } else if (item.lookupChipEnrollments) { computedRow.push( - lookupChipEnrollments( - state.enrollmentCounts.chipEnrollments, - item.lookupChipEnrollments - ) + lookupChipEnrollments(chipEnrollments, item.lookupChipEnrollments) ); } else if (item.compareChipEnrollements) { computedRow.push( compareChipEnrollements( - state.enrollmentCounts.chipEnrollments, + chipEnrollments, item.compareChipEnrollements ) ); @@ -181,11 +180,11 @@ const hideIfTableValue = (state, hideIfTableValueInfo) => { const PROGRAM_TYPE_QUESTION_ID = "-00-a-01-02"; -const getProgramTypeFromForm = (state) => { +const getProgramTypeFromForm = (formData, reportStatus) => { // attempt to find programType from same year as form - const formYear = state.formData[0].year; + const formYear = formData[0].year; const currentYearProgramType = selectFragmentById( - state, + formData, `${formYear}${PROGRAM_TYPE_QUESTION_ID}` )?.answer?.entry; if (currentYearProgramType) { @@ -195,11 +194,11 @@ const getProgramTypeFromForm = (state) => { // attempt to find programType from the previous year's form, otherwise retrieve from status const previousYear = parseInt(formYear) - 1; const previousYearProgramType = selectFragmentById( - state, + formData, `${previousYear}${PROGRAM_TYPE_QUESTION_ID}` )?.answer?.entry; - const reportStatusCode = state.formData[0].stateId + state.formData[0].year; - const programFromStatus = state.reportStatus[reportStatusCode].programType; + const reportStatusCode = formData[0].stateId + formData[0].year; + const programFromStatus = reportStatus[reportStatusCode].programType; return previousYearProgramType || programFromStatus; }; @@ -210,8 +209,16 @@ const getProgramTypeFromForm = (state) => { * @param {object} context - the context_data from a question * @returns {boolean} - determines if an element should be filtered out, returning true means a question will display */ -const shouldDisplay = (state, context) => { - if (state.stateUser.currentUser.role === AppRoles.CMS_ADMIN) return true; +const shouldDisplay = ( + currentUserRole, + formData, + reportStatus, + allStatesData, + stateUserAbbr, + chipEnrollments, + context +) => { + if (currentUserRole === AppRoles.CMS_ADMIN) return true; if ( !context || @@ -225,7 +232,7 @@ const shouldDisplay = (state, context) => { * displaying relies on that answer being included in the show_if_state_program_type_in array */ if (context.show_if_state_program_type_in) { - const program = getProgramTypeFromForm(state); + const program = getProgramTypeFromForm(formData, reportStatus); return context.show_if_state_program_type_in.includes(program); } @@ -234,12 +241,12 @@ const shouldDisplay = (state, context) => { * displaying relies on that answer being incldued in the hide_if.values.interactive array */ if (context.conditional_display.hide_if) { - return !hideIf(state, context.conditional_display.hide_if); + return !hideIf(formData, context.conditional_display.hide_if); } // hide_if_all, there is an array of targets (questions) that another question's display relies on if (context.conditional_display.hide_if_all) { - return !hideIfAll(state, context.conditional_display.hide_if_all); + return !hideIfAll(formData, context.conditional_display.hide_if_all); } /* @@ -247,7 +254,7 @@ const shouldDisplay = (state, context) => { * displaying relies on that array of answers including any of the values from the hide_if_not.values.interactive array */ if (context.conditional_display.hide_if_not) { - return !hideIfNot(state, context.conditional_display.hide_if_not); + return !hideIfNot(formData, context.conditional_display.hide_if_not); } /* @@ -256,7 +263,10 @@ const shouldDisplay = (state, context) => { */ if (context.conditional_display.hide_if_table_value) { return hideIfTableValue( - state, + formData, + allStatesData, + stateUserAbbr, + chipEnrollments, context.conditional_display.hide_if_table_value ); } diff --git a/services/ui-src/src/util/shouldDisplay.test.js b/services/ui-src/src/util/shouldDisplay.test.js index b3ccfd317..de48fe230 100644 --- a/services/ui-src/src/util/shouldDisplay.test.js +++ b/services/ui-src/src/util/shouldDisplay.test.js @@ -88,7 +88,15 @@ describe("shouldDisplay", () => { conditional_display: null, show_if_state_program_type_in: ["a different program"], }; - const result = shouldDisplay(state, context); + const result = shouldDisplay( + state.stateUser.currentUser.role, + state.formData, + state.reportStatus, + null, + null, + null, + context + ); expect(result).toBe(false); }); @@ -115,7 +123,15 @@ describe("shouldDisplay", () => { conditional_display: null, show_if_state_program_type_in: ["test program"], }; - const result = shouldDisplay(state, context); + const result = shouldDisplay( + state.stateUser.currentUser.role, + state.formData, + state.reportStatus, + null, + null, + null, + context + ); expect(result).toBe(true); }); @@ -143,7 +159,15 @@ describe("shouldDisplay", () => { conditional_display: null, show_if_state_program_type_in: ["test program"], }; - const result = shouldDisplay(state, context); + const result = shouldDisplay( + state.stateUser.currentUser.role, + state.formData, + state.reportStatus, + null, + null, + null, + context + ); expect(result).toBe(true); expect(selectFragmentById).toHaveBeenCalledTimes(1); }); @@ -172,7 +196,15 @@ describe("shouldDisplay", () => { conditional_display: null, show_if_state_program_type_in: ["test program"], }; - const result = shouldDisplay(state, context); + const result = shouldDisplay( + state.stateUser.currentUser.role, + state.formData, + state.reportStatus, + null, + null, + null, + context + ); expect(result).toBe(true); expect(selectFragmentById).toHaveBeenCalledTimes(1); }); @@ -202,7 +234,15 @@ describe("shouldDisplay", () => { conditional_display: null, show_if_state_program_type_in: ["test program"], }; - const result = shouldDisplay(state, context); + const result = shouldDisplay( + state.stateUser.currentUser.role, + state.formData, + state.reportStatus, + null, + null, + null, + context + ); expect(result).toBe(true); expect(selectFragmentById).toHaveBeenCalledTimes(2); }); @@ -214,8 +254,10 @@ describe("shouldDisplay", () => { role: "test role", }, }, - foo: { - bar: "baz", + formData: { + foo: { + bar: "baz", + }, }, }; const context = { @@ -228,7 +270,15 @@ describe("shouldDisplay", () => { }, }, }; - const result = shouldDisplay(state, context); + const result = shouldDisplay( + state.stateUser.currentUser.role, + state.formData, + null, + null, + null, + null, + context + ); expect(result).toBe(false); }); @@ -239,8 +289,10 @@ describe("shouldDisplay", () => { role: "test role", }, }, - foo: { - bar: "quux", + formData: { + foo: { + bar: "quux", + }, }, }; const context = { @@ -253,7 +305,15 @@ describe("shouldDisplay", () => { }, }, }; - const result = shouldDisplay(state, context); + const result = shouldDisplay( + state.stateUser.currentUser.role, + state.formData, + state.reportStatus, + null, + null, + null, + context + ); expect(result).toBe(true); }); @@ -264,11 +324,13 @@ describe("shouldDisplay", () => { role: "test role", }, }, - foo: { - // All of these are in values.interactive - bar: "baz", - bbr: "bbz", - bcr: "baz", + formData: { + foo: { + // All of these are in values.interactive + bar: "baz", + bbr: "bbz", + bcr: "baz", + }, }, }; const context = { @@ -281,7 +343,15 @@ describe("shouldDisplay", () => { }, }, }; - const result = shouldDisplay(state, context); + const result = shouldDisplay( + state.stateUser.currentUser.role, + state.formData, + state.reportStatus, + null, + null, + null, + context + ); expect(result).toBe(false); }); @@ -292,11 +362,13 @@ describe("shouldDisplay", () => { role: "test role", }, }, - foo: { - // One of these is not in values.interactive - bar: "baz", - bbr: "bbz", - bcr: "quux", + formData: { + foo: { + // One of these is not in values.interactive + bar: "baz", + bbr: "bbz", + bcr: "quux", + }, }, }; const context = { @@ -309,7 +381,15 @@ describe("shouldDisplay", () => { }, }, }; - const result = shouldDisplay(state, context); + const result = shouldDisplay( + state.stateUser.currentUser.role, + state.formData, + state.reportStatus, + null, + null, + null, + context + ); expect(result).toBe(true); }); @@ -320,9 +400,11 @@ describe("shouldDisplay", () => { role: "test role", }, }, - foo: { - // At least one of these is in values.interactive - bar: ["baz", "quux"], + formData: { + foo: { + // At least one of these is in values.interactive + bar: ["baz", "quux"], + }, }, }; const context = { @@ -335,7 +417,15 @@ describe("shouldDisplay", () => { }, }, }; - const result = shouldDisplay(state, context); + const result = shouldDisplay( + state.stateUser.currentUser.role, + state.formData, + state.reportStatus, + null, + null, + null, + context + ); expect(result).toBe(true); }); @@ -346,9 +436,11 @@ describe("shouldDisplay", () => { role: "test role", }, }, - foo: { - // None of these are in values.interactive - bar: ["corge", "quux"], + formData: { + foo: { + // None of these are in values.interactive + bar: ["corge", "quux"], + }, }, }; const context = { @@ -361,7 +453,15 @@ describe("shouldDisplay", () => { }, }, }; - const result = shouldDisplay(state, context); + const result = shouldDisplay( + state.stateUser.currentUser.role, + state.formData, + state.reportStatus, + null, + null, + null, + context + ); expect(result).toBe(false); }); @@ -376,7 +476,15 @@ describe("shouldDisplay", () => { const context = { conditional_display: {}, }; - const result = shouldDisplay(state, context); + const result = shouldDisplay( + state.stateUser.currentUser.role, + null, + null, + null, + null, + null, + context + ); expect(result).toBe(true); }); }); From c60a5454ca414f501d08dcda15ac2fdbd8f02d1b Mon Sep 17 00:00:00 2001 From: Britt Date: Wed, 21 Aug 2024 08:51:14 -0600 Subject: [PATCH 14/18] prevent icon and text overlap before style change before 768px (#139748) --- services/ui-src/src/styles/_main.scss | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/ui-src/src/styles/_main.scss b/services/ui-src/src/styles/_main.scss index a1f9545e6..4b275d447 100644 --- a/services/ui-src/src/styles/_main.scss +++ b/services/ui-src/src/styles/_main.scss @@ -309,6 +309,9 @@ img { padding: ($padding * 2) ($padding * 5); text-align: center; width: auto; + @media only screen and (min-width: 768px) { + padding-right: 2rem; + } } } From 1198e6c936e90e6cb54c9b39f5582968ddcf66b5 Mon Sep 17 00:00:00 2001 From: Berry Davenport Date: Thu, 22 Aug 2024 17:09:07 -0400 Subject: [PATCH 15/18] Block destroy on deploy (#139752) --- .github/workflows/deploy.yml | 2 +- .github/workflows/destroy.yml | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 4b00500a5..5c23aa0e5 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -8,7 +8,7 @@ on: concurrency: # Ensuring group key matches the destroy workflow currently in main - group: ${{ github.workflow }}-${{ github.ref_name }} + group: ${{ github.ref_name }} cancel-in-progress: false permissions: diff --git a/.github/workflows/destroy.yml b/.github/workflows/destroy.yml index 5411cd724..e1033651b 100644 --- a/.github/workflows/destroy.yml +++ b/.github/workflows/destroy.yml @@ -8,6 +8,9 @@ on: description: "Name of the environment to destroy:" required: true +concurrency: + group: ${{ inputs.environment || github.event.ref }} + permissions: id-token: write contents: read From 6fe173c62e6024983c0246511401b97a3d85276c Mon Sep 17 00:00:00 2001 From: Britt Date: Fri, 23 Aug 2024 09:05:30 -0600 Subject: [PATCH 16/18] prevent state name from extending past the sidebar column (#139749) --- .../src/components/layout/StateHeader.jsx | 32 ++++++++----- .../components/layout/StateHeader.test.jsx | 47 ++++++++++++------- services/ui-src/src/styles/_sidebar.scss | 11 ++--- 3 files changed, 56 insertions(+), 34 deletions(-) diff --git a/services/ui-src/src/components/layout/StateHeader.jsx b/services/ui-src/src/components/layout/StateHeader.jsx index 2b8e09e95..e9c3eafc1 100644 --- a/services/ui-src/src/components/layout/StateHeader.jsx +++ b/services/ui-src/src/components/layout/StateHeader.jsx @@ -1,20 +1,28 @@ import React from "react"; import { useSelector } from "react-redux"; +import { AppRoles } from "../../types"; const StateHeader = () => { - const { name, imageURI } = useSelector((state) => state.stateUser); - + const { currentUser, name, imageURI } = useSelector( + (state) => state.stateUser + ); return ( -
-
- {name} -
-
{name}
-
+ <> + {currentUser?.role === AppRoles.STATE_USER && ( +
+
+ {name} +
+
+ {name} +
+
+ )} + ); }; diff --git a/services/ui-src/src/components/layout/StateHeader.test.jsx b/services/ui-src/src/components/layout/StateHeader.test.jsx index 5d8f1fbe3..6a91f01cd 100644 --- a/services/ui-src/src/components/layout/StateHeader.test.jsx +++ b/services/ui-src/src/components/layout/StateHeader.test.jsx @@ -4,30 +4,45 @@ import configureMockStore from "redux-mock-store"; import { Provider } from "react-redux"; import { render } from "@testing-library/react"; import StateHeader from "./StateHeader"; +import { + adminUserWithReportInProgress, + stateUserWithReportInProgress, +} from "../../store/fakeStoreExamples"; const mockStore = configureMockStore(); -const store = mockStore({ - stateUser: { - name: "Kentucky", - imageURI: "kentucky.png", - }, -}); -const header = ( - - - -); +const stateUserStore = mockStore(stateUserWithReportInProgress); +const adminUserStore = mockStore(adminUserWithReportInProgress); describe("State Header Component", () => { - it("should render correctly", () => { + test("should render correctly", () => { + const header = ( + + + + ); expect(shallow(header).exists()).toBe(true); }); - it("Displays name, image, and alt-text for a state", () => { + test("Displays state header content for state user", () => { + const header = ( + + + + ); const { getByTestId, getByAltText } = render(header); const headerComponent = getByTestId("state-header"); - expect(headerComponent).toHaveTextContent("Kentucky"); - const img = getByAltText("Kentucky"); - expect(img.src).toContain("kentucky.png"); + expect(headerComponent).toHaveTextContent("Alabama"); + const img = getByAltText("Alabama"); + expect(img.src).toContain("al.svg"); + }); + + test("Does not display state header content for admin user", () => { + const header = ( + + + + ); + const { queryByTestId } = render(header); + expect(queryByTestId("state-header")).not.toBeInTheDocument(); }); }); diff --git a/services/ui-src/src/styles/_sidebar.scss b/services/ui-src/src/styles/_sidebar.scss index 29d288bb0..b30be3c43 100644 --- a/services/ui-src/src/styles/_sidebar.scss +++ b/services/ui-src/src/styles/_sidebar.scss @@ -5,26 +5,25 @@ .sidebar { margin: ($margin * 3) 0; + .skip-content { margin-bottom: ($margin * 3); } .state-header { margin-bottom: ($margin * 3); position: relative; + display: flex; + flex-flow: row wrap; + align-items: center; } .state-image { - position: absolute; - text-align: center; - top: 50%; - transform: translateY(-50%); width: 70px; } .state-name { font-size: 1.6rem; font-weight: $font-weight-semi-bold; - line-height: 70px; - padding-left: 70px; + overflow-wrap: anywhere; } } From 2b21a6f08face89e510cf8ae46a3a42f081e6df2 Mon Sep 17 00:00:00 2001 From: Garrett Rabian <57802560+gmrabian@users.noreply.github.com> Date: Tue, 27 Aug 2024 09:24:35 -0400 Subject: [PATCH 17/18] Reassign kafka event source mapping to lambda (#139750) --- .../handlers/configureConnectors.js | 102 ------ .../handlers/sinkEnrollmentCounts.js | 78 +++-- services/carts-bigmac-streams/package.json | 8 +- services/carts-bigmac-streams/serverless.yml | 322 +++--------------- services/carts-bigmac-streams/yarn.lock | 59 ---- 5 files changed, 95 insertions(+), 474 deletions(-) delete mode 100644 services/carts-bigmac-streams/handlers/configureConnectors.js diff --git a/services/carts-bigmac-streams/handlers/configureConnectors.js b/services/carts-bigmac-streams/handlers/configureConnectors.js deleted file mode 100644 index 538e6faef..000000000 --- a/services/carts-bigmac-streams/handlers/configureConnectors.js +++ /dev/null @@ -1,102 +0,0 @@ -/* eslint-disable no-console */ -var { - ECSClient, - ListTasksCommand, - DescribeTasksCommand, -} = require("@aws-sdk/client-ecs"); -var lodash = require("lodash"); -var http = require("http"); - -const connectors = [ - { - name: `${process.env.connectorPrefix}sink.lambda.enrollmentcounts`, - config: { - "tasks.max": "1", - "connector.class": - "com.nordstrom.kafka.connect.lambda.LambdaSinkConnector", - topics: process.env.sinkTopics, - "key.converter": "org.apache.kafka.connect.storage.StringConverter", - "value.converter": "org.apache.kafka.connect.storage.StringConverter", - "aws.region": process.env.sinkFunctionRegion, - "aws.lambda.function.arn": process.env.sinkFunctionArn, - "aws.lambda.batch.enabled": "false", - "aws.credentials.provider.class": - " com.amazonaws.auth.DefaultAWSCredentialsProviderChain", - }, - }, -]; - -// eslint-disable-next-line no-unused-vars -function myHandler(event, context, callback) { - console.log("Received event:", JSON.stringify(event, null, 2)); - var ecsClient = new ECSClient(); - var listParams = { - cluster: process.env.cluster, - }; - ecsClient - .send(new ListTasksCommand(listParams)) - .then(function (taskArnsResult) { - var describeParams = { - cluster: process.env.cluster, - tasks: taskArnsResult.taskArns, - }; - return ecsClient.send(new DescribeTasksCommand(describeParams)); - }) - .then(function (describeResult) { - describeResult.tasks.forEach((task) => { - var ip = lodash.filter( - task.attachments[0].details, - (x) => x.name === "privateIPv4Address" - )[0].value; - console.log(`Configuring connector on worker: ${ip}`); - connectors.forEach(function (config) { - //console.log(`Configuring connector with config: ${JSON.stringify(config, null, 2)}`); - putConnectorConfig(ip, config, function (res) { - console.log(res); - }); - }); - }); - }) - .catch(function (err) { - console.log(err, err.stack); - }); -} - -function putConnectorConfig(workerIp, config, callback) { - var retry = function (e) { - console.log("Got error: " + e); - setTimeout(function () { - putConnectorConfig(workerIp, config, callback); - }, 5000); - }; - - var options = { - hostname: workerIp, - port: 8083, - path: `/connectors/${config.name}/config`, - method: "PUT", - headers: { - "Content-Type": "application/json", - }, - }; - - const req = http - .request(options, (res) => { - console.log(`statusCode: ${res.statusCode}`); - if (res.statusCode == "404") { - retry.call(`${res.statusCode}`); - } - res.on("data", (d) => { - console.log(d.toString("utf-8")); - }); - }) - .on("error", retry); - // eslint-disable-next-line no-unused-vars - req.setTimeout(5000, function (thing) { - this.socket.destroy(); - }); - req.write(JSON.stringify(config.config)); - req.end(); -} - -exports.handler = myHandler; diff --git a/services/carts-bigmac-streams/handlers/sinkEnrollmentCounts.js b/services/carts-bigmac-streams/handlers/sinkEnrollmentCounts.js index 77bb7ad93..d5bb4500b 100644 --- a/services/carts-bigmac-streams/handlers/sinkEnrollmentCounts.js +++ b/services/carts-bigmac-streams/handlers/sinkEnrollmentCounts.js @@ -14,47 +14,55 @@ const { * @param {*} _callback */ async function myHandler(event, _context, _callback) { - const json = JSON.parse(event.value); + const sedsTopicKey = `${process.env.sedsTopic}-0`; + if (!event?.records?.[sedsTopicKey]) { + return; + } + const records = event.records[sedsTopicKey]; const currentYear = getReportingYear(); const dynamoClient = buildClient(); - if ( - json.NewImage.enrollmentCounts && - json.NewImage.enrollmentCounts.year >= currentYear - 1 && - json.NewImage.quarter === 4 - ) { - try { - // eslint-disable-next-line no-console - console.log("Sink message received", json); - const indexToUpdate = - json.NewImage.enrollmentCounts.year === currentYear ? 2 : 1; - let typeOfEnrollment = "Medicaid Expansion CHIP"; - let typeKey = "medicaid_exp_chip"; - if (json.NewImage.enrollmentCounts.type === "separate") { - typeOfEnrollment = "Separate CHIP"; - typeKey = "separate_chip"; - } - const stateId = json.NewImage.state_id; - const createdTime = new Date().toLocaleString(); + for (const record of records) { + const decodedValue = atob(record.value); + const value = JSON.parse(decodedValue); + if ( + value.NewImage.enrollmentCounts && + value.NewImage.enrollmentCounts.year >= currentYear - 1 && + value.NewImage.quarter === 4 + ) { + try { + // eslint-disable-next-line no-console + console.log("Sink message received", value); + const indexToUpdate = + value.NewImage.enrollmentCounts.year === currentYear ? 2 : 1; + let typeOfEnrollment = "Medicaid Expansion CHIP"; + let typeKey = "medicaid_exp_chip"; + if (value.NewImage.enrollmentCounts.type === "separate") { + typeOfEnrollment = "Separate CHIP"; + typeKey = "separate_chip"; + } + const stateId = value.NewImage.state_id; + const createdTime = new Date().toLocaleString(); - const pk = `${stateId}-${currentYear}`; - const entryKey = `${typeKey}-${indexToUpdate}`; + const pk = `${stateId}-${currentYear}`; + const entryKey = `${typeKey}-${indexToUpdate}`; - const enrollmentEntry = { - filterId: `${currentYear}-02`, - typeOfEnrollment, - indexToUpdate, - stateId, - yearToModify: currentYear, - enrollmentCount: json.NewImage.enrollmentCounts.count, - createdTime, - lastSynced: json.NewImage.lastSynced, - }; + const enrollmentEntry = { + filterId: `${currentYear}-02`, + typeOfEnrollment, + indexToUpdate, + stateId, + yearToModify: currentYear, + enrollmentCount: value.NewImage.enrollmentCounts.count, + createdTime, + lastSynced: value.NewImage.lastSynced ?? "", + }; - await updateEnrollment(pk, entryKey, enrollmentEntry, dynamoClient); - } catch (error) { - // eslint-disable-next-line no-console - console.log(error); + await updateEnrollment(pk, entryKey, enrollmentEntry, dynamoClient); + } catch (error) { + // eslint-disable-next-line no-console + console.log(error); + } } } } diff --git a/services/carts-bigmac-streams/package.json b/services/carts-bigmac-streams/package.json index f298170a7..c31df29f2 100644 --- a/services/carts-bigmac-streams/package.json +++ b/services/carts-bigmac-streams/package.json @@ -4,12 +4,8 @@ "description": "", "dependencies": { "@aws-sdk/client-dynamodb": "^3.621.0", - "@aws-sdk/client-ecs": "^3.621.0", "@aws-sdk/lib-dynamodb": "^3.621.0", "@aws-sdk/util-dynamodb": "^3.621.0", - "kafkajs": "^1.15.0", - "lodash": "^4.17.21", - "uuid": "^8.3.2" - }, - "devDependencies": {} + "kafkajs": "^1.15.0" + } } diff --git a/services/carts-bigmac-streams/serverless.yml b/services/carts-bigmac-streams/serverless.yml index 362d3f800..2fb4525ea 100644 --- a/services/carts-bigmac-streams/serverless.yml +++ b/services/carts-bigmac-streams/serverless.yml @@ -8,7 +8,6 @@ package: plugins: - serverless-bundle - serverless-dotenv-plugin - - serverless-plugin-scripts - serverless-online - serverless-iam-helper - serverless-s3-bucket-helper @@ -23,20 +22,22 @@ custom: - main - val - production - kafkaConnectImage: ${ssm:/configuration/${self:custom.stage}/kafka_connect_image, ssm:/configuration/default/kafka_connect_image,"confluentinc/cp-kafka-connect:6.2.0"} + bootstrapBroker1: ${ssm:/configuration/default/bigmac/bootstrapBroker1} + bootstrapBroker2: ${ssm:/configuration/default/bigmac/bootstrapBroker2} + bootstrapBroker3: ${ssm:/configuration/default/bigmac/bootstrapBroker3} bootstrapBrokerStringTls: ${ssm:/configuration/${self:custom.stage}/bigmac/bootstrapBrokerStringTls, ssm:/configuration/default/bigmac/bootstrapBrokerStringTls} vpcId: ${ssm:/configuration/${self:custom.stage}/vpc/id, ssm:/configuration/default/vpc/id} + privateSubnetA: ${ssm:/configuration/${self:custom.stage}/vpc/subnets/private/a/id, ssm:/configuration/default/vpc/subnets/private/a/id} + privateSubnetB: ${ssm:/configuration/${self:custom.stage}/vpc/subnets/private/b/id, ssm:/configuration/default/vpc/subnets/private/b/id} + privateSubnetC: ${ssm:/configuration/${self:custom.stage}/vpc/subnets/private/c/id, ssm:/configuration/default/vpc/subnets/private/c/id} privateSubnets: - - ${ssm:/configuration/${self:custom.stage}/vpc/subnets/private/a/id, ssm:/configuration/default/vpc/subnets/private/a/id} - - ${ssm:/configuration/${self:custom.stage}/vpc/subnets/private/b/id, ssm:/configuration/default/vpc/subnets/private/b/id} - - ${ssm:/configuration/${self:custom.stage}/vpc/subnets/private/c/id, ssm:/configuration/default/vpc/subnets/private/c/id} + - ${self:custom.privateSubnetA} + - ${self:custom.privateSubnetB} + - ${self:custom.privateSubnetC} stageEnrollmentCountsTableName: ${env:stageEnrollmentCountsTableName, cf:database-${self:custom.stage}.StageEnrollmentCountsTableName} stateStatusTableStreamArn: ${env:stateStatusTableStreamArn, cf:database-${self:custom.stage}.StateStatusTableStreamArn} sectionTableStreamArn: ${env:sectionTableStreamArn, cf:database-${self:custom.stage}.SectionTableStreamArn} - scripts: - hooks: - deploy:finalize: | - aws lambda invoke --region ${self:provider.region} --function-name ${self:service}-${self:custom.stage}-configureConnectors --invocation-type RequestResponse /dev/null + sedsTopic: "aws.mdct.seds.cdc.state-forms.v0" provider: name: aws @@ -50,15 +51,22 @@ provider: path: ${ssm:/configuration/${self:custom.stage}/iam/path, ssm:/configuration/default/iam/path, "/"} permissionsBoundary: ${ssm:/configuration/${self:custom.stage}/iam/permissionsBoundaryPolicy, ssm:/configuration/default/iam/permissionsBoundaryPolicy, ""} statements: + - Effect: "Allow" + Action: + - logs:CreateLogGroup + - logs:CreateLogStream + - logs:PutLogEvents + Resource: "arn:aws:logs:*:*:*" + - Effect: "Allow" + Action: + - "ec2:DescribeNetworkInterfaces" + - "ec2:DescribeSecurityGroups" + - "ec2:DescribeVpcs" + Resource: "*" - Effect: "Allow" Action: - dynamodb:DescribeTable - - dynamodb:Query - - dynamodb:Scan - - dynamodb:GetItem - - dynamodb:PutItem - dynamodb:UpdateItem - - dynamodb:DeleteItem Resource: "*" - Effect: "Allow" Action: @@ -72,30 +80,11 @@ provider: - ${self:custom.sectionTableStreamArn} functions: - configureConnectors: - handler: handlers/configureConnectors.handler - role: LambdaConfigureConnectorsRole - environment: - cluster: !Ref KafkaConnectCluster - connectorPrefix: carts-${self:custom.stage}- - sinkTopics: aws.mdct.seds.cdc.state-forms.v0 - sinkFunctionArn: !GetAtt SinkEnrollmentCountsLambdaFunction.Arn - sinkFunctionRegion: ${self:custom.region} - BOOTSTRAP_BROKER_STRING_TLS: ${self:custom.bootstrapBrokerStringTls} - STAGE: ${self:custom.stage} - maximumRetryAttempts: 2 - timeout: 120 - vpc: - securityGroupIds: - - Ref: LambdaConfigureConnectorsSecurityGroup - subnetIds: ${self:custom.privateSubnets} sinkEnrollmentCounts: handler: handlers/sinkEnrollmentCounts.handler - role: SinkEnrollmentCountsRole environment: - BOOTSTRAP_BROKER_STRING_TLS: ${self:custom.bootstrapBrokerStringTls} - STAGE: ${self:custom.stage} stageEnrollmentCountsTableName: ${self:custom.stageEnrollmentCountsTableName} + sedsTopic: ${self:custom.sedsTopic} maximumRetryAttempts: 2 timeout: 120 vpc: @@ -135,251 +124,40 @@ resources: - "" - ${self:provider.iam.role.permissionsBoundary} Resources: - KafkaConnectWorkerLogGroup: - Type: "AWS::Logs::LogGroup" - Properties: - LogGroupName: /aws/fargate/${self:service}-${self:custom.stage}-kafka-connect - KafkaConnectWorkerSecurityGroup: + LambdaConfigureConnectorsSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: - GroupDescription: Security Group for the Fargate Connect Workers. + GroupDescription: Security Group for configuring the connector. VpcId: ${self:custom.vpcId} - KafkaConnectWorkerSecurityGroupIngressLambda: + LambdaSecurityGroupIngressCluster: Type: AWS::EC2::SecurityGroupIngress Properties: - GroupId: !Sub "${KafkaConnectWorkerSecurityGroup}" + GroupId: !Sub "${LambdaConfigureConnectorsSecurityGroup}" IpProtocol: tcp FromPort: 8083 ToPort: 8083 SourceSecurityGroupId: !Sub "${LambdaConfigureConnectorsSecurityGroup}" - KafkaConnectWorkerSecurityGroupIngressCluster: - Type: AWS::EC2::SecurityGroupIngress - Properties: - GroupId: !Sub "${KafkaConnectWorkerSecurityGroup}" - IpProtocol: tcp - FromPort: 8083 - ToPort: 8083 - SourceSecurityGroupId: !Sub "${KafkaConnectWorkerSecurityGroup}" - KafkaConnectWorkerRole: - Type: "AWS::IAM::Role" - Properties: - AssumeRolePolicyDocument: - Version: "2012-10-17" - Statement: - - Effect: "Allow" - Principal: - Service: - - "ecs.amazonaws.com" - - "ecs-tasks.amazonaws.com" - Action: "sts:AssumeRole" - Path: ${self:provider.iam.role.path} - PermissionsBoundary: - Fn::If: - - CreatePermissionsBoundary - - ${self:provider.iam.role.permissionsBoundary} - - !Ref AWS::NoValue - ManagedPolicyArns: - - arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy - Policies: - - PolicyName: "LambdaRolePolicy" - PolicyDocument: - Version: "2012-10-17" - Statement: - - Effect: "Allow" - Action: - - "lambda:*" - Resource: !GetAtt SinkEnrollmentCountsLambdaFunction.Arn - KafkaConnectWorkerTaskDefinition: - Type: "AWS::ECS::TaskDefinition" - Properties: - ContainerDefinitions: - - Name: ${self:service}-${self:custom.stage}-worker - Image: ${self:custom.kafkaConnectImage} - Memory: 4096 - Cpu: 2048 - Command: - - bash - - "-c" - - | - export CONNECT_REST_HOST_NAME=`curl $ECS_CONTAINER_METADATA_URI_V4 | sed -e 's/.*IPv4Addresses":\["\(.*\)"\],"AttachmentIndex.*/\1/'` && - export CONNECT_REST_ADVERTISED_HOST_NAME=$CONNECT_REST_HOST_NAME && - curl -k -SL -o /etc/kafka-connect/jars/postgresql-42.2.18.jar "https://jdbc.postgresql.org/download/postgresql-42.2.18.jar" && - chmod +x /etc/kafka-connect/jars/postgresql-42.2.18.jar && - curl -k -SL -o /etc/kafka-connect/jars/kafka-connect-lambda-1.2.2.jar "https://github.com/Nordstrom/kafka-connect-lambda/releases/download/v1.2.2/kafka-connect-lambda-1.2.2.jar" && - chmod +x /etc/kafka-connect/jaras/kafka-connect-lambda-1.2.2.jar - curl -k -SL -o /etc/kafka-connect/jars/kafka-connect-jdbc-10.2.0.jar "https://packages.confluent.io/maven/io/confluent/kafka-connect-jdbc/10.2.0/kafka-connect-jdbc-10.2.0.jar" && - chmod +x /etc/kafka-connect/jars/kafka-connect-jdbc-10.2.0.jar && - /etc/confluent/docker/run - Environment: - - Name: CONNECT_BOOTSTRAP_SERVERS - Value: >- - ${self:custom.bootstrapBrokerStringTls} - - Name: CONNECT_GROUP_ID - Value: mgmt.connect.cms-carts-seds.${self:service}-${self:custom.stage} - - Name: CONNECT_CONFIG_STORAGE_TOPIC - Value: mgmt.connect.cms-carts-seds.${self:service}-${self:custom.stage}.config - - Name: CONNECT_OFFSET_STORAGE_TOPIC - Value: mgmt.connect.cms-carts-seds.${self:service}-${self:custom.stage}.offsets - - Name: CONNECT_STATUS_STORAGE_TOPIC - Value: mgmt.connect.cms-carts-seds.${self:service}-${self:custom.stage}.status - - Name: CONNECT_OFFSET_STORAGE_PARTITIONS - Value: 5 - - Name: CONNECT_STATUS_STORAGE_PARTITIONS - Value: 1 - - Name: CONNECT_KEY_CONVERTER - Value: org.apache.kafka.connect.json.JsonConverter - - Name: CONNECT_VALUE_CONVERTER - Value: org.apache.kafka.connect.json.JsonConverter - - Name: CONNECT_INTERNAL_KEY_CONVERTER - Value: org.apache.kafka.connect.json.JsonConverter - - Name: CONNECT_INTERNAL_VALUE_CONVERTER - Value: org.apache.kafka.connect.json.JsonConverter - - Name: CONNECT_PLUGIN_PATH - Value: /usr/share/java,/etc/kafka-connect/jars - - Name: CONNECT_SECURITY_PROTOCOL - Value: SSL - # Producer/Consumer configs below - # Thank you to https://github.com/confluentinc/kafka-connect-jdbc/issues/161 - - Name: CONNECT_PRODUCER_BOOTSTRAP_SERVERS - Value: >- - ${self:custom.bootstrapBrokerStringTls} - - Name: CONNECT_PRODUCER_SECURITY_PROTOCOL - Value: SSL - - Name: CONNECT_CONSUMER_BOOTSTRAP_SERVERS - Value: >- - ${self:custom.bootstrapBrokerStringTls} - - Name: CONNECT_CONSUMER_SECURITY_PROTOCOL - Value: SSL - LogConfiguration: - LogDriver: awslogs - Options: - awslogs-region: !Sub "${AWS::Region}" - awslogs-group: !Sub "${KafkaConnectWorkerLogGroup}" - awslogs-stream-prefix: fargate - Family: ${self:service}-${self:custom.stage}-kafka-connect-worker - NetworkMode: awsvpc - ExecutionRoleArn: !GetAtt KafkaConnectWorkerRole.Arn - TaskRoleArn: !GetAtt KafkaConnectWorkerRole.Arn - RequiresCompatibilities: - - FARGATE - Memory: 4GB - Cpu: 2048 - KafkaConnectCluster: - Type: "AWS::ECS::Cluster" - KafkaConnectService: - Type: "AWS::ECS::Service" + SinkEnrollmentCountsEventSourceMappingKafka: + Type: AWS::Lambda::EventSourceMapping Properties: - Cluster: !Sub "${KafkaConnectCluster}" - DeploymentConfiguration: - MaximumPercent: 100 - MinimumHealthyPercent: 0 - LaunchType: FARGATE - ServiceName: kafka-connect - DesiredCount: 1 - TaskDefinition: !Sub "${KafkaConnectWorkerTaskDefinition}" - NetworkConfiguration: - AwsvpcConfiguration: - AssignPublicIp: DISABLED - SecurityGroups: - - !Sub "${KafkaConnectWorkerSecurityGroup}" - Subnets: ${self:custom.privateSubnets} - LambdaConfigureConnectorsSecurityGroup: - Type: AWS::EC2::SecurityGroup - Properties: - GroupDescription: Security Group for configuring the connector. - VpcId: ${self:custom.vpcId} - SinkEnrollmentCountsRole: - Type: "AWS::IAM::Role" - Properties: - AssumeRolePolicyDocument: - Version: "2012-10-17" - Statement: - - Effect: "Allow" - Principal: - Service: "lambda.amazonaws.com" - Action: "sts:AssumeRole" - Path: ${self:provider.iam.role.path} - PermissionsBoundary: - Fn::If: - - CreatePermissionsBoundary - - ${self:provider.iam.role.permissionsBoundary} - - !Ref AWS::NoValue - ManagedPolicyArns: - - !Sub arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole - Policies: - - PolicyName: "LambdaRolePolicy" - PolicyDocument: - Version: "2012-10-17" - Statement: - - Effect: "Allow" - Action: - - logs:CreateLogGroup - - logs:CreateLogStream - - logs:PutLogEvents - Resource: "arn:aws:logs:*:*:*" - - Effect: "Allow" - Action: - - "ec2:CreateNetworkInterface" - - "ec2:DescribeNetworkInterfaces" - - "ec2:DetachNetworkInterface" - - "ec2:DeleteNetworkInterface" - - "ec2:DescribeSecurityGroups" - Resource: "*" - - Effect: "Allow" - Action: - - dynamodb:DescribeTable - - dynamodb:Query - - dynamodb:Scan - - dynamodb:GetItem - - dynamodb:PutItem - - dynamodb:UpdateItem - - dynamodb:DeleteItem - Resource: "*" - LambdaConfigureConnectorsRole: - Type: "AWS::IAM::Role" - Properties: - AssumeRolePolicyDocument: - Version: "2012-10-17" - Statement: - - Effect: "Allow" - Principal: - Service: "lambda.amazonaws.com" - Action: "sts:AssumeRole" - Path: ${self:provider.iam.role.path} - PermissionsBoundary: - Fn::If: - - CreatePermissionsBoundary - - ${self:provider.iam.role.permissionsBoundary} - - !Ref AWS::NoValue - Policies: - - PolicyName: "LambdaRolePolicy" - PolicyDocument: - Version: "2012-10-17" - Statement: - - Effect: "Allow" - Action: - - logs:CreateLogGroup - - logs:CreateLogStream - - logs:PutLogEvents - Resource: "arn:aws:logs:*:*:*" - - Effect: "Allow" - Action: - - ec2:CreateNetworkInterface - - ec2:DeleteNetworkInterface - - ec2:DetachNetworkInterface - - ec2:DescribeNetworkInterfaces - - ec2:DescribeSecurityGroups - - ec2:DescribeSubnets - - ec2:DescribeVpcs - Resource: "*" - - Effect: "Allow" - Action: - - ecs:ListTasks - - ecs:DescribeTasks - Resource: "*" - Outputs: - KafkaConnectWorkerSecurityGroupId: - Description: | - The ID of the security group attached to the Kafka Connect cluster tasks. - This can be used by other resources to attach additional ingress rules. - Value: !Ref KafkaConnectWorkerSecurityGroup + FunctionName: !GetAtt SinkEnrollmentCountsLambdaFunction.Arn + SelfManagedEventSource: + Endpoints: + KafkaBootstrapServers: + - ${self:custom.bootstrapBroker1} + - ${self:custom.bootstrapBroker2} + - ${self:custom.bootstrapBroker3} + SelfManagedKafkaEventSourceConfig: + ConsumerGroupId: ${self:custom.project}-${self:custom.stage} + Topics: + - ${self:custom.sedsTopic} + SourceAccessConfigurations: + - Type: "VPC_SUBNET" + URI: subnet:${self:custom.privateSubnetA} + - Type: "VPC_SUBNET" + URI: subnet:${self:custom.privateSubnetB} + - Type: "VPC_SUBNET" + URI: subnet:${self:custom.privateSubnetC} + - Type: "VPC_SECURITY_GROUP" + URI: !Sub security_group:${LambdaConfigureConnectorsSecurityGroup} + MaximumBatchingWindowInSeconds: 30 diff --git a/services/carts-bigmac-streams/yarn.lock b/services/carts-bigmac-streams/yarn.lock index c734dccce..9d243ee50 100644 --- a/services/carts-bigmac-streams/yarn.lock +++ b/services/carts-bigmac-streams/yarn.lock @@ -90,55 +90,6 @@ tslib "^2.6.2" uuid "^9.0.1" -"@aws-sdk/client-ecs@^3.621.0": - version "3.621.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-ecs/-/client-ecs-3.621.0.tgz#5dd17c7445990d325657a3f62ebfb4365223ff6d" - integrity sha512-0jwDWcMWKv/ODAv8Ez9JmIQVDfDNsfDiCWizEFWaeNts0Lpu4lNANU4JxRG9ttgOiqo5wfUc4SOQ8EXnJoabsQ== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.621.0" - "@aws-sdk/client-sts" "3.621.0" - "@aws-sdk/core" "3.621.0" - "@aws-sdk/credential-provider-node" "3.621.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.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.3.1" - "@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.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.13" - "@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.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.11" - "@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.13" - "@smithy/util-defaults-mode-node" "^3.0.13" - "@smithy/util-endpoints" "^2.0.5" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-utf8" "^3.0.0" - "@smithy/util-waiter" "^3.1.2" - tslib "^2.6.2" - uuid "^9.0.1" - "@aws-sdk/client-sso-oidc@3.621.0": version "3.621.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.621.0.tgz#3fa3d468fbebbd93a5f75c1d51b63cc7af3ef17b" @@ -960,11 +911,6 @@ kafkajs@^1.15.0: resolved "https://registry.yarnpkg.com/kafkajs/-/kafkajs-1.15.0.tgz#a5ada0d933edca2149177393562be6fb0875ec3a" integrity sha512-yjPyEnQCkPxAuQLIJnY5dI+xnmmgXmhuOQ1GVxClG5KTOV/rJcW1qA3UfvyEJKTp/RTSqQnUR3HJsKFvHyTpNg== -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - mnemonist@0.38.3: version "0.38.3" resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.3.tgz#35ec79c1c1f4357cfda2fe264659c2775ccd7d9d" @@ -987,11 +933,6 @@ tslib@^2.6.2: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - uuid@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" From 9ae8875f9f6118cbdf1f9bca6bd63246a43ba013 Mon Sep 17 00:00:00 2001 From: Garrett Rabian <57802560+gmrabian@users.noreply.github.com> Date: Thu, 29 Aug 2024 10:50:05 -0400 Subject: [PATCH 18/18] remove momentjs (#139755) --- services/ui-src/package.json | 2 +- .../components/layout/CertifyAndSubmit.jsx | 74 +++++++++---------- .../ui-src/src/components/layout/PageInfo.jsx | 5 +- .../src/components/layout/PageInfo.test.jsx | 4 +- .../src/components/layout/SaveMessage.js | 65 ---------------- .../src/components/layout/SaveMessage.jsx | 32 ++++++++ .../components/layout/SaveMessage.test.jsx | 8 -- .../ui-src/src/components/layout/Timeout.jsx | 12 +-- .../src/components/layout/Timeout.test.jsx | 8 +- .../src/hooks/authHooks/authLifecycle.js | 13 ++-- services/ui-src/yarn.lock | 10 +-- 11 files changed, 91 insertions(+), 142 deletions(-) delete mode 100644 services/ui-src/src/components/layout/SaveMessage.js create mode 100644 services/ui-src/src/components/layout/SaveMessage.jsx diff --git a/services/ui-src/package.json b/services/ui-src/package.json index 40c10cc74..5fb8787bb 100644 --- a/services/ui-src/package.json +++ b/services/ui-src/package.json @@ -17,11 +17,11 @@ "@testing-library/user-event": "^14.5.1", "@vitejs/plugin-react": "^4.2.1", "aws-amplify": "^5.3.4", + "date-fns": "^3.6.0", "font-awesome": "^4.7.0", "jsonpath": "^1.0.2", "launchdarkly-react-client-sdk": "^3.3.2", "mathjs": "^7.5.0", - "moment": "^2.29.4", "prop-types": "^15.7.2", "react": "^16.13.1", "react-data-table-component": "^6.11.6", diff --git a/services/ui-src/src/components/layout/CertifyAndSubmit.jsx b/services/ui-src/src/components/layout/CertifyAndSubmit.jsx index 296e44a8e..c0fb90e9c 100644 --- a/services/ui-src/src/components/layout/CertifyAndSubmit.jsx +++ b/services/ui-src/src/components/layout/CertifyAndSubmit.jsx @@ -1,9 +1,8 @@ import React, { useEffect } from "react"; import { shallowEqual, useDispatch, useSelector } from "react-redux"; -import moment from "moment"; -import PropTypes from "prop-types"; import { Button, Dialog } from "@cmsgov/design-system"; import { useHistory } from "react-router-dom"; +import { format } from "date-fns"; // components import PageInfo from "./PageInfo"; import FormActions from "./FormActions"; @@ -17,6 +16,7 @@ import { import useModal from "../../hooks/useModal"; // types import { AppRoles } from "../../types"; +import PropTypes from "prop-types"; const Submit = ({ openCertifyConfirmation }) => ( <> @@ -43,15 +43,25 @@ const Submit = ({ openCertifyConfirmation }) => ( Submit.propTypes = { openCertifyConfirmation: PropTypes.func.isRequired }; -const Thanks = ({ done: doneDispatch, lastSave, submitterUsername }) => { +const Thanks = ({ done: doneDispatch, submitterUsername }) => { + const lastSave = useSelector( + (state) => + getCurrentReportStatus( + state.reportStatus, + state.formData, + state.stateUser, + state.global.formYear + ).lastChanged + ); + const formattedDate = lastSave ? format(lastSave, "PPP") : ""; + const formattedTime = lastSave ? format(lastSave, "p") : ""; return ( <>

Thank you for submitting your CARTS report!

- Submitted on {lastSave.format("MMMM Do, YYYY")} at{" "} - {lastSave.format("h:mm A")} by {submitterUsername}. + Submitted on {formattedDate} at {formattedTime} by {submitterUsername}.

What to expect next

You‘ll hear from CMS if they have any questions about your report.

@@ -64,7 +74,6 @@ const Thanks = ({ done: doneDispatch, lastSave, submitterUsername }) => { Thanks.propTypes = { done: PropTypes.func.isRequired, - lastSave: PropTypes.object.isRequired, submitterUsername: PropTypes.string.isRequired, }; @@ -72,34 +81,25 @@ const CertifyAndSubmit = () => { const dispatch = useDispatch(); const history = useHistory(); const { isShowing, toggleModal } = useModal(); - const [isCertified, lastSave, submitterUsername, currentUserRole, state] = - useSelector( - (state) => [ - !selectIsFormEditable( - state.reportStatus, - state.formData, - state.stateUser, - state.global.formYear - ), - moment( - getCurrentReportStatus( - state.reportStatus, - state.formData, - state.stateUser, - state.global.formYear - ).lastChanged - ), - getCurrentReportStatus( - state.reportStatus, - state.formData, - state.stateUser, - state.global.formYear - ).username, - state.stateUser.currentUser.role, - state.stateUser.abbr, - ], - shallowEqual - ); + const [isCertified, submitterUsername, currentUserRole, state] = useSelector( + (state) => [ + !selectIsFormEditable( + state.reportStatus, + state.formData, + state.stateUser, + state.global.formYear + ), + getCurrentReportStatus( + state.reportStatus, + state.formData, + state.stateUser, + state.global.formYear + ).username, + state.stateUser.currentUser.role, + state.stateUser.abbr, + ], + shallowEqual + ); useEffect(() => { dispatch(loadForm(state)); @@ -149,11 +149,7 @@ const CertifyAndSubmit = () => { {currentUserRole === AppRoles.STATE_USER &&

Certify and Submit

} {isCertified ? ( - + ) : ( )} diff --git a/services/ui-src/src/components/layout/PageInfo.jsx b/services/ui-src/src/components/layout/PageInfo.jsx index 1e3076dd1..41dae237e 100644 --- a/services/ui-src/src/components/layout/PageInfo.jsx +++ b/services/ui-src/src/components/layout/PageInfo.jsx @@ -1,19 +1,18 @@ import React from "react"; import { shallowEqual, useSelector } from "react-redux"; -import moment from "moment"; import Autosave from "../fields/Autosave"; import Title from "./Title"; const PageInfo = () => { const [lastSaved, status] = useSelector( - (state) => [moment(state.save.lastSave), state.reportStatus.status], + (state) => [state.save.lastSave, state.reportStatus.status], shallowEqual ); return (
{status ?? "draft"} - {lastSaved.isValid() && ` | Last Edit: ${lastSaved.format("M/D/YYYY")}`} + {lastSaved && ` | Last Edit: ${lastSaved.toLocaleDateString()}`}
<Autosave /> diff --git a/services/ui-src/src/components/layout/PageInfo.test.jsx b/services/ui-src/src/components/layout/PageInfo.test.jsx index 203e4cf87..22300eef4 100644 --- a/services/ui-src/src/components/layout/PageInfo.test.jsx +++ b/services/ui-src/src/components/layout/PageInfo.test.jsx @@ -11,7 +11,9 @@ const store = mockStore({ status: null, }, save: { - lastSave: "01/01/2002", + lastSave: new Date( + "Mon Jan 1 2024 12:00:00 GMT-0400 (Eastern Daylight Time)" + ), }, }); jest.mock("./Title", () => () => { diff --git a/services/ui-src/src/components/layout/SaveMessage.js b/services/ui-src/src/components/layout/SaveMessage.js deleted file mode 100644 index a3c83e8d8..000000000 --- a/services/ui-src/src/components/layout/SaveMessage.js +++ /dev/null @@ -1,65 +0,0 @@ -import moment from "moment"; -import { useEffect, useState } from "react"; -import PropTypes from "prop-types"; - -/* - * Configure moment to display '1 time-unit ago' instead of 'a time-unit ago' - * https://github.com/moment/moment/issues/3764 - */ -moment.updateLocale("en", { - relativeTime: { - s: "seconds", - m: "1 minute", - mm: "%d minutes", - h: "1 hour", - hh: "%d hours", - d: "1 day", - dd: "%d days", - M: "1 month", - MM: "%d months", - y: "1 year", - yy: "%d years", - }, -}); - -const SaveMessage = ({ lastSaved }) => { - const [currentMoment, setCurrentMoment] = useState(() => moment()); - - useEffect(() => { - const timerID = setInterval(() => setCurrentMoment(moment()), 1000); - return () => clearInterval(timerID); - }); - - const lastSavedMoment = moment(lastSaved); - - if (!lastSavedMoment.isValid()) { - return "Not yet saved"; - } - - const difference = currentMoment.diff(lastSavedMoment); - const duration = moment.duration(difference); - let result = "Last saved "; - - if (duration.asMinutes() < 1) return "Saved"; - - if (duration.asDays() < 1) { - result += lastSavedMoment.format("h:mm a"); - } else if (duration.asYears() < 1) { - result += lastSavedMoment.format("MMMM D"); - } else { - result += lastSavedMoment.format("MMMM D, YYYY"); - } - - result += ` (${lastSavedMoment.fromNow()})`; - return result; -}; - -SaveMessage.propTypes = { - lastSaved: PropTypes.oneOfType([ - PropTypes.instanceOf(Date), - PropTypes.instanceOf(moment), - PropTypes.string, - ]), -}; - -export default SaveMessage; diff --git a/services/ui-src/src/components/layout/SaveMessage.jsx b/services/ui-src/src/components/layout/SaveMessage.jsx new file mode 100644 index 000000000..8d790b3d9 --- /dev/null +++ b/services/ui-src/src/components/layout/SaveMessage.jsx @@ -0,0 +1,32 @@ +import { useEffect, useState } from "react"; +import { + differenceInMinutes, + format, + formatDistanceToNowStrict, +} from "date-fns"; +import PropTypes from "prop-types"; + +const SaveMessage = ({ lastSaved }) => { + const [currentMoment, setCurrentMoment] = useState(() => Date.now()); + + useEffect(() => { + const timerID = setInterval(() => setCurrentMoment(Date.now()), 1000); + return () => clearInterval(timerID); + }); + + if (!lastSaved) return "Not yet saved"; + if (differenceInMinutes(currentMoment, lastSaved) < 1) return "Saved"; + + return `Last saved ${format(lastSaved, "p")} (${formatDistanceToNowStrict( + lastSaved + )} ago)`; +}; + +SaveMessage.propTypes = { + lastSaved: PropTypes.oneOfType([ + PropTypes.instanceOf(Date), + PropTypes.string, + ]), +}; + +export default SaveMessage; diff --git a/services/ui-src/src/components/layout/SaveMessage.test.jsx b/services/ui-src/src/components/layout/SaveMessage.test.jsx index 8c811153e..e03de1d0c 100644 --- a/services/ui-src/src/components/layout/SaveMessage.test.jsx +++ b/services/ui-src/src/components/layout/SaveMessage.test.jsx @@ -1,5 +1,4 @@ import { mount, shallow } from "enzyme"; -import moment from "moment"; import React from "react"; import SaveMessage from "./SaveMessage"; @@ -10,9 +9,6 @@ describe("SaveMessage Component", () => { const dateProp = { lastSaved: new Date() }; const saveMessageDateProp = <SaveMessage {...dateProp} />; - const momentProp = { lastSaved: moment() }; - const saveMessageMomentProp = <SaveMessage {...momentProp} />; - const nullProp = { lastSaved: null }; const saveMessageNullProp = <SaveMessage {...nullProp} />; @@ -24,10 +20,6 @@ describe("SaveMessage Component", () => { expect(shallow(saveMessageDateProp).exists()).toBe(true); }); - it("should accept moment as prop", () => { - expect(shallow(saveMessageMomentProp).exists()).toBe(true); - }); - it("should accept null as prop and return not saved", () => { const wrapper = mount(saveMessageNullProp); expect(wrapper.text().includes("Not yet saved")).toBe(true); diff --git a/services/ui-src/src/components/layout/Timeout.jsx b/services/ui-src/src/components/layout/Timeout.jsx index 5a56ada11..9f927f9b7 100644 --- a/services/ui-src/src/components/layout/Timeout.jsx +++ b/services/ui-src/src/components/layout/Timeout.jsx @@ -3,19 +3,16 @@ import { useSelector } from "react-redux"; import { useHistory } from "react-router-dom"; //components import { Dialog } from "@cmsgov/design-system"; -import moment from "moment"; //auth import { refreshCredentials, updateTimeout, useUser, } from "../../hooks/authHooks"; -//types -import PropTypes from "prop-types"; const calculateTimeLeft = (expiresAt) => { if (!expiresAt) return 0; - return expiresAt.diff(moment()) / 1000; + return (new Date(expiresAt).valueOf() - Date.now()) / 1000; }; const Timeout = () => { @@ -50,7 +47,7 @@ const Timeout = () => { if (!showTimeout) return <></>; - const expired = expiresAt.isBefore(); + const expired = new Date(expiresAt).valueOf() < Date.now(); const body = expired ? "You have been logged out due to inactivity. Please log in again." : `Due to inactivity, you will be logged out in ${Math.floor( @@ -94,9 +91,4 @@ const Timeout = () => { ); }; -Timeout.propTypes = { - showTimeout: PropTypes.bool.isRequired, - expiresAt: PropTypes.any.isRequired, -}; - export default Timeout; diff --git a/services/ui-src/src/components/layout/Timeout.test.jsx b/services/ui-src/src/components/layout/Timeout.test.jsx index 697b3a1c1..c2f2204f3 100644 --- a/services/ui-src/src/components/layout/Timeout.test.jsx +++ b/services/ui-src/src/components/layout/Timeout.test.jsx @@ -4,7 +4,7 @@ import configureMockStore from "redux-mock-store"; import { Provider } from "react-redux"; import { screen, render, fireEvent } from "@testing-library/react"; import Timeout from "./Timeout"; -import moment from "moment"; +import { add, sub } from "date-fns"; jest.mock("react-router-dom", () => ({ ...jest.requireActual("react-router-dom"), @@ -17,19 +17,19 @@ const mockStore = configureMockStore(); const store = mockStore({ stateUser: { showTimeout: true, - expiresAt: moment().add(5, "minutes"), + expiresAt: add(Date.now(), { minutes: 5 }), }, }); const expiredStore = mockStore({ stateUser: { showTimeout: true, - expiresAt: moment().subtract(5, "minutes"), + expiresAt: sub(Date.now(), { minutes: 5 }), }, }); const hiddenStore = mockStore({ stateUser: { showTimeout: false, - expiresAt: moment().add(5, "minutes"), + expiresAt: add(Date.now(), { minutes: 5 }), }, }); const timeout = ( diff --git a/services/ui-src/src/hooks/authHooks/authLifecycle.js b/services/ui-src/src/hooks/authHooks/authLifecycle.js index ebce8f5c4..c0ee3b689 100644 --- a/services/ui-src/src/hooks/authHooks/authLifecycle.js +++ b/services/ui-src/src/hooks/authHooks/authLifecycle.js @@ -1,10 +1,10 @@ import { Auth, Hub } from "aws-amplify"; -import moment from "moment"; +import { add } from "date-fns"; import { setAuthTimeout } from "../../store/stateUser"; /* * After the token expires, refresh tokens will be used in the allotted idle window. - * If not retireved, they will bre prompted at the specified time to refresh or logout. + * If not retrieved, they will be prompted at the specified time to refresh or logout. */ const IDLE_WINDOW = 30 * 60 * 1000; // ms const PROMPT_AT = 29 * 60 * 1000; //ms @@ -22,9 +22,10 @@ class AuthManager { updateTimeout = debounce(() => this.setTimer()); constructor(store) { - // Force users with stale tokens > then the timeout to log in for a fresh session - const exp = localStorage.getItem("mdctcarts_session_exp"); - if (exp && moment(exp).isBefore()) { + // Force users with stale tokens greater than the timeout to log in for a fresh session + const expiration = localStorage.getItem("mdctcarts_session_exp"); + const isExpired = expiration && new Date(expiration).valueOf() < Date.now(); + if (isExpired) { localStorage.removeItem("mdctcarts_session_exp"); Auth.signOut().then(() => { window.location.href = "/"; @@ -63,7 +64,7 @@ class AuthManager { * Timer function for idle timeout, keeps track of an idle timer that triggers a forced logout timer if not reset. */ setTimer() { - const expiration = moment().add(IDLE_WINDOW, "milliseconds"); + const expiration = add(Date.now(), { seconds: IDLE_WINDOW / 1000 }); if (this.timeoutPromptId) { clearTimeout(this.timeoutPromptId); clearTimeout(this.timeoutForceId); diff --git a/services/ui-src/yarn.lock b/services/ui-src/yarn.lock index be4111350..38b7929fb 100644 --- a/services/ui-src/yarn.lock +++ b/services/ui-src/yarn.lock @@ -5842,6 +5842,11 @@ date-fns@^2.28.0: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.1.tgz#9667c2615525e552b5135a3116b95b1961456e60" integrity sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw== +date-fns@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.6.0.tgz#f20ca4fe94f8b754951b24240676e8618c0206bf" + integrity sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww== + debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" @@ -8770,11 +8775,6 @@ mkdirp@^0.5.1: dependencies: minimist "^1.2.6" -moment@^2.29.4: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== - moo@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.1.tgz#7aae7f384b9b09f620b6abf6f74ebbcd1b65dbc4"