Repository: stateful/vscode-runme
Pull request #1655 (2024-09-12 21:09:23)

Dependabot Updates 20240912
Includes Dependabot updates of this week. 

The PR https://github.com/stateful/vscode-runme/pull/1634 will be addressed in a separate PR due to it requires changes in the codebase.

sonarcloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=stateful_vscode-runme&pullRequest=1655) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=stateful_vscode-runme&pullRequest=1655&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=stateful_vscode-runme&pullRequest=1655&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=stateful_vscode-runme&pullRequest=1655&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=stateful_vscode-runme&pullRequest=1655&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=stateful_vscode-runme&pullRequest=1655&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarCloud](https://sonarcloud.io/dashboard?id=stateful_vscode-runme&pullRequest=1655)



Patch:
diff --git a/.github/scripts/overwrites/stateful.sh b/.github/scripts/overwrites/stateful.sh
index dd7ead50..d3f04d40 100755
--- a/.github/scripts/overwrites/stateful.sh
+++ b/.github/scripts/overwrites/stateful.sh
@@ -7,8 +7,6 @@ npm pkg set description="DevOps Notebooks built on Runme, connected for collabor
 npm pkg set homepage="https://stateful.com"
 npm pkg set contributes.configuration[0].properties[runme.app.baseDomain].default="platform.stateful.com"
 npm pkg set contributes.configuration[0].properties[runme.app.platformAuth].default=true --json
-npm pkg set contributes.configuration[0].properties[runme.app.enableShare].default=true --json
-npm pkg set contributes.configuration[0].properties[runme.experiments.escalationButton].default=true --json
 npm pkg set contributes.configuration[0].properties[runme.server.lifecycleIdentity].default=1 --json
 npm pkg set contributes.configuration[0].properties[runme.app.notebookAutoSave].default="yes"
 npm pkg set contributes.configuration[0].properties[runme.app.panel.runme.cloud].default="\"\"" --json
diff --git a/__mocks__/vscode.ts b/__mocks__/vscode.ts
index 32cd0025..2ea1673b 100644
--- a/__mocks__/vscode.ts
+++ b/__mocks__/vscode.ts
@@ -322,3 +322,5 @@ export enum EndOfLine {
    */
   CRLF = 2
 }
+
+export const version = '9.9.9'
diff --git a/examples/k8s/package-lock.json b/examples/k8s/package-lock.json
index 3770f98f..d6dbb60b 100644
--- a/examples/k8s/package-lock.json
+++ b/examples/k8s/package-lock.json
@@ -8,8 +8,8 @@
       "name": "kubernetes-runme-react-app",
       "version": "0.1.0",
       "dependencies": {
-        "react": "^16.12.0",
-        "react-dom": "^16.12.0",
+        "react": "^18.3.1",
+        "react-dom": "^18.3.1",
         "react-scripts": "^5.0.1"
       }
     },
@@ -4789,9 +4789,9 @@
       "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
     },
     "node_modules/body-parser": {
-      "version": "1.20.2",
-      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
-      "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
+      "version": "1.20.3",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+      "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
       "dependencies": {
         "bytes": "3.1.2",
         "content-type": "~1.0.5",
@@ -4801,7 +4801,7 @@
         "http-errors": "2.0.0",
         "iconv-lite": "0.4.24",
         "on-finished": "2.4.1",
-        "qs": "6.11.0",
+        "qs": "6.13.0",
         "raw-body": "2.5.2",
         "type-is": "~1.6.18",
         "unpipe": "1.0.0"
@@ -4843,6 +4843,20 @@
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
       "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
     },
+    "node_modules/body-parser/node_modules/qs": {
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+      "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+      "dependencies": {
+        "side-channel": "^1.0.6"
+      },
+      "engines": {
+        "node": ">=0.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/bonjour-service": {
       "version": "1.0.14",
       "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz",
@@ -4948,12 +4962,18 @@
       }
     },
     "node_modules/call-bind": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
-      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+      "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
       "dependencies": {
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.0.2"
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.4",
+        "set-function-length": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -5860,6 +5880,22 @@
         "node": ">= 10"
       }
     },
+    "node_modules/define-data-property": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+      "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+      "dependencies": {
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/define-lazy-prop": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
@@ -6277,6 +6313,25 @@
       "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
       "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA=="
     },
+    "node_modules/es-define-property": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+      "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+      "dependencies": {
+        "get-intrinsic": "^1.2.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/es-module-lexer": {
       "version": "1.5.4",
       "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
@@ -7158,36 +7213,36 @@
       }
     },
     "node_modules/express": {
-      "version": "4.19.2",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
-      "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.20.0.tgz",
+      "integrity": "sha512-pLdae7I6QqShF5PnNTCVn4hI91Dx0Grkn2+IAsMTgMIKuQVte2dN9PeGSSAME2FR8anOhVA62QDIUaWVfEXVLw==",
       "dependencies": {
         "accepts": "~1.3.8",
         "array-flatten": "1.1.1",
-        "body-parser": "1.20.2",
+        "body-parser": "1.20.3",
         "content-disposition": "0.5.4",
         "content-type": "~1.0.4",
         "cookie": "0.6.0",
         "cookie-signature": "1.0.6",
         "debug": "2.6.9",
         "depd": "2.0.0",
-        "encodeurl": "~1.0.2",
+        "encodeurl": "~2.0.0",
         "escape-html": "~1.0.3",
         "etag": "~1.8.1",
         "finalhandler": "1.2.0",
         "fresh": "0.5.2",
         "http-errors": "2.0.0",
-        "merge-descriptors": "1.0.1",
+        "merge-descriptors": "1.0.3",
         "methods": "~1.1.2",
         "on-finished": "2.4.1",
         "parseurl": "~1.3.3",
-        "path-to-regexp": "0.1.7",
+        "path-to-regexp": "0.1.10",
         "proxy-addr": "~2.0.7",
         "qs": "6.11.0",
         "range-parser": "~1.2.1",
         "safe-buffer": "5.2.1",
-        "send": "0.18.0",
-        "serve-static": "1.15.0",
+        "send": "0.19.0",
+        "serve-static": "1.16.0",
         "setprototypeof": "1.2.0",
         "statuses": "2.0.1",
         "type-is": "~1.6.18",
@@ -7211,6 +7266,14 @@
         "ms": "2.0.0"
       }
     },
+    "node_modules/express/node_modules/encodeurl": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+      "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/express/node_modules/ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -7699,9 +7762,12 @@
       }
     },
     "node_modules/function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
     "node_modules/function.prototype.name": {
       "version": "1.1.5",
@@ -7745,13 +7811,18 @@
       }
     },
     "node_modules/get-intrinsic": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
-      "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+      "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
       "dependencies": {
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3",
-        "has-symbols": "^1.0.3"
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "has-proto": "^1.0.1",
+        "has-symbols": "^1.0.3",
+        "hasown": "^2.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -7980,11 +8051,11 @@
       }
     },
     "node_modules/has-property-descriptors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
-      "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+      "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
       "dependencies": {
-        "get-intrinsic": "^1.1.1"
+        "es-define-property": "^1.0.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -8026,6 +8097,17 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/hasown": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/he": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -11168,9 +11250,12 @@
       }
     },
     "node_modules/merge-descriptors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
-      "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+      "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
     "node_modules/merge-stream": {
       "version": "2.0.0",
@@ -11494,9 +11579,12 @@
       }
     },
     "node_modules/object-inspect": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
-      "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+      "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
+      "engines": {
+        "node": ">= 0.4"
+      },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
@@ -11815,9 +11903,9 @@
       "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
     },
     "node_modules/path-to-regexp": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
-      "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
+      "version": "0.1.10",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
+      "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w=="
     },
     "node_modules/path-type": {
       "version": "4.0.0",
@@ -13398,13 +13486,11 @@
       }
     },
     "node_modules/react": {
-      "version": "16.14.0",
-      "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
-      "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==",
+      "version": "18.3.1",
+      "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+      "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
       "dependencies": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1",
-        "prop-types": "^15.6.2"
+        "loose-envify": "^1.1.0"
       },
       "engines": {
         "node": ">=0.10.0"
@@ -13544,17 +13630,15 @@
       }
     },
     "node_modules/react-dom": {
-      "version": "16.14.0",
-      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz",
-      "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==",
+      "version": "18.3.1",
+      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+      "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
       "dependencies": {
         "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1",
-        "prop-types": "^15.6.2",
-        "scheduler": "^0.19.1"
+        "scheduler": "^0.23.2"
       },
       "peerDependencies": {
-        "react": "^16.14.0"
+        "react": "^18.3.1"
       }
     },
     "node_modules/react-error-overlay": {
@@ -14149,12 +14233,11 @@
       }
     },
     "node_modules/scheduler": {
-      "version": "0.19.1",
-      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
-      "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
+      "version": "0.23.2",
+      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+      "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
       "dependencies": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1"
+        "loose-envify": "^1.1.0"
       }
     },
     "node_modules/schema-utils": {
@@ -14221,9 +14304,9 @@
       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
     },
     "node_modules/send": {
-      "version": "0.18.0",
-      "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
-      "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+      "version": "0.19.0",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+      "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
       "dependencies": {
         "debug": "2.6.9",
         "depd": "2.0.0",
@@ -14340,9 +14423,9 @@
       }
     },
     "node_modules/serve-static": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
-      "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+      "version": "1.16.0",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.0.tgz",
+      "integrity": "sha512-pDLK8zwl2eKaYrs8mrPZBJua4hMplRWJ1tIFksVC3FtBEBnl8dxgeHtsaMS8DhS9i4fLObaon6ABoc4/hQGdPA==",
       "dependencies": {
         "encodeurl": "~1.0.2",
         "escape-html": "~1.0.3",
@@ -14353,6 +14436,63 @@
         "node": ">= 0.8.0"
       }
     },
+    "node_modules/serve-static/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/serve-static/node_modules/debug/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+    },
+    "node_modules/serve-static/node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+    },
+    "node_modules/serve-static/node_modules/send": {
+      "version": "0.18.0",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+      "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+      "dependencies": {
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "2.0.0",
+        "mime": "1.6.0",
+        "ms": "2.1.3",
+        "on-finished": "2.4.1",
+        "range-parser": "~1.2.1",
+        "statuses": "2.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/set-function-length": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+      "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+      "dependencies": {
+        "define-data-property": "^1.1.4",
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.4",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/setprototypeof": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -14386,13 +14526,17 @@
       }
     },
     "node_modules/side-channel": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
-      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+      "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
       "dependencies": {
-        "call-bind": "^1.0.0",
-        "get-intrinsic": "^1.0.2",
-        "object-inspect": "^1.9.0"
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4",
+        "object-inspect": "^1.13.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -19721,9 +19865,9 @@
       "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
     },
     "body-parser": {
-      "version": "1.20.2",
-      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
-      "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
+      "version": "1.20.3",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+      "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
       "requires": {
         "bytes": "3.1.2",
         "content-type": "~1.0.5",
@@ -19733,7 +19877,7 @@
         "http-errors": "2.0.0",
         "iconv-lite": "0.4.24",
         "on-finished": "2.4.1",
-        "qs": "6.11.0",
+        "qs": "6.13.0",
         "raw-body": "2.5.2",
         "type-is": "~1.6.18",
         "unpipe": "1.0.0"
@@ -19764,6 +19908,14 @@
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
           "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+        },
+        "qs": {
+          "version": "6.13.0",
+          "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+          "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+          "requires": {
+            "side-channel": "^1.0.6"
+          }
         }
       }
     },
@@ -19840,12 +19992,15 @@
       "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw=="
     },
     "call-bind": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
-      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+      "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
       "requires": {
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.0.2"
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.4",
+        "set-function-length": "^1.2.1"
       }
     },
     "callsites": {
@@ -20482,6 +20637,16 @@
         "execa": "^5.0.0"
       }
     },
+    "define-data-property": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+      "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+      "requires": {
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.0.1"
+      }
+    },
     "define-lazy-prop": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
@@ -20796,6 +20961,19 @@
       "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
       "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA=="
     },
+    "es-define-property": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+      "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+      "requires": {
+        "get-intrinsic": "^1.2.4"
+      }
+    },
+    "es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
+    },
     "es-module-lexer": {
       "version": "1.5.4",
       "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
@@ -21422,36 +21600,36 @@
       }
     },
     "express": {
-      "version": "4.19.2",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
-      "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.20.0.tgz",
+      "integrity": "sha512-pLdae7I6QqShF5PnNTCVn4hI91Dx0Grkn2+IAsMTgMIKuQVte2dN9PeGSSAME2FR8anOhVA62QDIUaWVfEXVLw==",
       "requires": {
         "accepts": "~1.3.8",
         "array-flatten": "1.1.1",
-        "body-parser": "1.20.2",
+        "body-parser": "1.20.3",
         "content-disposition": "0.5.4",
         "content-type": "~1.0.4",
         "cookie": "0.6.0",
         "cookie-signature": "1.0.6",
         "debug": "2.6.9",
         "depd": "2.0.0",
-        "encodeurl": "~1.0.2",
+        "encodeurl": "~2.0.0",
         "escape-html": "~1.0.3",
         "etag": "~1.8.1",
         "finalhandler": "1.2.0",
         "fresh": "0.5.2",
         "http-errors": "2.0.0",
-        "merge-descriptors": "1.0.1",
+        "merge-descriptors": "1.0.3",
         "methods": "~1.1.2",
         "on-finished": "2.4.1",
         "parseurl": "~1.3.3",
-        "path-to-regexp": "0.1.7",
+        "path-to-regexp": "0.1.10",
         "proxy-addr": "~2.0.7",
         "qs": "6.11.0",
         "range-parser": "~1.2.1",
         "safe-buffer": "5.2.1",
-        "send": "0.18.0",
-        "serve-static": "1.15.0",
+        "send": "0.19.0",
+        "serve-static": "1.16.0",
         "setprototypeof": "1.2.0",
         "statuses": "2.0.1",
         "type-is": "~1.6.18",
@@ -21472,6 +21650,11 @@
             "ms": "2.0.0"
           }
         },
+        "encodeurl": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+          "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="
+        },
         "ms": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -21826,9 +22009,9 @@
       "optional": true
     },
     "function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
     },
     "function.prototype.name": {
       "version": "1.1.5",
@@ -21857,13 +22040,15 @@
       "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
     },
     "get-intrinsic": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
-      "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+      "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
       "requires": {
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3",
-        "has-symbols": "^1.0.3"
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "has-proto": "^1.0.1",
+        "has-symbols": "^1.0.3",
+        "hasown": "^2.0.0"
       }
     },
     "get-own-enumerable-property-symbols": {
@@ -22025,11 +22210,11 @@
       "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
     },
     "has-property-descriptors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
-      "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+      "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
       "requires": {
-        "get-intrinsic": "^1.1.1"
+        "es-define-property": "^1.0.0"
       }
     },
     "has-proto": {
@@ -22050,6 +22235,14 @@
         "has-symbols": "^1.0.2"
       }
     },
+    "hasown": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+      "requires": {
+        "function-bind": "^1.1.2"
+      }
+    },
     "he": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -24334,9 +24527,9 @@
       }
     },
     "merge-descriptors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
-      "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+      "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ=="
     },
     "merge-stream": {
       "version": "2.0.0",
@@ -24566,9 +24759,9 @@
       "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="
     },
     "object-inspect": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
-      "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+      "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g=="
     },
     "object-keys": {
       "version": "1.1.1",
@@ -24791,9 +24984,9 @@
       "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
     },
     "path-to-regexp": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
-      "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
+      "version": "0.1.10",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
+      "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w=="
     },
     "path-type": {
       "version": "4.0.0",
@@ -25745,13 +25938,11 @@
       }
     },
     "react": {
-      "version": "16.14.0",
-      "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
-      "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==",
+      "version": "18.3.1",
+      "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+      "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
       "requires": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1",
-        "prop-types": "^15.6.2"
+        "loose-envify": "^1.1.0"
       }
     },
     "react-app-polyfill": {
@@ -25854,14 +26045,12 @@
       }
     },
     "react-dom": {
-      "version": "16.14.0",
-      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz",
-      "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==",
+      "version": "18.3.1",
+      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+      "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
       "requires": {
         "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1",
-        "prop-types": "^15.6.2",
-        "scheduler": "^0.19.1"
+        "scheduler": "^0.23.2"
       }
     },
     "react-error-overlay": {
@@ -26266,12 +26455,11 @@
       }
     },
     "scheduler": {
-      "version": "0.19.1",
-      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
-      "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
+      "version": "0.23.2",
+      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+      "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
       "requires": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1"
+        "loose-envify": "^1.1.0"
       }
     },
     "schema-utils": {
@@ -26321,9 +26509,9 @@
       }
     },
     "send": {
-      "version": "0.18.0",
-      "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
-      "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+      "version": "0.19.0",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+      "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
       "requires": {
         "debug": "2.6.9",
         "depd": "2.0.0",
@@ -26431,14 +26619,69 @@
       }
     },
     "serve-static": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
-      "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+      "version": "1.16.0",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.0.tgz",
+      "integrity": "sha512-pDLK8zwl2eKaYrs8mrPZBJua4hMplRWJ1tIFksVC3FtBEBnl8dxgeHtsaMS8DhS9i4fLObaon6ABoc4/hQGdPA==",
       "requires": {
         "encodeurl": "~1.0.2",
         "escape-html": "~1.0.3",
         "parseurl": "~1.3.3",
         "send": "0.18.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "requires": {
+            "ms": "2.0.0"
+          },
+          "dependencies": {
+            "ms": {
+              "version": "2.0.0",
+              "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+              "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+            }
+          }
+        },
+        "ms": {
+          "version": "2.1.3",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+          "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+        },
+        "send": {
+          "version": "0.18.0",
+          "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+          "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+          "requires": {
+            "debug": "2.6.9",
+            "depd": "2.0.0",
+            "destroy": "1.2.0",
+            "encodeurl": "~1.0.2",
+            "escape-html": "~1.0.3",
+            "etag": "~1.8.1",
+            "fresh": "0.5.2",
+            "http-errors": "2.0.0",
+            "mime": "1.6.0",
+            "ms": "2.1.3",
+            "on-finished": "2.4.1",
+            "range-parser": "~1.2.1",
+            "statuses": "2.0.1"
+          }
+        }
+      }
+    },
+    "set-function-length": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+      "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+      "requires": {
+        "define-data-property": "^1.1.4",
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.4",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.2"
       }
     },
     "setprototypeof": {
@@ -26465,13 +26708,14 @@
       "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw=="
     },
     "side-channel": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
-      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+      "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
       "requires": {
-        "call-bind": "^1.0.0",
-        "get-intrinsic": "^1.0.2",
-        "object-inspect": "^1.9.0"
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4",
+        "object-inspect": "^1.13.1"
       }
     },
     "signal-exit": {
diff --git a/examples/k8s/package.json b/examples/k8s/package.json
index 5e9e6c93..3db16e05 100644
--- a/examples/k8s/package.json
+++ b/examples/k8s/package.json
@@ -3,8 +3,8 @@
   "version": "0.1.0",
   "private": true,
   "dependencies": {
-    "react": "^16.12.0",
-    "react-dom": "^16.12.0",
+    "react": "^18.3.1",
+    "react-dom": "^18.3.1",
     "react-scripts": "^5.0.1"
   },
   "scripts": {
diff --git a/package-lock.json b/package-lock.json
index fe2d8d29..7f688678 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,15 +11,15 @@
       "license": "Apache-2.0",
       "dependencies": {
         "@apollo/client": "^3.11.6",
-        "@aws-sdk/client-ec2": "^3.641.0",
-        "@aws-sdk/client-eks": "^3.637.0",
-        "@aws-sdk/credential-providers": "^3.637.0",
+        "@aws-sdk/client-ec2": "^3.649.0",
+        "@aws-sdk/client-eks": "^3.649.0",
+        "@aws-sdk/credential-providers": "^3.649.0",
         "@buf/grpc_grpc.community_timostamm-protobuf-ts": "^2.9.4-20240809200651-8507e5a24938.4",
         "@buf/jlewi_foyle.bufbuild_es": "^1.10.0-00000000000000-d14934cb2733.1",
         "@buf/jlewi_foyle.connectrpc_es": "^1.4.0-00000000000000-d14934cb2733.3",
         "@buf/stateful_runme.community_timostamm-protobuf-ts": "^2.9.4-20240903224300-611a892c2067.4",
         "@connectrpc/connect": "^1.4.0",
-        "@connectrpc/connect-node": "^1.1.2",
+        "@connectrpc/connect-node": "^1.5.0",
         "@google-cloud/compute": "^4.1.0",
         "@google-cloud/container": "^5.17.0",
         "@google-cloud/run": "^1.4.0",
@@ -27,7 +27,7 @@
         "@protobuf-ts/grpc-transport": "^2.9.1",
         "@protobuf-ts/runtime": "^2.9.1",
         "@protobuf-ts/runtime-rpc": "^2.9.1",
-        "@vercel/client": "^13.4.3",
+        "@vercel/client": "^13.4.6",
         "@vscode/vscode-languagedetection": "^1.0.22",
         "@vscode/webview-ui-toolkit": "^1.2.2",
         "@xterm/addon-fit": "^0.10.0",
@@ -41,7 +41,7 @@
         "data-guardian": "^1.1.2",
         "dotenv": "^16.3.1",
         "filenamify": "^6.0.0",
-        "filesize": "^10.1.4",
+        "filesize": "^10.1.6",
         "get-port": "^7.0.0",
         "getmac": "^6.6.0",
         "got": "^11.8.2",
@@ -54,7 +54,7 @@
         "ulidx": "^2.4.1",
         "uuid": "^10.0.0",
         "vscode-telemetry": "^1.0.2",
-        "yaml": "^2.5.0",
+        "yaml": "^2.5.1",
         "zod": "^3.23.8"
       },
       "devDependencies": {
@@ -63,6 +63,7 @@
         "@graphql-codegen/typescript": "4.0.9",
         "@octokit/rest": "^19.0.13",
         "@types/node": "^18.19.14",
+        "@types/semver": "^7.5.8",
         "@types/uuid": "^10.0.0",
         "@types/vscode": "1.78.0",
         "@types/vscode-notebook-renderer": "^1.72.3",
@@ -74,19 +75,19 @@
         "@wdio/cli": "^8.40.5",
         "@wdio/local-runner": "^8.40.5",
         "@wdio/mocha-framework": "^8.40.3",
-        "@wdio/spec-reporter": "^8.27.2",
+        "@wdio/spec-reporter": "^8.40.3",
         "chromedriver": "^128.0.1",
         "comment-json": "^4.2.5",
         "eslint": "^8.48.0",
         "eslint-config-prettier": "^9.0.0",
         "eslint-import-resolver-typescript": "^3.6.3",
-        "eslint-plugin-import": "^2.28.1",
+        "eslint-plugin-import": "^2.30.0",
         "eslint-plugin-unicorn": "^55.0.0",
         "eslint-plugin-unused-imports": "^4.1.3",
         "expect-webdriverio": "^4.15.4",
         "fork-ts-checker-webpack-plugin": "^9.0.0",
         "husky": "^9.1.5",
-        "msw": "^2.4.2",
+        "msw": "^2.4.5",
         "npm-run-all": "^4.1.5",
         "prettier": "^3.3.3",
         "runme": "^3.1.0",
@@ -470,49 +471,49 @@
       }
     },
     "node_modules/@aws-sdk/client-cognito-identity": {
-      "version": "3.637.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.637.0.tgz",
-      "integrity": "sha512-391mca6yEfXVcSOTLGcxzlT0QCFfvoymLlVHfb//bzl806UUTq12cR2k+AnaCKLj+QSejmA7n6lwZWADm00Fvg==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.649.0.tgz",
+      "integrity": "sha512-6Zqvsyuhy3pV2C222BzqDyVXXumjGmSJWWzIrniBAodqExbopSz/noS+GoWlUwX9J7SsW3Xn+tTdWyF39o0GbQ==",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/client-sso-oidc": "3.637.0",
-        "@aws-sdk/client-sts": "3.637.0",
-        "@aws-sdk/core": "3.635.0",
-        "@aws-sdk/credential-provider-node": "3.637.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.637.0",
-        "@aws-sdk/region-config-resolver": "3.614.0",
-        "@aws-sdk/types": "3.609.0",
-        "@aws-sdk/util-endpoints": "3.637.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.4.0",
-        "@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.15",
-        "@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.2.0",
-        "@smithy/types": "^3.3.0",
-        "@smithy/url-parser": "^3.0.3",
+        "@aws-sdk/client-sso-oidc": "3.649.0",
+        "@aws-sdk/client-sts": "3.649.0",
+        "@aws-sdk/core": "3.649.0",
+        "@aws-sdk/credential-provider-node": "3.649.0",
+        "@aws-sdk/middleware-host-header": "3.649.0",
+        "@aws-sdk/middleware-logger": "3.649.0",
+        "@aws-sdk/middleware-recursion-detection": "3.649.0",
+        "@aws-sdk/middleware-user-agent": "3.649.0",
+        "@aws-sdk/region-config-resolver": "3.649.0",
+        "@aws-sdk/types": "3.649.0",
+        "@aws-sdk/util-endpoints": "3.649.0",
+        "@aws-sdk/util-user-agent-browser": "3.649.0",
+        "@aws-sdk/util-user-agent-node": "3.649.0",
+        "@smithy/config-resolver": "^3.0.6",
+        "@smithy/core": "^2.4.1",
+        "@smithy/fetch-http-handler": "^3.2.5",
+        "@smithy/hash-node": "^3.0.4",
+        "@smithy/invalid-dependency": "^3.0.4",
+        "@smithy/middleware-content-length": "^3.0.6",
+        "@smithy/middleware-endpoint": "^3.1.1",
+        "@smithy/middleware-retry": "^3.0.16",
+        "@smithy/middleware-serde": "^3.0.4",
+        "@smithy/middleware-stack": "^3.0.4",
+        "@smithy/node-config-provider": "^3.1.5",
+        "@smithy/node-http-handler": "^3.2.0",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/smithy-client": "^3.3.0",
+        "@smithy/types": "^3.4.0",
+        "@smithy/url-parser": "^3.0.4",
         "@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.15",
-        "@smithy/util-defaults-mode-node": "^3.0.15",
-        "@smithy/util-endpoints": "^2.0.5",
-        "@smithy/util-middleware": "^3.0.3",
-        "@smithy/util-retry": "^3.0.3",
+        "@smithy/util-defaults-mode-browser": "^3.0.16",
+        "@smithy/util-defaults-mode-node": "^3.0.16",
+        "@smithy/util-endpoints": "^2.1.0",
+        "@smithy/util-middleware": "^3.0.4",
+        "@smithy/util-retry": "^3.0.4",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -521,52 +522,52 @@
       }
     },
     "node_modules/@aws-sdk/client-ec2": {
-      "version": "3.641.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-ec2/-/client-ec2-3.641.0.tgz",
-      "integrity": "sha512-KS9kVXOrPxM6QO6Mo8b7YJ/ZLP/Zxdk8LcUonpnVclv3wTqtzc5xu+Cewnlv7cxcGce/h+qBPcW4sEOMOXIEvA==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-ec2/-/client-ec2-3.649.0.tgz",
+      "integrity": "sha512-9dfrj0P3mbxlDE5+GpiUmSGAb5v7pm2ZBMAA7gAQwVXGeFnrmsewmbVi8ZJt3TrGkCFWhAlp3WUoI5GuHMVxDQ==",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/client-sso-oidc": "3.637.0",
-        "@aws-sdk/client-sts": "3.637.0",
-        "@aws-sdk/core": "3.635.0",
-        "@aws-sdk/credential-provider-node": "3.637.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-ec2": "3.635.0",
-        "@aws-sdk/middleware-user-agent": "3.637.0",
-        "@aws-sdk/region-config-resolver": "3.614.0",
-        "@aws-sdk/types": "3.609.0",
-        "@aws-sdk/util-endpoints": "3.637.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.4.0",
-        "@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.15",
-        "@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.2.0",
-        "@smithy/types": "^3.3.0",
-        "@smithy/url-parser": "^3.0.3",
+        "@aws-sdk/client-sso-oidc": "3.649.0",
+        "@aws-sdk/client-sts": "3.649.0",
+        "@aws-sdk/core": "3.649.0",
+        "@aws-sdk/credential-provider-node": "3.649.0",
+        "@aws-sdk/middleware-host-header": "3.649.0",
+        "@aws-sdk/middleware-logger": "3.649.0",
+        "@aws-sdk/middleware-recursion-detection": "3.649.0",
+        "@aws-sdk/middleware-sdk-ec2": "3.649.0",
+        "@aws-sdk/middleware-user-agent": "3.649.0",
+        "@aws-sdk/region-config-resolver": "3.649.0",
+        "@aws-sdk/types": "3.649.0",
+        "@aws-sdk/util-endpoints": "3.649.0",
+        "@aws-sdk/util-user-agent-browser": "3.649.0",
+        "@aws-sdk/util-user-agent-node": "3.649.0",
+        "@smithy/config-resolver": "^3.0.6",
+        "@smithy/core": "^2.4.1",
+        "@smithy/fetch-http-handler": "^3.2.5",
+        "@smithy/hash-node": "^3.0.4",
+        "@smithy/invalid-dependency": "^3.0.4",
+        "@smithy/middleware-content-length": "^3.0.6",
+        "@smithy/middleware-endpoint": "^3.1.1",
+        "@smithy/middleware-retry": "^3.0.16",
+        "@smithy/middleware-serde": "^3.0.4",
+        "@smithy/middleware-stack": "^3.0.4",
+        "@smithy/node-config-provider": "^3.1.5",
+        "@smithy/node-http-handler": "^3.2.0",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/smithy-client": "^3.3.0",
+        "@smithy/types": "^3.4.0",
+        "@smithy/url-parser": "^3.0.4",
         "@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.15",
-        "@smithy/util-defaults-mode-node": "^3.0.15",
-        "@smithy/util-endpoints": "^2.0.5",
-        "@smithy/util-middleware": "^3.0.3",
-        "@smithy/util-retry": "^3.0.3",
+        "@smithy/util-defaults-mode-browser": "^3.0.16",
+        "@smithy/util-defaults-mode-node": "^3.0.16",
+        "@smithy/util-endpoints": "^2.1.0",
+        "@smithy/util-middleware": "^3.0.4",
+        "@smithy/util-retry": "^3.0.4",
         "@smithy/util-utf8": "^3.0.0",
-        "@smithy/util-waiter": "^3.1.2",
+        "@smithy/util-waiter": "^3.1.3",
         "tslib": "^2.6.2",
         "uuid": "^9.0.1"
       },
@@ -587,51 +588,51 @@
       }
     },
     "node_modules/@aws-sdk/client-eks": {
-      "version": "3.637.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-eks/-/client-eks-3.637.0.tgz",
-      "integrity": "sha512-QIAgMh7Ohf6uH2Vtv/kL6Cv131DAmJ/7dB3pVpxyxSCR4tneKDrDCNCtYgnd/pZrd8pLzUMFZkLg6Qo0BTAk/A==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-eks/-/client-eks-3.649.0.tgz",
+      "integrity": "sha512-82yJJvqyLPB9YRXWF4ZFGVnB5wXf4wj6uheZbsoRvL3JHO7px0kzfy+oEDNVHC0sI5XFovYqpMRaUEA8fpfJIA==",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/client-sso-oidc": "3.637.0",
-        "@aws-sdk/client-sts": "3.637.0",
-        "@aws-sdk/core": "3.635.0",
-        "@aws-sdk/credential-provider-node": "3.637.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.637.0",
-        "@aws-sdk/region-config-resolver": "3.614.0",
-        "@aws-sdk/types": "3.609.0",
-        "@aws-sdk/util-endpoints": "3.637.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.4.0",
-        "@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.15",
-        "@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.2.0",
-        "@smithy/types": "^3.3.0",
-        "@smithy/url-parser": "^3.0.3",
+        "@aws-sdk/client-sso-oidc": "3.649.0",
+        "@aws-sdk/client-sts": "3.649.0",
+        "@aws-sdk/core": "3.649.0",
+        "@aws-sdk/credential-provider-node": "3.649.0",
+        "@aws-sdk/middleware-host-header": "3.649.0",
+        "@aws-sdk/middleware-logger": "3.649.0",
+        "@aws-sdk/middleware-recursion-detection": "3.649.0",
+        "@aws-sdk/middleware-user-agent": "3.649.0",
+        "@aws-sdk/region-config-resolver": "3.649.0",
+        "@aws-sdk/types": "3.649.0",
+        "@aws-sdk/util-endpoints": "3.649.0",
+        "@aws-sdk/util-user-agent-browser": "3.649.0",
+        "@aws-sdk/util-user-agent-node": "3.649.0",
+        "@smithy/config-resolver": "^3.0.6",
+        "@smithy/core": "^2.4.1",
+        "@smithy/fetch-http-handler": "^3.2.5",
+        "@smithy/hash-node": "^3.0.4",
+        "@smithy/invalid-dependency": "^3.0.4",
+        "@smithy/middleware-content-length": "^3.0.6",
+        "@smithy/middleware-endpoint": "^3.1.1",
+        "@smithy/middleware-retry": "^3.0.16",
+        "@smithy/middleware-serde": "^3.0.4",
+        "@smithy/middleware-stack": "^3.0.4",
+        "@smithy/node-config-provider": "^3.1.5",
+        "@smithy/node-http-handler": "^3.2.0",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/smithy-client": "^3.3.0",
+        "@smithy/types": "^3.4.0",
+        "@smithy/url-parser": "^3.0.4",
         "@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.15",
-        "@smithy/util-defaults-mode-node": "^3.0.15",
-        "@smithy/util-endpoints": "^2.0.5",
-        "@smithy/util-middleware": "^3.0.3",
-        "@smithy/util-retry": "^3.0.3",
+        "@smithy/util-defaults-mode-browser": "^3.0.16",
+        "@smithy/util-defaults-mode-node": "^3.0.16",
+        "@smithy/util-endpoints": "^2.1.0",
+        "@smithy/util-middleware": "^3.0.4",
+        "@smithy/util-retry": "^3.0.4",
         "@smithy/util-utf8": "^3.0.0",
-        "@smithy/util-waiter": "^3.1.2",
+        "@smithy/util-waiter": "^3.1.3",
         "tslib": "^2.6.2",
         "uuid": "^9.0.1"
       },
@@ -652,46 +653,46 @@
       }
     },
     "node_modules/@aws-sdk/client-sso": {
-      "version": "3.637.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.637.0.tgz",
-      "integrity": "sha512-+KjLvgX5yJYROWo3TQuwBJlHCY0zz9PsLuEolmXQn0BVK1L/m9GteZHtd+rEdAoDGBpE0Xqjy1oz5+SmtsaRUw==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.649.0.tgz",
+      "integrity": "sha512-G6RZhG+yRdIlR069djAN/v4/Vd7CS8SDnUKkw32n7wJfcpoq0t+Lzcdh73kpIJ+/VslKYwMhbE5lCW+9+jDTdw==",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/core": "3.635.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.637.0",
-        "@aws-sdk/region-config-resolver": "3.614.0",
-        "@aws-sdk/types": "3.609.0",
-        "@aws-sdk/util-endpoints": "3.637.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.4.0",
-        "@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.15",
-        "@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.2.0",
-        "@smithy/types": "^3.3.0",
-        "@smithy/url-parser": "^3.0.3",
+        "@aws-sdk/core": "3.649.0",
+        "@aws-sdk/middleware-host-header": "3.649.0",
+        "@aws-sdk/middleware-logger": "3.649.0",
+        "@aws-sdk/middleware-recursion-detection": "3.649.0",
+        "@aws-sdk/middleware-user-agent": "3.649.0",
+        "@aws-sdk/region-config-resolver": "3.649.0",
+        "@aws-sdk/types": "3.649.0",
+        "@aws-sdk/util-endpoints": "3.649.0",
+        "@aws-sdk/util-user-agent-browser": "3.649.0",
+        "@aws-sdk/util-user-agent-node": "3.649.0",
+        "@smithy/config-resolver": "^3.0.6",
+        "@smithy/core": "^2.4.1",
+        "@smithy/fetch-http-handler": "^3.2.5",
+        "@smithy/hash-node": "^3.0.4",
+        "@smithy/invalid-dependency": "^3.0.4",
+        "@smithy/middleware-content-length": "^3.0.6",
+        "@smithy/middleware-endpoint": "^3.1.1",
+        "@smithy/middleware-retry": "^3.0.16",
+        "@smithy/middleware-serde": "^3.0.4",
+        "@smithy/middleware-stack": "^3.0.4",
+        "@smithy/node-config-provider": "^3.1.5",
+        "@smithy/node-http-handler": "^3.2.0",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/smithy-client": "^3.3.0",
+        "@smithy/types": "^3.4.0",
+        "@smithy/url-parser": "^3.0.4",
         "@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.15",
-        "@smithy/util-defaults-mode-node": "^3.0.15",
-        "@smithy/util-endpoints": "^2.0.5",
-        "@smithy/util-middleware": "^3.0.3",
-        "@smithy/util-retry": "^3.0.3",
+        "@smithy/util-defaults-mode-browser": "^3.0.16",
+        "@smithy/util-defaults-mode-node": "^3.0.16",
+        "@smithy/util-endpoints": "^2.1.0",
+        "@smithy/util-middleware": "^3.0.4",
+        "@smithy/util-retry": "^3.0.4",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -700,47 +701,47 @@
       }
     },
     "node_modules/@aws-sdk/client-sso-oidc": {
-      "version": "3.637.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.637.0.tgz",
-      "integrity": "sha512-27bHALN6Qb6m6KZmPvRieJ/QRlj1lyac/GT2Rn5kJpre8Mpp+yxrtvp3h9PjNBty4lCeFEENfY4dGNSozBuBcw==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.649.0.tgz",
+      "integrity": "sha512-yaKbOFLk1F1lqAAPUbpoN95pDxgqB/7Rd03yndtV+o3/QLK+etKcgzuIkqGpYycvi6YLYLCxkwPNFEg/NzpW6Q==",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/core": "3.635.0",
-        "@aws-sdk/credential-provider-node": "3.637.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.637.0",
-        "@aws-sdk/region-config-resolver": "3.614.0",
-        "@aws-sdk/types": "3.609.0",
-        "@aws-sdk/util-endpoints": "3.637.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.4.0",
-        "@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.15",
-        "@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.2.0",
-        "@smithy/types": "^3.3.0",
-        "@smithy/url-parser": "^3.0.3",
+        "@aws-sdk/core": "3.649.0",
+        "@aws-sdk/credential-provider-node": "3.649.0",
+        "@aws-sdk/middleware-host-header": "3.649.0",
+        "@aws-sdk/middleware-logger": "3.649.0",
+        "@aws-sdk/middleware-recursion-detection": "3.649.0",
+        "@aws-sdk/middleware-user-agent": "3.649.0",
+        "@aws-sdk/region-config-resolver": "3.649.0",
+        "@aws-sdk/types": "3.649.0",
+        "@aws-sdk/util-endpoints": "3.649.0",
+        "@aws-sdk/util-user-agent-browser": "3.649.0",
+        "@aws-sdk/util-user-agent-node": "3.649.0",
+        "@smithy/config-resolver": "^3.0.6",
+        "@smithy/core": "^2.4.1",
+        "@smithy/fetch-http-handler": "^3.2.5",
+        "@smithy/hash-node": "^3.0.4",
+        "@smithy/invalid-dependency": "^3.0.4",
+        "@smithy/middleware-content-length": "^3.0.6",
+        "@smithy/middleware-endpoint": "^3.1.1",
+        "@smithy/middleware-retry": "^3.0.16",
+        "@smithy/middleware-serde": "^3.0.4",
+        "@smithy/middleware-stack": "^3.0.4",
+        "@smithy/node-config-provider": "^3.1.5",
+        "@smithy/node-http-handler": "^3.2.0",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/smithy-client": "^3.3.0",
+        "@smithy/types": "^3.4.0",
+        "@smithy/url-parser": "^3.0.4",
         "@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.15",
-        "@smithy/util-defaults-mode-node": "^3.0.15",
-        "@smithy/util-endpoints": "^2.0.5",
-        "@smithy/util-middleware": "^3.0.3",
-        "@smithy/util-retry": "^3.0.3",
+        "@smithy/util-defaults-mode-browser": "^3.0.16",
+        "@smithy/util-defaults-mode-node": "^3.0.16",
+        "@smithy/util-endpoints": "^2.1.0",
+        "@smithy/util-middleware": "^3.0.4",
+        "@smithy/util-retry": "^3.0.4",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -748,52 +749,52 @@
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-sts": "^3.637.0"
+        "@aws-sdk/client-sts": "^3.649.0"
       }
     },
     "node_modules/@aws-sdk/client-sts": {
-      "version": "3.637.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.637.0.tgz",
-      "integrity": "sha512-xUi7x4qDubtA8QREtlblPuAcn91GS/09YVEY/RwU7xCY0aqGuFwgszAANlha4OUIqva8oVj2WO4gJuG+iaSnhw==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.649.0.tgz",
+      "integrity": "sha512-aKrLTPpA+Ew4JswWBGtoYT+LiA+uewKyCsYXwJtdjj20TY4qX9/fjJyEt39ETjMGE55UmQcVFUZWL2m9f/aiAg==",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/client-sso-oidc": "3.637.0",
-        "@aws-sdk/core": "3.635.0",
-        "@aws-sdk/credential-provider-node": "3.637.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.637.0",
-        "@aws-sdk/region-config-resolver": "3.614.0",
-        "@aws-sdk/types": "3.609.0",
-        "@aws-sdk/util-endpoints": "3.637.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.4.0",
-        "@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.15",
-        "@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.2.0",
-        "@smithy/types": "^3.3.0",
-        "@smithy/url-parser": "^3.0.3",
+        "@aws-sdk/client-sso-oidc": "3.649.0",
+        "@aws-sdk/core": "3.649.0",
+        "@aws-sdk/credential-provider-node": "3.649.0",
+        "@aws-sdk/middleware-host-header": "3.649.0",
+        "@aws-sdk/middleware-logger": "3.649.0",
+        "@aws-sdk/middleware-recursion-detection": "3.649.0",
+        "@aws-sdk/middleware-user-agent": "3.649.0",
+        "@aws-sdk/region-config-resolver": "3.649.0",
+        "@aws-sdk/types": "3.649.0",
+        "@aws-sdk/util-endpoints": "3.649.0",
+        "@aws-sdk/util-user-agent-browser": "3.649.0",
+        "@aws-sdk/util-user-agent-node": "3.649.0",
+        "@smithy/config-resolver": "^3.0.6",
+        "@smithy/core": "^2.4.1",
+        "@smithy/fetch-http-handler": "^3.2.5",
+        "@smithy/hash-node": "^3.0.4",
+        "@smithy/invalid-dependency": "^3.0.4",
+        "@smithy/middleware-content-length": "^3.0.6",
+        "@smithy/middleware-endpoint": "^3.1.1",
+        "@smithy/middleware-retry": "^3.0.16",
+        "@smithy/middleware-serde": "^3.0.4",
+        "@smithy/middleware-stack": "^3.0.4",
+        "@smithy/node-config-provider": "^3.1.5",
+        "@smithy/node-http-handler": "^3.2.0",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/smithy-client": "^3.3.0",
+        "@smithy/types": "^3.4.0",
+        "@smithy/url-parser": "^3.0.4",
         "@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.15",
-        "@smithy/util-defaults-mode-node": "^3.0.15",
-        "@smithy/util-endpoints": "^2.0.5",
-        "@smithy/util-middleware": "^3.0.3",
-        "@smithy/util-retry": "^3.0.3",
+        "@smithy/util-defaults-mode-browser": "^3.0.16",
+        "@smithy/util-defaults-mode-node": "^3.0.16",
+        "@smithy/util-endpoints": "^2.1.0",
+        "@smithy/util-middleware": "^3.0.4",
+        "@smithy/util-retry": "^3.0.4",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -802,18 +803,18 @@
       }
     },
     "node_modules/@aws-sdk/core": {
-      "version": "3.635.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz",
-      "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==",
-      "dependencies": {
-        "@smithy/core": "^2.4.0",
-        "@smithy/node-config-provider": "^3.1.4",
-        "@smithy/property-provider": "^3.1.3",
-        "@smithy/protocol-http": "^4.1.0",
-        "@smithy/signature-v4": "^4.1.0",
-        "@smithy/smithy-client": "^3.2.0",
-        "@smithy/types": "^3.3.0",
-        "@smithy/util-middleware": "^3.0.3",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.649.0.tgz",
+      "integrity": "sha512-dheG/X2y25RHE7K+TlS32kcy7TgDg1OpWV44BQRoE0OBPAWmFR1D1qjjTZ7WWrdqRPKzcnDj1qED8ncyncOX8g==",
+      "dependencies": {
+        "@smithy/core": "^2.4.1",
+        "@smithy/node-config-provider": "^3.1.5",
+        "@smithy/property-provider": "^3.1.4",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/signature-v4": "^4.1.1",
+        "@smithy/smithy-client": "^3.3.0",
+        "@smithy/types": "^3.4.0",
+        "@smithy/util-middleware": "^3.0.4",
         "fast-xml-parser": "4.4.1",
         "tslib": "^2.6.2"
       },
@@ -822,14 +823,14 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-cognito-identity": {
-      "version": "3.637.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.637.0.tgz",
-      "integrity": "sha512-9qK1mF+EThtv3tsL1C/wb9MpWctJSkzjrLTFj+0Rtk8VYm6DlGepo/I6a2x3SeDmdBfHAFSrKFU39GqWDp1mwQ==",
-      "dependencies": {
-        "@aws-sdk/client-cognito-identity": "3.637.0",
-        "@aws-sdk/types": "3.609.0",
-        "@smithy/property-provider": "^3.1.3",
-        "@smithy/types": "^3.3.0",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.649.0.tgz",
+      "integrity": "sha512-+QyXxlZcsbtFWnR3Htqvqr4iC1zZNZMWlJHU7iLwnzfGEFmq3rAnLEE3dU+D7M88EmjK5xdUvJanxcSQc480tA==",
+      "dependencies": {
+        "@aws-sdk/client-cognito-identity": "3.649.0",
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/property-provider": "^3.1.4",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -837,13 +838,13 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-env": {
-      "version": "3.620.1",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz",
-      "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.649.0.tgz",
+      "integrity": "sha512-tViwzM1dauksA3fdRjsg0T8mcHklDa8EfveyiQKK6pUJopkqV6FQx+X5QNda0t/LrdEVlFZvwHNdXqOEfc83TA==",
       "dependencies": {
-        "@aws-sdk/types": "3.609.0",
-        "@smithy/property-provider": "^3.1.3",
-        "@smithy/types": "^3.3.0",
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/property-provider": "^3.1.4",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -851,18 +852,18 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-http": {
-      "version": "3.635.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz",
-      "integrity": "sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g==",
-      "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.2.0",
-        "@smithy/types": "^3.3.0",
-        "@smithy/util-stream": "^3.1.3",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.649.0.tgz",
+      "integrity": "sha512-ODAJ+AJJq6ozbns6ejGbicpsQ0dyMOpnGlg0J9J0jITQ05DKQZ581hdB8APDOZ9N8FstShP6dLZflSj8jb5fNA==",
+      "dependencies": {
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/fetch-http-handler": "^3.2.5",
+        "@smithy/node-http-handler": "^3.2.0",
+        "@smithy/property-provider": "^3.1.4",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/smithy-client": "^3.3.0",
+        "@smithy/types": "^3.4.0",
+        "@smithy/util-stream": "^3.1.4",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -870,45 +871,45 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-ini": {
-      "version": "3.637.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.637.0.tgz",
-      "integrity": "sha512-h+PFCWfZ0Q3Dx84SppET/TFpcQHmxFW8/oV9ArEvMilw4EBN+IlxgbL0CnHwjHW64szcmrM0mbebjEfHf4FXmw==",
-      "dependencies": {
-        "@aws-sdk/credential-provider-env": "3.620.1",
-        "@aws-sdk/credential-provider-http": "3.635.0",
-        "@aws-sdk/credential-provider-process": "3.620.1",
-        "@aws-sdk/credential-provider-sso": "3.637.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",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.649.0.tgz",
+      "integrity": "sha512-2CcvYEi76gSXsCTb3izRfUpyDWmX+uGhjBckj3Lt6I2Jh+dxF9AEQAoMhvO7LM12Gx8v3w2JEC+GOZOVO4uq/A==",
+      "dependencies": {
+        "@aws-sdk/credential-provider-env": "3.649.0",
+        "@aws-sdk/credential-provider-http": "3.649.0",
+        "@aws-sdk/credential-provider-process": "3.649.0",
+        "@aws-sdk/credential-provider-sso": "3.649.0",
+        "@aws-sdk/credential-provider-web-identity": "3.649.0",
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/credential-provider-imds": "^3.2.1",
+        "@smithy/property-provider": "^3.1.4",
+        "@smithy/shared-ini-file-loader": "^3.1.5",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-sts": "^3.637.0"
+        "@aws-sdk/client-sts": "^3.649.0"
       }
     },
     "node_modules/@aws-sdk/credential-provider-node": {
-      "version": "3.637.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.637.0.tgz",
-      "integrity": "sha512-yoEhoxJJfs7sPVQ6Is939BDQJZpZCoUgKr/ySse4YKOZ24t4VqgHA6+wV7rYh+7IW24Rd91UTvEzSuHYTlxlNA==",
-      "dependencies": {
-        "@aws-sdk/credential-provider-env": "3.620.1",
-        "@aws-sdk/credential-provider-http": "3.635.0",
-        "@aws-sdk/credential-provider-ini": "3.637.0",
-        "@aws-sdk/credential-provider-process": "3.620.1",
-        "@aws-sdk/credential-provider-sso": "3.637.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",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.649.0.tgz",
+      "integrity": "sha512-5g0HhP9DQ3SCvU6pm3yLZz5SUYSL5TP0UGluZN2OMEJG9ZL+tSZSgH21PcEQmpltP0UdS7vvuq++bHv7Bdo9qQ==",
+      "dependencies": {
+        "@aws-sdk/credential-provider-env": "3.649.0",
+        "@aws-sdk/credential-provider-http": "3.649.0",
+        "@aws-sdk/credential-provider-ini": "3.649.0",
+        "@aws-sdk/credential-provider-process": "3.649.0",
+        "@aws-sdk/credential-provider-sso": "3.649.0",
+        "@aws-sdk/credential-provider-web-identity": "3.649.0",
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/credential-provider-imds": "^3.2.1",
+        "@smithy/property-provider": "^3.1.4",
+        "@smithy/shared-ini-file-loader": "^3.1.5",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -916,14 +917,14 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-process": {
-      "version": "3.620.1",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz",
-      "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",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.649.0.tgz",
+      "integrity": "sha512-6VYPQpEVpU+6DDS/gLoI40ppuNM5RPIEprK30qZZxnhTr5wyrGOeJ7J7wbbwPOZ5dKwta290BiJDU2ipV8Y9BQ==",
+      "dependencies": {
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/property-provider": "^3.1.4",
+        "@smithy/shared-ini-file-loader": "^3.1.5",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -931,16 +932,16 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-sso": {
-      "version": "3.637.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.637.0.tgz",
-      "integrity": "sha512-Mvz+h+e62/tl+dVikLafhv+qkZJ9RUb8l2YN/LeKMWkxQylPT83CPk9aimVhCV89zth1zpREArl97+3xsfgQvA==",
-      "dependencies": {
-        "@aws-sdk/client-sso": "3.637.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",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.649.0.tgz",
+      "integrity": "sha512-1Fh0Ov7LAVlrEpZfHwvslzyWhT+FyFA8RnN56pF3rwypm9s/WbINKEJiEcTYCBAvD4b27iSC0AJzzHdEgkdsxA==",
+      "dependencies": {
+        "@aws-sdk/client-sso": "3.649.0",
+        "@aws-sdk/token-providers": "3.649.0",
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/property-provider": "^3.1.4",
+        "@smithy/shared-ini-file-loader": "^3.1.5",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -948,42 +949,42 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-web-identity": {
-      "version": "3.621.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz",
-      "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.649.0.tgz",
+      "integrity": "sha512-XVk3WsDa0g3kQFPmnCH/LaCtGY/0R2NDv7gscYZSXiBZcG/fixasglTprgWSp8zcA0t7tEIGu9suyjz8ZwhymQ==",
       "dependencies": {
-        "@aws-sdk/types": "3.609.0",
-        "@smithy/property-provider": "^3.1.3",
-        "@smithy/types": "^3.3.0",
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/property-provider": "^3.1.4",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-sts": "^3.621.0"
+        "@aws-sdk/client-sts": "^3.649.0"
       }
     },
     "node_modules/@aws-sdk/credential-providers": {
-      "version": "3.637.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.637.0.tgz",
-      "integrity": "sha512-yW1scL3Z7JsrTrmhjyZsB6tsMJ49UCO42BGlNWZAW+kN1vNJ+qbv6XYQJWR4gjpuD2rdmtGcEawcgllE2Bmigw==",
-      "dependencies": {
-        "@aws-sdk/client-cognito-identity": "3.637.0",
-        "@aws-sdk/client-sso": "3.637.0",
-        "@aws-sdk/client-sts": "3.637.0",
-        "@aws-sdk/credential-provider-cognito-identity": "3.637.0",
-        "@aws-sdk/credential-provider-env": "3.620.1",
-        "@aws-sdk/credential-provider-http": "3.635.0",
-        "@aws-sdk/credential-provider-ini": "3.637.0",
-        "@aws-sdk/credential-provider-node": "3.637.0",
-        "@aws-sdk/credential-provider-process": "3.620.1",
-        "@aws-sdk/credential-provider-sso": "3.637.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/types": "^3.3.0",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.649.0.tgz",
+      "integrity": "sha512-/WJyftIof/uuS86OfTpF/HidEbLsFeOuhWElp6oKOUn5EqpE0CJ/JZ+2unmT6jxzPjv4JW+mdVTlIjW+6pILaA==",
+      "dependencies": {
+        "@aws-sdk/client-cognito-identity": "3.649.0",
+        "@aws-sdk/client-sso": "3.649.0",
+        "@aws-sdk/client-sts": "3.649.0",
+        "@aws-sdk/credential-provider-cognito-identity": "3.649.0",
+        "@aws-sdk/credential-provider-env": "3.649.0",
+        "@aws-sdk/credential-provider-http": "3.649.0",
+        "@aws-sdk/credential-provider-ini": "3.649.0",
+        "@aws-sdk/credential-provider-node": "3.649.0",
+        "@aws-sdk/credential-provider-process": "3.649.0",
+        "@aws-sdk/credential-provider-sso": "3.649.0",
+        "@aws-sdk/credential-provider-web-identity": "3.649.0",
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/credential-provider-imds": "^3.2.1",
+        "@smithy/property-provider": "^3.1.4",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -991,13 +992,13 @@
       }
     },
     "node_modules/@aws-sdk/middleware-host-header": {
-      "version": "3.620.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz",
-      "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.649.0.tgz",
+      "integrity": "sha512-PjAe2FocbicHVgNNwdSZ05upxIO7AgTPFtQLpnIAmoyzMcgv/zNB5fBn3uAnQSAeEPPCD+4SYVEUD1hw1ZBvEg==",
       "dependencies": {
-        "@aws-sdk/types": "3.609.0",
-        "@smithy/protocol-http": "^4.1.0",
-        "@smithy/types": "^3.3.0",
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1005,12 +1006,12 @@
       }
     },
     "node_modules/@aws-sdk/middleware-logger": {
-      "version": "3.609.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz",
-      "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.649.0.tgz",
+      "integrity": "sha512-qdqRx6q7lYC6KL/NT9x3ShTL0TBuxdkCczGzHzY3AnOoYUjnCDH7Vlq867O6MAvb4EnGNECFzIgtkZkQ4FhY5w==",
       "dependencies": {
-        "@aws-sdk/types": "3.609.0",
-        "@smithy/types": "^3.3.0",
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1018,13 +1019,13 @@
       }
     },
     "node_modules/@aws-sdk/middleware-recursion-detection": {
-      "version": "3.620.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz",
-      "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.649.0.tgz",
+      "integrity": "sha512-IPnO4wlmaLRf6IYmJW2i8gJ2+UPXX0hDRv1it7Qf8DpBW+lGyF2rnoN7NrFX0WIxdGOlJF1RcOr/HjXb2QeXfQ==",
       "dependencies": {
-        "@aws-sdk/types": "3.609.0",
-        "@smithy/protocol-http": "^4.1.0",
-        "@smithy/types": "^3.3.0",
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1032,17 +1033,17 @@
       }
     },
     "node_modules/@aws-sdk/middleware-sdk-ec2": {
-      "version": "3.635.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-ec2/-/middleware-sdk-ec2-3.635.0.tgz",
-      "integrity": "sha512-XsHvRUOqTyIV9M9uKMBS/8Hd5pW8RNTo3vlouQy1RDON8/LynevZ+RN5bo22iKrtOPM4J5j0YAcntUopWb1ljg==",
-      "dependencies": {
-        "@aws-sdk/types": "3.609.0",
-        "@aws-sdk/util-format-url": "3.609.0",
-        "@smithy/middleware-endpoint": "^3.1.0",
-        "@smithy/protocol-http": "^4.1.0",
-        "@smithy/signature-v4": "^4.1.0",
-        "@smithy/smithy-client": "^3.2.0",
-        "@smithy/types": "^3.3.0",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-ec2/-/middleware-sdk-ec2-3.649.0.tgz",
+      "integrity": "sha512-ZlLWYbWjB+Qjz73BAWf7EBtR6Y1/Z5jNxKQNCIiuZ36Bk4Lbhp7qASojL818P0Yy9ixiDi0Yzar6G0PO8odrtA==",
+      "dependencies": {
+        "@aws-sdk/types": "3.649.0",
+        "@aws-sdk/util-format-url": "3.649.0",
+        "@smithy/middleware-endpoint": "^3.1.1",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/signature-v4": "^4.1.1",
+        "@smithy/smithy-client": "^3.3.0",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1050,14 +1051,14 @@
       }
     },
     "node_modules/@aws-sdk/middleware-user-agent": {
-      "version": "3.637.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.637.0.tgz",
-      "integrity": "sha512-EYo0NE9/da/OY8STDsK2LvM4kNa79DBsf4YVtaG4P5pZ615IeFsD8xOHZeuJmUrSMlVQ8ywPRX7WMucUybsKug==",
-      "dependencies": {
-        "@aws-sdk/types": "3.609.0",
-        "@aws-sdk/util-endpoints": "3.637.0",
-        "@smithy/protocol-http": "^4.1.0",
-        "@smithy/types": "^3.3.0",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.649.0.tgz",
+      "integrity": "sha512-q6sO10dnCXoxe9thobMJxekhJumzd1j6dxcE1+qJdYKHJr6yYgWbogJqrLCpWd30w0lEvnuAHK8lN2kWLdJxJw==",
+      "dependencies": {
+        "@aws-sdk/types": "3.649.0",
+        "@aws-sdk/util-endpoints": "3.649.0",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1065,15 +1066,15 @@
       }
     },
     "node_modules/@aws-sdk/region-config-resolver": {
-      "version": "3.614.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz",
-      "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.649.0.tgz",
+      "integrity": "sha512-xURBvdQXvRvca5Du8IlC5FyCj3pkw8Z75+373J3Wb+vyg8GjD14HfKk1Je1HCCQDyIE9VB/scYDcm9ri0ppePw==",
       "dependencies": {
-        "@aws-sdk/types": "3.609.0",
-        "@smithy/node-config-provider": "^3.1.4",
-        "@smithy/types": "^3.3.0",
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/node-config-provider": "^3.1.5",
+        "@smithy/types": "^3.4.0",
         "@smithy/util-config-provider": "^3.0.0",
-        "@smithy/util-middleware": "^3.0.3",
+        "@smithy/util-middleware": "^3.0.4",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1081,29 +1082,29 @@
       }
     },
     "node_modules/@aws-sdk/token-providers": {
-      "version": "3.614.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz",
-      "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",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.649.0.tgz",
+      "integrity": "sha512-ZBqr+JuXI9RiN+4DSZykMx5gxpL8Dr3exIfFhxMiwAP3DQojwl0ub8ONjMuAjq9OvmX6n+jHZL6fBnNgnNFC8w==",
+      "dependencies": {
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/property-provider": "^3.1.4",
+        "@smithy/shared-ini-file-loader": "^3.1.5",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-sso-oidc": "^3.614.0"
+        "@aws-sdk/client-sso-oidc": "^3.649.0"
       }
     },
     "node_modules/@aws-sdk/types": {
-      "version": "3.609.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz",
-      "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.649.0.tgz",
+      "integrity": "sha512-PuPw8RysbhJNlaD2d/PzOTf8sbf4Dsn2b7hwyGh7YVG3S75yTpxSAZxrnhKsz9fStgqFmnw/jUfV/G+uQAeTVw==",
       "dependencies": {
-        "@smithy/types": "^3.3.0",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1111,13 +1112,13 @@
       }
     },
     "node_modules/@aws-sdk/util-endpoints": {
-      "version": "3.637.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.637.0.tgz",
-      "integrity": "sha512-pAqOKUHeVWHEXXDIp/qoMk/6jyxIb6GGjnK1/f8dKHtKIEs4tKsnnL563gceEvdad53OPXIt86uoevCcCzmBnw==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.649.0.tgz",
+      "integrity": "sha512-bZI1Wc3R/KibdDVWFxX/N4AoJFG4VJ92Dp4WYmOrVD6VPkb8jPz7ZeiYc7YwPl8NoDjYyPneBV0lEoK/V8OKAA==",
       "dependencies": {
-        "@aws-sdk/types": "3.609.0",
-        "@smithy/types": "^3.3.0",
-        "@smithy/util-endpoints": "^2.0.5",
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/types": "^3.4.0",
+        "@smithy/util-endpoints": "^2.1.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1125,13 +1126,13 @@
       }
     },
     "node_modules/@aws-sdk/util-format-url": {
-      "version": "3.609.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.609.0.tgz",
-      "integrity": "sha512-fuk29BI/oLQlJ7pfm6iJ4gkEpHdavffAALZwXh9eaY1vQ0ip0aKfRTiNudPoJjyyahnz5yJ1HkmlcDitlzsOrQ==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.649.0.tgz",
+      "integrity": "sha512-I5olOLkXQRJWAaoTSTXcycNBJ26daeEpgxYD6VPpQma9StFVK7a0MbHa1QGkOy9eVTTuf6xb2U1eiCWDWn3TXA==",
       "dependencies": {
-        "@aws-sdk/types": "3.609.0",
-        "@smithy/querystring-builder": "^3.0.3",
-        "@smithy/types": "^3.3.0",
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/querystring-builder": "^3.0.4",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1150,24 +1151,24 @@
       }
     },
     "node_modules/@aws-sdk/util-user-agent-browser": {
-      "version": "3.609.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz",
-      "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.649.0.tgz",
+      "integrity": "sha512-IY43r256LhKAvdEVQO/FPdUyVpcZS5EVxh/WHVdNzuN1bNLoUK2rIzuZqVA0EGguvCxoXVmQv9m50GvG7cGktg==",
       "dependencies": {
-        "@aws-sdk/types": "3.609.0",
-        "@smithy/types": "^3.3.0",
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/types": "^3.4.0",
         "bowser": "^2.11.0",
         "tslib": "^2.6.2"
       }
     },
     "node_modules/@aws-sdk/util-user-agent-node": {
-      "version": "3.614.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz",
-      "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==",
+      "version": "3.649.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.649.0.tgz",
+      "integrity": "sha512-x5DiLpZDG/AJmCIBnE3Xhpwy35QIo3WqNiOpw6ExVs1NydbM/e90zFPSfhME0FM66D/WorigvluBxxwjxDm/GA==",
       "dependencies": {
-        "@aws-sdk/types": "3.609.0",
-        "@smithy/node-config-provider": "^3.1.4",
-        "@smithy/types": "^3.3.0",
+        "@aws-sdk/types": "3.649.0",
+        "@smithy/node-config-provider": "^3.1.5",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2595,26 +2596,26 @@
       }
     },
     "node_modules/@connectrpc/connect": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/@connectrpc/connect/-/connect-1.4.0.tgz",
-      "integrity": "sha512-vZeOkKaAjyV4+RH3+rJZIfDFJAfr+7fyYr6sLDKbYX3uuTVszhFe9/YKf5DNqrDb5cKdKVlYkGn6DTDqMitAnA==",
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@connectrpc/connect/-/connect-1.5.0.tgz",
+      "integrity": "sha512-1gGg0M6c2Y3lnr5itis9dNj9r8hbOIuBMqoGSbUy7L7Vjw4MAttjJzJfj9HCDgytGCJkGanYEYI6MQVDijdVQw==",
       "peerDependencies": {
-        "@bufbuild/protobuf": "^1.4.2"
+        "@bufbuild/protobuf": "^1.10.0"
       }
     },
     "node_modules/@connectrpc/connect-node": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/@connectrpc/connect-node/-/connect-node-1.4.0.tgz",
-      "integrity": "sha512-0ANnrr6SvsjevsWEgdzHy7BaHkluZyS6s4xNoVt7RBHFR5V/kT9lPokoIbYUOU9JHzdRgTaS3x5595mwUsu15g==",
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@connectrpc/connect-node/-/connect-node-1.5.0.tgz",
+      "integrity": "sha512-go27+V6c6/YOGMXUs7d1NbXnGpMJl5fKYfMtbBKDs9azZTg/tW9q5S0iw9upZs43bOPV8YnJAWmTW9n1Te9NAw==",
       "dependencies": {
-        "undici": "^5.28.3"
+        "undici": "^5.28.4"
       },
       "engines": {
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@bufbuild/protobuf": "^1.4.2",
-        "@connectrpc/connect": "1.4.0"
+        "@bufbuild/protobuf": "^1.10.0",
+        "@connectrpc/connect": "1.5.0"
       }
     },
     "node_modules/@cspotcode/source-map-support": {
@@ -4925,16 +4926,16 @@
       }
     },
     "node_modules/@mswjs/interceptors": {
-      "version": "0.29.1",
-      "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.29.1.tgz",
-      "integrity": "sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==",
+      "version": "0.35.1",
+      "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.35.1.tgz",
+      "integrity": "sha512-nMuUaMCtg8oKSTHwAnsoGRN6c1RZXNm6+ebEoe9SBGALVlBIzniZoSuC/itNCLOt51YEEYsF0svB/sOzYhqLPA==",
       "dev": true,
       "dependencies": {
         "@open-draft/deferred-promise": "^2.2.0",
         "@open-draft/logger": "^0.3.0",
         "@open-draft/until": "^2.0.0",
         "is-node-process": "^1.2.0",
-        "outvariant": "^1.2.1",
+        "outvariant": "^1.4.3",
         "strict-event-emitter": "^0.5.1"
       },
       "engines": {
@@ -6374,6 +6375,12 @@
         "win32"
       ]
     },
+    "node_modules/@rtsao/scc": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
+      "dev": true
+    },
     "node_modules/@sideway/address": {
       "version": "4.1.5",
       "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
@@ -6413,11 +6420,11 @@
       }
     },
     "node_modules/@smithy/abort-controller": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz",
-      "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.2.tgz",
+      "integrity": "sha512-b5g+PNujlfqIib9BjkNB108NyO5aZM/RXjfOCXRCqXQ1oPnIkfvdORrztbGgCZdPe/BN/MKDlrGA7PafKPM2jw==",
       "dependencies": {
-        "@smithy/types": "^3.3.0",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6425,14 +6432,14 @@
       }
     },
     "node_modules/@smithy/config-resolver": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz",
-      "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==",
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.6.tgz",
+      "integrity": "sha512-j7HuVNoRd8EhcFp0MzcUb4fG40C7BcyshH+fAd3Jhd8bINNFvEQYBrZoS/SK6Pun9WPlfoI8uuU2SMz8DsEGlA==",
       "dependencies": {
-        "@smithy/node-config-provider": "^3.1.4",
-        "@smithy/types": "^3.3.0",
+        "@smithy/node-config-provider": "^3.1.5",
+        "@smithy/types": "^3.4.0",
         "@smithy/util-config-provider": "^3.0.0",
-        "@smithy/util-middleware": "^3.0.3",
+        "@smithy/util-middleware": "^3.0.4",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6440,18 +6447,18 @@
       }
     },
     "node_modules/@smithy/core": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.0.tgz",
-      "integrity": "sha512-cHXq+FneIF/KJbt4q4pjN186+Jf4ZB0ZOqEaZMBhT79srEyGDDBV31NqBRBjazz8ppQ1bJbDJMY9ba5wKFV36w==",
-      "dependencies": {
-        "@smithy/middleware-endpoint": "^3.1.0",
-        "@smithy/middleware-retry": "^3.0.15",
-        "@smithy/middleware-serde": "^3.0.3",
-        "@smithy/protocol-http": "^4.1.0",
-        "@smithy/smithy-client": "^3.2.0",
-        "@smithy/types": "^3.3.0",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.1.tgz",
+      "integrity": "sha512-7cts7/Oni7aCHebHGiBeWoz5z+vmH+Vx2Z/UW3XtXMslcxI3PEwBZxNinepwZjixS3n12fPc247PHWmjU7ndsQ==",
+      "dependencies": {
+        "@smithy/middleware-endpoint": "^3.1.1",
+        "@smithy/middleware-retry": "^3.0.16",
+        "@smithy/middleware-serde": "^3.0.4",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/smithy-client": "^3.3.0",
+        "@smithy/types": "^3.4.0",
         "@smithy/util-body-length-browser": "^3.0.0",
-        "@smithy/util-middleware": "^3.0.3",
+        "@smithy/util-middleware": "^3.0.4",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -6460,14 +6467,14 @@
       }
     },
     "node_modules/@smithy/credential-provider-imds": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz",
-      "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==",
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.1.tgz",
+      "integrity": "sha512-4z/oTWpRF2TqQI3aCM89/PWu3kim58XU4kOCTtuTJnoaS4KT95cPWMxbQfTN2vzcOe96SOKO8QouQW/+ESB1fQ==",
       "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",
+        "@smithy/node-config-provider": "^3.1.5",
+        "@smithy/property-provider": "^3.1.4",
+        "@smithy/types": "^3.4.0",
+        "@smithy/url-parser": "^3.0.4",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6475,23 +6482,23 @@
       }
     },
     "node_modules/@smithy/fetch-http-handler": {
-      "version": "3.2.4",
-      "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz",
-      "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==",
+      "version": "3.2.5",
+      "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.5.tgz",
+      "integrity": "sha512-DjRtGmK8pKQMIo9+JlAKUt14Z448bg8nAN04yKIvlrrpmpRSG57s5d2Y83npks1r4gPtTRNbAFdQCoj9l3P2KQ==",
       "dependencies": {
-        "@smithy/protocol-http": "^4.1.0",
-        "@smithy/querystring-builder": "^3.0.3",
-        "@smithy/types": "^3.3.0",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/querystring-builder": "^3.0.4",
+        "@smithy/types": "^3.4.0",
         "@smithy/util-base64": "^3.0.0",
         "tslib": "^2.6.2"
       }
     },
     "node_modules/@smithy/hash-node": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz",
-      "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.4.tgz",
+      "integrity": "sha512-6FgTVqEfCr9z/7+Em8BwSkJKA2y3krf1em134x3yr2NHWVCo2KYI8tcA53cjeO47y41jwF84ntsEE0Pe6pNKlg==",
       "dependencies": {
-        "@smithy/types": "^3.3.0",
+        "@smithy/types": "^3.4.0",
         "@smithy/util-buffer-from": "^3.0.0",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
@@ -6501,11 +6508,11 @@
       }
     },
     "node_modules/@smithy/invalid-dependency": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz",
-      "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.4.tgz",
+      "integrity": "sha512-MJBUrojC4SEXi9aJcnNOE3oNAuYNphgCGFXscaCj2TA/59BTcXhzHACP8jnnEU3n4yir/NSLKzxqez0T4x4tjA==",
       "dependencies": {
-        "@smithy/types": "^3.3.0",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       }
     },
@@ -6521,12 +6528,12 @@
       }
     },
     "node_modules/@smithy/middleware-content-length": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz",
-      "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==",
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.6.tgz",
+      "integrity": "sha512-AFyHCfe8rumkJkz+hCOVJmBagNBj05KypyDwDElA4TgMSA4eYDZRjVePFZuyABrJZFDc7uVj3dpFIDCEhf59SA==",
       "dependencies": {
-        "@smithy/protocol-http": "^4.1.0",
-        "@smithy/types": "^3.3.0",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6534,16 +6541,16 @@
       }
     },
     "node_modules/@smithy/middleware-endpoint": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz",
-      "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",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.1.tgz",
+      "integrity": "sha512-Irv+soW8NKluAtFSEsF8O3iGyLxa5oOevJb/e1yNacV9H7JP/yHyJuKST5YY2ORS1+W34VR8EuUrOF+K29Pl4g==",
+      "dependencies": {
+        "@smithy/middleware-serde": "^3.0.4",
+        "@smithy/node-config-provider": "^3.1.5",
+        "@smithy/shared-ini-file-loader": "^3.1.5",
+        "@smithy/types": "^3.4.0",
+        "@smithy/url-parser": "^3.0.4",
+        "@smithy/util-middleware": "^3.0.4",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6551,17 +6558,17 @@
       }
     },
     "node_modules/@smithy/middleware-retry": {
-      "version": "3.0.15",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.15.tgz",
-      "integrity": "sha512-iTMedvNt1ApdvkaoE8aSDuwaoc+BhvHqttbA/FO4Ty+y/S5hW6Ci/CTScG7vam4RYJWZxdTElc3MEfHRVH6cgQ==",
-      "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.2.0",
-        "@smithy/types": "^3.3.0",
-        "@smithy/util-middleware": "^3.0.3",
-        "@smithy/util-retry": "^3.0.3",
+      "version": "3.0.16",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.16.tgz",
+      "integrity": "sha512-08kI36p1yB4CWO3Qi+UQxjzobt8iQJpnruF0K5BkbZmA/N/sJ51A1JJGJ36GgcbFyPfWw2FU48S5ZoqXt0h0jw==",
+      "dependencies": {
+        "@smithy/node-config-provider": "^3.1.5",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/service-error-classification": "^3.0.4",
+        "@smithy/smithy-client": "^3.3.0",
+        "@smithy/types": "^3.4.0",
+        "@smithy/util-middleware": "^3.0.4",
+        "@smithy/util-retry": "^3.0.4",
         "tslib": "^2.6.2",
         "uuid": "^9.0.1"
       },
@@ -6582,11 +6589,11 @@
       }
     },
     "node_modules/@smithy/middleware-serde": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz",
-      "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.4.tgz",
+      "integrity": "sha512-1lPDB2O6IJ50Ucxgn7XrvZXbbuI48HmPCcMTuSoXT1lDzuTUfIuBjgAjpD8YLVMfnrjdepi/q45556LA51Pubw==",
       "dependencies": {
-        "@smithy/types": "^3.3.0",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6594,11 +6601,11 @@
       }
     },
     "node_modules/@smithy/middleware-stack": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz",
-      "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.4.tgz",
+      "integrity": "sha512-sLMRjtMCqtVcrOqaOZ10SUnlFE25BSlmLsi4bRSGFD7dgR54eqBjfqkVkPBQyrKBortfGM0+2DJoUPcGECR+nQ==",
       "dependencies": {
-        "@smithy/types": "^3.3.0",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6606,13 +6613,13 @@
       }
     },
     "node_modules/@smithy/node-config-provider": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz",
-      "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==",
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.5.tgz",
+      "integrity": "sha512-dq/oR3/LxgCgizVk7in7FGTm0w9a3qM4mg3IIXLTCHeW3fV+ipssSvBZ2bvEx1+asfQJTyCnVLeYf7JKfd9v3Q==",
       "dependencies": {
-        "@smithy/property-provider": "^3.1.3",
-        "@smithy/shared-ini-file-loader": "^3.1.4",
-        "@smithy/types": "^3.3.0",
+        "@smithy/property-provider": "^3.1.4",
+        "@smithy/shared-ini-file-loader": "^3.1.5",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6620,14 +6627,14 @@
       }
     },
     "node_modules/@smithy/node-http-handler": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz",
-      "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.0.tgz",
+      "integrity": "sha512-5TFqaABbiY7uJMKbqR4OARjwI/l4TRoysDJ75pLpVQyO3EcmeloKYwDGyCtgB9WJniFx3BMkmGCB9+j+QiB+Ww==",
       "dependencies": {
-        "@smithy/abort-controller": "^3.1.1",
-        "@smithy/protocol-http": "^4.1.0",
-        "@smithy/querystring-builder": "^3.0.3",
-        "@smithy/types": "^3.3.0",
+        "@smithy/abort-controller": "^3.1.2",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/querystring-builder": "^3.0.4",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6635,11 +6642,11 @@
       }
     },
     "node_modules/@smithy/property-provider": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz",
-      "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==",
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.4.tgz",
+      "integrity": "sha512-BmhefQbfkSl9DeU0/e6k9N4sT5bya5etv2epvqLUz3eGyfRBhtQq60nDkc1WPp4c+KWrzK721cUc/3y0f2psPQ==",
       "dependencies": {
-        "@smithy/types": "^3.3.0",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6647,11 +6654,11 @@
       }
     },
     "node_modules/@smithy/protocol-http": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz",
-      "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.1.tgz",
+      "integrity": "sha512-Fm5+8LkeIus83Y8jTL1XHsBGP8sPvE1rEVyKf/87kbOPTbzEDMcgOlzcmYXat2h+nC3wwPtRy8hFqtJS71+Wow==",
       "dependencies": {
-        "@smithy/types": "^3.3.0",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6659,11 +6666,11 @@
       }
     },
     "node_modules/@smithy/querystring-builder": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz",
-      "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.4.tgz",
+      "integrity": "sha512-NEoPAsZPdpfVbF98qm8i5k1XMaRKeEnO47CaL5ja6Y1Z2DgJdwIJuJkTJypKm/IKfp8gc0uimIFLwhml8+/pAw==",
       "dependencies": {
-        "@smithy/types": "^3.3.0",
+        "@smithy/types": "^3.4.0",
         "@smithy/util-uri-escape": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -6672,11 +6679,11 @@
       }
     },
     "node_modules/@smithy/querystring-parser": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz",
-      "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.4.tgz",
+      "integrity": "sha512-7CHPXffFcakFzhO0OZs/rn6fXlTHrSDdLhIT6/JIk1u2bvwguTL3fMCc1+CfcbXA7TOhjWXu3TcB1EGMqJQwHg==",
       "dependencies": {
-        "@smithy/types": "^3.3.0",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6684,22 +6691,22 @@
       }
     },
     "node_modules/@smithy/service-error-classification": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz",
-      "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.4.tgz",
+      "integrity": "sha512-KciDHHKFVTb9A1KlJHBt2F26PBaDtoE23uTZy5qRvPzHPqrooXFi6fmx98lJb3Jl38PuUTqIuCUmmY3pacuMBQ==",
       "dependencies": {
-        "@smithy/types": "^3.3.0"
+        "@smithy/types": "^3.4.0"
       },
       "engines": {
         "node": ">=16.0.0"
       }
     },
     "node_modules/@smithy/shared-ini-file-loader": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz",
-      "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==",
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.5.tgz",
+      "integrity": "sha512-6jxsJ4NOmY5Du4FD0enYegNJl4zTSuKLiChIMqIkh+LapxiP7lmz5lYUNLE9/4cvA65mbBmtdzZ8yxmcqM5igg==",
       "dependencies": {
-        "@smithy/types": "^3.3.0",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6707,15 +6714,15 @@
       }
     },
     "node_modules/@smithy/signature-v4": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz",
-      "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.1.tgz",
+      "integrity": "sha512-SH9J9be81TMBNGCmjhrgMWu4YSpQ3uP1L06u/K9SDrE2YibUix1qxedPCxEQu02At0P0SrYDjvz+y91vLG0KRQ==",
       "dependencies": {
         "@smithy/is-array-buffer": "^3.0.0",
-        "@smithy/protocol-http": "^4.1.0",
-        "@smithy/types": "^3.3.0",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/types": "^3.4.0",
         "@smithy/util-hex-encoding": "^3.0.0",
-        "@smithy/util-middleware": "^3.0.3",
+        "@smithy/util-middleware": "^3.0.4",
         "@smithy/util-uri-escape": "^3.0.0",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
@@ -6725,15 +6732,15 @@
       }
     },
     "node_modules/@smithy/smithy-client": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz",
-      "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==",
-      "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",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.3.0.tgz",
+      "integrity": "sha512-H32nVo8tIX82kB0xI2LBrIcj8jx/3/ITotNLbeG1UL0b3b440YPR/hUvqjFJiaB24pQrMjRbU8CugqH5sV0hkw==",
+      "dependencies": {
+        "@smithy/middleware-endpoint": "^3.1.1",
+        "@smithy/middleware-stack": "^3.0.4",
+        "@smithy/protocol-http": "^4.1.1",
+        "@smithy/types": "^3.4.0",
+        "@smithy/util-stream": "^3.1.4",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6741,9 +6748,9 @@
       }
     },
     "node_modules/@smithy/types": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz",
-      "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==",
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.4.0.tgz",
+      "integrity": "sha512-0shOWSg/pnFXPcsSU8ZbaJ4JBHZJPPzLCJxafJvbMVFo9l1w81CqpgUqjlKGNHVrVB7fhIs+WS82JDTyzaLyLA==",
       "dependencies": {
         "tslib": "^2.6.2"
       },
@@ -6752,12 +6759,12 @@
       }
     },
     "node_modules/@smithy/url-parser": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz",
-      "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.4.tgz",
+      "integrity": "sha512-XdXfObA8WrloavJYtDuzoDhJAYc5rOt+FirFmKBRKaihu7QtU/METAxJgSo7uMK6hUkx0vFnqxV75urtRaLkLg==",
       "dependencies": {
-        "@smithy/querystring-parser": "^3.0.3",
-        "@smithy/types": "^3.3.0",
+        "@smithy/querystring-parser": "^3.0.4",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       }
     },
@@ -6817,13 +6824,13 @@
       }
     },
     "node_modules/@smithy/util-defaults-mode-browser": {
-      "version": "3.0.15",
-      "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.15.tgz",
-      "integrity": "sha512-FZ4Psa3vjp8kOXcd3HJOiDPBCWtiilLl57r0cnNtq/Ga9RSDrM5ERL6xt+tO43+2af6Pn5Yp92x2n5vPuduNfg==",
+      "version": "3.0.16",
+      "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.16.tgz",
+      "integrity": "sha512-Os8ddfNBe7hmc5UMWZxygIHCyAqY0aWR8Wnp/aKbti3f8Df/r0J9ttMZIxeMjsFgtVjEryB0q7SGcwBsHk8WEw==",
       "dependencies": {
-        "@smithy/property-provider": "^3.1.3",
-        "@smithy/smithy-client": "^3.2.0",
-        "@smithy/types": "^3.3.0",
+        "@smithy/property-provider": "^3.1.4",
+        "@smithy/smithy-client": "^3.3.0",
+        "@smithy/types": "^3.4.0",
         "bowser": "^2.11.0",
         "tslib": "^2.6.2"
       },
@@ -6832,16 +6839,16 @@
       }
     },
     "node_modules/@smithy/util-defaults-mode-node": {
-      "version": "3.0.15",
-      "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.15.tgz",
-      "integrity": "sha512-KSyAAx2q6d0t6f/S4XB2+3+6aQacm3aLMhs9aLMqn18uYGUepbdssfogW5JQZpc6lXNBnp0tEnR5e9CEKmEd7A==",
-      "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.2.0",
-        "@smithy/types": "^3.3.0",
+      "version": "3.0.16",
+      "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.16.tgz",
+      "integrity": "sha512-rNhFIYRtrOrrhRlj6RL8jWA6/dcwrbGYAmy8+OAHjjzQ6zdzUBB1P+3IuJAgwWN6Y5GxI+mVXlM/pOjaoIgHow==",
+      "dependencies": {
+        "@smithy/config-resolver": "^3.0.6",
+        "@smithy/credential-provider-imds": "^3.2.1",
+        "@smithy/node-config-provider": "^3.1.5",
+        "@smithy/property-provider": "^3.1.4",
+        "@smithy/smithy-client": "^3.3.0",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6849,12 +6856,12 @@
       }
     },
     "node_modules/@smithy/util-endpoints": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz",
-      "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.0.tgz",
+      "integrity": "sha512-ilS7/0jcbS2ELdg0fM/4GVvOiuk8/U3bIFXUW25xE1Vh1Ol4DP6vVHQKqM40rCMizCLmJ9UxK+NeJrKlhI3HVA==",
       "dependencies": {
-        "@smithy/node-config-provider": "^3.1.4",
-        "@smithy/types": "^3.3.0",
+        "@smithy/node-config-provider": "^3.1.5",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6873,11 +6880,11 @@
       }
     },
     "node_modules/@smithy/util-middleware": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz",
-      "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.4.tgz",
+      "integrity": "sha512-uSXHTBhstb1c4nHdmQEdkNMv9LiRNaJ/lWV2U/GO+5F236YFpdPw+hyWI9Zc0Rp9XKzwD9kVZvhZmEgp0UCVnA==",
       "dependencies": {
-        "@smithy/types": "^3.3.0",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6885,12 +6892,12 @@
       }
     },
     "node_modules/@smithy/util-retry": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz",
-      "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.4.tgz",
+      "integrity": "sha512-JJr6g0tO1qO2tCQyK+n3J18r34ZpvatlFN5ULcLranFIBZPxqoivb77EPyNTVwTGMEvvq2qMnyjm4jMIxjdLFg==",
       "dependencies": {
-        "@smithy/service-error-classification": "^3.0.3",
-        "@smithy/types": "^3.3.0",
+        "@smithy/service-error-classification": "^3.0.4",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6898,13 +6905,13 @@
       }
     },
     "node_modules/@smithy/util-stream": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz",
-      "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==",
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.4.tgz",
+      "integrity": "sha512-txU3EIDLhrBZdGfon6E9V6sZz/irYnKFMblz4TLVjyq8hObNHNS2n9a2t7GIrl7d85zgEPhwLE0gANpZsvpsKg==",
       "dependencies": {
-        "@smithy/fetch-http-handler": "^3.2.4",
-        "@smithy/node-http-handler": "^3.1.4",
-        "@smithy/types": "^3.3.0",
+        "@smithy/fetch-http-handler": "^3.2.5",
+        "@smithy/node-http-handler": "^3.2.0",
+        "@smithy/types": "^3.4.0",
         "@smithy/util-base64": "^3.0.0",
         "@smithy/util-buffer-from": "^3.0.0",
         "@smithy/util-hex-encoding": "^3.0.0",
@@ -6939,12 +6946,12 @@
       }
     },
     "node_modules/@smithy/util-waiter": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.2.tgz",
-      "integrity": "sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw==",
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.3.tgz",
+      "integrity": "sha512-OU0YllH51/CxD8iyr3UHSMwYqTGTyuxFdCMH/0F978t+iDmJseC/ttrWPb22zmYkhkrjqtipzC1xaMuax5QKIA==",
       "dependencies": {
-        "@smithy/abort-controller": "^3.1.1",
-        "@smithy/types": "^3.3.0",
+        "@smithy/abort-controller": "^3.1.2",
+        "@smithy/types": "^3.4.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -7179,6 +7186,12 @@
         "@types/node": "*"
       }
     },
+    "node_modules/@types/semver": {
+      "version": "7.5.8",
+      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
+      "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
+      "dev": true
+    },
     "node_modules/@types/shimmer": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz",
@@ -7472,16 +7485,16 @@
       "dev": true
     },
     "node_modules/@vercel/build-utils": {
-      "version": "8.3.9",
-      "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-8.3.9.tgz",
-      "integrity": "sha512-QqJSv4zHnipCJz0MFOFfe2Na630njfj1FWjcD1uaVjjJP1AcKmMbfYl/e0JfOZy6MTE6f0Vk2+Bc4av6jrTaOQ=="
+      "version": "8.4.2",
+      "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-8.4.2.tgz",
+      "integrity": "sha512-Bern3FVvUgMu8YGuP+cYSTDaUA5Kn6HsMU75osWK6npS5Sw4K9zaY+cxONDMrzo/08Kvz5vgSRnwmq+P1MYq2g=="
     },
     "node_modules/@vercel/client": {
-      "version": "13.4.3",
-      "resolved": "https://registry.npmjs.org/@vercel/client/-/client-13.4.3.tgz",
-      "integrity": "sha512-KVhbTvPdHQgllpXBpDh2PrgBB9hNMImVXUDM4gS3WjDFO5JJQYo0kW4WcvcY4wiijZw+r4C7Ts18B9gfgcL+OQ==",
+      "version": "13.4.6",
+      "resolved": "https://registry.npmjs.org/@vercel/client/-/client-13.4.6.tgz",
+      "integrity": "sha512-0TDGJIkhDDO/MoryQq+fxCLhD5+KxtGwbdrht1FfOmAtMBXTa8j/UNIF11q1ojX49rfjd1JY2PVVhVDhocG3Cw==",
       "dependencies": {
-        "@vercel/build-utils": "8.3.9",
+        "@vercel/build-utils": "8.4.2",
         "@vercel/error-utils": "2.0.2",
         "@vercel/routing-utils": "3.1.0",
         "@zeit/fetch": "5.2.0",
@@ -8266,18 +8279,6 @@
         "undici-types": "~6.19.2"
       }
     },
-    "node_modules/@wdio/cli/node_modules/@wdio/types": {
-      "version": "8.40.3",
-      "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.40.3.tgz",
-      "integrity": "sha512-zK17uyON3Ise3m+XwiF5VrrdZcXXmvqB8AWXoKe88DiksFUPMVoCOuVL2SSX1KnA2YLlZBA55qcFZT99GORVKQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "^22.2.0"
-      },
-      "engines": {
-        "node": "^16.13 || >=18"
-      }
-    },
     "node_modules/@wdio/cli/node_modules/chalk": {
       "version": "5.3.0",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
@@ -8419,27 +8420,6 @@
         "node": "^16.13 || >=18"
       }
     },
-    "node_modules/@wdio/config/node_modules/@types/node": {
-      "version": "22.4.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.4.0.tgz",
-      "integrity": "sha512-49AbMDwYUz7EXxKU/r7mXOsxwFr4BYbvB7tWYxVuLdb2ibd30ijjXINSMAHiEEZk5PCRBmW1gUeisn2VMKt3cQ==",
-      "dev": true,
-      "dependencies": {
-        "undici-types": "~6.19.2"
-      }
-    },
-    "node_modules/@wdio/config/node_modules/@wdio/types": {
-      "version": "8.40.3",
-      "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.40.3.tgz",
-      "integrity": "sha512-zK17uyON3Ise3m+XwiF5VrrdZcXXmvqB8AWXoKe88DiksFUPMVoCOuVL2SSX1KnA2YLlZBA55qcFZT99GORVKQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "^22.2.0"
-      },
-      "engines": {
-        "node": "^16.13 || >=18"
-      }
-    },
     "node_modules/@wdio/config/node_modules/glob": {
       "version": "10.4.5",
       "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
@@ -8460,12 +8440,6 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/@wdio/config/node_modules/undici-types": {
-      "version": "6.19.6",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.6.tgz",
-      "integrity": "sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org==",
-      "dev": true
-    },
     "node_modules/@wdio/globals": {
       "version": "8.40.5",
       "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.40.5.tgz",
@@ -8507,18 +8481,6 @@
         "undici-types": "~6.19.2"
       }
     },
-    "node_modules/@wdio/local-runner/node_modules/@wdio/types": {
-      "version": "8.40.3",
-      "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.40.3.tgz",
-      "integrity": "sha512-zK17uyON3Ise3m+XwiF5VrrdZcXXmvqB8AWXoKe88DiksFUPMVoCOuVL2SSX1KnA2YLlZBA55qcFZT99GORVKQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "^22.2.0"
-      },
-      "engines": {
-        "node": "^16.13 || >=18"
-      }
-    },
     "node_modules/@wdio/local-runner/node_modules/undici-types": {
       "version": "6.19.8",
       "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
@@ -8578,18 +8540,6 @@
         "undici-types": "~6.19.2"
       }
     },
-    "node_modules/@wdio/mocha-framework/node_modules/@wdio/types": {
-      "version": "8.40.3",
-      "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.40.3.tgz",
-      "integrity": "sha512-zK17uyON3Ise3m+XwiF5VrrdZcXXmvqB8AWXoKe88DiksFUPMVoCOuVL2SSX1KnA2YLlZBA55qcFZT99GORVKQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "^22.2.0"
-      },
-      "engines": {
-        "node": "^16.13 || >=18"
-      }
-    },
     "node_modules/@wdio/mocha-framework/node_modules/undici-types": {
       "version": "6.19.8",
       "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
@@ -8630,14 +8580,14 @@
       "dev": true
     },
     "node_modules/@wdio/reporter": {
-      "version": "8.39.0",
-      "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-8.39.0.tgz",
-      "integrity": "sha512-XahXhmaA1okdwg4/ThHFSqy/41KywxhbtszPcTzyXB+9INaqFNHA1b1vvWs0mrD5+tTtKbg4caTcEHVJU4iv0w==",
+      "version": "8.40.3",
+      "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-8.40.3.tgz",
+      "integrity": "sha512-icoUnlyIqLKgxB215OPdDTHG+hlu+U+t/sO6S9eI0ZTYBYaDIQBWVCilkUWRvgfcNSiXYo+1VlVt6waIgIHKwQ==",
       "dev": true,
       "dependencies": {
-        "@types/node": "^20.1.0",
+        "@types/node": "^22.2.0",
         "@wdio/logger": "8.38.0",
-        "@wdio/types": "8.39.0",
+        "@wdio/types": "8.40.3",
         "diff": "^5.0.0",
         "object-inspect": "^1.12.0"
       },
@@ -8646,14 +8596,20 @@
       }
     },
     "node_modules/@wdio/reporter/node_modules/@types/node": {
-      "version": "20.14.10",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz",
-      "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==",
+      "version": "22.5.4",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz",
+      "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==",
       "dev": true,
       "dependencies": {
-        "undici-types": "~5.26.4"
+        "undici-types": "~6.19.2"
       }
     },
+    "node_modules/@wdio/reporter/node_modules/undici-types": {
+      "version": "6.19.8",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+      "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+      "dev": true
+    },
     "node_modules/@wdio/runner": {
       "version": "8.40.5",
       "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-8.40.5.tgz",
@@ -8685,18 +8641,6 @@
         "undici-types": "~6.19.2"
       }
     },
-    "node_modules/@wdio/runner/node_modules/@wdio/types": {
-      "version": "8.40.3",
-      "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.40.3.tgz",
-      "integrity": "sha512-zK17uyON3Ise3m+XwiF5VrrdZcXXmvqB8AWXoKe88DiksFUPMVoCOuVL2SSX1KnA2YLlZBA55qcFZT99GORVKQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "^22.2.0"
-      },
-      "engines": {
-        "node": "^16.13 || >=18"
-      }
-    },
     "node_modules/@wdio/runner/node_modules/undici-types": {
       "version": "6.19.8",
       "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
@@ -8704,13 +8648,13 @@
       "dev": true
     },
     "node_modules/@wdio/spec-reporter": {
-      "version": "8.39.0",
-      "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-8.39.0.tgz",
-      "integrity": "sha512-2DX0+xvP+PyeVTBd6iGCH/RU66WXaa8HL+HpsJXZu5rSkZ4+6B2Tv8JB3ZE/pOWGNpI+B4ac/NfDs1DrX9sB7A==",
+      "version": "8.40.3",
+      "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-8.40.3.tgz",
+      "integrity": "sha512-Qp8hI4ZqxOLQAeqpt1wmOzR0QgarsoT35NOVfEA7gSy8FcF+H/axrPwEToOLRSQIU4bKEh5/khJ7j81GaVqtVg==",
       "dev": true,
       "dependencies": {
-        "@wdio/reporter": "8.39.0",
-        "@wdio/types": "8.39.0",
+        "@wdio/reporter": "8.40.3",
+        "@wdio/types": "8.40.3",
         "chalk": "^5.1.2",
         "easy-table": "^1.2.0",
         "pretty-ms": "^7.0.0"
@@ -8732,26 +8676,32 @@
       }
     },
     "node_modules/@wdio/types": {
-      "version": "8.39.0",
-      "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.39.0.tgz",
-      "integrity": "sha512-86lcYROTapOJuFd9ouomFDfzDnv3Kn+jE0RmqfvN9frZAeLVJ5IKjX9M6HjplsyTZhjGO1uCaehmzx+HJus33Q==",
+      "version": "8.40.3",
+      "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.40.3.tgz",
+      "integrity": "sha512-zK17uyON3Ise3m+XwiF5VrrdZcXXmvqB8AWXoKe88DiksFUPMVoCOuVL2SSX1KnA2YLlZBA55qcFZT99GORVKQ==",
       "dev": true,
       "dependencies": {
-        "@types/node": "^20.1.0"
+        "@types/node": "^22.2.0"
       },
       "engines": {
         "node": "^16.13 || >=18"
       }
     },
     "node_modules/@wdio/types/node_modules/@types/node": {
-      "version": "20.14.10",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz",
-      "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==",
+      "version": "22.5.4",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz",
+      "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==",
       "dev": true,
       "dependencies": {
-        "undici-types": "~5.26.4"
+        "undici-types": "~6.19.2"
       }
     },
+    "node_modules/@wdio/types/node_modules/undici-types": {
+      "version": "6.19.8",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+      "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+      "dev": true
+    },
     "node_modules/@wdio/utils": {
       "version": "8.40.3",
       "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.40.3.tgz",
@@ -8776,33 +8726,6 @@
         "node": "^16.13 || >=18"
       }
     },
-    "node_modules/@wdio/utils/node_modules/@types/node": {
-      "version": "22.4.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.4.0.tgz",
-      "integrity": "sha512-49AbMDwYUz7EXxKU/r7mXOsxwFr4BYbvB7tWYxVuLdb2ibd30ijjXINSMAHiEEZk5PCRBmW1gUeisn2VMKt3cQ==",
-      "dev": true,
-      "dependencies": {
-        "undici-types": "~6.19.2"
-      }
-    },
-    "node_modules/@wdio/utils/node_modules/@wdio/types": {
-      "version": "8.40.3",
-      "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.40.3.tgz",
-      "integrity": "sha512-zK17uyON3Ise3m+XwiF5VrrdZcXXmvqB8AWXoKe88DiksFUPMVoCOuVL2SSX1KnA2YLlZBA55qcFZT99GORVKQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "^22.2.0"
-      },
-      "engines": {
-        "node": "^16.13 || >=18"
-      }
-    },
-    "node_modules/@wdio/utils/node_modules/undici-types": {
-      "version": "6.19.6",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.6.tgz",
-      "integrity": "sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org==",
-      "dev": true
-    },
     "node_modules/@webassemblyjs/ast": {
       "version": "1.12.1",
       "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
@@ -12513,9 +12436,9 @@
       }
     },
     "node_modules/dset": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz",
-      "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==",
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz",
+      "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==",
       "dev": true,
       "engines": {
         "node": ">=4"
@@ -13139,9 +13062,9 @@
       }
     },
     "node_modules/eslint-module-utils": {
-      "version": "2.8.1",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz",
-      "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==",
+      "version": "2.11.0",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.11.0.tgz",
+      "integrity": "sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==",
       "dev": true,
       "dependencies": {
         "debug": "^3.2.7"
@@ -13165,26 +13088,27 @@
       }
     },
     "node_modules/eslint-plugin-import": {
-      "version": "2.29.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
-      "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
+      "version": "2.30.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz",
+      "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==",
       "dev": true,
       "dependencies": {
-        "array-includes": "^3.1.7",
-        "array.prototype.findlastindex": "^1.2.3",
+        "@rtsao/scc": "^1.1.0",
+        "array-includes": "^3.1.8",
+        "array.prototype.findlastindex": "^1.2.5",
         "array.prototype.flat": "^1.3.2",
         "array.prototype.flatmap": "^1.3.2",
         "debug": "^3.2.7",
         "doctrine": "^2.1.0",
         "eslint-import-resolver-node": "^0.3.9",
-        "eslint-module-utils": "^2.8.0",
-        "hasown": "^2.0.0",
-        "is-core-module": "^2.13.1",
+        "eslint-module-utils": "^2.9.0",
+        "hasown": "^2.0.2",
+        "is-core-module": "^2.15.1",
         "is-glob": "^4.0.3",
         "minimatch": "^3.1.2",
-        "object.fromentries": "^2.0.7",
-        "object.groupby": "^1.0.1",
-        "object.values": "^1.1.7",
+        "object.fromentries": "^2.0.8",
+        "object.groupby": "^1.0.3",
+        "object.values": "^1.2.0",
         "semver": "^6.3.1",
         "tsconfig-paths": "^3.15.0"
       },
@@ -14183,9 +14107,9 @@
       }
     },
     "node_modules/filesize": {
-      "version": "10.1.4",
-      "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.4.tgz",
-      "integrity": "sha512-ryBwPIIeErmxgPnm6cbESAzXjuEFubs+yKYLBZvg3CaiNcmkJChoOGcBSrZ6IwkMwPABwPpVXE6IlNdGJJrvEg==",
+      "version": "10.1.6",
+      "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.6.tgz",
+      "integrity": "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==",
       "engines": {
         "node": ">= 10.4.0"
       }
@@ -15988,9 +15912,9 @@
       }
     },
     "node_modules/is-core-module": {
-      "version": "2.14.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz",
-      "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==",
+      "version": "2.15.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
+      "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
       "dependencies": {
         "hasown": "^2.0.2"
       },
@@ -18019,9 +17943,9 @@
       "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
     },
     "node_modules/msw": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/msw/-/msw-2.4.2.tgz",
-      "integrity": "sha512-GImSQGhn19czhVpxPdiUDK8CMZ6jbBcvOhzfJd8KFErjEER2wDKWs1UYaetJs2GSNlAqt6heZYm7g3eLatTcog==",
+      "version": "2.4.5",
+      "resolved": "https://registry.npmjs.org/msw/-/msw-2.4.5.tgz",
+      "integrity": "sha512-lX7knS9us1EKs1Y/ihB4eYEJ9VCq+ZGezrPSspbRw0iEaoOn1q0vZkR0joZ6w1S4u46ZD+VLJ522EQihIIkRCg==",
       "dev": true,
       "hasInstallScript": true,
       "dependencies": {
@@ -18029,11 +17953,12 @@
         "@bundled-es-modules/statuses": "^1.0.1",
         "@bundled-es-modules/tough-cookie": "^0.1.6",
         "@inquirer/confirm": "^3.0.0",
-        "@mswjs/interceptors": "^0.29.0",
+        "@mswjs/interceptors": "^0.35.0",
         "@open-draft/until": "^2.1.0",
         "@types/cookie": "^0.6.0",
         "@types/statuses": "^2.0.4",
         "chalk": "^4.1.2",
+        "graphql": "^16.8.1",
         "headers-polyfill": "^4.0.2",
         "is-node-process": "^1.2.0",
         "outvariant": "^1.4.2",
@@ -18052,13 +17977,9 @@
         "url": "https://github.com/sponsors/mswjs"
       },
       "peerDependencies": {
-        "graphql": ">= 16.8.x",
         "typescript": ">= 4.8.x"
       },
       "peerDependenciesMeta": {
-        "graphql": {
-          "optional": true
-        },
         "typescript": {
           "optional": true
         }
@@ -23921,18 +23842,6 @@
         "undici-types": "~6.19.2"
       }
     },
-    "node_modules/webdriver/node_modules/@wdio/types": {
-      "version": "8.40.3",
-      "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.40.3.tgz",
-      "integrity": "sha512-zK17uyON3Ise3m+XwiF5VrrdZcXXmvqB8AWXoKe88DiksFUPMVoCOuVL2SSX1KnA2YLlZBA55qcFZT99GORVKQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "^22.2.0"
-      },
-      "engines": {
-        "node": "^16.13 || >=18"
-      }
-    },
     "node_modules/webdriver/node_modules/cacheable-lookup": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
@@ -24129,18 +24038,6 @@
         "undici-types": "~6.19.2"
       }
     },
-    "node_modules/webdriverio/node_modules/@wdio/types": {
-      "version": "8.40.3",
-      "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.40.3.tgz",
-      "integrity": "sha512-zK17uyON3Ise3m+XwiF5VrrdZcXXmvqB8AWXoKe88DiksFUPMVoCOuVL2SSX1KnA2YLlZBA55qcFZT99GORVKQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "^22.2.0"
-      },
-      "engines": {
-        "node": "^16.13 || >=18"
-      }
-    },
     "node_modules/webdriverio/node_modules/is-plain-obj": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
@@ -24534,9 +24431,9 @@
       "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
     },
     "node_modules/yaml": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz",
-      "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==",
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz",
+      "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==",
       "bin": {
         "yaml": "bin.mjs"
       },
diff --git a/package.json b/package.json
index 3cae762e..c9d5461b 100644
--- a/package.json
+++ b/package.json
@@ -56,6 +56,55 @@
     "onStartupFinished"
   ],
   "main": "./out/extension.js",
+  "runme": {
+    "features": {
+      "ForceLogin": {
+        "enabled": true,
+        "conditions": {
+          "os": "All",
+          "vsCodeVersion": ">=1.58.0",
+          "enabledForExtensions": {
+            "stateful.platform": true,
+            "stateful.runme": false
+          }
+        }
+      },
+      "Escalate": {
+        "enabled": true,
+        "conditions": {
+          "os": "All",
+          "vsCodeVersion": ">=1.58.0",
+          "statefulAuthRequired": true,
+          "enabledForExtensions": {
+            "stateful.platform": true,
+            "stateful.runme": false
+          }
+        }
+      },
+      "Share": {
+        "enabled": true,
+        "conditions": {
+          "os": "All",
+          "vsCodeVersion": ">=1.58.0",
+          "enabledForExtensions": {
+            "stateful.platform": true,
+            "stateful.runme": true
+          }
+        }
+      },
+      "Gist": {
+        "enabled": true,
+        "conditions": {
+          "os": "All",
+          "vsCodeVersion": ">=1.58.0",
+          "enabledForExtensions": {
+            "stateful.platform": false,
+            "stateful.runme": true
+          }
+        }
+      }
+    }
+  },
   "contributes": {
     "commands": [
       {
@@ -563,12 +612,6 @@
             "title": "AI Auto Cell",
             "markdownDescription": "If set to `true`, enable AI auto generation of cells. Reload the window after changing this setting."
           },
-          "runme.experiments.escalationButton": {
-            "type": "boolean",
-            "scope": "window",
-            "default": false,
-            "markdownDescription": "If set to `true`, the secondary action button after saving a call will display Save or Escalate depending on the exit code."
-          },
           "runme.experiments.smartEnvStore": {
             "type": "boolean",
             "scope": "window",
@@ -810,18 +853,13 @@
           },
           "runme.app.baseDomain": {
             "type": "string",
-            "default": "",
+            "default": "platform.stateful.com",
             "scope": "window",
             "markdownDescription": "Base domain to be use for Runme app"
           },
-          "runme.app.enableShare": {
-            "type": "boolean",
-            "default": false,
-            "markdownDescription": "Enable collaboration in notebook terminal"
-          },
           "runme.app.panel.runme.cloud": {
             "type": "string",
-            "default": "runme.placeholder",
+            "default": "runme.optin",
             "scope": "window",
             "markdownDescription": "Customize cloud panel assignment"
           },
@@ -861,7 +899,7 @@
           "runme.app.platformAuth": {
             "type": "boolean",
             "scope": "window",
-            "default": false,
+            "default": true,
             "markdownDescription": "If set to `true` enables Stateful Authentication Provider"
           },
           "runme.aiBaseURL": {
@@ -972,7 +1010,7 @@
         {
           "id": "runme.cloud",
           "type": "webview",
-          "name": "Cloud",
+          "name": "Commands",
           "visibility": "visible"
         },
         {
@@ -1125,6 +1163,7 @@
     "@graphql-codegen/typescript": "4.0.9",
     "@octokit/rest": "^19.0.13",
     "@types/node": "^18.19.14",
+    "@types/semver": "^7.5.8",
     "@types/uuid": "^10.0.0",
     "@types/vscode": "1.78.0",
     "@types/vscode-notebook-renderer": "^1.72.3",
@@ -1136,19 +1175,19 @@
     "@wdio/cli": "^8.40.5",
     "@wdio/local-runner": "^8.40.5",
     "@wdio/mocha-framework": "^8.40.3",
-    "@wdio/spec-reporter": "^8.27.2",
+    "@wdio/spec-reporter": "^8.40.3",
     "chromedriver": "^128.0.1",
     "comment-json": "^4.2.5",
     "eslint": "^8.48.0",
     "eslint-config-prettier": "^9.0.0",
     "eslint-import-resolver-typescript": "^3.6.3",
-    "eslint-plugin-import": "^2.28.1",
+    "eslint-plugin-import": "^2.30.0",
     "eslint-plugin-unicorn": "^55.0.0",
     "eslint-plugin-unused-imports": "^4.1.3",
     "expect-webdriverio": "^4.15.4",
     "fork-ts-checker-webpack-plugin": "^9.0.0",
     "husky": "^9.1.5",
-    "msw": "^2.4.2",
+    "msw": "^2.4.5",
     "npm-run-all": "^4.1.5",
     "prettier": "^3.3.3",
     "runme": "^3.1.0",
@@ -1167,15 +1206,15 @@
   },
   "dependencies": {
     "@apollo/client": "^3.11.6",
-    "@aws-sdk/client-ec2": "^3.641.0",
-    "@aws-sdk/client-eks": "^3.637.0",
-    "@aws-sdk/credential-providers": "^3.637.0",
+    "@aws-sdk/client-ec2": "^3.649.0",
+    "@aws-sdk/client-eks": "^3.649.0",
+    "@aws-sdk/credential-providers": "^3.649.0",
     "@buf/grpc_grpc.community_timostamm-protobuf-ts": "^2.9.4-20240809200651-8507e5a24938.4",
     "@buf/jlewi_foyle.bufbuild_es": "^1.10.0-00000000000000-d14934cb2733.1",
     "@buf/jlewi_foyle.connectrpc_es": "^1.4.0-00000000000000-d14934cb2733.3",
     "@buf/stateful_runme.community_timostamm-protobuf-ts": "^2.9.4-20240903224300-611a892c2067.4",
     "@connectrpc/connect": "^1.4.0",
-    "@connectrpc/connect-node": "^1.1.2",
+    "@connectrpc/connect-node": "^1.5.0",
     "@google-cloud/compute": "^4.1.0",
     "@google-cloud/container": "^5.17.0",
     "@google-cloud/run": "^1.4.0",
@@ -1183,7 +1222,7 @@
     "@protobuf-ts/grpc-transport": "^2.9.1",
     "@protobuf-ts/runtime": "^2.9.1",
     "@protobuf-ts/runtime-rpc": "^2.9.1",
-    "@vercel/client": "^13.4.3",
+    "@vercel/client": "^13.4.6",
     "@vscode/vscode-languagedetection": "^1.0.22",
     "@vscode/webview-ui-toolkit": "^1.2.2",
     "@xterm/addon-fit": "^0.10.0",
@@ -1197,7 +1236,7 @@
     "data-guardian": "^1.1.2",
     "dotenv": "^16.3.1",
     "filenamify": "^6.0.0",
-    "filesize": "^10.1.4",
+    "filesize": "^10.1.6",
     "get-port": "^7.0.0",
     "getmac": "^6.6.0",
     "got": "^11.8.2",
@@ -1210,7 +1249,7 @@
     "ulidx": "^2.4.1",
     "uuid": "^10.0.0",
     "vscode-telemetry": "^1.0.2",
-    "yaml": "^2.5.0",
+    "yaml": "^2.5.1",
     "zod": "^3.23.8"
   }
 }
diff --git a/src/client/components/terminal/share.ts b/src/client/components/terminal/actionButton.ts
similarity index 52%
rename from src/client/components/terminal/share.ts
rename to src/client/components/terminal/actionButton.ts
index 96cdfa3a..5a46f586 100644
--- a/src/client/components/terminal/share.ts
+++ b/src/client/components/terminal/actionButton.ts
@@ -5,16 +5,25 @@ import { when } from 'lit/directives/when.js'
 import { ShareIcon } from '../icons/share'
 import { SaveIcon } from '../icons/save'
 
-@customElement('share-cell')
-export class ShareCell extends LitElement {
+@customElement('action-button')
+export class ActionButton extends LitElement {
   @property({ type: String })
-  shareText: string = 'Copy'
+  text: string = 'Copy'
+
+  @property({ type: String })
+  loadingText: string = 'Saving...'
+
+  @property({ type: Boolean, reflect: true })
+  loading: boolean = false
 
   @property({ type: Boolean, reflect: true })
   disabled: boolean = false
 
   @property({ type: Boolean, reflect: true })
-  displayShareIcon: boolean = false
+  shareIcon: boolean = false
+
+  @property({ type: Boolean, reflect: true })
+  saveIcon: boolean = false
 
   /* eslint-disable */
   static styles = css`
@@ -39,33 +48,32 @@ export class ShareCell extends LitElement {
     }
   `
 
-  private onShareClick(e: Event) {
+  private onClick(e: Event) {
     if (e.defaultPrevented) {
       e.preventDefault()
     }
-    const event = new CustomEvent('onShare')
+
+    const event = new CustomEvent(this.disabled ? 'onClickDisabled' : 'onClick')
+
     this.dispatchEvent(event)
   }
 
   render() {
-    const className = this.shareText.toLocaleLowerCase()
-    return when(
-      this.disabled,
-      () => html`
-        <vscode-button
-          class=${className}
-          disabled
-          appearance="secondary"
-          @click=${this.onShareClick}
-        >
-          ${ShareIcon} ${this.shareText}
-        </vscode-button>
-      `,
-      () => html`
-        <vscode-button class=${className} appearance="secondary" @click=${this.onShareClick}>
-          ${this.displayShareIcon ? ShareIcon : SaveIcon} ${this.shareText}
-        </vscode-button>
-      `,
-    )
+    const className = this.text.toLocaleLowerCase()
+    return html`
+      <vscode-button
+        ?disabled=${this.loading}
+        class=${className}
+        appearance="secondary"
+        @click=${this.onClick}
+      >
+        ${when(this.shareIcon, () => ShareIcon)} ${when(this.saveIcon, () => SaveIcon)}
+        ${when(
+          this.loading,
+          () => html`${this.loadingText}`,
+          () => html`${this.text}`,
+        )}
+      </vscode-button>
+    `
   }
 }
diff --git a/src/client/components/terminal/index.ts b/src/client/components/terminal/index.ts
index 787960f4..c3a8c908 100644
--- a/src/client/components/terminal/index.ts
+++ b/src/client/components/terminal/index.ts
@@ -1,5 +1,5 @@
 import { LitElement, css, html, PropertyValues, unsafeCSS } from 'lit'
-import { customElement, property } from 'lit/decorators.js'
+import { customElement, property, state } from 'lit/decorators.js'
 import { when } from 'lit/directives/when.js'
 import { Disposable, TerminalDimensions } from 'vscode'
 import { ITheme, Terminal as XTermJS } from '@xterm/xterm'
@@ -16,7 +16,7 @@ import { APIMethod } from '../../../types'
 import type { TerminalConfiguration } from '../../../utils/configuration'
 import '../closeCellButton'
 import '../copyButton'
-import './share'
+import './actionButton'
 import './gistCell'
 import './open'
 import {
@@ -24,6 +24,12 @@ import {
   CreateExtensionCellOutputMutation,
   UpdateCellOutputMutation,
 } from '../../../extension/__generated-platform__/graphql'
+import {
+  isFeatureActive,
+  loadFeatureSnapshot,
+  FeatureObserver,
+  FeatureName,
+} from '../../../features'
 
 interface IWindowSize {
   width: number
@@ -48,6 +54,8 @@ const LISTEN_TO_EVENTS = [
   ClientMessages.optionsMessage,
   ClientMessages.onCopyTextToClipboard,
   ClientMessages.onProgramClose,
+  ClientMessages.featuresResponse,
+  ClientMessages.featuresUpdateAction,
 ]
 
 const ANSI_COLORS = [
@@ -73,10 +81,6 @@ const ANSI_COLORS = [
 @customElement(RENDERERS.TerminalView)
 export class TerminalView extends LitElement {
   protected copyText = 'Copy'
-  protected shareText = 'Save'
-  protected saveText = 'Save'
-  protected shareEnabledText = 'Share'
-  protected escalateEnabledText = 'Escalate'
 
   static styles = css`
     .xterm {
@@ -319,9 +323,16 @@ export class TerminalView extends LitElement {
   protected fitAddon?: FitAddon
   protected serializer?: SerializeAddon
   protected windowSize: IWindowSize
-
   protected rows: number = 10
 
+  protected platformId?: string
+  protected exitCode?: number | void
+  protected isSlackReady?: boolean
+  protected isShareReady: boolean = false
+
+  @state()
+  protected featureState$?: FeatureObserver
+
   @property({ type: String })
   id!: string
 
@@ -356,20 +367,11 @@ export class TerminalView extends LitElement {
   lastLine?: number // TODO: Get the last line of the terminal and store it.
 
   @property({ type: Boolean })
-  isCloudApiLoading: boolean = false
-
-  @property()
-  cloudId?: string
+  isLoading: boolean = false
 
   @property()
   shareUrl?: string
 
-  @property({ type: Boolean })
-  enableShareButton: boolean = false
-
-  @property({ type: Boolean })
-  isShareReady: boolean = false
-
   @property({ type: Boolean })
   isUpdatedReady: boolean = false
 
@@ -449,6 +451,10 @@ export class TerminalView extends LitElement {
         }
 
         switch (e.type) {
+          case ClientMessages.featuresResponse:
+          case ClientMessages.featuresUpdateAction:
+            this.featureState$ = loadFeatureSnapshot(e.output.snapshot)
+            break
           case ClientMessages.activeThemeChanged:
             this.#updateTerminalTheme()
             break
@@ -471,7 +477,7 @@ export class TerminalView extends LitElement {
               if (e.output.id !== this.id) {
                 return
               }
-              this.isCloudApiLoading = false
+              this.isLoading = false
               if (e.output.hasErrors) {
                 return postClientMessage(ctx, ClientMessages.errorMessage, e.output.data)
               }
@@ -480,21 +486,20 @@ export class TerminalView extends LitElement {
                 e.output.data.hasOwnProperty('displayShare') &&
                 e.output.data.displayShare === false
               ) {
-                this.shareText = this.saveText
                 return
               }
 
               const data = (e.output.data?.data || {}) as CreateExtensionCellOutputMutation &
                 CreateCellExecutionMutation &
                 UpdateCellOutputMutation
-              const { escalationButton: escalationButtonEnabled } = e.output
               // TODO: Remove createCellExecution once the transition is complete and tested enough.
               if (data.createExtensionCellOutput || data.createCellExecution) {
                 const objData = data.createCellExecution || data.createExtensionCellOutput || {}
-                const { exitCode, id, htmlUrl } = objData
-                this.cloudId = id
+                const { exitCode, id, htmlUrl, isSlackReady } = objData
+                this.platformId = id
                 this.shareUrl = htmlUrl || ''
-                this.shareText = this.getSecondaryButtonLabel(exitCode, escalationButtonEnabled)
+                this.exitCode = exitCode
+                this.isSlackReady = !!isSlackReady
                 this.isShareReady = true
                 // Dispatch tangle update event
                 return postClientMessage(ctx, ClientMessages.tangleEvent, {
@@ -506,11 +511,12 @@ export class TerminalView extends LitElement {
               }
               if (data.updateCellOutput) {
                 const {
-                  updateCellOutput: { exitCode },
+                  updateCellOutput: { exitCode, isSlackReady },
                 } = data
                 this.isUpdatedReady = true
-                this.shareText = this.getSecondaryButtonLabel(exitCode, escalationButtonEnabled)
-                this.#displayShareDialog(this.shareText)
+                this.exitCode = exitCode
+                this.isSlackReady = !!isSlackReady
+                this.#displayShareDialog()
               }
             }
             break
@@ -521,7 +527,7 @@ export class TerminalView extends LitElement {
                 return
               }
               const answer = e.output.option
-              this.isCloudApiLoading = false
+              this.isLoading = false
               switch (answer) {
                 case MessageOptions.OpenLink: {
                   return postClientMessage(ctx, ClientMessages.openExternalLink, {
@@ -545,12 +551,16 @@ export class TerminalView extends LitElement {
             return postClientMessage(ctx, ClientMessages.infoMessage, 'Link copied!')
           }
           case ClientMessages.onProgramClose: {
-            const { 'runme.dev/id': id, code, escalationButton: escalationButtonEnabled } = e.output
-            if (id !== this.id || !this.isAutoSaveEnabled) {
+            const { 'runme.dev/id': id, code } = e.output
+            if (id !== this.id) {
+              return
+            }
+            this.exitCode = code
+
+            if (!this.isAutoSaveEnabled) {
               return
             }
-            const btnSecondaryText = this.getSecondaryButtonLabel(code, escalationButtonEnabled)
-            this.shareText = this.isAutoSaveEnabled ? btnSecondaryText : this.saveText
+
             return this.#shareCellOutput(false)
           }
         }
@@ -562,13 +572,8 @@ export class TerminalView extends LitElement {
         }),
       ),
     )
-  }
 
-  getSecondaryButtonLabel(code: number | null | void, escalationButtonEnabled = false): string {
-    if (!escalationButtonEnabled) {
-      return this.shareEnabledText
-    }
-    return code === 0 ? this.shareEnabledText : this.escalateEnabledText
+    postClientMessage(ctx, ClientMessages.featuresRequest, {})
   }
 
   disconnectedCallback(): void {
@@ -744,13 +749,12 @@ export class TerminalView extends LitElement {
     })
   }
 
-  async #displayShareDialog(btnText?: string): Promise<boolean | void> {
+  async #displayShareDialog(): Promise<boolean | void> {
     const ctx = getContext()
     if (!ctx.postMessage || !this.shareUrl) {
       return
     }
-    this.shareText = btnText ?? this.shareEnabledText
-    this.isShareReady = true
+
     return postClientMessage(ctx, ClientMessages.optionsMessage, {
       title:
         'Please share link with caution. Anyone with the link has access. Click "Open" to toggle visibility.',
@@ -788,10 +792,10 @@ export class TerminalView extends LitElement {
         return this.#displayShareDialog()
       }
       if (this.isShareReady) {
-        this.isCloudApiLoading = true
+        this.isLoading = true
         await postClientMessage(ctx, ClientMessages.platformApiRequest, {
           data: {
-            id: this.cloudId,
+            id: this.platformId,
           },
           id: this.id!,
           method: APIMethod.UpdateCellExecution,
@@ -799,7 +803,7 @@ export class TerminalView extends LitElement {
         return
       }
 
-      this.isCloudApiLoading = true
+      this.isLoading = true
       const contentWithAnsi =
         this.serializer?.serialize({ excludeModes: true, excludeAltBuffer: true }) ?? ''
       await postClientMessage(ctx, ClientMessages.platformApiRequest, {
@@ -811,7 +815,7 @@ export class TerminalView extends LitElement {
         method: APIMethod.CreateCellExecution,
       })
     } catch (error) {
-      this.isCloudApiLoading = false
+      this.isLoading = false
       postClientMessage(
         ctx,
         ClientMessages.infoMessage,
@@ -828,6 +832,11 @@ export class TerminalView extends LitElement {
     postClientMessage(getContext(), ClientMessages.openLink, this.shareUrl!)
   }
 
+  #onEscalateDisabled(): void {
+    const message = 'There is no Slack integration configured yet. \nOpen Dashboard to configure it'
+    postClientMessage(getContext(), ClientMessages.errorMessage, message)
+  }
+
   // Render the UI as a function of component state
   render() {
     return html`<section>
@@ -848,31 +857,51 @@ export class TerminalView extends LitElement {
           }}"
         ></copy-button>
         ${when(
-          this.isSessionOutputsEnabled && !this.isPlatformAuthEnabled,
+          this.isSessionOutputsEnabled && isFeatureActive(FeatureName.Gist, this.featureState$),
           () => {
             return html`<gist-cell @onGist="${this.#openSessionOutput}"></gist-cell>`
           },
           () => {},
         )}
         ${when(
-          this.enableShareButton,
+          (this.exitCode === undefined || this.exitCode === 0 || !this.platformId) &&
+            isFeatureActive(FeatureName.Share, this.featureState$),
+          () => {
+            return html` <action-button
+              ?loading=${this.isLoading}
+              ?shareIcon="${!!this.platformId}"
+              ?saveIcon="${!this.platformId}"
+              text="${this.platformId ? 'Share' : 'Save'}"
+              @onClick="${this.#triggerShareCellOutput}"
+            >
+            </action-button>`
+          },
+          () => {},
+        )}
+        ${when(
+          this.exitCode !== 0 &&
+            this.platformId &&
+            isFeatureActive(FeatureName.Escalate, this.featureState$),
           () => {
-            return html` <share-cell
-              ?disabled=${this.isCloudApiLoading}
-              ?displayShareIcon=${this.isShareReady}
-              shareText="${this.isCloudApiLoading ? 'Saving ...' : this.shareText}"
-              @onShare="${this.#triggerShareCellOutput}"
+            return html` <action-button
+              ?disabled=${!this.isSlackReady}
+              ?loading=${this.isLoading}
+              ?saveIcon="${true}"
+              text="Escalate"
+              @onClick="${this.#triggerShareCellOutput}"
+              @onClickDisabled=${this.#onEscalateDisabled}
             >
-            </share-cell>`
+            </action-button>`
           },
           () => {},
         )}
         ${when(
-          this.cloudId && !this.isCloudApiLoading,
+          this.platformId && !this.isLoading,
           () => {
             return html` <open-cell
-            ?disabled=${!this.isPlatformAuthEnabled}
-            @onOpen="${this.#triggerOpenCellOutput}"></share-cell>`
+              ?disabled=${!this.isPlatformAuthEnabled}
+              @onOpen="${this.#triggerOpenCellOutput}"
+            ></open-cell>`
           },
           () => {},
         )}
diff --git a/src/client/index.ts b/src/client/index.ts
index 9bc0b582..5a533622 100644
--- a/src/client/index.ts
+++ b/src/client/index.ts
@@ -121,12 +121,6 @@ export const activate: ActivationFunction<void> = (context) => {
           if (typeof payload.output.scrollback === 'number') {
             terminalElement.setAttribute('scrollback', payload.output.scrollback.toString())
           }
-          if (payload.output.enableShareButton) {
-            terminalElement.setAttribute(
-              'enableShareButton',
-              payload.output.enableShareButton.toString(),
-            )
-          }
           if (payload.output.initialRows !== undefined) {
             terminalElement.setAttribute('initialRows', payload.output.initialRows.toString())
           }
@@ -135,7 +129,7 @@ export const activate: ActivationFunction<void> = (context) => {
             terminalElement.setAttribute('initialContent', payload.output.content)
           }
 
-          if (payload.output.isAutoSaveEnabled && payload.output.enableShareButton) {
+          if (payload.output.isAutoSaveEnabled) {
             terminalElement.setAttribute(
               'isAutoSaveEnabled',
               payload.output.isAutoSaveEnabled.toString(),
diff --git a/src/constants.ts b/src/constants.ts
index e12a41b2..19c94f27 100644
--- a/src/constants.ts
+++ b/src/constants.ts
@@ -68,6 +68,9 @@ export enum ClientMessages {
   gcpServicesLoaded = 'gcp:servicesLoaded',
   daggerSyncState = 'dagger:syncState',
   daggerCliAction = 'dagger:cliAction',
+  featuresUpdateAction = 'features:updateAction',
+  featuresRequest = 'features:request',
+  featuresResponse = 'features:response',
 }
 
 // [pretty print, languageId, destination]
@@ -1110,7 +1113,7 @@ export const CATEGORY_SEPARATOR = ','
 export const EXECUTION_CELL_STORAGE_KEY = 'executionCell'
 export const EXECUTION_CELL_CREATION_DATE_STORAGE_KEY = 'executionCellCreationDate'
 export const SAVE_CELL_LOGIN_CONSENT_STORAGE_KEY = 'loginConsent'
-export const CLOUD_USER_SIGNED_IN = 'userSignedIn'
+export const GITHUB_USER_SIGNED_IN = 'userSignedIn'
 export const PLATFORM_USER_SIGNED_IN = 'platformUserSignedIn'
 
 export const RUNME_FRONTMATTER_PARSED = 'runme.dev/frontmatterParsed'
diff --git a/src/extension/cell.ts b/src/extension/cell.ts
index 44bcd78f..821a9b5a 100644
--- a/src/extension/cell.ts
+++ b/src/extension/cell.ts
@@ -16,7 +16,7 @@ import {
 } from 'vscode'
 
 import {
-  CLOUD_USER_SIGNED_IN,
+  GITHUB_USER_SIGNED_IN,
   NOTEBOOK_AUTOSAVE_ON,
   OutputType,
   PLATFORM_USER_SIGNED_IN,
@@ -36,7 +36,6 @@ import {
   getNotebookTerminalConfigurations,
   getSessionOutputs,
   isPlatformAuthEnabled,
-  isRunmeAppButtonsEnabled,
 } from '../utils/configuration'
 
 import { RUNME_TRANSIENT_REVISION } from './constants'
@@ -245,7 +244,7 @@ export class NotebookCellOutputManager {
 
             const isSignedIn = isPlatformAuthEnabled()
               ? ContextState.getKey(PLATFORM_USER_SIGNED_IN)
-              : ContextState.getKey(CLOUD_USER_SIGNED_IN)
+              : ContextState.getKey(GITHUB_USER_SIGNED_IN)
 
             const isSessionOutputsEnabled = getSessionOutputs()
 
@@ -255,7 +254,6 @@ export class NotebookCellOutputManager {
                 'runme.dev/id': cellId,
                 content: stdoutBase64,
                 initialRows: terminalRows || terminalConfigurations.rows,
-                enableShareButton: isRunmeAppButtonsEnabled(),
                 isAutoSaveEnabled: isSignedIn ? ContextState.getKey(NOTEBOOK_AUTOSAVE_ON) : false,
                 isPlatformAuthEnabled: isPlatformAuthEnabled(),
                 isSessionOutputsEnabled,
diff --git a/src/extension/commands/index.ts b/src/extension/commands/index.ts
index 42680673..63ea7b91 100644
--- a/src/extension/commands/index.ts
+++ b/src/extension/commands/index.ts
@@ -27,7 +27,6 @@ import {
   getCLIUseIntegratedRunme,
   getTLSEnabled,
   isNotebookTerminalEnabledForCell,
-  isRunmeAppButtonsEnabled,
 } from '../../utils/configuration'
 import { Kernel } from '../kernel'
 import {
@@ -389,7 +388,7 @@ export async function addToRecommendedExtensions(context: ExtensionContext) {
 }
 
 export async function toggleAutosave(autoSaveIsOn: boolean) {
-  if (autoSaveIsOn && isRunmeAppButtonsEnabled()) {
+  if (autoSaveIsOn) {
     await promptUserSession()
   }
   return ContextState.addKey(NOTEBOOK_AUTOSAVE_ON, autoSaveIsOn)
diff --git a/src/extension/executors/runner/index.ts b/src/extension/executors/runner/index.ts
index bee0cddf..4f603ef2 100644
--- a/src/extension/executors/runner/index.ts
+++ b/src/extension/executors/runner/index.ts
@@ -193,7 +193,6 @@ export const executeRunner: IKernelRunner = async ({
     postClientMessage(messaging, ClientMessages.onProgramClose, {
       'runme.dev/id': cellId,
       code,
-      escalationButton: kernel.hasExperimentEnabled('escalationButton', false)!,
     })
     if (!background) {
       return
diff --git a/src/extension/extension.ts b/src/extension/extension.ts
index 773b8a75..a779d12f 100644
--- a/src/extension/extension.ts
+++ b/src/extension/extension.ts
@@ -9,6 +9,7 @@ import {
   env,
   Uri,
   NotebookCell,
+  authentication,
 } from 'vscode'
 import { TelemetryReporter } from 'vscode-telemetry'
 import Channel from 'tangle/webviews'
@@ -19,9 +20,9 @@ import {
   getForceNewWindowConfig,
   getRunmeAppUrl,
   getSessionOutputs,
-  isPlatformAuthEnabled,
 } from '../utils/configuration'
-import { WebViews } from '../constants'
+import { AuthenticationProviders, WebViews } from '../constants'
+import { FeatureName } from '../features'
 
 import { Kernel } from './kernel'
 import KernelServer from './server/kernelServer'
@@ -36,6 +37,7 @@ import {
   bootFile,
   resetNotebookSettings,
   getPlatformAuthSession,
+  getGithubAuthSession,
   openFileAsRunmeNotebook,
 } from './utils'
 import { RunmeTaskProvider } from './provider/runmeTask'
@@ -74,7 +76,7 @@ import * as survey from './survey'
 import { RunmeCodeLensProvider } from './provider/codelens'
 import CloudPanel from './panels/cloud'
 import { createDemoFileRunnerForActiveNotebook, createDemoFileRunnerWatcher } from './handler/utils'
-import { CloudAuthProvider } from './provider/cloudAuth'
+import { GithubAuthProvider } from './provider/githubAuth'
 import { StatefulAuthProvider } from './provider/statefulAuth'
 import { IPanel } from './panels/base'
 import { NotebookPanel as EnvStorePanel } from './panels/notebook'
@@ -345,26 +347,6 @@ export class RunmeExtension {
       ),
     )
 
-    if (isPlatformAuthEnabled()) {
-      context.subscriptions.push(new StatefulAuthProvider(context, uriHandler))
-      getPlatformAuthSession(true).then((session) => {
-        if (session) {
-          const openDashboardStr = 'Open Dashboard'
-          window
-            .showInformationMessage('Logged into the Stateful Platform', openDashboardStr)
-            .then((answer) => {
-              if (answer === openDashboardStr) {
-                const dashboardUri = getRunmeAppUrl(['app'])
-                const uri = Uri.parse(dashboardUri)
-                env.openExternal(uri)
-              }
-            })
-        }
-      })
-    } else {
-      context.subscriptions.push(new CloudAuthProvider(context))
-    }
-
     await bootFile(context)
 
     if (kernel.hasExperimentEnabled('shellWarning', false)) {
@@ -378,7 +360,7 @@ export class RunmeExtension {
         }
       }
 
-      const logger = getLogger('runme.beta.shellWarning')
+      const logger = getLogger('runme.experiments.shellWarning')
 
       kernel
         .runProgram('echo $SHELL')
@@ -400,6 +382,60 @@ export class RunmeExtension {
           showUnsupportedShellMessage()
         })
     }
+
+    context.subscriptions.push(new GithubAuthProvider(context))
+    context.subscriptions.push(new StatefulAuthProvider(context, uriHandler))
+
+    getGithubAuthSession(false).then((session) => {
+      kernel.updateFeatureState('githubAuth', !!session)
+    })
+
+    const createIfNone = kernel.isFeatureActive(FeatureName.ForceLogin)
+    const silent = createIfNone ? undefined : true
+
+    getPlatformAuthSession(createIfNone, silent)
+      .then((session) => {
+        if (session) {
+          const openDashboardStr = 'Open Dashboard'
+          window
+            .showInformationMessage('Logged into the Stateful Platform', openDashboardStr)
+            .then((answer) => {
+              if (answer === openDashboardStr) {
+                const dashboardUri = getRunmeAppUrl(['app'])
+                const uri = Uri.parse(dashboardUri)
+                env.openExternal(uri)
+              }
+            })
+        }
+      })
+      .catch((error) => {
+        let message
+        if (error instanceof Error) {
+          message = error.message
+        } else {
+          message = String(error)
+        }
+
+        // https://github.com/microsoft/vscode/blob/main/src/vs/workbench/api/browser/mainThreadAuthentication.ts#L238
+        // throw new Error('User did not consent to login.')
+        // Calling again to ensure User Menu Badge
+        if (createIfNone && message === 'User did not consent to login.') {
+          getPlatformAuthSession(false)
+        }
+      })
+
+    authentication.onDidChangeSessions((e) => {
+      if (e.provider.id === AuthenticationProviders.Stateful) {
+        getPlatformAuthSession(false, true).then((session) => {
+          kernel.updateFeatureState('statefulAuth', !!session)
+        })
+      }
+      if (e.provider.id === AuthenticationProviders.GitHub) {
+        getGithubAuthSession(false).then((session) => {
+          kernel.updateFeatureState('githubAuth', !!session)
+        })
+      }
+    })
   }
 
   protected handleMasking(kernel: Kernel, maskingIsOn: boolean): (e: NotebookUiEvent) => void {
diff --git a/src/extension/kernel.ts b/src/extension/kernel.ts
index 79d34ab0..4c20e68d 100644
--- a/src/extension/kernel.ts
+++ b/src/extension/kernel.ts
@@ -1,4 +1,5 @@
 import path from 'node:path'
+import os from 'node:os'
 
 import {
   Disposable,
@@ -22,9 +23,11 @@ import {
   NotebookEditorSelectionChangeEvent,
   CancellationToken,
   NotebookData,
+  version,
 } from 'vscode'
 import { TelemetryReporter } from 'vscode-telemetry'
 import { UnaryCall } from '@protobuf-ts/runtime-rpc'
+import { map } from 'rxjs/operators'
 
 import {
   type ActiveTerminal,
@@ -45,6 +48,16 @@ import {
 import { API } from '../utils/deno/api'
 import { postClientMessage } from '../utils/messaging'
 import { getNotebookExecutionOrder, registerExtensionEnvVarsMutation } from '../utils/configuration'
+import {
+  isFeatureActive,
+  FeatureContext,
+  getFeatureSnapshot,
+  loadFeaturesState,
+  updateFeatureContext,
+  FEATURES_CONTEXT_STATE_KEY,
+  FeatureName,
+  ExtensionName,
+} from '../features'
 
 import getLogger from './logger'
 import executor, {
@@ -112,6 +125,7 @@ export class Kernel implements Disposable {
   static readonly type = 'runme' as const
 
   readonly #experiments = new Map<string, boolean>()
+  readonly #featuresSettings = new Map<string, boolean>()
 
   #disposables: Disposable[] = []
   #controller = notebooks.createNotebookController(
@@ -132,6 +146,7 @@ export class Kernel implements Disposable {
   protected panelManager: PanelManager
   protected serializer?: SerializerBase
   protected reporter?: GrpcReporter
+  protected featuresState$?
 
   readonly onVarsChangeEvent: EnvVarsChangedEvent
 
@@ -139,11 +154,9 @@ export class Kernel implements Disposable {
     const config = workspace.getConfiguration('runme.experiments')
 
     this.onVarsChangeEvent = new EnvVarsChangedEvent()
-
     this.#experiments.set('grpcSerializer', config.get<boolean>('grpcSerializer', true))
     this.#experiments.set('grpcRunner', config.get<boolean>('grpcRunner', true))
     this.#experiments.set('grpcServer', config.get<boolean>('grpcServer', true))
-    this.#experiments.set('escalationButton', config.get<boolean>('escalationButton', false))
     this.#experiments.set('smartEnvStore', config.get<boolean>('smartEnvStore', false))
     this.#experiments.set('aiLogs', config.get<boolean>('aiLogs', false))
     this.#experiments.set('shellWarning', config.get<boolean>('shellWarning', false))
@@ -170,6 +183,7 @@ export class Kernel implements Disposable {
 
     this.messaging.postMessage({ from: 'kernel' })
     this.panelManager = new PanelManager(context)
+
     this.#disposables.push(
       this.messaging.onDidReceiveMessage(this.#handleRendererMessage.bind(this)),
       workspace.onDidOpenNotebookDocument(this.#handleOpenNotebook.bind(this)),
@@ -180,6 +194,55 @@ export class Kernel implements Disposable {
       this.onVarsChangeEvent,
       this.registerTerminalProfile(),
     )
+
+    const packageJSON = context?.extension?.packageJSON || {}
+    const featContext: FeatureContext = {
+      os: os.platform(),
+      vsCodeVersion: version as string,
+      extensionVersion: packageJSON?.version,
+      githubAuth: false,
+      statefulAuth: false,
+      extensionId: context?.extension?.id as ExtensionName,
+    }
+
+    this.featuresState$ = loadFeaturesState(packageJSON, featContext, this.#featuresSettings)
+
+    if (this.featuresState$) {
+      const features = workspace.getConfiguration('runme.features')
+      const featureNames = Object.keys(FeatureName).map((f) => f.toLowerCase())
+      if (features) {
+        featureNames.forEach((feature) => {
+          if (features.has(feature)) {
+            this.#featuresSettings.set(feature, features.get<boolean>(feature, false))
+          }
+        })
+      }
+
+      const subscription = this.featuresState$
+        .pipe(map((_state) => getFeatureSnapshot(this.featuresState$)))
+        .subscribe((snapshot) => {
+          ContextState.addKey(FEATURES_CONTEXT_STATE_KEY, snapshot)
+          postClientMessage(this.messaging, ClientMessages.featuresUpdateAction, {
+            snapshot: snapshot,
+          })
+        })
+
+      this.#disposables.push({
+        dispose: () => subscription.unsubscribe(),
+      })
+    }
+  }
+
+  isFeatureActive(featureName: FeatureName): boolean {
+    if (!this.featuresState$) {
+      return false
+    }
+
+    return isFeatureActive(featureName, this.featuresState$)
+  }
+
+  updateFeatureState<K extends keyof FeatureContext>(key: K, value: FeatureContext[K]) {
+    updateFeatureContext(this.featuresState$, key, value, this.#featuresSettings)
   }
 
   registerNotebookCell(cell: NotebookCell) {
@@ -568,6 +631,12 @@ export class Kernel implements Disposable {
       return insertCodeCell(message.output.cellId, editor, cellText, 'sh', false)
     } else if (message.type.startsWith('terminal:')) {
       return
+    } else if (message.type === ClientMessages.featuresRequest) {
+      const snapshot = getFeatureSnapshot(this.featuresState$)
+      postClientMessage(this.messaging, ClientMessages.featuresResponse, {
+        snapshot: snapshot,
+      })
+      return
     }
 
     log.error(`Unknown kernel event type: ${message.type}`)
diff --git a/src/extension/messages/platformRequest/saveCellExecution.ts b/src/extension/messages/platformRequest/saveCellExecution.ts
index bd312909..00f01700 100644
--- a/src/extension/messages/platformRequest/saveCellExecution.ts
+++ b/src/extension/messages/platformRequest/saveCellExecution.ts
@@ -41,13 +41,10 @@ export default async function saveCellExecution(
 
   log.info('Saving cell execution')
 
-  const escalationButton = kernel.hasExperimentEnabled('escalationButton', false)!
   const cacheId = GrpcSerializer.getDocumentCacheId(editor.notebook.metadata) as string
   const plainSessionOutput = await kernel.getPlainCache(cacheId)
   const maskedSessionOutput = await kernel.getMaskedCache(cacheId)
 
-  log.info(`escalationButton: ${escalationButton ? 'enabled' : 'disabled'}`)
-
   const vsEnv = {
     appHost: env.appHost,
     appName: env.appName,
@@ -75,14 +72,12 @@ export default async function saveCellExecution(
     let data:
       | FetchResult<CreateExtensionCellOutputMutation>
       | FetchResult<CreateCellExecutionMutation>
-    let showEscalationButton: boolean
 
     if (!session) {
       return postClientMessage(messaging, ClientMessages.platformApiResponse, {
         data: {
           displayShare: false,
         },
-        escalationButton,
         id: message.output.id,
       })
     }
@@ -154,8 +149,6 @@ export default async function saveCellExecution(
         },
       })
       data = result
-      showEscalationButton = !!(result.data as CreateExtensionCellOutputMutation)
-        ?.createExtensionCellOutput?.isSlackReady
     }
     // TODO: Remove the legacy createCellExecution mutation once the reporter is fully tested.
     else {
@@ -252,19 +245,14 @@ export default async function saveCellExecution(
       })
 
       data = result
-      showEscalationButton = !!(result.data as CreateCellExecutionMutation)?.createCellExecution
-        ?.isSlackReady
     }
 
     log.info('Cell execution saved')
 
-    log.info(`showEscalationButton: ${showEscalationButton ? 'enabled' : 'disabled'}`)
-
     TelemetryReporter.sendTelemetryEvent('app.save')
     return postClientMessage(messaging, ClientMessages.platformApiResponse, {
       data,
       id: message.output.id,
-      escalationButton: showEscalationButton,
     })
   } catch (error) {
     log.error('Error saving cell execution', (error as Error).message)
@@ -272,7 +260,6 @@ export default async function saveCellExecution(
     return postClientMessage(messaging, ClientMessages.platformApiResponse, {
       data: (error as any).message,
       id: message.output.id,
-      escalationButton,
       hasErrors: true,
     })
   }
diff --git a/src/extension/messages/platformRequest/updateCellExecution.ts b/src/extension/messages/platformRequest/updateCellExecution.ts
index 9bdeb623..a6164058 100644
--- a/src/extension/messages/platformRequest/updateCellExecution.ts
+++ b/src/extension/messages/platformRequest/updateCellExecution.ts
@@ -15,14 +15,11 @@ const log = getLogger('UpdateCell')
 
 export default async function updateCellExecution(
   requestMessage: APIRequestMessage,
-  kernel: Kernel,
+  _kernel: Kernel,
 ): Promise<void | boolean> {
   const { messaging, message } = requestMessage
   log.info('Updating cell execution', message.output.data.id)
 
-  const escalationButton = kernel.hasExperimentEnabled('escalationButton', false)!
-  log.info(`escalationButton: ${escalationButton ? 'enabled' : 'disabled'}`, message.output.data.id)
-
   try {
     const session = await getPlatformAuthSession()
 
@@ -43,17 +40,10 @@ export default async function updateCellExecution(
     })
     log.info('Cell execution updated', message.output.data.id)
 
-    const showEscalationButton = !!result.data?.updateCellOutput?.isSlackReady
-    log.info(
-      `showEscalationButton: ${showEscalationButton ? 'enabled' : 'disabled'}`,
-      message.output.data.id,
-    )
-
     TelemetryReporter.sendTelemetryEvent('app.update')
     return postClientMessage(messaging, ClientMessages.platformApiResponse, {
       data: result,
       id: message.output.id,
-      escalationButton: showEscalationButton,
     })
   } catch (error) {
     log.error('Error updating cell execution', message.output.data.id, (error as Error).message)
@@ -61,7 +51,6 @@ export default async function updateCellExecution(
     return postClientMessage(messaging, ClientMessages.platformApiResponse, {
       data: (error as any).message,
       id: message.output.id,
-      escalationButton,
       hasErrors: true,
     })
   }
diff --git a/src/extension/provider/cloudAuth.ts b/src/extension/provider/githubAuth.ts
similarity index 54%
rename from src/extension/provider/cloudAuth.ts
rename to src/extension/provider/githubAuth.ts
index 5a27745b..c6ccfe49 100644
--- a/src/extension/provider/cloudAuth.ts
+++ b/src/extension/provider/githubAuth.ts
@@ -1,13 +1,13 @@
 import { Disposable, ExtensionContext, authentication } from 'vscode'
 
 import { checkSession } from '../utils'
-import { CLOUD_USER_SIGNED_IN } from '../../constants'
+import { GITHUB_USER_SIGNED_IN } from '../../constants'
 import ContextState from '../contextState'
 
-export class CloudAuthProvider implements Disposable {
+export class GithubAuthProvider implements Disposable {
   constructor(context: ExtensionContext) {
-    const userSignedIn = context.globalState.get(CLOUD_USER_SIGNED_IN, false)
-    ContextState.addKey(CLOUD_USER_SIGNED_IN, userSignedIn)
+    const userSignedIn = context.globalState.get(GITHUB_USER_SIGNED_IN, false)
+    ContextState.addKey(GITHUB_USER_SIGNED_IN, userSignedIn)
     authentication.onDidChangeSessions(() => {
       checkSession(context)
     })
diff --git a/src/extension/utils.ts b/src/extension/utils.ts
index 47339072..b4862015 100644
--- a/src/extension/utils.ts
+++ b/src/extension/utils.ts
@@ -41,7 +41,7 @@ import {
   SERVER_ADDRESS,
   CATEGORY_SEPARATOR,
   NOTEBOOK_AUTOSAVE_ON,
-  CLOUD_USER_SIGNED_IN,
+  GITHUB_USER_SIGNED_IN,
   NOTEBOOK_OUTPUTS_MASKED,
 } from '../constants'
 import {
@@ -55,8 +55,13 @@ import {
   getTLSDir,
   getTLSEnabled,
   isPlatformAuthEnabled,
-  isRunmeAppButtonsEnabled,
 } from '../utils/configuration'
+import {
+  FeatureName,
+  FEATURES_CONTEXT_STATE_KEY,
+  isFeatureActive,
+  loadFeatureSnapshot,
+} from '../features'
 
 import CategoryQuickPickItem from './quickPickItems/category'
 import getLogger from './logger'
@@ -65,7 +70,6 @@ import { BOOTFILE, BOOTFILE_DEMO } from './constants'
 import { IRunnerEnvironment } from './runner/environment'
 import { setCurrentCellExecutionDemo } from './handler/utils'
 import ContextState from './contextState'
-import { RunmeService } from './services/runme'
 import { GCPResolver } from './resolvers/gcpResolver'
 import { AWSResolver } from './resolvers/awsResolver'
 
@@ -552,63 +556,41 @@ export function convertEnvList(envs: string[]): Record<string, string | undefine
   )
 }
 
-export function getAuthSession(createIfNone: boolean = true) {
+export function getGithubAuthSession(createIfNone: boolean = true) {
   return authentication.getSession(AuthenticationProviders.GitHub, ['user:email'], {
     createIfNone,
   })
 }
 
-export async function getPlatformAuthSession(createIfNone: boolean = true) {
+export async function getPlatformAuthSession(createIfNone: boolean = true, silent?: boolean) {
   const scopes = ['profile', 'offline_access']
-  const options: AuthenticationGetSessionOptions = { createIfNone }
+  const options: AuthenticationGetSessionOptions = {}
+
+  if (silent !== undefined) {
+    options.silent = silent
+  } else {
+    options.createIfNone = createIfNone
+  }
 
   return await authentication.getSession(AuthenticationProviders.Stateful, scopes, options)
 }
 
 export async function resolveAuthToken(createIfNone: boolean = true) {
   let session: AuthenticationSession | undefined
-
-  if (isPlatformAuthEnabled()) {
-    session = await getPlatformAuthSession(createIfNone)
-    if (!session) {
-      throw new Error('You must authenticate with your Stateful account')
-    }
-
-    return session.accessToken
-  }
-
-  session = await getAuthSession(createIfNone)
+  session = await getPlatformAuthSession(createIfNone)
   if (!session) {
-    throw new Error('You must authenticate with your GitHub account')
-  }
-
-  const service = new RunmeService({ githubAccessToken: session.accessToken })
-  const response = await service.getUserToken()
-  if (!response) {
-    throw new Error('Unable to retrieve an access token')
+    throw new Error('You must authenticate with your Stateful account')
   }
 
-  return response.token
+  return session.accessToken
 }
 
 export async function resolveAppToken(createIfNone: boolean = true) {
-  if (isPlatformAuthEnabled()) {
-    const session = await getPlatformAuthSession(createIfNone)
-    if (!session) {
-      return null
-    }
-    return { token: session.accessToken }
-  }
-
-  const session = await getAuthSession(createIfNone)
-
-  if (session) {
-    const service = new RunmeService({ githubAccessToken: session.accessToken })
-    const userToken = await service.getUserToken()
-    return await service.getAppToken(userToken)
+  const session = await getPlatformAuthSession(createIfNone)
+  if (!session) {
+    return null
   }
-
-  return null
+  return { token: session.accessToken }
 }
 
 export function fetchStaticHtml(appUrl: string) {
@@ -735,7 +717,7 @@ export async function resolveUserSession(
 ): Promise<AuthenticationSession | undefined> {
   return isPlatformAuthEnabled()
     ? await getPlatformAuthSession(createIfNone)
-    : await getAuthSession(createIfNone)
+    : await getGithubAuthSession(createIfNone)
 }
 
 /**
@@ -745,12 +727,16 @@ export async function resolveUserSession(
  * @returns AuthenticationSession
  */
 export async function promptUserSession(): Promise<AuthenticationSession | undefined> {
-  let session: AuthenticationSession | undefined = await resolveUserSession(false)
-  const displayLoginPrompt = getLoginPrompt() && isRunmeAppButtonsEnabled()
+  let session = await resolveUserSession(false)
+
+  const provider = isPlatformAuthEnabled() ? 'Stateful' : 'GitHub'
+  const featureState$ = loadFeatureSnapshot(ContextState.getKey(FEATURES_CONTEXT_STATE_KEY))
+  const displayLoginPrompt = getLoginPrompt() && isFeatureActive(FeatureName.Share, featureState$)
+
   if (!session && displayLoginPrompt !== false) {
     const option = await window.showInformationMessage(
       `Securely store your cell outputs.
-      Sign in with ${isPlatformAuthEnabled() ? 'Stateful' : 'GitHub'} is required, do you want to proceed?`,
+      Sign in with ${provider} is required, do you want to proceed?`,
       'Yes',
       'No',
       'Open Settings',
@@ -765,7 +751,7 @@ export async function promptUserSession(): Promise<AuthenticationSession | undef
 
     session = await resolveUserSession(true)
     if (!session) {
-      throw new Error('You must authenticate with your GitHub account')
+      throw new Error(`You must authenticate with your ${provider} account`)
     }
   }
 
@@ -773,9 +759,9 @@ export async function promptUserSession(): Promise<AuthenticationSession | undef
 }
 
 export async function checkSession(context: ExtensionContext) {
-  const session = await getAuthSession(false)
-  context.globalState.update(CLOUD_USER_SIGNED_IN, !!session)
-  ContextState.addKey(CLOUD_USER_SIGNED_IN, !!session)
+  const session = await getGithubAuthSession(false)
+  context.globalState.update(GITHUB_USER_SIGNED_IN, !!session)
+  ContextState.addKey(GITHUB_USER_SIGNED_IN, !!session)
 }
 
 export function editJsonc(
diff --git a/src/features.ts b/src/features.ts
new file mode 100644
index 00000000..e730892f
--- /dev/null
+++ b/src/features.ts
@@ -0,0 +1,267 @@
+import { BehaviorSubject } from 'rxjs'
+import { satisfies } from 'semver'
+
+export const FEATURES_CONTEXT_STATE_KEY = 'features'
+
+export type FeatureContext = {
+  os?: string
+  vsCodeVersion?: string
+  runmeVersion?: string
+  extensionVersion?: string
+  githubAuth?: boolean // `true`, `false`, or `undefined`
+  statefulAuth?: boolean // `true`, `false`, or `undefined`
+  extensionId?: ExtensionName
+}
+
+export enum ExtensionName {
+  StatefulRunme = 'stateful.runme',
+  StatefulPlatform = 'stateful.platform',
+}
+
+type EnabledForExtensions = Partial<Record<ExtensionName, boolean>>
+
+export type FeatureCondition = {
+  os?: string
+  vsCodeVersion?: string
+  runmeVersion?: string
+  extensionVersion?: string
+  githubAuthRequired?: boolean
+  statefulAuthRequired?: boolean
+  enabledForExtensions?: EnabledForExtensions
+}
+
+export enum FeatureName {
+  Gist = 'Gist',
+  Share = 'Share',
+  Escalate = 'Escalate',
+  ForceLogin = 'ForceLogin',
+}
+
+export type Feature = {
+  enabled: boolean
+  activated: boolean
+  conditions: FeatureCondition
+}
+
+export type Features = Partial<Record<keyof typeof FeatureName, Feature>>
+
+export type FeatureState = {
+  features: Features
+  context?: FeatureContext
+}
+
+export type FeatureObserver = BehaviorSubject<FeatureState>
+
+function loadFeaturesFromPackageJson(packageJSON: any): Features {
+  const features = (packageJSON?.runme?.features || {}) as Features
+  return features
+}
+
+export function loadFeaturesState(
+  packageJSON: any,
+  context?: FeatureContext,
+  overrides: Map<string, boolean> = new Map(),
+): FeatureObserver {
+  const initialFeatures = loadFeaturesFromPackageJson(packageJSON)
+  const state = new BehaviorSubject<FeatureState>({
+    features: initialFeatures,
+    context,
+  })
+  updateFeatureState(state, context, overrides)
+  return state
+}
+
+function checkEnabled(enabled?: boolean, contextEnabled?: boolean): boolean {
+  if (contextEnabled !== undefined) {
+    return contextEnabled === true
+  }
+
+  return enabled === true
+}
+
+function checkOS(os?: string, contextOS?: string): boolean {
+  return !os || os === 'All' || contextOS === os
+}
+
+function checkVersion(requiredVersion?: string, actualVersion?: string): boolean {
+  if (!requiredVersion) {
+    return true
+  }
+
+  if (!actualVersion) {
+    return true
+  }
+
+  return satisfies(actualVersion, requiredVersion)
+}
+
+function checkAuth(required?: boolean, isAuthenticated?: boolean): boolean {
+  if (!required) {
+    return true
+  }
+
+  if (!isAuthenticated) {
+    return false
+  }
+
+  return true
+}
+
+function checkExtensionId(
+  enabledForExtensions?: EnabledForExtensions,
+  extensionId?: ExtensionName,
+): boolean {
+  if (!enabledForExtensions) {
+    return true
+  }
+
+  if (!extensionId) {
+    return false
+  }
+
+  return enabledForExtensions[extensionId] === true
+}
+
+function isActive(
+  featureName: FeatureName,
+  feature: Feature,
+  context?: FeatureContext,
+  overrides: Map<string, boolean> = new Map(),
+): boolean {
+  const {
+    os,
+    vsCodeVersion,
+    runmeVersion,
+    extensionVersion,
+    githubAuthRequired,
+    statefulAuthRequired,
+    enabledForExtensions,
+  } = feature.conditions
+
+  if (!checkEnabled(feature.enabled, overrides.get(featureName.toLowerCase()))) {
+    console.log(`Feature "${featureName}" is inactive due to checkEnabled.`)
+    return false
+  }
+
+  if (!checkOS(os, context?.os)) {
+    console.log(
+      `Feature "${featureName}" is inactive due to checkOS. Expected OS: ${os}, actual OS: ${context?.os}`,
+    )
+    return false
+  }
+
+  if (!checkVersion(vsCodeVersion, context?.vsCodeVersion)) {
+    console.log(
+      `Feature "${featureName}" is inactive due to checkVersion (vsCodeVersion). Expected: ${vsCodeVersion}, actual: ${context?.vsCodeVersion}`,
+    )
+    return false
+  }
+
+  if (!checkVersion(runmeVersion, context?.runmeVersion)) {
+    console.log(
+      `Feature "${featureName}" is inactive due to checkVersion (runmeVersion). Expected: ${runmeVersion}, actual: ${context?.runmeVersion}`,
+    )
+    return false
+  }
+
+  if (!checkVersion(extensionVersion, context?.extensionVersion)) {
+    console.log(
+      `Feature "${featureName}" is inactive due to checkVersion (extensionVersion). Expected: ${extensionVersion}, actual: ${context?.extensionVersion}`,
+    )
+    return false
+  }
+
+  if (!checkAuth(githubAuthRequired, context?.githubAuth)) {
+    console.log(
+      `Feature "${featureName}" is inactive due to checkAuth (githubAuth). Required: ${githubAuthRequired}, actual: ${context?.githubAuth}`,
+    )
+    return false
+  }
+
+  if (!checkAuth(statefulAuthRequired, context?.statefulAuth)) {
+    console.log(
+      `Feature "${featureName}" is inactive due to checkAuth (statefulAuth). Required: ${statefulAuthRequired}, actual: ${context?.statefulAuth}`,
+    )
+    return false
+  }
+
+  if (!checkExtensionId(enabledForExtensions, context?.extensionId)) {
+    console.log(
+      `Feature "${featureName}" is inactive due to checkExtensionId. Expected: ${enabledForExtensions}, actual: ${context?.extensionId}`,
+    )
+    return false
+  }
+
+  console.log(`Feature "${featureName} is active`)
+  return true
+}
+
+export function updateFeatureState(
+  featureState$: FeatureObserver,
+  context?: FeatureContext,
+  overrides: Map<string, boolean> = new Map(),
+) {
+  const currentState = featureState$.getValue()
+
+  const updatedFeatures = Object.entries(currentState.features).reduce(
+    (acc, [key, value]) => ({
+      ...acc,
+      [key]: {
+        ...value,
+        activated: isActive(key as FeatureName, value, context, overrides),
+      },
+    }),
+    {} as Features,
+  )
+
+  featureState$.next({ features: updatedFeatures, context })
+  return featureState$
+}
+
+export function updateFeatureContext<K extends keyof FeatureContext>(
+  featureState$: FeatureObserver | undefined,
+  key: K,
+  value: FeatureContext[K],
+  overrides: Map<string, boolean>,
+) {
+  if (!featureState$) {
+    return
+  }
+  const currentState = featureState$.getValue()
+  const newContext = { ...(currentState.context || {}), [key]: value }
+
+  if (newContext[key] !== currentState?.context?.[key]) {
+    updateFeatureState(featureState$, newContext, overrides)
+  }
+}
+
+export function getFeatureSnapshot(featureState$: FeatureObserver | undefined): string {
+  if (!featureState$) {
+    return ''
+  }
+
+  return JSON.stringify(featureState$.getValue())
+}
+
+export function loadFeatureSnapshot(snapshot: string): FeatureObserver {
+  const { features, context } = JSON.parse(snapshot)
+  const featureState$ = new BehaviorSubject<FeatureState>({
+    features,
+    context,
+  })
+
+  featureState$.next({ features, context: featureState$.getValue().context })
+  return featureState$
+}
+
+export function isFeatureActive(
+  featureName: FeatureName,
+  featureState$?: FeatureObserver,
+): boolean {
+  if (!featureState$) {
+    return false
+  }
+
+  const feature = featureState$.getValue().features[featureName]
+  return feature ? feature.activated : false
+}
diff --git a/src/types.ts b/src/types.ts
index d9081918..f2f07c80 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -377,7 +377,6 @@ interface Payload {
     ['runme.dev/id']: string
     content?: string
     initialRows?: number
-    enableShareButton: boolean
     isAutoSaveEnabled: boolean
     isSessionOutputsEnabled: boolean
     isPlatformAuthEnabled: boolean
@@ -438,7 +437,6 @@ export interface ClientMessagePayload {
   [ClientMessages.onProgramClose]: {
     ['runme.dev/id']: string
     code: number | void
-    escalationButton: boolean
   }
   [ClientMessages.activeThemeChanged]: string
   [ClientMessages.openLink]: string
@@ -499,7 +497,6 @@ export interface ClientMessagePayload {
   [ClientMessages.platformApiResponse]: {
     data: any
     id: string
-    escalationButton: boolean
     hasErrors?: boolean
   }
   [ClientMessages.optionsModal]: {
@@ -641,6 +638,16 @@ export interface ClientMessagePayload {
     command: string
     argument?: string
   }
+
+  [ClientMessages.featuresUpdateAction]: {
+    snapshot: string
+  }
+
+  [ClientMessages.featuresRequest]: {}
+
+  [ClientMessages.featuresResponse]: {
+    snapshot: string
+  }
 }
 
 export interface OutputItemsPayload {
diff --git a/src/utils/configuration.ts b/src/utils/configuration.ts
index 0684617f..1daeb3f5 100644
--- a/src/utils/configuration.ts
+++ b/src/utils/configuration.ts
@@ -82,7 +82,6 @@ const configurationSchema = {
   app: {
     apiUrl: z.string().default(DEFAULT_RUNME_APP_API_URL),
     baseDomain: z.string().default(DEFAULT_RUNME_BASE_DOMAIN),
-    enableShare: z.boolean().default(true),
     forceNewWindow: z.boolean().default(true),
     notebookAutoSave: z
       .enum([NotebookAutoSaveSetting.Yes, NotebookAutoSaveSetting.No])
@@ -400,10 +399,6 @@ const getRunmeBaseDomain = (): string => {
   return baseDomain
 }
 
-const isRunmeAppButtonsEnabled = (): boolean => {
-  return getCloudConfigurationValue('enableShare', true)
-}
-
 const getRunmePanelIdentifier = (identifer: string): string => {
   const configurationSection = workspace.getConfiguration(`${APP_SECTION_NAME}.panel`)
   const configurationValue = configurationSection.get<string>(identifer) || identifer
@@ -467,7 +462,6 @@ export {
   getTLSEnabled,
   isNotebookTerminalEnabledForCell,
   isNotebookTerminalFeatureEnabled,
-  isRunmeAppButtonsEnabled,
   isPlatformAuthEnabled,
   registerExtensionEnvVarsMutation,
   getSessionOutputs,


Test patch:
diff --git a/tests/e2e/pageobjects/cell.page.ts b/tests/e2e/pageobjects/cell.page.ts
index 0f4f36a9..0c49b590 100644
--- a/tests/e2e/pageobjects/cell.page.ts
+++ b/tests/e2e/pageobjects/cell.page.ts
@@ -106,7 +106,9 @@ export class NotebookCell extends BasePage<typeof notebookCellLocators, typeof l
         expectedTerminal !== OutputType.Display ? await row.getText() : await row.getHTML(false)
 
       if (expectedTerminal === OutputType.TerminalView) {
-        const stopTerm = text.lastIndexOf('Copy\n')
+        // TODO: Why?
+        // const stopTerm = text.lastIndexOf('Copy\n')
+        const stopTerm = text.lastIndexOf('Copy')
         text = text.slice(0, stopTerm).trim()
       }
 
diff --git a/tests/extension/extension.test.ts b/tests/extension/extension.test.ts
index 2ce4e3a5..8ba4bc7e 100644
--- a/tests/extension/extension.test.ts
+++ b/tests/extension/extension.test.ts
@@ -68,6 +68,8 @@ vi.mock('../../src/extension/utils', async () => ({
   checkSession: vi.fn(),
   togglePreviewButton: vi.fn(),
   resetNotebookSettings: vi.fn(),
+  getGithubAuthSession: vi.fn().mockResolvedValue(undefined),
+  getPlatformAuthSession: vi.fn().mockResolvedValue(undefined),
 }))
 
 vi.mock('../../src/extension/grpc/runner/v1', () => ({}))
@@ -80,6 +82,7 @@ test('initializes all providers', async () => {
   }
   vi.mocked(workspace.getConfiguration).mockReturnValue({
     get: vi.fn((config: string) => configValues[config]),
+    has: vi.fn(),
   } as any)
   const dummyFilePath = Uri.file('/foo/bar')
   vi.mocked(Uri.joinPath).mockReturnValue(dummyFilePath)
diff --git a/tests/extension/features.test.ts b/tests/extension/features.test.ts
new file mode 100644
index 00000000..a80d7029
--- /dev/null
+++ b/tests/extension/features.test.ts
@@ -0,0 +1,193 @@
+import { describe, it, expect, beforeEach } from 'vitest'
+
+import {
+  updateFeatureState,
+  getFeatureSnapshot,
+  loadFeaturesState,
+  isFeatureActive,
+  loadFeatureSnapshot,
+  FeatureContext,
+  FeatureState,
+  FeatureObserver,
+  FeatureName,
+  ExtensionName,
+} from '../../src/features'
+
+const packageJSON = {
+  runme: {
+    features: {
+      Escalate: {
+        enabled: true,
+        conditions: {
+          os: 'All',
+          vsCodeVersion: '>=1.0.0',
+          runmeVersion: '>=1.0.0',
+          extensionVersion: '>=1.0.0',
+          githubAuthRequired: undefined,
+          statefulAuthRequired: true,
+          enabledForExtensions: {
+            'stateful.platform': true,
+            'stateful.runme': false,
+          },
+        },
+      },
+      Gist: {
+        enabled: true,
+        conditions: {
+          os: 'win32',
+          vsCodeVersion: '>=1.0.0',
+          runmeVersion: '>=1.0.0',
+          extensionVersion: '>=1.0.0',
+          githubAuthRequired: true,
+          statefulAuthRequired: false,
+          enabledForExtensions: {
+            'stateful.platform': true,
+            'stateful.runme': true,
+          },
+        },
+      },
+    },
+  },
+}
+
+describe('Feature Store', () => {
+  let featureState$: FeatureObserver
+
+  beforeEach(() => {
+    featureState$ = loadFeaturesState(packageJSON, {
+      os: 'linux',
+    })
+  })
+
+  it('should evaluate and enable features correctly based on context', () => {
+    const initialContext: FeatureContext = {
+      os: 'win32',
+      vsCodeVersion: '1.59.0',
+      extensionVersion: '1.0.0',
+      runmeVersion: '1.3.0',
+      githubAuth: true,
+      statefulAuth: true,
+      extensionId: ExtensionName.StatefulRunme,
+    }
+
+    updateFeatureState(featureState$, initialContext)
+
+    const currentFeatures = (featureState$.getValue() as FeatureState).features
+
+    expect(currentFeatures.Escalate?.activated).toBe(false)
+    expect(currentFeatures.Gist?.activated).toBe(true)
+  })
+
+  it('should take a snapshot of the current state', () => {
+    const initialContext: FeatureContext = {
+      os: 'win32',
+      vsCodeVersion: '1.59.0',
+      extensionVersion: '1.0.0',
+      runmeVersion: '1.3.0',
+      githubAuth: true,
+      statefulAuth: true,
+      extensionId: 'stateful.runme',
+    }
+
+    updateFeatureState(featureState$, initialContext)
+    const snapshot = getFeatureSnapshot(featureState$)
+
+    expect(snapshot).toBe(JSON.stringify(featureState$.getValue()))
+  })
+
+  it('should load a snapshot and restore feature state', () => {
+    const initialContext: FeatureContext = {
+      os: 'win32',
+      vsCodeVersion: '1.59.0',
+      extensionVersion: '1.0.0',
+      runmeVersion: '1.3.0',
+      githubAuth: true,
+      statefulAuth: true,
+      extensionId: ExtensionName.StatefulRunme,
+    }
+
+    updateFeatureState(featureState$, initialContext)
+    const snapshot = getFeatureSnapshot(featureState$)
+
+    featureState$.next({
+      context: initialContext,
+      features: {
+        Escalate: {
+          enabled: true,
+          activated: false,
+          conditions: {
+            os: 'All',
+            vsCodeVersion: '>=1.58.0',
+            runmeVersion: '>=1.2.0',
+            githubAuthRequired: undefined,
+            statefulAuthRequired: true,
+          },
+        },
+        Gist: {
+          enabled: true,
+          activated: false,
+          conditions: {
+            os: 'win32',
+            vsCodeVersion: '>=1.60.0',
+            githubAuthRequired: true,
+            statefulAuthRequired: false,
+          },
+        },
+      },
+    })
+
+    const featureStateCopy$ = loadFeatureSnapshot(snapshot)
+
+    const restoredFeatures = featureStateCopy$.getValue()
+    expect(restoredFeatures).toEqual(JSON.parse(snapshot))
+  })
+
+  it('should disable a feature if context does not meet conditions', () => {
+    const newContext: FeatureContext = {
+      os: 'win32',
+      vsCodeVersion: '0.0.1',
+      extensionVersion: '0.0.1',
+      runmeVersion: '0.0.1',
+      githubAuth: false,
+      statefulAuth: false,
+      extensionId: ExtensionName.StatefulRunme,
+    }
+    updateFeatureState(featureState$, newContext)
+
+    const currentFeatures = (featureState$.getValue() as FeatureState).features
+    expect(currentFeatures.Escalate?.activated).toBe(false)
+    expect(currentFeatures.Gist?.activated).toBe(false)
+  })
+
+  it('should correctly identify if a feature is enabled by name', () => {
+    const ctx: FeatureContext = {
+      os: 'linux',
+      vsCodeVersion: '1.59.0',
+      extensionVersion: '1.0.0',
+      runmeVersion: '1.3.0',
+      githubAuth: true,
+      statefulAuth: true,
+      extensionId: ExtensionName.StatefulPlatform,
+    }
+    updateFeatureState(featureState$, ctx)
+
+    expect(isFeatureActive(FeatureName.Escalate, featureState$)).toBe(true)
+    expect(isFeatureActive(FeatureName.Gist, featureState$)).toBe(false)
+  })
+
+  it('should correctly identify if a feature is enabled by extensionId', () => {
+    const ctx: FeatureContext = {
+      os: 'win32',
+      vsCodeVersion: '1.59.0',
+      extensionVersion: '1.0.0',
+      runmeVersion: '1.3.0',
+      githubAuth: true,
+      statefulAuth: true,
+      extensionId: ExtensionName.StatefulRunme,
+    }
+    updateFeatureState(featureState$, ctx)
+
+    expect(isFeatureActive(FeatureName.Escalate, featureState$)).toBe(false)
+    expect(isFeatureActive(FeatureName.Gist, featureState$)).toBe(true)
+  })
+})
diff --git a/tests/extension/handler/uri.test.ts b/tests/extension/handler/uri.test.ts
index af7732ac..53c4caf7 100644
--- a/tests/extension/handler/uri.test.ts
+++ b/tests/extension/handler/uri.test.ts
@@ -15,6 +15,7 @@ import {
 
 vi.mock('vscode')
 vi.mock('vscode-telemetry')
+vi.mock('../../../src/utils/logger')
 vi.mock('../../../src/extension/handler/utils', () => ({
   parseParams: vi.fn().mockReturnValue({}),
   getProjectDir: vi.fn(),
diff --git a/tests/extension/kernel.test.ts b/tests/extension/kernel.test.ts
index a35a6c8c..4f44a1bc 100644
--- a/tests/extension/kernel.test.ts
+++ b/tests/extension/kernel.test.ts
@@ -29,7 +29,7 @@ vi.mock('../../src/extension/utils', async () => {
     getNotebookCategories: vi.fn().mockResolvedValue([]),
     isWindows: () => false,
     isShellLanguage: () => false,
-    getAuthSession: vi.fn().mockResolvedValue({
+    getGithubAuthSession: vi.fn().mockResolvedValue({
       accessToken: '123',
     }),
   }
diff --git a/tests/extension/messages/platformApiRequest/saveCellExecution.test.ts b/tests/extension/messages/platformApiRequest/saveCellExecution.test.ts
index 5dff98f7..423e11a5 100644
--- a/tests/extension/messages/platformApiRequest/saveCellExecution.test.ts
+++ b/tests/extension/messages/platformApiRequest/saveCellExecution.test.ts
@@ -14,6 +14,15 @@ import { GrpcSerializer } from '../../../../src/extension/serializer'
 vi.mock('vscode-telemetry')
 vi.mock('../../../src/extension/runner', () => ({}))
 vi.mock('../../../src/extension/grpc/runner/v1', () => ({}))
+vi.mock('node:os', async (importOriginal) => {
+  const original = (await importOriginal()) as any
+  return {
+    default: {
+      ...original.default,
+      platform: vi.fn().mockReturnValue('linux'),
+    },
+  }
+})
 
 vi.mock('vscode', async () => {
   const mocked = (await vi.importActual('../../../../__mocks__/vscode')) as any
@@ -117,6 +126,14 @@ suite('Save cell execution', () => {
               "from": "kernel",
             },
           ],
+          [
+            {
+              "output": {
+                "snapshot": "{"features":{},"context":{"os":"linux","vsCodeVersion":"9.9.9","githubAuth":false,"statefulAuth":false}}",
+              },
+              "type": "features:updateAction",
+            },
+          ],
           [
             {
               "output": {
@@ -126,7 +143,6 @@ suite('Save cell execution', () => {
                     "id": "cell-id",
                   },
                 },
-                "escalationButton": false,
                 "id": "cell-id",
               },
               "type": "common:platformApiResponse",
@@ -142,6 +158,10 @@ suite('Save cell execution', () => {
             "type": "return",
             "value": undefined,
           },
+          {
+            "type": "return",
+            "value": undefined,
+          },
         ],
       }
     `)
@@ -188,6 +208,14 @@ suite('Save cell execution', () => {
               "from": "kernel",
             },
           ],
+          [
+            {
+              "output": {
+                "snapshot": "{"features":{},"context":{"os":"linux","vsCodeVersion":"9.9.9","githubAuth":false,"statefulAuth":false}}",
+              },
+              "type": "features:updateAction",
+            },
+          ],
           [
             {
               "output": {
@@ -197,7 +225,6 @@ suite('Save cell execution', () => {
                     "id": "cell-id",
                   },
                 },
-                "escalationButton": false,
                 "id": "cell-id",
               },
               "type": "common:platformApiResponse",
@@ -209,7 +236,6 @@ suite('Save cell execution', () => {
                 "data": {
                   "displayShare": false,
                 },
-                "escalationButton": false,
                 "id": "cell-id",
               },
               "type": "common:platformApiResponse",
@@ -229,6 +255,10 @@ suite('Save cell execution', () => {
             "type": "return",
             "value": undefined,
           },
+          {
+            "type": "return",
+            "value": undefined,
+          },
         ],
       }
     `)