diff --git a/.eslintrc.cjs b/.eslintrc.cjs
deleted file mode 100644
index 1a66a0a9b68d61495016644260b2e748ddf9daa9..0000000000000000000000000000000000000000
--- a/.eslintrc.cjs
+++ /dev/null
@@ -1,12 +0,0 @@
-/* eslint-env node */
-require("@rushstack/eslint-patch/modern-module-resolution");
-
-module.exports = {
-  root: true,
-  extends: [
-    "plugin:vue/vue3-essential",
-    "eslint:recommended",
-    "@vue/eslint-config-typescript/recommended",
-    "@vue/eslint-config-prettier",
-  ],
-};
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 0000000000000000000000000000000000000000..598502eab2cfba0109b2b53b213fed8d590b8074
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,30 @@
+import pluginVue from "eslint-plugin-vue";
+import vueTsEslintConfig from "@vue/eslint-config-typescript";
+import prettierConfig from "@vue/eslint-config-prettier";
+
+import { includeIgnoreFile } from "@eslint/compat";
+import path from "node:path";
+import { fileURLToPath } from "node:url";
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const gitignorePath = path.resolve(__dirname, ".gitignore");
+
+export default [
+  // add more generic rulesets here, such as:
+  // js.configs.recommended,
+  ...pluginVue.configs["flat/recommended"],
+  ...vueTsEslintConfig(),
+  prettierConfig,
+  includeIgnoreFile(gitignorePath),
+  {
+    files: ["**/*.ts", "**/*.js", "**/*.vue"],
+  },
+  {
+    files: ["src/components/parameter-schema/**/*.vue"],
+    rules: {
+      "vue/require-default-prop": "off",
+      "vue/require-prop-types": "off",
+    },
+  },
+];
diff --git a/openapi-clowm.json b/openapi-clowm.json
new file mode 100644
index 0000000000000000000000000000000000000000..7a3f4447319ef7ac7569ae716645ff39fb51158e
--- /dev/null
+++ b/openapi-clowm.json
@@ -0,0 +1 @@
+{"openapi":"3.1.0","info":{"title":"CloWM","description":"\nThis is the API documentation of the CloWM Service.\n\nLook in the [Git repository](https://gitlab.ub.uni-bielefeld.de/cmg/clowm/clowm-backend/-/blob/main/RBAC.md)\nto see which role has which permission.\n","contact":{"name":"Daniel Goebel","url":"https://ekvv.uni-bielefeld.de/pers_publ/publ/PersonDetail.jsp?personId=223066601","smtp":"dgoebel@techfak.uni-bielefeld.de"},"license":{"name":"Apache 2.0","url":"https://www.apache.org/licenses/LICENSE-2.0"},"version":"1.0.0"},"servers":[{"url":"/api"}],"paths":{"/auth/login":{"get":{"tags":["Auth"],"summary":"Kickstart the login flow","description":"Redirect route to OIDC provider to kickstart the login process.","operationId":"Auth-login","parameters":[{"name":"invitation_token","in":"query","required":false,"schema":{"type":"string","minLength":43,"maxLength":43,"description":"Unique token to validate an invitation","title":"Invitation Token"},"description":"Unique token to validate an invitation"},{"name":"provider","in":"query","required":false,"schema":{"$ref":"#/components/schemas/OIDCProvider","description":"The OIDC provider to use for login","default":"lifescience"},"description":"The OIDC provider to use for login"},{"name":"next","in":"query","required":false,"schema":{"type":"string","maxLength":128,"description":"Will be appended to redirect response in the callback route as URL query parameter `next`","title":"Next"},"description":"Will be appended to redirect response in the callback route as URL query parameter `next`"}],"responses":{"302":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/callback/{provider}":{"get":{"tags":["Auth"],"summary":"LifeScience Login Callback","description":"Callback for the Life Science Identity Provider.\n\nVisit the route login route to start the login process.\n\nIf the user is already known to the system, then a JWT token will be created and sent via the 'set-cookie' header.\nThe key for this Cookie is 'bearer'.\n\nIf the user is new, he will be created and then a JWT token is issued.\n\nThis JWT has to be sent to all authorized endpoints via the HTTPBearer scheme.","operationId":"Auth-login_callback","parameters":[{"name":"provider","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OIDCProvider"}}],"responses":{"302":{"description":"Successful Response","headers":{"Set-Cookie":{"description":"JWT for accessing the API","schema":{"type":"string","example":"bearer=fake-jwt-cookie; Domain=localhost; Max-Age=691200; Path=/; SameSite=strict; Secure"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/logout":{"get":{"tags":["Auth"],"summary":"Logout","description":"Logout the user from the system by deleting the bearer cookie.","operationId":"Auth-logout","responses":{"302":{"description":"Successful Response","headers":{"Set-Cookie":{"description":"JWT for accessing the API","schema":{"type":"string","example":"bearer=; Domain=localhost; Max-Age=0; Path=/; SameSite=strict; Secure"}}}}}}},"/tokens":{"get":{"tags":["APIToken"],"summary":"List API token","description":"List meta information about all API token.\n\nPermissions `api_token:list_all` required. See parameter `uid` for exception.","operationId":"APIToken-list_token","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"uid","in":"query","required":false,"schema":{"type":"string","format":"uuid","description":"UID of the user to filter for. Permission `api_token:list` required if current users is the target.","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Uid"},"description":"UID of the user to filter for. Permission `api_token:list` required if current users is the target."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiTokenOut"},"title":"Response Apitoken-List Token"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["APIToken"],"summary":"Create new API token","description":"Create a new API token for the current user.\n\nPermission `api_token:create` required.","operationId":"APIToken-create_token","security":[{"Session Token":[]},{"API Token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiTokenIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiTokenPrivateOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tokens/{tid}":{"get":{"tags":["APIToken"],"summary":"Get API token","description":"Get an API token by id.\n\nPermission `api_token:read` required if the current user is the owner of the API token,\notherwise `api_token:read_any` required.","operationId":"APIToken-get_token","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of an API token","examples":["b4c861a7-7f52-4332-a001-78e0500dabbc"],"title":"Tid"},"description":"ID of an API token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiTokenOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["APIToken"],"summary":"Delete API token","description":"Delete an API token by id.\n\nPermission `api_token:delete` required if the current user is the owner of the API token,\notherwise `api_token:delete_any` required.","operationId":"APIToken-delete_token","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of an API token","examples":["b4c861a7-7f52-4332-a001-78e0500dabbc"],"title":"Tid"},"description":"ID of an API token"}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users":{"post":{"tags":["User"],"summary":"Create User","description":"Create a new user in the system and notify him.\n\nPermission `user:create` required.","operationId":"User-create_user","security":[{"Session Token":[]},{"API Token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserOutExtended"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["User"],"summary":"List users and search by their name","description":"List all users in the system..\n\nPermission `user:list` required.","operationId":"User-list_users","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"name_substring","in":"query","required":false,"schema":{"type":"string","minLength":3,"maxLength":30,"description":"Filter users by a substring in their name.","title":"Name Substring"},"description":"Filter users by a substring in their name."},{"name":"filter_roles","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/RoleEnum"},"description":"Filter users by their role. If multiple are selected, they are concatenating by an OR Expression.","title":"Filter Roles"},"description":"Filter users by their role. If multiple are selected, they are concatenating by an OR Expression."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserOutExtended"},"title":"Response User-List Users"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/search":{"get":{"tags":["User"],"summary":"Search Users","description":"Search for users in the system by their name.\n\nPermission `user: search` required.","operationId":"User-search_users","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"name_substring","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":30,"description":"Filter users by a substring in their name.","title":"Name Substring"},"description":"Filter users by a substring in their name."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserOut"},"title":"Response User-Search Users"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/me":{"get":{"tags":["User"],"summary":"Get the logged in user","description":"Return the user associated with the used JWT.\n\nPermission `user:read` required.","operationId":"User-get_logged_in_user","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserOutExtended"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDetail"},"example":{"detail":"Malformed JWT Token"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDetail"},"example":{"detail":"Not authenticated"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDetail"},"example":{"detail":"Action Forbidden. Permission user:read is missing"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDetail"},"example":{"detail":"Entity not found."}}}}},"security":[{"Session Token":[]},{"API Token":[]}]}},"/users/{uid}":{"get":{"tags":["User"],"summary":"Get a user by its uid","description":"Return the user with the specific uid.\n\nPermission `user:read` required.","operationId":"User-get_user","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"UID of a user","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Uid"},"description":"UID of a user"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/{uid}/roles":{"put":{"tags":["User"],"summary":"Update user roles","description":"Update the roles of a user.\n\nPermission `user:update` required.","operationId":"User-update_roles","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"UID of a user","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Uid"},"description":"UID of a user"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRoles"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserOutExtended"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/{uid}/invitation":{"patch":{"tags":["User"],"summary":"Resend Invitation","description":"Resend the invitation link for an user that has an open invitation.\n\nPermission `user:create` required.","operationId":"User-resend_invitation","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"UID of a user","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Uid"},"description":"UID of a user"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserOutExtended"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/{uid}/keys":{"get":{"tags":["S3Key"],"summary":"Get the S3 Access keys from a user","description":"Get all the S3 Access keys for a specific user.\n\nPermission `s3_key:list` required.","operationId":"S3Key-get_user_keys","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"UID of a user","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Uid"},"description":"UID of a user"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/S3Key"},"title":"Response S3Key-Get User Keys"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["S3Key"],"summary":"Create a Access key for a user","description":"Create a S3 Access key for a specific user.\n\nPermission `s3_key:create` required.","operationId":"S3Key-create_user_key","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"UID of a user","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Uid"},"description":"UID of a user"}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3Key"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/{uid}/keys/{access_id}":{"get":{"tags":["S3Key"],"summary":"Get a specific S3 Access key from a user","description":"Get a specific S3 Access Key for a specific user.\n\nPermission `s3_key:read` required.","operationId":"S3Key-get_user_key","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"access_id","in":"path","required":true,"schema":{"type":"string","description":"ID of the S3 access key","examples":["CRJ6B037V2ZT4U3W17VC"],"title":"Access Id"},"description":"ID of the S3 access key"},{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"UID of a user","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Uid"},"description":"UID of a user"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3Key"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["S3Key"],"summary":"Delete a specific S3 Access key from a user","description":"Delete a specific S3 Access key for a specific user.\n\nPermission `s3_key:delete` required if the current user is the target, otherwise `s3_key:delete_any` required.","operationId":"S3Key-delete_user_key","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"access_id","in":"path","required":true,"schema":{"type":"string","description":"ID of the S3 access key","examples":["CRJ6B037V2ZT4U3W17VC"],"title":"Access Id"},"description":"ID of the S3 access key"},{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"UID of a user","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Uid"},"description":"UID of a user"}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/buckets":{"get":{"tags":["Bucket"],"summary":"List buckets","description":"List all the buckets in the system or of the desired user where the user has permissions for.\n\nPermission `bucket:list_all` required. See parameter `owner_id` for exception.","operationId":"Bucket-list_buckets","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"owner_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","description":"UID of the user for whom to fetch the buckets for. Permission `bucket:read_any` required if current user is not the target.","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Owner Id"},"description":"UID of the user for whom to fetch the buckets for. Permission `bucket:read_any` required if current user is not the target."},{"name":"bucket_type","in":"query","required":false,"schema":{"$ref":"#/components/schemas/BucketType","description":"Type of the bucket to get. Ignored when `user` parameter not set","default":"ALL"},"description":"Type of the bucket to get. Ignored when `user` parameter not set"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BucketOut"},"title":"Response Bucket-List Buckets"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Bucket"],"summary":"Create a bucket for the current user","description":"Create a bucket for the current user.\n\nThe name of the bucket has some constraints.\nFor more information see the\n[Ceph documentation](https://docs.ceph.com/en/quincy/radosgw/s3/bucketops/#constraints)\n\nPermission `bucket:create` required.","operationId":"Bucket-create_bucket","security":[{"Session Token":[]},{"API Token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/buckets/ownership_transfer_request":{"get":{"tags":["Bucket"],"summary":"List bucket OTRs","description":"Get the ownership transfer requests for buckets.\n\nPermission `bucket:list` required if `current_owner_id` or `new_owner_id` is the current users id,\notherwise `bucket:list_all`","operationId":"Bucket-list_bucket_otrs","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"current_owner_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","description":"UID of user who is the current owner.","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Current Owner Id"},"description":"UID of user who is the current owner."},{"name":"new_owner_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","description":"UID of user who will be the new owner.","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"New Owner Id"},"description":"UID of user who will be the new owner."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OwnershipTransferRequestOut"},"title":"Response Bucket-List Bucket Otrs"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/buckets/{bucket_name}":{"get":{"tags":["Bucket"],"summary":"Get a bucket by its name","description":"Get a bucket by its name if the current user has READ permissions for the bucket.\n\nPermission `bucket:read` required if the current user is the owner of the bucket,\notherwise `bucket:read_any` required.","operationId":"Bucket-get_bucket","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"bucket_name","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":63,"description":"Name of bucket","examples":["test-bucket"],"title":"Bucket Name"},"description":"Name of bucket"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Bucket"],"summary":"Delete a bucket","description":"Delete a bucket by its name. Only the owner of the bucket can delete the bucket.\n\nPermission `bucket:delete` required if the current user is the owner of the bucket,\notherwise `bucket:delete_any` required.","operationId":"Bucket-delete_bucket","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"bucket_name","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":63,"description":"Name of bucket","examples":["test-bucket"],"title":"Bucket Name"},"description":"Name of bucket"},{"name":"force_delete","in":"query","required":false,"schema":{"type":"boolean","description":"Delete even non-empty bucket","default":false,"title":"Force Delete"},"description":"Delete even non-empty bucket"}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/buckets/{bucket_name}/ownership_transfer_request":{"get":{"tags":["Bucket"],"summary":"Get a bucket OTR","description":"Get a specific bucket ownership transfer request.\n\nPermission `bucket:read` required if the current user is the current or new owner of the bucket,\notherwise `bucket:read_any` required.","operationId":"Bucket-get_bucket_otr","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"bucket_name","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":63,"description":"Name of bucket","examples":["test-bucket"],"title":"Bucket Name"},"description":"Name of bucket"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnershipTransferRequestOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Bucket"],"summary":"Create a bucket OTR","description":"Create a ownership transfer request for a specific bucket.\n\nPermission `bucket:update` required if the current user is the current owner of the bucket,\notherwise `bucket:update_any` required.","operationId":"Bucket-create_bucket_otr","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"bucket_name","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":63,"description":"Name of bucket","examples":["test-bucket"],"title":"Bucket Name"},"description":"Name of bucket"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnershipTransferRequestIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnershipTransferRequestOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Bucket"],"summary":"Accept a bucket OTR","description":"Accept an ownership transfer request for a specific workflow.\n\nPermission `bucket:update` required if the current user is the new owner of the workflow,\notherwise `bucket:update_any` required.","operationId":"Bucket-accept_bucket_otr","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"bucket_name","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":63,"description":"Name of bucket","examples":["test-bucket"],"title":"Bucket Name"},"description":"Name of bucket"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Bucket"],"summary":"Delete a bucket OTR","description":"Delete/Reject a bucket ownership transfer request.\n\nPermission `bucket:update` required if the current user is the current or new owner of the bucket,\notherwise `bucket:update_any` required.","operationId":"Bucket-delete_bucket_otr","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"bucket_name","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":63,"description":"Name of bucket","examples":["test-bucket"],"title":"Bucket Name"},"description":"Name of bucket"}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/buckets/{bucket_name}/public":{"patch":{"tags":["Bucket"],"summary":"Update public status","description":"Update the buckets public state.\n\nPermission `bucket:update` required if the current user is the owner of the bucket,\notherwise `bucket:update_any` required.","operationId":"Bucket-update_bucket_public_state","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"bucket_name","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":63,"description":"Name of bucket","examples":["test-bucket"],"title":"Bucket Name"},"description":"Name of bucket"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_Bucket-update_bucket_public_state"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/buckets/{bucket_name}/limits":{"patch":{"tags":["Bucket"],"summary":"Update bucket limits","description":"Update the buckets size limits.\n\nPermission `bucket:update_any` required.","operationId":"Bucket-update_bucket_limits","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"bucket_name","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":63,"description":"Name of bucket","examples":["test-bucket"],"title":"Bucket Name"},"description":"Name of bucket"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketSizeLimits"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/permissions":{"get":{"tags":["BucketPermission"],"summary":"Get all permissions.","description":"List all the bucket permissions in the system.\n\nPermission `bucket_permission:list_all` required.","operationId":"BucketPermission-list_permissions","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"permission_types","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/Permission"},"description":"Type of Bucket Permissions to fetch","title":"Permission Types"},"description":"Type of Bucket Permissions to fetch"},{"name":"permission_status","in":"query","required":false,"schema":{"$ref":"#/components/schemas/PermissionStatus","description":"Status of Bucket Permissions to fetch"},"description":"Status of Bucket Permissions to fetch"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BucketPermissionOut"},"title":"Response Bucketpermission-List Permissions"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["BucketPermission"],"summary":"Create a permission.","description":"Create a permission for a bucket and user.\n\nPermission `bucket_permission:create` required.","operationId":"BucketPermission-create_permission","security":[{"Session Token":[]},{"API Token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketPermissionIn","description":"Permission to create"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketPermissionOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/permissions/user/{uid}":{"get":{"tags":["BucketPermission"],"summary":"Get all permissions for a user.","description":"List all the bucket permissions for the given user.\n\nPermission `bucket_permission:list` required if current user is the target the bucket permission,\notherwise `bucket_permission:list_all` required.","operationId":"BucketPermission-list_permissions_per_user","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"UID of a user","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Uid"},"description":"UID of a user"},{"name":"permission_types","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/Permission"},"description":"Type of Bucket Permissions to fetch","title":"Permission Types"},"description":"Type of Bucket Permissions to fetch"},{"name":"permission_status","in":"query","required":false,"schema":{"$ref":"#/components/schemas/PermissionStatus","description":"Status of Bucket Permissions to fetch"},"description":"Status of Bucket Permissions to fetch"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BucketPermissionOut"},"title":"Response Bucketpermission-List Permissions Per User"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/permissions/bucket/{bucket_name}":{"get":{"tags":["BucketPermission"],"summary":"Get all permissions for a bucket.","description":"List all the bucket permissions for the given bucket.\n\nPermission `bucket_permission:list` required if current user is owner of the bucket,\notherwise `bucket_permission:list_all` required.","operationId":"BucketPermission-list_permissions_per_bucket","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"bucket_name","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":63,"description":"Name of bucket","examples":["test-bucket"],"title":"Bucket Name"},"description":"Name of bucket"},{"name":"permission_types","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/Permission"},"description":"Type of Bucket Permissions to fetch","title":"Permission Types"},"description":"Type of Bucket Permissions to fetch"},{"name":"permission_status","in":"query","required":false,"schema":{"$ref":"#/components/schemas/PermissionStatus","description":"Status of Bucket Permissions to fetch"},"description":"Status of Bucket Permissions to fetch"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BucketPermissionOut"},"title":"Response Bucketpermission-List Permissions Per Bucket"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/permissions/bucket/{bucket_name}/user/{uid}":{"get":{"tags":["BucketPermission"],"summary":"Get permission for bucket and user combination.","description":"Get the bucket permissions for the specific combination of bucket and user.\n\nPermission `bucket_permission:read` required if current user is the target or owner of the bucket permission,\notherwise `bucket_permission:read_any` required.","operationId":"BucketPermission-get_permission_for_bucket","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"bucket_name","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":63,"description":"Name of bucket","examples":["test-bucket"],"title":"Bucket Name"},"description":"Name of bucket"},{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"UID of a user","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Uid"},"description":"UID of a user"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketPermissionOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["BucketPermission"],"summary":"Update a bucket permission","description":"Update a permission for a bucket and user.\n\nPermission `bucket_permission:update` required.","operationId":"BucketPermission-update_permission","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"bucket_name","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":63,"description":"Name of bucket","examples":["test-bucket"],"title":"Bucket Name"},"description":"Name of bucket"},{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"UID of a user","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Uid"},"description":"UID of a user"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketPermissionParameters","description":"Permission to create"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketPermissionOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["BucketPermission"],"summary":"Delete a bucket permission","description":"Delete the bucket permissions for the specific combination of bucket and user.\n\nPermission `bucket_permission:delete` required if current user is the target or owner of the bucket permission,\notherwise `bucket_permission:delete_any` required.","operationId":"BucketPermission-delete_permission","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"bucket_name","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":63,"description":"Name of bucket","examples":["test-bucket"],"title":"Bucket Name"},"description":"Name of bucket"},{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"UID of a user","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Uid"},"description":"UID of a user"}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflows":{"post":{"tags":["Workflow"],"summary":"Create a new workflow","description":"Create a new workflow.\n\nFor private Gitlab repositories, a Project Access Token with the role Reporter and scope `read_api` is needed.\n\nFor private GitHub repositories, a Personal Access Token (classic) with scope `repo` is needed.\n\nPermission `workflow:create` required.","operationId":"Workflow-create_workflow","security":[{"Session Token":[]},{"API Token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Workflow"],"summary":"List workflows","description":"List all workflows.\n\nPermission `workflow:list` required.","operationId":"Workflow-list_workflows","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"name_substring","in":"query","required":false,"schema":{"type":"string","minLength":3,"maxLength":30,"description":"Filter workflows by a substring in their name.","title":"Name Substring"},"description":"Filter workflows by a substring in their name."},{"name":"version_status","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowVersionStatus"},"description":"Which versions of the workflow to include in the response. Permission `workflow:list_filter` required, unless `developer_id` is provided and current user is developer, then only permission `workflow:list` required. Default `PUBLISHED` and `DEPRECATED`.","title":"Version Status"},"description":"Which versions of the workflow to include in the response. Permission `workflow:list_filter` required, unless `developer_id` is provided and current user is developer, then only permission `workflow:list` required. Default `PUBLISHED` and `DEPRECATED`."},{"name":"developer_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","description":"Filter for workflow by developer. If current user is the developer, permission `workflow:list` required, otherwise `workflow:list_filter`.","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Developer Id"},"description":"Filter for workflow by developer. If current user is the developer, permission `workflow:list` required, otherwise `workflow:list_filter`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowOut"},"title":"Response Workflow-List Workflows"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflows/ownership_transfer_request":{"get":{"tags":["Workflow"],"summary":"List workflow OTRs","description":"Get the ownership transfer requests for workflows.\n\nPermission `workflow:list` required if `current_owner_id` or `new_owner_id` is the current users id,\notherwise `workflow:list_all`","operationId":"Workflow-list_workflow_otrs","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"current_owner_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","description":"UID of user who is the current owner.","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Current Owner Id"},"description":"UID of user who is the current owner."},{"name":"new_owner_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","description":"UID of user who will be the new owner.","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"New Owner Id"},"description":"UID of user who will be the new owner."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OwnershipTransferRequestOut"},"title":"Response Workflow-List Workflow Otrs"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflows/developer_statistics":{"get":{"tags":["Workflow"],"summary":"Get anonymized workflow execution","description":"Get the workflow executions with meta information and anonymized user IDs.\n\nPermission `workflow:read` required if the `developer_id` is the same as the uid of the current user,\nother `workflow:read_any`.","operationId":"Workflow-get_developer_workflow_statistics","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"developer_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","description":"Filter by the developer of the workflows","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Developer Id"},"description":"Filter by the developer of the workflows"},{"name":"workflow_id","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","format":"uuid"},"description":"Filter by workflow IDs","title":"Workflow Id"},"description":"Filter by workflow IDs"},{"name":"start","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Filter by workflow executions after this date","title":"Start"},"description":"Filter by workflow executions after this date"},{"name":"end","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Filter by workflow executions before this date","title":"End"},"description":"Filter by workflow executions before this date"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AnonymizedWorkflowExecution"},"title":"Response Workflow-Get Developer Workflow Statistics"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflows/{wid}":{"get":{"tags":["Workflow"],"summary":"Get a workflow","description":"Get a specific workflow.\n\nPermission `workflow:read` required.","operationId":"Workflow-get_workflow","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"},{"name":"version_status","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowVersionStatus"},"description":"Which versions of the workflow to include in the response. Permission `workflow:read_any` required if you are not the developer of this workflow. Default `PUBLISHED` and `DEPRECATED`","title":"Version Status"},"description":"Which versions of the workflow to include in the response. Permission `workflow:read_any` required if you are not the developer of this workflow. Default `PUBLISHED` and `DEPRECATED`"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Workflow"],"summary":"Delete a workflow","description":"Delete a workflow.\n\nPermission `workflow:delete` required if the `developer_id` is the same as the uid of the current user,\nother `workflow:delete_any`.","operationId":"Workflow-delete_workflow","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflows/{wid}/ownership_transfer_request":{"get":{"tags":["Workflow"],"summary":"Get a workflow OTR","description":"Get a specific workflow ownership transfer request.\n\nPermission `workflow:read` required if current user is the current or new owner of the workflow,\notherwise `workflow:read_any` required.","operationId":"Workflow-get_workflow_otr","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnershipTransferRequestOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Workflow"],"summary":"Create a workflow OTR","description":"Create a ownership transfer request for a specific workflow.\n\nPermission `workflow:update` required if the current user is the current owner of the workflow,\notherwise `workflow:update_any` required.","operationId":"Workflow-create_workflow_otr","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnershipTransferRequestIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnershipTransferRequestOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Workflow"],"summary":"Accept a workflow OTR","description":"Accept an ownership transfer request for a specific workflow.\n\nPermission `workflow:update` required if the current user is the new owner of the workflow,\notherwise `workflow:update_any` required.","operationId":"Workflow-accept_workflow_otr","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Workflow"],"summary":"Delete a workflow OTR","description":"Delete/Reject a workflow ownership transfer request.\n\nPermission `workflow:update` required if current user is the current or new owner of the workflow,\notherwise `workflow:update_any` required.","operationId":"Workflow-delete_workflow_otr","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflows/{wid}/statistics":{"get":{"tags":["Workflow"],"summary":"Get statistics for a workflow","description":"Get the number of started workflow per day.\n\nPermission `workflow:read` required.","operationId":"Workflow-get_workflow_statistics","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowStatistic"},"title":"Response Workflow-Get Workflow Statistics"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflows/{wid}/update":{"post":{"tags":["Workflow"],"summary":"Update a workflow","description":"Create a new workflow version.\n\nPermission `workflow:update` required.","operationId":"Workflow-update_workflow","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowUpdate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowVersion"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflows/{wid}/versions":{"get":{"tags":["Workflow Version"],"summary":"Get all versions of a workflow","description":"List all versions of a Workflow.\n\nPermission `workflow:list` required.","operationId":"Workflow Version-list_workflow_version","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"},{"name":"version_status","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowVersionStatus"},"description":"Which versions of the workflow to include in the response. Permission `workflow:list_filter` required if you are not the developer of this workflow. Default `PUBLISHED` and `DEPRECATED`","title":"Version Status"},"description":"Which versions of the workflow to include in the response. Permission `workflow:list_filter` required if you are not the developer of this workflow. Default `PUBLISHED` and `DEPRECATED`"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowVersion"},"title":"Response Workflow Version-List Workflow Version"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflows/{wid}/versions/{git_commit_hash}":{"get":{"tags":["Workflow Version"],"summary":"Get a workflow version","description":"Get a specific version of a workflow.\n\nPermission `workflow:read` required if the version is public or you are the developer of the workflow,\notherwise `workflow:read_any`","operationId":"Workflow Version-get_workflow_version","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"git_commit_hash","in":"path","required":true,"schema":{"type":"string","pattern":"^([0-9a-f]{40}|latest)$","description":"Git commit `git_commit_hash` of specific version or `latest`.","examples":["latest","ba8bcd9294c2c96aedefa1763a84a18077c50c0f"],"title":"Git Commit Hash"},"description":"Git commit `git_commit_hash` of specific version or `latest`."},{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowVersion"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflows/{wid}/versions/{git_commit_hash}/status":{"patch":{"tags":["Workflow Version"],"summary":"Update status of workflow version","description":"Update the status of a workflow version.\n\nPermission `workflow:update_status`","operationId":"Workflow Version-update_workflow_version_status","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"},{"name":"git_commit_hash","in":"path","required":true,"schema":{"type":"string","pattern":"^([0-9a-f]{40}|latest)$","description":"Git commit git_commit_hash of specific version.","examples":["ba8bcd9294c2c96aedefa1763a84a18077c50c0f"],"title":"Git Commit Hash"},"description":"Git commit git_commit_hash of specific version."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowVersionStatusSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowVersion"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflows/{wid}/versions/{git_commit_hash}/deprecate":{"patch":{"tags":["Workflow Version"],"summary":"Deprecate a workflow version","description":"Deprecate a workflow version.\n\nPermission `workflow:update` required if you are the developer of the workflow,\notherwise `workflow:update_status`","operationId":"Workflow Version-deprecate_workflow_version","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"},{"name":"git_commit_hash","in":"path","required":true,"schema":{"type":"string","pattern":"^([0-9a-f]{40}|latest)$","description":"Git commit git_commit_hash of specific version.","examples":["ba8bcd9294c2c96aedefa1763a84a18077c50c0f"],"title":"Git Commit Hash"},"description":"Git commit git_commit_hash of specific version."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowVersion"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflows/{wid}/versions/{git_commit_hash}/parameter-extension":{"patch":{"tags":["Workflow Version"],"summary":"Update parameter extension of workflow version","description":"Update the parameter extension of a workflow version.\n\nPermission `workflow:update` required.","operationId":"Workflow Version-update_workflow_version_parameter_extension","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"},{"name":"git_commit_hash","in":"path","required":true,"schema":{"type":"string","pattern":"^([0-9a-f]{40}|latest)$","description":"Git commit git_commit_hash of specific version.","examples":["ba8bcd9294c2c96aedefa1763a84a18077c50c0f"],"title":"Git Commit Hash"},"description":"Git commit git_commit_hash of specific version."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParameterExtension"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowVersion"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Workflow Version"],"summary":"Delete parameter extension of workflow version","description":"Delete the parameter extension of a workflow version.\n\nPermission `workflow:update` required.","operationId":"Workflow Version-delete_workflow_version_parameter_extension","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"},{"name":"git_commit_hash","in":"path","required":true,"schema":{"type":"string","pattern":"^([0-9a-f]{40}|latest)$","description":"Git commit git_commit_hash of specific version.","examples":["ba8bcd9294c2c96aedefa1763a84a18077c50c0f"],"title":"Git Commit Hash"},"description":"Git commit git_commit_hash of specific version."}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflows/{wid}/versions/{git_commit_hash}/documentation":{"get":{"tags":["Workflow Version"],"summary":"Fetch documentation for a workflow version","description":"Get the documentation for a specific workflow version.\nStreams the response directly from the right git repository.\n\nPermission `workflow:read` required.","operationId":"Workflow Version-download_workflow_documentation","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"},{"name":"git_commit_hash","in":"path","required":true,"schema":{"type":"string","pattern":"^([0-9a-f]{40}|latest)$","description":"Git commit git_commit_hash of specific version.","examples":["ba8bcd9294c2c96aedefa1763a84a18077c50c0f"],"title":"Git Commit Hash"},"description":"Git commit git_commit_hash of specific version."},{"name":"document","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DocumentationEnum","description":"Specify which type of documentation the client wants to fetch","default":"usage.md"},"description":"Specify which type of documentation the client wants to fetch"},{"name":"mode_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","description":"Workflow Mode","title":"Mode Id"},"description":"Workflow Mode"}],"responses":{"200":{"description":"Successful Response"},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflows/{wid}/versions/{git_commit_hash}/icon":{"post":{"tags":["Workflow Version"],"summary":"Upload icon for workflow version","description":"Upload an icon for the workflow version and returns the new icon URL.\n\nPermission `workflow:update` required.","operationId":"Workflow Version-upload_workflow_version_icon","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"},{"name":"git_commit_hash","in":"path","required":true,"schema":{"type":"string","pattern":"^([0-9a-f]{40}|latest)$","description":"Git commit git_commit_hash of specific version.","examples":["ba8bcd9294c2c96aedefa1763a84a18077c50c0f"],"title":"Git Commit Hash"},"description":"Git commit git_commit_hash of specific version."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_Workflow_Version-upload_workflow_version_icon"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IconUpdateOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Workflow Version"],"summary":"Delete icon of workflow version","description":"Delete the icon of the workflow version.\n\nPermission `workflow:update` required.","operationId":"Workflow Version-delete_workflow_version_icon","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"},{"name":"git_commit_hash","in":"path","required":true,"schema":{"type":"string","pattern":"^([0-9a-f]{40}|latest)$","description":"Git commit git_commit_hash of specific version.","examples":["ba8bcd9294c2c96aedefa1763a84a18077c50c0f"],"title":"Git Commit Hash"},"description":"Git commit git_commit_hash of specific version."}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow_executions":{"post":{"tags":["Workflow Execution"],"summary":"Start a new workflow execution","description":"Start a new workflow execution. Workflow versions wit status `DEPRECATED` or `DENIED` can't be started.\n\nPermission `workflow_execution:create` required if workflow versions status is `PUBLISHED`,\notherwise `workflow_execution:create_any` required.","operationId":"Workflow Execution-start_workflow","security":[{"Session Token":[]},{"API Token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowExecutionIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowExecutionOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Workflow Execution"],"summary":"Get all workflow executions","description":"Get all workflow executions.\n\nThis endpoint enforces keyset pagination. To iterate over all workflow executions, follow the link provided in the\n`Link` header.\nA missing `Link` header indicates that you iterated over all workflow executions with the current filters.\n\nPermission `workflow_execution:list` required, if `executor_id` is the same as the current user,\notherwise `workflow_execution:list_all` required.","operationId":"Workflow Execution-list_workflow_executions","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"executor_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","description":"Filter for workflow executions by a user. If none, Permission `workflow_execution:read_any` required.","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Executor Id"},"description":"Filter for workflow executions by a user. If none, Permission `workflow_execution:read_any` required."},{"name":"execution_status","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowExecutionStatus"},"description":"Filter for status of workflow execution","title":"Execution Status"},"description":"Filter for status of workflow execution"},{"name":"workflow_version_id","in":"query","required":false,"schema":{"type":"string","minLength":40,"maxLength":40,"description":"Filter for workflow version","examples":["ba8bcd9294c2c96aedefa1763a84a18077c50c0f"],"title":"Workflow Version Id"},"description":"Filter for workflow version"},{"name":"workflow_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","description":"Filter for workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Workflow Id"},"description":"Filter for workflow"},{"name":"start_after","in":"query","required":false,"schema":{"type":"integer","ge":0,"description":"Filter for workflow executions that started after this UNIX timestamp","title":"Start After"},"description":"Filter for workflow executions that started after this UNIX timestamp"},{"name":"start_before","in":"query","required":false,"schema":{"type":"integer","ge":0,"description":"Filter for workflow executions that started before this UNIX timestamp","title":"Start Before"},"description":"Filter for workflow executions that started before this UNIX timestamp"},{"name":"id_after","in":"query","required":false,"schema":{"type":"string","format":"uuid","description":"Id of the item to start the query from. DO NOT SET MANUALLY.","title":"Id After"},"description":"Id of the item to start the query from. DO NOT SET MANUALLY."},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":5,"description":"Number of items to list per page","default":20,"title":"Per Page"},"description":"Number of items to list per page"},{"name":"sort","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","description":"Sort order of items with creation time","default":"desc","title":"Sort"},"description":"Sort order of items with creation time"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowExecutionOut"},"title":"Response Workflow Execution-List Workflow Executions"}}},"headers":{"Link":{"description":"Link for the next pagination page if there is any","schema":{"type":"string","example":"<https://clowm.de/api/workflow_executions?per_page=50&sort=asc&id_after=a16c50f8-c1fb-4b3c-afe3-82f1575bc2f4>; rel=\"next\""}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow_executions/arbitrary":{"post":{"tags":["Workflow Execution"],"summary":"Start a workflow execution with arbitrary git repository","description":"Start a new workflow execution from an arbitrary git repository.\n\nFor private Gitlab repositories, a Project Access Token with the role Reporter and scope `read_api` is needed.\n\nFor private GitHub repositories, a Personal Access Token (classic) with scope `repo` is needed.\n\nPermission `workflow:create` required.","operationId":"Workflow Execution-start_arbitrary_workflow","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevWorkflowExecutionIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowExecutionOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDetail"},"example":{"detail":"Malformed JWT Token"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDetail"},"example":{"detail":"Not authenticated"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDetail"},"example":{"detail":"Action Forbidden. Permission user:read is missing"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDetail"},"example":{"detail":"Entity not found."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Session Token":[]},{"API Token":[]}]}},"/workflow_executions/{eid}":{"get":{"tags":["Workflow Execution"],"summary":"Get a workflow execution","description":"Get a specific workflow execution.\n\nPermission `workflow_execution:read` required if the current user started the workflow execution,\notherwise `workflow_execution:read_any` required.","operationId":"Workflow Execution-get_workflow_execution","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"eid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow execution.","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Eid"},"description":"ID of a workflow execution."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowExecutionOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Workflow Execution"],"summary":"Delete a workflow execution","description":"Delete a specific workflow execution.\n\nPermission `workflow_execution:delete` required if the current user started the workflow execution,\notherwise `workflow_execution:delete_any` required.","operationId":"Workflow Execution-delete_workflow_execution","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"eid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow execution.","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Eid"},"description":"ID of a workflow execution."}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow_executions/{eid}/params":{"get":{"tags":["Workflow Execution"],"summary":"Get the parameters of a workflow execution","description":"Get the parameters of a specific workflow execution.\n\nPermission `workflow_execution:read` required if the current user started the workflow execution,\notherwise `workflow_execution:read_any` required.","operationId":"Workflow Execution-get_workflow_execution_params","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"eid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow execution.","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Eid"},"description":"ID of a workflow execution."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Workflow Execution-Get Workflow Execution Params"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow_executions/{eid}/cancel":{"post":{"tags":["Workflow Execution"],"summary":"Cancel a workflow execution","description":"Cancel a running workflow execution.\n\nPermission `workflow_execution:cancel` required if the current user started the workflow execution,\notherwise `workflow_execution:cancel_any` required.","operationId":"Workflow Execution-cancel_workflow_execution","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"eid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow execution.","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Eid"},"description":"ID of a workflow execution."}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflows/{wid}/credentials":{"get":{"tags":["Workflow Credentials"],"summary":"Get the credentials of a workflow","description":"Get the credentials for the repository of a workflow. Only the developer of a workflow can do this.\n\nPermission `workflow:update` required.","operationId":"Workflow Credentials-get_workflow_credentials","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowCredentialsOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Workflow Credentials"],"summary":"Update the credentials of a workflow","description":"Update the credentials for the repository of a workflow.\n\nPermission `workflow:update` required.","operationId":"Workflow Credentials-update_workflow_credentials","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowCredentialsIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Workflow Credentials"],"summary":"Delete the credentials of a workflow","description":"Delete the credentials for the repository of a workflow.\n\nPermission `workflow:delete` required if the developer of the workflow is the same as the current user,\nother `workflow:delete_any`.","operationId":"Workflow Credentials-delete_workflow_credentials","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow","examples":["0cc78936-381b-4bdd-999d-736c40591078"],"title":"Wid"},"description":"ID of a workflow"}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow_modes/{mode_id}":{"get":{"tags":["Workflow Mode"],"summary":"Get workflow mode","description":"Get a workflow mode\n\nPermission `workflow:read` required","operationId":"Workflow Mode-get_workflow_mode","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"mode_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"ID of a workflow mode","title":"Mode Id"},"description":"ID of a workflow mode"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowModeOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resources":{"post":{"tags":["Resource"],"summary":"Request a new resource","description":"Request a new resources.\n\nPermission `resource:create` required.","operationId":"Resource-create_resource","security":[{"Session Token":[]},{"API Token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Resource"],"summary":"List resources","description":"List all resources.\n\nPermission `resource:list` required.","operationId":"Resource-list_resources","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"maintainer_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","description":"Filter for resource by maintainer. If current user is the same as maintainer ID, permission `resource:list` required, otherwise `resource:list_filter`.","title":"Maintainer Id"},"description":"Filter for resource by maintainer. If current user is the same as maintainer ID, permission `resource:list` required, otherwise `resource:list_filter`."},{"name":"version_status","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/ResourceVersionStatus"},"description":"Which versions of the resource to include in the response. Permission `resource:list_filter` required if None or querying for non-public resources, otherwise only permission `resource:list` required.","title":"Version Status"},"description":"Which versions of the resource to include in the response. Permission `resource:list_filter` required if None or querying for non-public resources, otherwise only permission `resource:list` required."},{"name":"name_substring","in":"query","required":false,"schema":{"type":"string","maxLength":32,"description":"Filter resources by a substring in their name.","title":"Name Substring"},"description":"Filter resources by a substring in their name."},{"name":"public","in":"query","required":false,"schema":{"type":"boolean","description":"Filter resources to by the public flag","title":"Public"},"description":"Filter resources to by the public flag"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ResourceOut"},"title":"Response Resource-List Resources"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resources/sync_requests":{"get":{"tags":["Resource"],"summary":"List resource sync requests","description":"List all resource sync requests.\n\nPermission `resource:update_any` required.","operationId":"Resource-list_sync_requests","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/UserSynchronizationRequestOut"},"type":"array","title":"Response Resource-List Sync Requests"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDetail"},"example":{"detail":"Malformed JWT Token"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDetail"},"example":{"detail":"Not authenticated"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDetail"},"example":{"detail":"Action Forbidden. Permission user:read is missing"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDetail"},"example":{"detail":"Entity not found."}}}}},"security":[{"Session Token":[]},{"API Token":[]}]}},"/resources/ownership_transfer_request":{"get":{"tags":["Resource"],"summary":"List resource OTRs","description":"Get the ownership transfer requests for resources.\n\nPermission `resource:list` required if `current_owner_id` or `new_owner_id` is the current users id,\notherwise `resource:list_all`","operationId":"Resource-list_resource_otrs","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"current_owner_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","description":"UID of user who is the current owner.","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"Current Owner Id"},"description":"UID of user who is the current owner."},{"name":"new_owner_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","description":"UID of user who will be the new owner.","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"],"title":"New Owner Id"},"description":"UID of user who will be the new owner."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OwnershipTransferRequestOut"},"title":"Response Resource-List Resource Otrs"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resources/{rid}":{"get":{"tags":["Resource"],"summary":"Get a resource","description":"Get a specific resource.\n\nPermission `resource:read` required.","operationId":"Resource-get_resource","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}},{"name":"version_status","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/ResourceVersionStatus"},"description":"Which versions of the resource to include in the response. Permission `resource:read_any` required if None or querying for non-public resources, otherwise only permission `resource:read` required.","title":"Version Status"},"description":"Which versions of the resource to include in the response. Permission `resource:read_any` required if None or querying for non-public resources, otherwise only permission `resource:read` required."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Resource"],"summary":"Delete a resource","description":"Delete a resources.\n\nPermission `resource:delete` required.","operationId":"Resource-delete_resource","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resources/{rid}/ownership_transfer_request":{"get":{"tags":["Resource"],"summary":"Get a resource OTR","description":"Get a specific resource ownership transfer request.\n\nPermission `resource:read` required if the current user is the current or new owner of the resource,\notherwise `resource:read_any` required.","operationId":"Resource-get_resource_otr","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnershipTransferRequestOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Resource"],"summary":"Create a resource OTR","description":"Create a ownership transfer request for a specific resource.\n\nPermission `resource:update` required if the current user is the current owner of the resource,\notherwise `resource:update_any` required.","operationId":"Resource-create_resource_otr","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnershipTransferRequestIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnershipTransferRequestOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Resource"],"summary":"Accept a resource OTR","description":"Accept an ownership transfer request for a specific resource.\n\nPermission `resource:update` required if the current user is the new owner of the resource,\notherwise `resource:update_any` required.","operationId":"Resource-accept_resource_otr","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Resource"],"summary":"Delete a resource OTR","description":"Delete/Reject a resource ownership transfer request.\n\nPermission `resource:update` required if the current user is the current or new owner of the resource,\notherwise `resource:update_any` required.","operationId":"Resource-delete_resource_otr","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resources/{rid}/versions":{"get":{"tags":["ResourceVersion"],"summary":"List versions of a resource","description":"List all the resource version for a specific resource.\n\nPermission 'resource:read' required.","operationId":"ResourceVersion-list_resource_versions","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}},{"name":"version_status","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/ResourceVersionStatus"},"description":"Which versions of the resource to include in the response. Permission `resource:read_any` required if None or querying for non-public resources, otherwise only permission `resource:read` required.","title":"Version Status"},"description":"Which versions of the resource to include in the response. Permission `resource:read_any` required if None or querying for non-public resources, otherwise only permission `resource:read` required."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ResourceVersionOut"},"title":"Response Resourceversion-List Resource Versions"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["ResourceVersion"],"summary":"Request new version of a resource","description":"Request a new resource version.\n\nPermission `resource:update` required if the current user is the maintainer, `resource:update_any` otherwise.","operationId":"ResourceVersion-request_resource_version","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceVersionIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceVersionOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resources/{rid}/versions/{rvid}":{"get":{"tags":["ResourceVersion"],"summary":"Get version of a resource","description":"Get a specific resource version for a specific resource.\n\nPermission `resource:read` required. If the status of the resource version is not `LATEST` or `SYNCHRONIZED` and\nthe current user is not the maintainer, then the permission `resource:read_any` is required.","operationId":"ResourceVersion-get_resource_version","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}},{"name":"rvid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rvid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceVersionOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resources/{rid}/versions/{rvid}/tree":{"get":{"tags":["ResourceVersion"],"summary":"Download folder structure of resource","description":"Get the folder structure of the resources. Only available if the resource was previously downloaded to the cluster.\n\nPermission `resource:read` required.","operationId":"ResourceVersion-resource_file_tree","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rvid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rvid"}},{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FileTree"},"title":"Response Resourceversion-Resource File Tree"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resources/{rid}/versions/{rvid}/request_review":{"put":{"tags":["ResourceVersion"],"summary":"Request resource version review","description":"Request the review of a resource version.\n\nPermission `resource:update` required.","operationId":"ResourceVersion-request_resource_version_review","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}},{"name":"rvid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rvid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceVersionOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resources/{rid}/versions/{rvid}/request_sync":{"put":{"tags":["ResourceVersion"],"summary":"Request resource version synchronization","description":"Request the synchronization of a resource version to the cluster.\n\nPermission `resource:request_sync` required.","operationId":"ResourceVersion-request_resource_version_sync","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}},{"name":"rvid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rvid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSynchronizationRequestIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceVersionOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resources/{rid}/versions/{rvid}/review":{"put":{"tags":["ResourceVersion"],"summary":"Review resource version","description":"Review answer the resource version.\n\nPermission `resource:update_status` required.","operationId":"ResourceVersion-resource_version_review","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}},{"name":"rvid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rvid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRequestAnswer"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceVersionOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resources/{rid}/versions/{rvid}/sync":{"put":{"tags":["ResourceVersion"],"summary":"Synchronize resource version with cluster","description":"Synchronize the resource version to the cluster.\n\nPermission `resource:update_any` required.","operationId":"ResourceVersion-resource_version_sync","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}},{"name":"rvid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rvid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRequestAnswer"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceVersionOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resources/{rid}/versions/{rvid}/latest":{"put":{"tags":["ResourceVersion"],"summary":"Set resource version to latest","description":"Set the resource version as the latest version.\n\nPermission `resource:update_any` required.","operationId":"ResourceVersion-resource_version_latest","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}},{"name":"rvid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rvid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceVersionOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resources/{rid}/versions/{rvid}/cluster":{"delete":{"tags":["ResourceVersion"],"summary":"Delete resource version on cluster","description":"Delete the resource version on the cluster.\n\nPermission `resource:delete_any` required.","operationId":"ResourceVersion-delete_resource_version_cluster","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}},{"name":"rvid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rvid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceVersionOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resources/{rid}/versions/{rvid}/s3":{"delete":{"tags":["ResourceVersion"],"summary":"Delete resource version in S3","description":"Delete the resource version in the S3 bucket.\n\nPermission `resource:delete_any` required.","operationId":"ResourceVersion-delete_resource_version_s3","security":[{"Session Token":[]},{"API Token":[]}],"parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}},{"name":"rvid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rvid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceVersionOut"}}}},"400":{"description":"Error decoding JWT Token","content":{"application/json":{"example":{"detail":"Malformed JWT Token"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"401":{"description":"Not Authenticated","content":{"application/json":{"example":{"detail":"Not authenticated"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"403":{"description":"Not Authorized","content":{"application/json":{"example":{"detail":"Action Forbidden. Permission user:read is missing"},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"404":{"description":"Entity not Found","content":{"application/json":{"example":{"detail":"Entity not found."},"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AnonymizedWorkflowExecution":{"properties":{"workflow_execution_id":{"type":"string","title":"Workflow Execution Id","description":"ID of the workflow execution","examples":["591b6a6e-a1f0-420d-8a20-a7a60704f695"]},"pseudo_uid":{"type":"string","title":"Pseudo Uid","description":"Anonymized user ID of the user who ran the workflow execution","examples":["7ed4249857b656e96f456449796e461e6001d3fb2481a44701f70ca437bd53a2"]},"workflow_mode_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Mode Id","description":"ID of the workflow mode this workflow execution ran in","examples":["2a23a083-b6b9-4681-9ec4-ff4ffbe85d3c"]},"workflow_version_id":{"type":"string","title":"Workflow Version Id","description":"Hash of the git commit","examples":["ba8bcd9294c2c96aedefa1763a84a18077c50c0f"]},"started_at":{"type":"string","format":"date","title":"Started At","description":"Day of the workflow execution","examples":["2023-01-01"]},"workflow_id":{"type":"string","title":"Workflow Id","description":"ID of the workflow","examples":["20128c04-e834-40a8-9878-68939ae46423"]},"developer_id":{"type":"string","title":"Developer Id","description":"ID of developer of the workflow","examples":["28c5353b8bb34984a8bd4169ba94c606"]},"status":{"$ref":"#/components/schemas/WorkflowExecutionStatus","description":"End status of the workflow execution","examples":["SUCCESS"]}},"type":"object","required":["workflow_execution_id","pseudo_uid","workflow_version_id","started_at","workflow_id","developer_id","status"],"title":"AnonymizedWorkflowExecution"},"ApiTokenIn":{"properties":{"name":{"type":"string","maxLength":63,"minLength":3,"pattern":"^[a-z\\d-]+$","title":"Name","description":"Short name for the API token","examples":["api-token-42"]},"expires_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires At","description":"Unix timestamp when the token should expire","examples":[1719784800]},"scopes":{"items":{"$ref":"#/components/schemas/ScopeEnum"},"type":"array","minItems":1,"title":"Scopes","description":"List of scopes this Api token has","examples":[["read"]]}},"type":"object","required":["name","scopes"],"title":"ApiTokenIn"},"ApiTokenOut":{"properties":{"name":{"type":"string","maxLength":63,"minLength":3,"pattern":"^[a-z\\d-]+$","title":"Name","description":"Short name for the API token","examples":["api-token-42"]},"expires_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires At","description":"Unix timestamp when the token should expire","examples":[1719784800]},"scopes":{"items":{"$ref":"#/components/schemas/ScopeEnum"},"type":"array","minItems":1,"title":"Scopes","description":"List of scopes this Api token has","examples":[["read"]]},"token_id":{"type":"string","title":"Token Id","description":"The ID of the token","examples":["b4c861a7-7f52-4332-a001-78e0500dabbc"]},"uid":{"type":"string","title":"Uid","description":"The ID of the owner","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"]},"created_at":{"type":"integer","title":"Created At","description":"The UNIX timestamp when this token was created","examples":["1717192800"]},"last_used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Used","description":"The UNIX timestamp when this token was used the last time","examples":["1717193800"]}},"type":"object","required":["name","scopes","token_id","uid","created_at"],"title":"ApiTokenOut"},"ApiTokenPrivateOut":{"properties":{"name":{"type":"string","maxLength":63,"minLength":3,"pattern":"^[a-z\\d-]+$","title":"Name","description":"Short name for the API token","examples":["api-token-42"]},"expires_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires At","description":"Unix timestamp when the token should expire","examples":[1719784800]},"scopes":{"items":{"$ref":"#/components/schemas/ScopeEnum"},"type":"array","minItems":1,"title":"Scopes","description":"List of scopes this Api token has","examples":[["read"]]},"token_id":{"type":"string","title":"Token Id","description":"The ID of the token","examples":["b4c861a7-7f52-4332-a001-78e0500dabbc"]},"uid":{"type":"string","title":"Uid","description":"The ID of the owner","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"]},"created_at":{"type":"integer","title":"Created At","description":"The UNIX timestamp when this token was created","examples":["1717192800"]},"last_used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Used","description":"The UNIX timestamp when this token was used the last time","examples":["1717193800"]},"token":{"type":"string","title":"Token","description":"The actual token used for authentication","examples":["J21NRKUYgyVUgvJ3cIdllS-MMa9ny1UDKFF18aetDvo"]}},"type":"object","required":["name","scopes","token_id","uid","created_at","token"],"title":"ApiTokenPrivateOut"},"Body_Bucket-update_bucket_public_state":{"properties":{"public":{"type":"boolean","title":"Public","description":"New State"}},"type":"object","required":["public"],"title":"Body_Bucket-update_bucket_public_state"},"Body_Workflow_Version-upload_workflow_version_icon":{"properties":{"icon":{"type":"string","format":"binary","title":"Icon","description":"Icon for the Workflow."}},"type":"object","required":["icon"],"title":"Body_Workflow Version-upload_workflow_version_icon"},"BucketIn":{"properties":{"name":{"type":"string","maxLength":63,"minLength":3,"pattern":"^([a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)*[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$","title":"Name","description":"Name of the bucket","examples":["test-bucket"]},"description":{"type":"string","maxLength":65536,"minLength":16,"title":"Description","description":"Description of the bucket","examples":["This is a sample description of a bucket"]}},"type":"object","required":["name","description"],"title":"BucketIn","description":"Schema for creating a new bucket."},"BucketOut":{"properties":{"size_limit":{"anyOf":[{"type":"integer","exclusiveMaximum":4294967296.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Size Limit","description":"Size limit of the bucket in KiB","examples":[10240]},"object_limit":{"anyOf":[{"type":"integer","exclusiveMaximum":4294967296.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Object Limit","description":"Number of objects limit of the bucket","examples":[10000]},"name":{"type":"string","maxLength":63,"minLength":3,"pattern":"^([a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)*[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$","title":"Name","description":"Name of the bucket","examples":["test-bucket"]},"description":{"type":"string","maxLength":65536,"minLength":16,"title":"Description","description":"Description of the bucket","examples":["This is a sample description of a bucket"]},"created_at":{"type":"integer","title":"Created At","description":"Time when the bucket was created as UNIX timestamp","examples":[1640991600]},"owner_id":{"type":"string","title":"Owner Id","description":"UID of the owner","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"]},"public":{"type":"boolean","title":"Public","description":"Flag if the bucket is anonymously readable"}},"type":"object","required":["name","description","created_at","owner_id","public"],"title":"BucketOut","description":"Schema for answering a request with a bucket."},"BucketPermissionIn":{"properties":{"from_timestamp":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"From Timestamp","description":"Start date of permission as UNIX timestamp","examples":[1640991600]},"to_timestamp":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"To Timestamp","description":"End date of permission as UNIX timestamp","examples":[1640991600]},"file_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Prefix","description":"Prefix of subfolder","examples":["pseudo/sub/folder/"]},"permission":{"anyOf":[{"$ref":"#/components/schemas/Permission"},{"type":"string","enum":["READ","WRITE","READWRITE"]}],"title":"Permission","description":"Permission","default":"READ","examples":["READ"]},"uid":{"type":"string","format":"uuid","title":"Uid","description":"UID of the grantee","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"]},"bucket_name":{"type":"string","title":"Bucket Name","description":"Name of Bucket","examples":["test-bucket"]}},"type":"object","required":["uid","bucket_name"],"title":"BucketPermissionIn"},"BucketPermissionOut":{"properties":{"from_timestamp":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"From Timestamp","description":"Start date of permission as UNIX timestamp","examples":[1640991600]},"to_timestamp":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"To Timestamp","description":"End date of permission as UNIX timestamp","examples":[1640991600]},"file_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Prefix","description":"Prefix of subfolder","examples":["pseudo/sub/folder/"]},"permission":{"anyOf":[{"$ref":"#/components/schemas/Permission"},{"type":"string","enum":["READ","WRITE","READWRITE"]}],"title":"Permission","description":"Permission","default":"READ","examples":["READ"]},"uid":{"type":"string","title":"Uid","description":"UID of the grantee","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"]},"bucket_name":{"type":"string","title":"Bucket Name","description":"Name of Bucket","examples":["test-bucket"]}},"type":"object","required":["uid","bucket_name"],"title":"BucketPermissionOut","description":"Schema for the bucket permissions."},"BucketPermissionParameters":{"properties":{"from_timestamp":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"From Timestamp","description":"Start date of permission as UNIX timestamp","examples":[1640991600]},"to_timestamp":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"To Timestamp","description":"End date of permission as UNIX timestamp","examples":[1640991600]},"file_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Prefix","description":"Prefix of subfolder","examples":["pseudo/sub/folder/"]},"permission":{"anyOf":[{"$ref":"#/components/schemas/Permission"},{"type":"string","enum":["READ","WRITE","READWRITE"]}],"title":"Permission","description":"Permission","default":"READ","examples":["READ"]}},"type":"object","title":"BucketPermissionParameters","description":"Schema for the parameters of a bucket permission."},"BucketSizeLimits":{"properties":{"size_limit":{"anyOf":[{"type":"integer","exclusiveMaximum":4294967296.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Size Limit","description":"Size limit of the bucket in KiB","examples":[10240]},"object_limit":{"anyOf":[{"type":"integer","exclusiveMaximum":4294967296.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Object Limit","description":"Number of objects limit of the bucket","examples":[10000]}},"type":"object","title":"BucketSizeLimits","description":"Schema to represent bucket limits."},"BucketType":{"type":"string","enum":["OWN","ALL","PERMISSION"],"title":"BucketType","description":"Enumeration for the type of buckets to fetch from the DB\n\nOWN: Only fetch buckets that the user owns\nPERMISSION: Only fetch foreign buckets that the user has access to\nALL: Fetch all buckets that the user has access to"},"DevWorkflowExecutionIn":{"properties":{"parameters":{"type":"object","title":"Parameters","description":"Parameters for this workflow"},"logs_s3_path":{"anyOf":[{"type":"string","maxLength":1024,"minLength":3,"pattern":"^s3://(\\w){1}(\\w-\\./)*(\\w){1}"},{"type":"null"}],"title":"Logs S3 Path","description":"S3 Path where to save logs and reports. If None, nothing will be uploaded.","examples":["s3://example-bucket/logs"]},"provenance_s3_path":{"anyOf":[{"type":"string","maxLength":1024,"minLength":3,"pattern":"^s3://(\\w){1}(\\w-\\./)*(\\w){1}"},{"type":"null"}],"title":"Provenance S3 Path","description":"S3 Path where to save provenance information. If None, nothing will be uploaded.","examples":["s3://example-bucket/provenance"]},"debug_s3_path":{"anyOf":[{"type":"string","maxLength":1024,"minLength":3,"pattern":"^s3://(\\w){1}(\\w-\\./)*(\\w){1}"},{"type":"null"}],"title":"Debug S3 Path","description":"S3 Path where to save debug information from Nextflow. If None, nothing will be uploaded.","examples":["s3://example-bucket/debug"]},"git_commit_hash":{"type":"string","maxLength":40,"minLength":40,"pattern":"^[0-9a-f]{40}$","title":"Git Commit Hash","description":"Hash of the git commit","examples":["ba8bcd9294c2c96aedefa1763a84a18077c50c0f"]},"repository_url":{"type":"string","minLength":1,"format":"uri","title":"Repository Url","description":"URL to the Git repository belonging to this workflow","examples":["https://github.com/example-user/example"]},"token":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Token","description":"Token to access the content git repository","examples":["vnpau89avpa48iunga984gh9h89pvhj"]},"mode":{"anyOf":[{"$ref":"#/components/schemas/WorkflowModeIn"},{"type":"null"}],"description":"Mode of the workflow with an alternative entrypoint"},"nextflow_version":{"$ref":"#/components/schemas/NextflowVersion","description":"The version of Nextflow this workflow execution requires"}},"type":"object","required":["parameters","git_commit_hash","repository_url","nextflow_version"],"title":"DevWorkflowExecutionIn"},"DocumentationEnum":{"type":"string","enum":["usage.md","input.md","output.md","changelog.md","parameter_schema.json","clowm_info.json"],"title":"DocumentationEnum"},"ErrorDetail":{"properties":{"detail":{"type":"string","title":"Detail","description":"Detail about the occurred error"}},"type":"object","required":["detail"],"title":"ErrorDetail","description":"Schema for a error due to a rejected request."},"FileTree":{"properties":{"type":{"type":"string","enum":["file","directory","link"],"title":"Type"},"name":{"type":"string","title":"Name"},"target":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target"},"contents":{"anyOf":[{"items":{"$ref":"#/components/schemas/FileTree"},"type":"array"},{"type":"null"}],"title":"Contents"},"size":{"type":"integer","title":"Size"}},"type":"object","required":["type","name","size"],"title":"FileTree"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IconUpdateOut":{"properties":{"icon_url":{"type":"string","title":"Icon Url","description":"URL to the uploaded icon","examples":["https://s3-dev.nfdi.bi.denbi.de/clowm-data/icon/980a9446c7f2460c83187cbb876f8424.png"]}},"type":"object","required":["icon_url"],"title":"IconUpdateOut"},"NextflowVersion":{"type":"string","enum":["22.10.0","22.10.1","22.10.2","22.10.3","22.10.4","22.10.5","22.10.6","22.10.7","22.10.8","23.04.0","23.04.1","23.04.2","23.04.3","23.04.4","23.04.5","23.10.0","23.10.1","23.10.2","23.10.3","23.10.4","24.04.1","24.04.2","24.04.3","24.04.4"],"title":"NextflowVersion"},"OIDCProvider":{"type":"string","enum":["lifescience"],"const":"lifescience","title":"OIDCProvider"},"OwnershipTransferRequestIn":{"properties":{"new_owner_uid":{"type":"string","format":"uuid","title":"New Owner Uid","description":"The new owner that get the request","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"]},"comment":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"title":"Comment","description":"An optional comment for the transfer request","examples":["This is an example comment"]}},"type":"object","required":["new_owner_uid"],"title":"OwnershipTransferRequestIn"},"OwnershipTransferRequestOut":{"properties":{"new_owner_uid":{"type":"string","title":"New Owner Uid","description":"The new owner that get the request","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"]},"comment":{"type":"string","title":"Comment","description":"An optional comment for the transfer request","default":"","examples":["This is an example comment"]},"created_at":{"type":"integer","title":"Created At","description":"Time when the ownership transfer was requested as UNIX timestamp","examples":[1640991600]},"current_owner_uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Owner Uid","description":"The current uid of the current owner if he exists","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"]},"target_id":{"type":"string","title":"Target Id","description":"Id of the target that gets its ownership transferred"},"target_name":{"type":"string","title":"Target Name","description":"Name of the target","examples":["example-bucket","Example Workflow","Example Resource"]},"target_description":{"type":"string","title":"Target Description","description":"Description of then target","examples":["Some long description of a target"]},"target_type":{"$ref":"#/components/schemas/OwnershipTypeEnum","description":"Target type of the ownership transfer","examples":["bucket"]}},"type":"object","required":["new_owner_uid","created_at","target_id","target_name","target_description","target_type"],"title":"OwnershipTransferRequestOut"},"OwnershipTypeEnum":{"type":"string","enum":["bucket","workflow","resource"],"title":"OwnershipTypeEnum"},"ParameterExtension":{"properties":{"mapping":{"additionalProperties":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"}]},"type":"object"},"type":"object","title":"Mapping","description":"The inner dictionary contains the display name as key and the parameter value as value. The outer dictionary has the parameter name as key.","examples":[{"some-complex-parameter":{"Option 1":"/some/path","Option 2":"/some/other/path"}}]},"defaults":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"}]},"type":"object","title":"Defaults","description":"Dictionary with parameter name as key and default value as value","examples":[{"parameter1":"somevalue","parameter2":12}]}},"type":"object","title":"ParameterExtension"},"Permission":{"type":"string","enum":["READ","WRITE","READWRITE"],"title":"Permission","description":"Enumeration for the possible permission on a bucket."},"PermissionStatus":{"type":"string","enum":["ACTIVE","INACTIVE"],"title":"PermissionStatus","description":"Status of a bucket permission. Can be either `ACTIVE` or `INACTIVE`. A permission can only get `INACTIVE` if the\npermission itself has a time limit and the current time is not in the timespan."},"ResourceIn":{"properties":{"release":{"type":"string","maxLength":32,"minLength":3,"title":"Release","description":"Short tag describing the version of the resource","examples":["01-2023"]},"name":{"type":"string","maxLength":32,"minLength":3,"title":"Name","description":"Short Name for the resource","examples":["blastdb"]},"description":{"type":"string","maxLength":264,"minLength":16,"title":"Description","description":"Short description for this resource","examples":["This is a short description for a resource"]},"source":{"type":"string","maxLength":264,"minLength":8,"title":"Source","description":"A link or similar where the resource originates from","examples":["https://example.com/db"]},"private":{"type":"boolean","title":"Private","description":"Flag if this resource should be default visible in the UI","default":true}},"type":"object","required":["release","name","description","source"],"title":"ResourceIn"},"ResourceOut":{"properties":{"name":{"type":"string","maxLength":32,"minLength":3,"title":"Name","description":"Short Name for the resource","examples":["blastdb"]},"description":{"type":"string","maxLength":264,"minLength":16,"title":"Description","description":"Short description for this resource","examples":["This is a short description for a resource"]},"source":{"type":"string","maxLength":264,"minLength":8,"title":"Source","description":"A link or similar where the resource originates from","examples":["https://example.com/db"]},"private":{"type":"boolean","title":"Private","description":"Flag if this resource should be default visible in the UI","default":true},"resource_id":{"type":"string","title":"Resource Id","description":"ID of the resource","examples":["4c072e39-2bd9-4fa3-b564-4d890e240ccd"]},"maintainer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Maintainer Id","description":"ID of the maintainer","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"]},"versions":{"items":{"$ref":"#/components/schemas/ResourceVersionOut"},"type":"array","title":"Versions","description":"Versions of the resource"}},"type":"object","required":["name","description","source","resource_id","maintainer_id","versions"],"title":"ResourceOut"},"ResourceVersionIn":{"properties":{"release":{"type":"string","maxLength":32,"minLength":3,"title":"Release","description":"Short tag describing the version of the resource","examples":["01-2023"]}},"type":"object","required":["release"],"title":"ResourceVersionIn"},"ResourceVersionOut":{"properties":{"release":{"type":"string","maxLength":32,"minLength":3,"title":"Release","description":"Short tag describing the version of the resource","examples":["01-2023"]},"status":{"$ref":"#/components/schemas/ResourceVersionStatus","description":"Status of the resource version"},"resource_version_id":{"type":"string","title":"Resource Version Id","description":"ID of the resource version","examples":["fb4cee12-1e91-49f3-905f-808845c7c1f4"]},"resource_id":{"type":"string","title":"Resource Id","description":"ID of the resource","examples":["4c072e39-2bd9-4fa3-b564-4d890e240ccd"]},"created_at":{"type":"integer","title":"Created At","description":"Timestamp when the version was created as UNIX timestamp","examples":[1672527600]},"compressed_size":{"type":"integer","title":"Compressed Size","description":"Size of the compressed resource in bytes","examples":[42097156608]},"cluster_path":{"type":"string","title":"Cluster Path","description":"Path to the resource on the cluster if the resource is synchronized","readOnly":true,"examples":["/vol/resources/CLDB-0e240ccd/fb4cee121e9149f3905f808845c7c1f4","/vol/resources/CLDB-0e240ccd/latest"]},"s3_path":{"type":"string","title":"S3 Path","description":"Path to the resource in the S3 Bucket. Not publicly available.","readOnly":true,"examples":["s3://clowm-data/resources/CLDB-0e240ccd/fb4cee121e9149f3905f808845c7c1f4/resource.tar.gz"]}},"type":"object","required":["release","status","resource_version_id","resource_id","created_at","compressed_size","cluster_path","s3_path"],"title":"ResourceVersionOut"},"ResourceVersionStatus":{"type":"string","enum":["RESOURCE_REQUESTED","WAIT_FOR_REVIEW","DENIED","APPROVED","SYNC_REQUESTED","SYNCHRONIZING","SYNC_ERROR","SYNCHRONIZED","SETTING_LATEST","LATEST","CLUSTER_DELETING","CLUSTER_DELETE_ERROR","S3_DELETING","S3_DELETE_ERROR","S3_DELETED"],"title":"ResourceVersionStatus","description":"Enumeration for the possible status of a resource version."},"RoleEnum":{"type":"string","enum":["administrator","user","reviewer","developer","db_maintainer"],"title":"RoleEnum"},"S3Key":{"properties":{"uid":{"type":"string","title":"Uid","description":"UID of the user of that access key","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"]},"access_key":{"type":"string","title":"Access Key","description":"ID of the S3 access key","examples":["CRJ6B037V2ZT4U3W17VC"]},"secret_key":{"type":"string","title":"Secret Key","description":"Secret of the S3 access key","examples":["2F5uNTI1qvt4oAroXV0wWct8rWclL2QvFXKqSqjS"]}},"type":"object","required":["uid","access_key","secret_key"],"title":"S3Key","description":"Schema for a S3 key associated with a user."},"ScopeEnum":{"type":"string","enum":["read","write"],"title":"ScopeEnum"},"UserIn":{"properties":{"display_name":{"type":"string","maxLength":256,"title":"Display Name","description":"Full Name of the user","examples":["Bilbo Baggins"]},"roles":{"items":{"$ref":"#/components/schemas/RoleEnum"},"type":"array","title":"Roles","examples":[["user"]]},"email":{"type":"string","format":"email","title":"Email","description":"Email of the user","examples":["user@example.org"]}},"type":"object","required":["display_name","email"],"title":"UserIn"},"UserOut":{"properties":{"display_name":{"type":"string","maxLength":256,"title":"Display Name","description":"Full Name of the user","examples":["Bilbo Baggins"]},"uid":{"type":"string","title":"Uid","description":"ID of the user","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"]}},"type":"object","required":["display_name","uid"],"title":"UserOut","description":"Schema for a user."},"UserOutExtended":{"properties":{"roles":{"items":{"$ref":"#/components/schemas/RoleEnum"},"type":"array","title":"Roles","description":"Roles of the user","examples":[["user"]]},"display_name":{"type":"string","maxLength":256,"title":"Display Name","description":"Full Name of the user","examples":["Bilbo Baggins"]},"uid":{"type":"string","title":"Uid","description":"ID of the user","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"]},"lifescience_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lifescience Id","description":"Lifesicence ID of the user","examples":["18b59678f16d2c59306c0aedb1dc7ddcfe162456'"]},"invitation_token_created_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Invitation Token Created At","description":"Timestamp when the invitation token was created as UNIX timestamp"},"gravatar_url":{"type":"string","title":"Gravatar Url","description":"URL to the gravatar avatar based on the users email"}},"type":"object","required":["roles","display_name","uid","gravatar_url"],"title":"UserOutExtended"},"UserRequestAnswer":{"properties":{"deny":{"type":"boolean","title":"Deny","description":"Flag to indicate if the request was denied.","default":false},"reason":{"anyOf":[{"type":"string","maxLength":512,"minLength":16},{"type":"null"}],"title":"Reason","description":"Reason why the request was denied or approved. Required if request is denied."}},"type":"object","title":"UserRequestAnswer"},"UserRoles":{"properties":{"roles":{"items":{"$ref":"#/components/schemas/RoleEnum"},"type":"array","title":"Roles","description":"Roles of the user","examples":[["user"]]}},"type":"object","required":["roles"],"title":"UserRoles"},"UserSynchronizationRequestIn":{"properties":{"reason":{"type":"string","maxLength":512,"minLength":16,"title":"Reason","description":"Reason why the request was requested.","examples":["This version is required to reproduce a execution with Workflow XY@2.0."]}},"type":"object","required":["reason"],"title":"UserSynchronizationRequestIn"},"UserSynchronizationRequestOut":{"properties":{"reason":{"type":"string","maxLength":512,"minLength":16,"title":"Reason","description":"Reason why the request was requested.","examples":["This version is required to reproduce a execution with Workflow XY@2.0."]},"resource_version_id":{"type":"string","title":"Resource Version Id","description":"ID of the resource version","examples":["fb4cee12-1e91-49f3-905f-808845c7c1f4"]},"resource_id":{"type":"string","title":"Resource Id","description":"ID of the resource","examples":["4c072e39-2bd9-4fa3-b564-4d890e240ccd"]},"requester_id":{"type":"string","title":"Requester Id","description":"ID of the user that requested this resource synchronization","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"]}},"type":"object","required":["reason","resource_version_id","resource_id","requester_id"],"title":"UserSynchronizationRequestOut"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WorkflowCredentialsIn":{"properties":{"token":{"type":"string","maxLength":128,"title":"Token","description":"Token to access the content git repository","examples":["vnpau89avpa48iunga984gh9h89pvhj"]}},"type":"object","required":["token"],"title":"WorkflowCredentialsIn"},"WorkflowCredentialsOut":{"properties":{"token":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Token","description":"Token to access the content git repository","examples":["vnpau89avpa48iunga984gh9h89pvhj"]}},"type":"object","title":"WorkflowCredentialsOut"},"WorkflowExecutionIn":{"properties":{"parameters":{"type":"object","title":"Parameters","description":"Parameters for this workflow"},"logs_s3_path":{"anyOf":[{"type":"string","maxLength":1024,"minLength":3,"pattern":"^s3://(\\w){1}(\\w-\\./)*(\\w){1}"},{"type":"null"}],"title":"Logs S3 Path","description":"S3 Path where to save logs and reports. If None, nothing will be uploaded.","examples":["s3://example-bucket/logs"]},"provenance_s3_path":{"anyOf":[{"type":"string","maxLength":1024,"minLength":3,"pattern":"^s3://(\\w){1}(\\w-\\./)*(\\w){1}"},{"type":"null"}],"title":"Provenance S3 Path","description":"S3 Path where to save provenance information. If None, nothing will be uploaded.","examples":["s3://example-bucket/provenance"]},"debug_s3_path":{"anyOf":[{"type":"string","maxLength":1024,"minLength":3,"pattern":"^s3://(\\w){1}(\\w-\\./)*(\\w){1}"},{"type":"null"}],"title":"Debug S3 Path","description":"S3 Path where to save debug information from Nextflow. If None, nothing will be uploaded.","examples":["s3://example-bucket/debug"]},"workflow_version_id":{"type":"string","maxLength":40,"minLength":40,"pattern":"^[0-9a-f]{40}$","title":"Workflow Version Id","description":"Workflow version git commit hash","examples":["ba8bcd9294c2c96aedefa1763a84a18077c50c0f"]},"notes":{"anyOf":[{"type":"string","maxLength":65536},{"type":"null"}],"title":"Notes","description":"Optional notes for this workflow execution","examples":["Some workflow execution specific notes"]},"mode_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Mode Id","description":"ID of the workflow mode this workflow execution runs in","examples":["2a23a083-b6b9-4681-9ec4-ff4ffbe85d3c"]}},"type":"object","required":["parameters","workflow_version_id"],"title":"WorkflowExecutionIn"},"WorkflowExecutionOut":{"properties":{"workflow_version_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Version Id","description":"Workflow version git commit hash","examples":["ba8bcd9294c2c96aedefa1763a84a18077c50c0f"]},"notes":{"anyOf":[{"type":"string","maxLength":65536},{"type":"null"}],"title":"Notes","description":"Optional notes for this workflow execution","examples":["Some workflow execution specific notes"]},"mode_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mode Id","description":"ID of the workflow mode this workflow execution runs in","examples":["2a23a083-b6b9-4681-9ec4-ff4ffbe85d3c"]},"execution_id":{"type":"string","title":"Execution Id","description":"ID of the workflow execution","examples":["591b6a6e-a1f0-420d-8a20-a7a60704f695"]},"executor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Executor Id","description":"UID of user who started the workflow","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"]},"start_time":{"type":"integer","title":"Start Time","description":"Start time of the workflow execution as UNIX timestamp","examples":[1672527600]},"end_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"End Time","description":"End time of the workflow execution as UNIX timestamp","examples":[1672527600]},"status":{"$ref":"#/components/schemas/WorkflowExecutionStatus","description":"Status of the workflow execution","examples":["RUNNING"]},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Id","description":"Id of the workflow","examples":["20128c04-e834-40a8-9878-68939ae46423"]},"logs_s3_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logs S3 Path","description":"S3 Path where logs and reports are saved.","examples":["s3://example-bucket/logs/run-591b6a6ea1f0420d8a20a7a60704f695"]},"provenance_s3_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provenance S3 Path","description":"S3 Path where provenance information is saved.","examples":["s3://example-bucket/provenance/run-591b6a6ea1f0420d8a20a7a60704f695"]},"debug_s3_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Debug S3 Path","description":"S3 Path where debug information from Nextflow is saved.","examples":["s3://example-bucket/debug/run-591b6a6ea1f0420d8a20a7a60704f695"]},"cpu_time":{"type":"string","format":"duration","title":"Cpu Time","description":"The consumed cpu time in ISO 8601 format","examples":["P4DT12H30M5S"]}},"type":"object","required":["execution_id","start_time","status","cpu_time"],"title":"WorkflowExecutionOut"},"WorkflowExecutionStatus":{"type":"string","enum":["PENDING","SCHEDULED","RUNNING","CANCELED","SUCCESS","ERROR"],"title":"WorkflowExecutionStatus","description":"Enumeration for the status on a workflow execution."},"WorkflowIn":{"properties":{"name":{"type":"string","maxLength":64,"minLength":3,"title":"Name","description":"Short descriptive name of the workflow","examples":["RNA ReadMapper"]},"short_description":{"type":"string","maxLength":256,"minLength":64,"title":"Short Description","description":"Short description of the workflow","examples":["This should be a very good example of a short and descriptive description"]},"repository_url":{"type":"string","minLength":1,"format":"uri","title":"Repository Url","description":"URL to the Git repository belonging to this workflow","examples":["https://github.com/example-user/example"]},"git_commit_hash":{"type":"string","maxLength":40,"minLength":40,"pattern":"^[0-9a-f]+$","title":"Git Commit Hash","description":"Hash of the git commit","examples":["ba8bcd9294c2c96aedefa1763a84a18077c50c0f"]},"initial_version":{"type":"string","maxLength":10,"minLength":5,"title":"Initial Version","description":"Initial version of the Workflow. Should follow semantic versioning","default":"v1.0.0","examples":["v1.0.0"]},"token":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Token","description":"Token to access the content git repository","examples":["vnpau89avpa48iunga984gh9h89pvhj"]},"modes":{"items":{"$ref":"#/components/schemas/WorkflowModeIn"},"type":"array","maxItems":10,"title":"Modes","description":"List of modes with alternative entrypoint the new workflow has","default":[]},"nextflow_version":{"$ref":"#/components/schemas/NextflowVersion","description":"The version of Nextflow this workflow version requires"}},"type":"object","required":["name","short_description","repository_url","git_commit_hash","nextflow_version"],"title":"WorkflowIn"},"WorkflowModeIn":{"properties":{"schema_path":{"type":"string","title":"Schema Path","description":"Path to the alternative parameter schema","examples":["modes/schema1.json"]},"entrypoint":{"type":"string","title":"Entrypoint","description":"Name of the process the workflow should start with. Argument to the parameter '-entry'","examples":["example"]},"name":{"type":"string","title":"Name","description":"Name of the workflow mode","examples":["Example Name"]}},"type":"object","required":["schema_path","entrypoint","name"],"title":"WorkflowModeIn"},"WorkflowModeOut":{"properties":{"schema_path":{"type":"string","title":"Schema Path","description":"Path to the alternative parameter schema","examples":["modes/schema1.json"]},"entrypoint":{"type":"string","title":"Entrypoint","description":"Name of the process the workflow should start with. Argument to the parameter '-entry'","examples":["example"]},"name":{"type":"string","title":"Name","description":"Name of the workflow mode","examples":["Example Name"]},"mode_id":{"type":"string","title":"Mode Id","description":"ID of the workflow mode","examples":["2a23a083-b6b9-4681-9ec4-ff4ffbe85d3c"]}},"type":"object","required":["schema_path","entrypoint","name","mode_id"],"title":"WorkflowModeOut"},"WorkflowOut":{"properties":{"name":{"type":"string","maxLength":64,"minLength":3,"title":"Name","description":"Short descriptive name of the workflow","examples":["RNA ReadMapper"]},"short_description":{"type":"string","maxLength":256,"minLength":64,"title":"Short Description","description":"Short description of the workflow","examples":["This should be a very good example of a short and descriptive description"]},"repository_url":{"type":"string","title":"Repository Url","description":"URL to the Git repository belonging to this workflow","examples":["https://github.com/example-user/example"]},"workflow_id":{"type":"string","title":"Workflow Id","description":"ID of the workflow","examples":["20128c04-e834-40a8-9878-68939ae46423"]},"versions":{"items":{"$ref":"#/components/schemas/WorkflowVersion"},"type":"array","title":"Versions","description":"Versions of the workflow"},"developer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Developer Id","description":"ID of developer of the workflow","examples":["1d3387f3-95c0-4813-8767-2cad87faeebf"]},"private":{"type":"boolean","title":"Private","description":"Flag if the workflow is hosted in a private git repository","default":false}},"type":"object","required":["name","short_description","repository_url","workflow_id","versions"],"title":"WorkflowOut"},"WorkflowStatistic":{"properties":{"day":{"type":"string","format":"date","title":"Day","description":"Day of the datapoint","examples":["2023-01-01"]},"count":{"type":"integer","title":"Count","description":"Number of started workflows on that day","examples":[1]}},"type":"object","required":["day","count"],"title":"WorkflowStatistic"},"WorkflowUpdate":{"properties":{"version":{"type":"string","maxLength":10,"minLength":5,"title":"Version","description":"Version of the Workflow. Should follow semantic versioning","examples":["v1.1.0"]},"git_commit_hash":{"type":"string","maxLength":40,"minLength":40,"pattern":"^[0-9a-f]{40}$","title":"Git Commit Hash","description":"Hash of the git commit","examples":["ba8bcd9294c2c96aedefa1763a84a18077c50c0f"]},"append_modes":{"items":{"$ref":"#/components/schemas/WorkflowModeIn"},"type":"array","title":"Append Modes","description":"Add modes to the new workflow version","default":[]},"delete_modes":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Delete Modes","description":"Delete modes for the new workflow version.","default":[],"examples":["2a23a083-b6b9-4681-9ec4-ff4ffbe85d3c"]},"nextflow_version":{"$ref":"#/components/schemas/NextflowVersion","description":"The version of Nextflow this new workflow version requires."}},"type":"object","required":["version","git_commit_hash","nextflow_version"],"title":"WorkflowUpdate"},"WorkflowVersion":{"properties":{"status":{"$ref":"#/components/schemas/WorkflowVersionStatus","description":"Status of the workflow version","examples":["PUBLISHED"]},"workflow_id":{"type":"string","title":"Workflow Id","description":"ID of the corresponding workflow","examples":["20128c04-e834-40a8-9878-68939ae46423"]},"version":{"type":"string","maxLength":10,"minLength":5,"title":"Version","description":"Version of the Workflow. Should follow semantic versioning","examples":["v1.0.0"]},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url","description":"URL to the uploaded icon","examples":["https://s3-dev.nfdi.bi.denbi.de/clowm-data/icon/980a9446c7f2460c83187cbb876f8424.png"]},"workflow_version_id":{"type":"string","maxLength":40,"minLength":40,"pattern":"^[0-9a-f]{40}$","title":"Workflow Version Id","description":"Hash of the git commit","examples":["ba8bcd9294c2c96aedefa1763a84a18077c50c0f"]},"created_at":{"type":"integer","title":"Created At","description":"Timestamp when the version was created as UNIX timestamp","examples":[1672527600]},"modes":{"items":{"type":"string"},"type":"array","title":"Modes","description":"Optional modes his workflow version has","default":[],"examples":["2a23a083-b6b9-4681-9ec4-ff4ffbe85d3c"]},"parameter_extension":{"anyOf":[{"$ref":"#/components/schemas/ParameterExtension"},{"type":"null"}],"description":"Parameter extension specific for this CloWM instance"},"nextflow_version":{"$ref":"#/components/schemas/NextflowVersion","description":"The version of Nextflow this workflow version requires"}},"type":"object","required":["status","workflow_id","version","workflow_version_id","created_at","nextflow_version"],"title":"WorkflowVersion"},"WorkflowVersionStatus":{"type":"string","enum":["CREATED","DENIED","PUBLISHED","DEPRECATED"],"title":"WorkflowVersionStatus","description":"Enumeration for the possible status of a workflow version."},"WorkflowVersionStatusSchema":{"properties":{"status":{"$ref":"#/components/schemas/WorkflowVersionStatus","description":"Status of the workflow version","examples":["PUBLISHED"]}},"type":"object","required":["status"],"title":"WorkflowVersionStatusSchema"}},"securitySchemes":{"Session Token":{"type":"apiKey","description":"The JWT in this cookie is used by the website and should not be used when communicating directly with the API.","in":"cookie","name":"clowm-jwt"},"API Token":{"type":"apiKey","description":"The API token in the header is used to authenticate a user. Preferred when communication with the API directly.","in":"header","name":"X-CLOWM-TOKEN"}}}}
\ No newline at end of file
diff --git a/openapi-ts.config.ts b/openapi-ts.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2773778da2e89430fb0d11191602e114b1ba7584
--- /dev/null
+++ b/openapi-ts.config.ts
@@ -0,0 +1,18 @@
+import { defineConfig } from "@hey-api/openapi-ts";
+
+export default defineConfig({
+  client: "@hey-api/client-axios",
+  input: "./openapi-clowm.json",
+  output: {
+    lint: "eslint",
+    format: "prettier",
+    path: "src/client",
+  },
+  services: {
+    asClass: true,
+  },
+  schemas: false,
+  types: {
+    enums: "typescript",
+  },
+});
diff --git a/package-lock.json b/package-lock.json
index 418c3eb36f6d76e4ad16090105c40a9a8d8adfe8..8a5906d87daf2a2b6b1fb36b49d3c6e7182d4a72 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,6 +13,7 @@
         "@aws-sdk/lib-storage": "^3.637.0",
         "@aws-sdk/s3-request-presigner": "^3.637.0",
         "@fortawesome/fontawesome-free": "~6.6.0",
+        "@hey-api/client-axios": "^0.2.7",
         "@popperjs/core": "~2.11.8",
         "ajv": "~8.17.0",
         "bootstrap": "~5.3.0",
@@ -23,6 +24,7 @@
         "filesize": "~10.1.0",
         "idb-keyval": "^6.2.1",
         "pinia": "~2.2.0",
+        "qs": "^6.13.0",
         "semver": "~7.6.0",
         "showdown": "~2.1.0",
         "sortablejs": "^1.15.2",
@@ -32,24 +34,25 @@
         "vue3-cookies": "~1.0.0"
       },
       "devDependencies": {
+        "@eslint/compat": "^1.2.0",
+        "@hey-api/openapi-ts": "^0.53.9",
         "@rushstack/eslint-patch": "~1.10.0",
         "@tsconfig/node20": "^20.1.2",
         "@types/bootstrap": "~5.2.0",
         "@types/dompurify": "~3.0.0",
         "@types/node": "^20.11.0",
+        "@types/qs": "^6.9.16",
         "@types/semver": "~7.5.1",
         "@types/showdown": "~2.0.1",
         "@types/sortablejs": "^1.15.7",
         "@vitejs/plugin-vue": "~5.1.0",
-        "@vue/eslint-config-prettier": "~9.0.0",
-        "@vue/eslint-config-typescript": "~13.0.0",
+        "@vue/eslint-config-prettier": "~10.0.0",
+        "@vue/eslint-config-typescript": "~14.0.0",
         "@vue/tsconfig": "~0.5.0",
-        "axios": "~1.7.0",
-        "eslint": "~8.57.0",
+        "eslint": "~9.12.0",
         "eslint-plugin-vue": "~9.28.0",
         "highlight.js": "^11.9.0",
         "npm-run-all": "~4.1.5",
-        "openapi-typescript-codegen": "^0.29.0",
         "prettier": "~3.3.0",
         "sass": "^1.66.0",
         "typescript": "~5.5.0",
@@ -279,68 +282,68 @@
       }
     },
     "node_modules/@aws-sdk/client-s3": {
-      "version": "3.658.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.658.0.tgz",
-      "integrity": "sha512-3lyew20RoLKg9S1RzVyYgLNxknoXkN/0o9PMiRq77yBIQHZj3x7/wmKseiGEFoF08YKFkh1MPq/p34qRlOmtBg==",
+      "version": "3.669.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.669.0.tgz",
+      "integrity": "sha512-diqkwSqWjgAZ5NdYOtpYI/JlwsFDmo7x2Q+QOHevFaCEp4vgZOwJyXE3DQbKoO1X10fMH2vOUULgonPJd4ClUQ==",
       "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/sha1-browser": "5.2.0",
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/client-sso-oidc": "3.658.0",
-        "@aws-sdk/client-sts": "3.658.0",
-        "@aws-sdk/core": "3.658.0",
-        "@aws-sdk/credential-provider-node": "3.658.0",
-        "@aws-sdk/middleware-bucket-endpoint": "3.654.0",
-        "@aws-sdk/middleware-expect-continue": "3.654.0",
-        "@aws-sdk/middleware-flexible-checksums": "3.657.0",
-        "@aws-sdk/middleware-host-header": "3.654.0",
-        "@aws-sdk/middleware-location-constraint": "3.654.0",
-        "@aws-sdk/middleware-logger": "3.654.0",
-        "@aws-sdk/middleware-recursion-detection": "3.654.0",
-        "@aws-sdk/middleware-sdk-s3": "3.658.0",
-        "@aws-sdk/middleware-ssec": "3.654.0",
-        "@aws-sdk/middleware-user-agent": "3.654.0",
-        "@aws-sdk/region-config-resolver": "3.654.0",
-        "@aws-sdk/signature-v4-multi-region": "3.658.0",
-        "@aws-sdk/types": "3.654.0",
-        "@aws-sdk/util-endpoints": "3.654.0",
-        "@aws-sdk/util-user-agent-browser": "3.654.0",
-        "@aws-sdk/util-user-agent-node": "3.654.0",
-        "@aws-sdk/xml-builder": "3.654.0",
-        "@smithy/config-resolver": "^3.0.8",
-        "@smithy/core": "^2.4.3",
-        "@smithy/eventstream-serde-browser": "^3.0.9",
-        "@smithy/eventstream-serde-config-resolver": "^3.0.6",
-        "@smithy/eventstream-serde-node": "^3.0.8",
-        "@smithy/fetch-http-handler": "^3.2.7",
-        "@smithy/hash-blob-browser": "^3.1.5",
-        "@smithy/hash-node": "^3.0.6",
-        "@smithy/hash-stream-node": "^3.1.5",
-        "@smithy/invalid-dependency": "^3.0.6",
-        "@smithy/md5-js": "^3.0.6",
-        "@smithy/middleware-content-length": "^3.0.8",
-        "@smithy/middleware-endpoint": "^3.1.3",
-        "@smithy/middleware-retry": "^3.0.18",
-        "@smithy/middleware-serde": "^3.0.6",
-        "@smithy/middleware-stack": "^3.0.6",
-        "@smithy/node-config-provider": "^3.1.7",
-        "@smithy/node-http-handler": "^3.2.2",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/smithy-client": "^3.3.2",
-        "@smithy/types": "^3.4.2",
-        "@smithy/url-parser": "^3.0.6",
+        "@aws-sdk/client-sso-oidc": "3.669.0",
+        "@aws-sdk/client-sts": "3.669.0",
+        "@aws-sdk/core": "3.667.0",
+        "@aws-sdk/credential-provider-node": "3.669.0",
+        "@aws-sdk/middleware-bucket-endpoint": "3.667.0",
+        "@aws-sdk/middleware-expect-continue": "3.667.0",
+        "@aws-sdk/middleware-flexible-checksums": "3.669.0",
+        "@aws-sdk/middleware-host-header": "3.667.0",
+        "@aws-sdk/middleware-location-constraint": "3.667.0",
+        "@aws-sdk/middleware-logger": "3.667.0",
+        "@aws-sdk/middleware-recursion-detection": "3.667.0",
+        "@aws-sdk/middleware-sdk-s3": "3.669.0",
+        "@aws-sdk/middleware-ssec": "3.667.0",
+        "@aws-sdk/middleware-user-agent": "3.669.0",
+        "@aws-sdk/region-config-resolver": "3.667.0",
+        "@aws-sdk/signature-v4-multi-region": "3.669.0",
+        "@aws-sdk/types": "3.667.0",
+        "@aws-sdk/util-endpoints": "3.667.0",
+        "@aws-sdk/util-user-agent-browser": "3.667.0",
+        "@aws-sdk/util-user-agent-node": "3.669.0",
+        "@aws-sdk/xml-builder": "3.662.0",
+        "@smithy/config-resolver": "^3.0.9",
+        "@smithy/core": "^2.4.8",
+        "@smithy/eventstream-serde-browser": "^3.0.10",
+        "@smithy/eventstream-serde-config-resolver": "^3.0.7",
+        "@smithy/eventstream-serde-node": "^3.0.9",
+        "@smithy/fetch-http-handler": "^3.2.9",
+        "@smithy/hash-blob-browser": "^3.1.6",
+        "@smithy/hash-node": "^3.0.7",
+        "@smithy/hash-stream-node": "^3.1.6",
+        "@smithy/invalid-dependency": "^3.0.7",
+        "@smithy/md5-js": "^3.0.7",
+        "@smithy/middleware-content-length": "^3.0.9",
+        "@smithy/middleware-endpoint": "^3.1.4",
+        "@smithy/middleware-retry": "^3.0.23",
+        "@smithy/middleware-serde": "^3.0.7",
+        "@smithy/middleware-stack": "^3.0.7",
+        "@smithy/node-config-provider": "^3.1.8",
+        "@smithy/node-http-handler": "^3.2.4",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/smithy-client": "^3.4.0",
+        "@smithy/types": "^3.5.0",
+        "@smithy/url-parser": "^3.0.7",
         "@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.18",
-        "@smithy/util-defaults-mode-node": "^3.0.18",
-        "@smithy/util-endpoints": "^2.1.2",
-        "@smithy/util-middleware": "^3.0.6",
-        "@smithy/util-retry": "^3.0.6",
-        "@smithy/util-stream": "^3.1.6",
+        "@smithy/util-defaults-mode-browser": "^3.0.23",
+        "@smithy/util-defaults-mode-node": "^3.0.23",
+        "@smithy/util-endpoints": "^2.1.3",
+        "@smithy/util-middleware": "^3.0.7",
+        "@smithy/util-retry": "^3.0.7",
+        "@smithy/util-stream": "^3.1.9",
         "@smithy/util-utf8": "^3.0.0",
-        "@smithy/util-waiter": "^3.1.5",
+        "@smithy/util-waiter": "^3.1.6",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -348,47 +351,47 @@
       }
     },
     "node_modules/@aws-sdk/client-sso": {
-      "version": "3.658.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.658.0.tgz",
-      "integrity": "sha512-OtT6bXthyP/z7x2QDTWYz0mteXhQvV+mH4JgT7dW1Y5Kc/Xr85kIQ0ouypSLH14DeiT1Gd21kXKy4YuLEoWaYQ==",
+      "version": "3.669.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.669.0.tgz",
+      "integrity": "sha512-WNpfNYIHzehLv98F+KolJglXNjJOTbOvIbSZ2XAnebVLmXCWeEEd1r4dIH0oI2dHtLbQ/h3uqaeQhsVQjLAxpw==",
       "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/core": "3.658.0",
-        "@aws-sdk/middleware-host-header": "3.654.0",
-        "@aws-sdk/middleware-logger": "3.654.0",
-        "@aws-sdk/middleware-recursion-detection": "3.654.0",
-        "@aws-sdk/middleware-user-agent": "3.654.0",
-        "@aws-sdk/region-config-resolver": "3.654.0",
-        "@aws-sdk/types": "3.654.0",
-        "@aws-sdk/util-endpoints": "3.654.0",
-        "@aws-sdk/util-user-agent-browser": "3.654.0",
-        "@aws-sdk/util-user-agent-node": "3.654.0",
-        "@smithy/config-resolver": "^3.0.8",
-        "@smithy/core": "^2.4.3",
-        "@smithy/fetch-http-handler": "^3.2.7",
-        "@smithy/hash-node": "^3.0.6",
-        "@smithy/invalid-dependency": "^3.0.6",
-        "@smithy/middleware-content-length": "^3.0.8",
-        "@smithy/middleware-endpoint": "^3.1.3",
-        "@smithy/middleware-retry": "^3.0.18",
-        "@smithy/middleware-serde": "^3.0.6",
-        "@smithy/middleware-stack": "^3.0.6",
-        "@smithy/node-config-provider": "^3.1.7",
-        "@smithy/node-http-handler": "^3.2.2",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/smithy-client": "^3.3.2",
-        "@smithy/types": "^3.4.2",
-        "@smithy/url-parser": "^3.0.6",
+        "@aws-sdk/core": "3.667.0",
+        "@aws-sdk/middleware-host-header": "3.667.0",
+        "@aws-sdk/middleware-logger": "3.667.0",
+        "@aws-sdk/middleware-recursion-detection": "3.667.0",
+        "@aws-sdk/middleware-user-agent": "3.669.0",
+        "@aws-sdk/region-config-resolver": "3.667.0",
+        "@aws-sdk/types": "3.667.0",
+        "@aws-sdk/util-endpoints": "3.667.0",
+        "@aws-sdk/util-user-agent-browser": "3.667.0",
+        "@aws-sdk/util-user-agent-node": "3.669.0",
+        "@smithy/config-resolver": "^3.0.9",
+        "@smithy/core": "^2.4.8",
+        "@smithy/fetch-http-handler": "^3.2.9",
+        "@smithy/hash-node": "^3.0.7",
+        "@smithy/invalid-dependency": "^3.0.7",
+        "@smithy/middleware-content-length": "^3.0.9",
+        "@smithy/middleware-endpoint": "^3.1.4",
+        "@smithy/middleware-retry": "^3.0.23",
+        "@smithy/middleware-serde": "^3.0.7",
+        "@smithy/middleware-stack": "^3.0.7",
+        "@smithy/node-config-provider": "^3.1.8",
+        "@smithy/node-http-handler": "^3.2.4",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/smithy-client": "^3.4.0",
+        "@smithy/types": "^3.5.0",
+        "@smithy/url-parser": "^3.0.7",
         "@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.18",
-        "@smithy/util-defaults-mode-node": "^3.0.18",
-        "@smithy/util-endpoints": "^2.1.2",
-        "@smithy/util-middleware": "^3.0.6",
-        "@smithy/util-retry": "^3.0.6",
+        "@smithy/util-defaults-mode-browser": "^3.0.23",
+        "@smithy/util-defaults-mode-node": "^3.0.23",
+        "@smithy/util-endpoints": "^2.1.3",
+        "@smithy/util-middleware": "^3.0.7",
+        "@smithy/util-retry": "^3.0.7",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -397,48 +400,48 @@
       }
     },
     "node_modules/@aws-sdk/client-sso-oidc": {
-      "version": "3.658.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.658.0.tgz",
-      "integrity": "sha512-+oZcf9Wm7BlAhakSnxftmpeMwJLXQPesOcIX+ViF6HWSfMid4LY8Cq0jJ9si3HSe216GVMiAlBbNksayzHNdlA==",
+      "version": "3.669.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.669.0.tgz",
+      "integrity": "sha512-E7uYOS3Axhe36Zeq6iLC9kjF1mMEyCQ4fXud11h22rbjq7PFUtN2Omekrch37eUx3BFj1jMePnuTnT98t5LWnw==",
       "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/core": "3.658.0",
-        "@aws-sdk/credential-provider-node": "3.658.0",
-        "@aws-sdk/middleware-host-header": "3.654.0",
-        "@aws-sdk/middleware-logger": "3.654.0",
-        "@aws-sdk/middleware-recursion-detection": "3.654.0",
-        "@aws-sdk/middleware-user-agent": "3.654.0",
-        "@aws-sdk/region-config-resolver": "3.654.0",
-        "@aws-sdk/types": "3.654.0",
-        "@aws-sdk/util-endpoints": "3.654.0",
-        "@aws-sdk/util-user-agent-browser": "3.654.0",
-        "@aws-sdk/util-user-agent-node": "3.654.0",
-        "@smithy/config-resolver": "^3.0.8",
-        "@smithy/core": "^2.4.3",
-        "@smithy/fetch-http-handler": "^3.2.7",
-        "@smithy/hash-node": "^3.0.6",
-        "@smithy/invalid-dependency": "^3.0.6",
-        "@smithy/middleware-content-length": "^3.0.8",
-        "@smithy/middleware-endpoint": "^3.1.3",
-        "@smithy/middleware-retry": "^3.0.18",
-        "@smithy/middleware-serde": "^3.0.6",
-        "@smithy/middleware-stack": "^3.0.6",
-        "@smithy/node-config-provider": "^3.1.7",
-        "@smithy/node-http-handler": "^3.2.2",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/smithy-client": "^3.3.2",
-        "@smithy/types": "^3.4.2",
-        "@smithy/url-parser": "^3.0.6",
+        "@aws-sdk/core": "3.667.0",
+        "@aws-sdk/credential-provider-node": "3.669.0",
+        "@aws-sdk/middleware-host-header": "3.667.0",
+        "@aws-sdk/middleware-logger": "3.667.0",
+        "@aws-sdk/middleware-recursion-detection": "3.667.0",
+        "@aws-sdk/middleware-user-agent": "3.669.0",
+        "@aws-sdk/region-config-resolver": "3.667.0",
+        "@aws-sdk/types": "3.667.0",
+        "@aws-sdk/util-endpoints": "3.667.0",
+        "@aws-sdk/util-user-agent-browser": "3.667.0",
+        "@aws-sdk/util-user-agent-node": "3.669.0",
+        "@smithy/config-resolver": "^3.0.9",
+        "@smithy/core": "^2.4.8",
+        "@smithy/fetch-http-handler": "^3.2.9",
+        "@smithy/hash-node": "^3.0.7",
+        "@smithy/invalid-dependency": "^3.0.7",
+        "@smithy/middleware-content-length": "^3.0.9",
+        "@smithy/middleware-endpoint": "^3.1.4",
+        "@smithy/middleware-retry": "^3.0.23",
+        "@smithy/middleware-serde": "^3.0.7",
+        "@smithy/middleware-stack": "^3.0.7",
+        "@smithy/node-config-provider": "^3.1.8",
+        "@smithy/node-http-handler": "^3.2.4",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/smithy-client": "^3.4.0",
+        "@smithy/types": "^3.5.0",
+        "@smithy/url-parser": "^3.0.7",
         "@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.18",
-        "@smithy/util-defaults-mode-node": "^3.0.18",
-        "@smithy/util-endpoints": "^2.1.2",
-        "@smithy/util-middleware": "^3.0.6",
-        "@smithy/util-retry": "^3.0.6",
+        "@smithy/util-defaults-mode-browser": "^3.0.23",
+        "@smithy/util-defaults-mode-node": "^3.0.23",
+        "@smithy/util-endpoints": "^2.1.3",
+        "@smithy/util-middleware": "^3.0.7",
+        "@smithy/util-retry": "^3.0.7",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -446,53 +449,53 @@
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-sts": "^3.658.0"
+        "@aws-sdk/client-sts": "^3.669.0"
       }
     },
     "node_modules/@aws-sdk/client-sts": {
-      "version": "3.658.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.658.0.tgz",
-      "integrity": "sha512-SffIgt/Mzwq3ijkg3lZjndkrqS1d6OeDcUi7IAO2w4KC4nM6yH1zZNSjNWvdjEvUp0Gz2kk54HvyP/r9DqTg6Q==",
+      "version": "3.669.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.669.0.tgz",
+      "integrity": "sha512-1XdOBtHKCVxVkEDiy+oktJNSsySj3ADyh58KpHaqgvCQKV3vmfkr0YO5dG4kqq+TflNwdfl1YgMuOUiCulOWeQ==",
       "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/client-sso-oidc": "3.658.0",
-        "@aws-sdk/core": "3.658.0",
-        "@aws-sdk/credential-provider-node": "3.658.0",
-        "@aws-sdk/middleware-host-header": "3.654.0",
-        "@aws-sdk/middleware-logger": "3.654.0",
-        "@aws-sdk/middleware-recursion-detection": "3.654.0",
-        "@aws-sdk/middleware-user-agent": "3.654.0",
-        "@aws-sdk/region-config-resolver": "3.654.0",
-        "@aws-sdk/types": "3.654.0",
-        "@aws-sdk/util-endpoints": "3.654.0",
-        "@aws-sdk/util-user-agent-browser": "3.654.0",
-        "@aws-sdk/util-user-agent-node": "3.654.0",
-        "@smithy/config-resolver": "^3.0.8",
-        "@smithy/core": "^2.4.3",
-        "@smithy/fetch-http-handler": "^3.2.7",
-        "@smithy/hash-node": "^3.0.6",
-        "@smithy/invalid-dependency": "^3.0.6",
-        "@smithy/middleware-content-length": "^3.0.8",
-        "@smithy/middleware-endpoint": "^3.1.3",
-        "@smithy/middleware-retry": "^3.0.18",
-        "@smithy/middleware-serde": "^3.0.6",
-        "@smithy/middleware-stack": "^3.0.6",
-        "@smithy/node-config-provider": "^3.1.7",
-        "@smithy/node-http-handler": "^3.2.2",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/smithy-client": "^3.3.2",
-        "@smithy/types": "^3.4.2",
-        "@smithy/url-parser": "^3.0.6",
+        "@aws-sdk/client-sso-oidc": "3.669.0",
+        "@aws-sdk/core": "3.667.0",
+        "@aws-sdk/credential-provider-node": "3.669.0",
+        "@aws-sdk/middleware-host-header": "3.667.0",
+        "@aws-sdk/middleware-logger": "3.667.0",
+        "@aws-sdk/middleware-recursion-detection": "3.667.0",
+        "@aws-sdk/middleware-user-agent": "3.669.0",
+        "@aws-sdk/region-config-resolver": "3.667.0",
+        "@aws-sdk/types": "3.667.0",
+        "@aws-sdk/util-endpoints": "3.667.0",
+        "@aws-sdk/util-user-agent-browser": "3.667.0",
+        "@aws-sdk/util-user-agent-node": "3.669.0",
+        "@smithy/config-resolver": "^3.0.9",
+        "@smithy/core": "^2.4.8",
+        "@smithy/fetch-http-handler": "^3.2.9",
+        "@smithy/hash-node": "^3.0.7",
+        "@smithy/invalid-dependency": "^3.0.7",
+        "@smithy/middleware-content-length": "^3.0.9",
+        "@smithy/middleware-endpoint": "^3.1.4",
+        "@smithy/middleware-retry": "^3.0.23",
+        "@smithy/middleware-serde": "^3.0.7",
+        "@smithy/middleware-stack": "^3.0.7",
+        "@smithy/node-config-provider": "^3.1.8",
+        "@smithy/node-http-handler": "^3.2.4",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/smithy-client": "^3.4.0",
+        "@smithy/types": "^3.5.0",
+        "@smithy/url-parser": "^3.0.7",
         "@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.18",
-        "@smithy/util-defaults-mode-node": "^3.0.18",
-        "@smithy/util-endpoints": "^2.1.2",
-        "@smithy/util-middleware": "^3.0.6",
-        "@smithy/util-retry": "^3.0.6",
+        "@smithy/util-defaults-mode-browser": "^3.0.23",
+        "@smithy/util-defaults-mode-node": "^3.0.23",
+        "@smithy/util-endpoints": "^2.1.3",
+        "@smithy/util-middleware": "^3.0.7",
+        "@smithy/util-retry": "^3.0.7",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -501,19 +504,20 @@
       }
     },
     "node_modules/@aws-sdk/core": {
-      "version": "3.658.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.658.0.tgz",
-      "integrity": "sha512-vtOUqYD2/SfWGxmfYneiqv4R64qtSRPqznHUcMCusq71ZG9iz90ZxRYxS8ABrvhWD+oUqnxHesO08VYtaL4oAg==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.667.0.tgz",
+      "integrity": "sha512-pMcDVI7Tmdsc8R3sDv0Omj/4iRParGY+uJtAfF669WnZfDfaBQaix2Mq7+Mu08vdjqO9K3gicFvjk9S1VLmOKA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/core": "^2.4.3",
-        "@smithy/node-config-provider": "^3.1.7",
-        "@smithy/property-provider": "^3.1.6",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/signature-v4": "^4.1.3",
-        "@smithy/smithy-client": "^3.3.2",
-        "@smithy/types": "^3.4.2",
-        "@smithy/util-middleware": "^3.0.6",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/core": "^2.4.8",
+        "@smithy/node-config-provider": "^3.1.8",
+        "@smithy/property-provider": "^3.1.7",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/signature-v4": "^4.2.0",
+        "@smithy/smithy-client": "^3.4.0",
+        "@smithy/types": "^3.5.0",
+        "@smithy/util-middleware": "^3.0.7",
         "fast-xml-parser": "4.4.1",
         "tslib": "^2.6.2"
       },
@@ -522,14 +526,15 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-env": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.654.0.tgz",
-      "integrity": "sha512-kogsx3Ql81JouHS7DkheCDU9MYAvK0AokxjcshDveGmf7BbgbWCA8Fnb9wjQyNDaOXNvkZu8Z8rgkX91z324/w==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.667.0.tgz",
+      "integrity": "sha512-zZbrkkaPc54WXm+QAnpuv0LPNfsts0HPPd+oCECGs7IQRaFsGj187cwvPg9RMWDFZqpm64MdBDoA8OQHsqzYCw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/property-provider": "^3.1.6",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/core": "3.667.0",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/property-provider": "^3.1.7",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -537,19 +542,20 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-http": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.654.0.tgz",
-      "integrity": "sha512-tgmAH4MBi/aDR882lfw48+tDV95ZH3GWc1Eoe6DpNLiM3GN2VfU/cZwuHmi6aq+vAbdIlswBHJ/+va0fOvlyjw==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.667.0.tgz",
+      "integrity": "sha512-sjtybFfERZWiqTY7fswBxKQLvUkiCucOWyqh3IaPo/4nE1PXRnaZCVG0+kRBPrYIxWqiVwytvZzMJy8sVZcG0A==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/fetch-http-handler": "^3.2.7",
-        "@smithy/node-http-handler": "^3.2.2",
-        "@smithy/property-provider": "^3.1.6",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/smithy-client": "^3.3.2",
-        "@smithy/types": "^3.4.2",
-        "@smithy/util-stream": "^3.1.6",
+        "@aws-sdk/core": "3.667.0",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/fetch-http-handler": "^3.2.9",
+        "@smithy/node-http-handler": "^3.2.4",
+        "@smithy/property-provider": "^3.1.7",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/smithy-client": "^3.4.0",
+        "@smithy/types": "^3.5.0",
+        "@smithy/util-stream": "^3.1.9",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -557,47 +563,48 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-ini": {
-      "version": "3.658.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.658.0.tgz",
-      "integrity": "sha512-fL4hAeF2jjSZ3Dm/kmU9AEDO8UARhUagUJ/UfXMxvkvmQ/jLydKA3ip5jMSf1fhu1TWoi/JBE/4cjKDbjwMzXA==",
+      "version": "3.669.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.669.0.tgz",
+      "integrity": "sha512-YHhfH7w29BmMPnOK0BrBhEy2IRFRSRGSCyz3jtqpG883CZ2Lxan/AzaJDfKRdz350KPgbMMBwbPkIrqNIsg8iw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/credential-provider-env": "3.654.0",
-        "@aws-sdk/credential-provider-http": "3.654.0",
-        "@aws-sdk/credential-provider-process": "3.654.0",
-        "@aws-sdk/credential-provider-sso": "3.658.0",
-        "@aws-sdk/credential-provider-web-identity": "3.654.0",
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/credential-provider-imds": "^3.2.3",
-        "@smithy/property-provider": "^3.1.6",
-        "@smithy/shared-ini-file-loader": "^3.1.7",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/core": "3.667.0",
+        "@aws-sdk/credential-provider-env": "3.667.0",
+        "@aws-sdk/credential-provider-http": "3.667.0",
+        "@aws-sdk/credential-provider-process": "3.667.0",
+        "@aws-sdk/credential-provider-sso": "3.669.0",
+        "@aws-sdk/credential-provider-web-identity": "3.667.0",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/credential-provider-imds": "^3.2.4",
+        "@smithy/property-provider": "^3.1.7",
+        "@smithy/shared-ini-file-loader": "^3.1.8",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-sts": "^3.658.0"
+        "@aws-sdk/client-sts": "^3.669.0"
       }
     },
     "node_modules/@aws-sdk/credential-provider-node": {
-      "version": "3.658.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.658.0.tgz",
-      "integrity": "sha512-rdWBylUdT6/dK+zBj7jajJpUQ3rP/YvKo0peYhpTgpUSHjqkjrx/BRXE+iccbFimR8QSxwOJ4tsb15Gvuv0E4Q==",
+      "version": "3.669.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.669.0.tgz",
+      "integrity": "sha512-O506azQcq6N1gnDX870MXXL9LHlhX0k6BlLMM6IDClxVDnlNkK3+n2cAEKSy8HwZJcRlekcsKz/AS2CxjPY+fg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/credential-provider-env": "3.654.0",
-        "@aws-sdk/credential-provider-http": "3.654.0",
-        "@aws-sdk/credential-provider-ini": "3.658.0",
-        "@aws-sdk/credential-provider-process": "3.654.0",
-        "@aws-sdk/credential-provider-sso": "3.658.0",
-        "@aws-sdk/credential-provider-web-identity": "3.654.0",
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/credential-provider-imds": "^3.2.3",
-        "@smithy/property-provider": "^3.1.6",
-        "@smithy/shared-ini-file-loader": "^3.1.7",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/credential-provider-env": "3.667.0",
+        "@aws-sdk/credential-provider-http": "3.667.0",
+        "@aws-sdk/credential-provider-ini": "3.669.0",
+        "@aws-sdk/credential-provider-process": "3.667.0",
+        "@aws-sdk/credential-provider-sso": "3.669.0",
+        "@aws-sdk/credential-provider-web-identity": "3.667.0",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/credential-provider-imds": "^3.2.4",
+        "@smithy/property-provider": "^3.1.7",
+        "@smithy/shared-ini-file-loader": "^3.1.8",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -605,15 +612,16 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-process": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.654.0.tgz",
-      "integrity": "sha512-PmQoo8sZ9Q2Ow8OMzK++Z9lI7MsRUG7sNq3E72DVA215dhtTICTDQwGlXH2AAmIp7n+G9LLRds+4wo2ehG4mkg==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.667.0.tgz",
+      "integrity": "sha512-HZHnvop32fKgsNHkdhVaul7UzQ25sEc0j9yqA4bjhtbk0ECl42kj3f1pJ+ZU/YD9ut8lMJs/vVqiOdNThVdeBw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/property-provider": "^3.1.6",
-        "@smithy/shared-ini-file-loader": "^3.1.7",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/core": "3.667.0",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/property-provider": "^3.1.7",
+        "@smithy/shared-ini-file-loader": "^3.1.8",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -621,17 +629,18 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-sso": {
-      "version": "3.658.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.658.0.tgz",
-      "integrity": "sha512-zK5FwCZJ9OovBPpoVfhlNyUhdFCgkkVbQolR47UKXCREH/P6sOsVay4/CnwtVQeMGlv9c8F41ELJXWaTRmdwHA==",
+      "version": "3.669.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.669.0.tgz",
+      "integrity": "sha512-HvpMJQ8xZuEGjadARVOfORPZx4U23PC5Jf6Fj+/NWK4VxEXhvf8J037fvGp3xRds5wUeuBBbhWX+Cbt0lbLCwQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/client-sso": "3.658.0",
-        "@aws-sdk/token-providers": "3.654.0",
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/property-provider": "^3.1.6",
-        "@smithy/shared-ini-file-loader": "^3.1.7",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/client-sso": "3.669.0",
+        "@aws-sdk/core": "3.667.0",
+        "@aws-sdk/token-providers": "3.667.0",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/property-provider": "^3.1.7",
+        "@smithy/shared-ini-file-loader": "^3.1.8",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -639,32 +648,33 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-web-identity": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.654.0.tgz",
-      "integrity": "sha512-6a2g9gMtZToqSu+CusjNK5zvbLJahQ9di7buO3iXgbizXpLXU1rnawCpWxwslMpT5fLgMSKDnKDrr6wdEk7jSw==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.667.0.tgz",
+      "integrity": "sha512-t8CFlZMD/1p/8Cli3rvRiTJpjr/8BO64gw166AHgFZYSN2h95L2l1tcW0jpsc3PprA32nLg1iQVKYt4WGM4ugw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/property-provider": "^3.1.6",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/core": "3.667.0",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/property-provider": "^3.1.7",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-sts": "^3.654.0"
+        "@aws-sdk/client-sts": "^3.667.0"
       }
     },
     "node_modules/@aws-sdk/lib-storage": {
-      "version": "3.658.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.658.0.tgz",
-      "integrity": "sha512-RaZo8Flu++WPdpYDhyB/i9oIeJtM3A9IJt2WHuOpGiKl5bEpkG2PzIxkCTjZyUnoC7GZJCbSt0+//4LeLAAX2g==",
+      "version": "3.669.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.669.0.tgz",
+      "integrity": "sha512-2tk+APdadz4zjGeWz3cR3vjiQoAeAOhpYdVlLc9HbbtwxCj6eHctK6HJl5vCzCSzAL6bkZqWoMFMkura5Bm5MA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/abort-controller": "^3.1.4",
-        "@smithy/middleware-endpoint": "^3.1.3",
-        "@smithy/smithy-client": "^3.3.2",
+        "@smithy/abort-controller": "^3.1.5",
+        "@smithy/middleware-endpoint": "^3.1.4",
+        "@smithy/smithy-client": "^3.4.0",
         "buffer": "5.6.0",
         "events": "3.3.0",
         "stream-browserify": "3.0.0",
@@ -674,20 +684,20 @@
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-s3": "^3.658.0"
+        "@aws-sdk/client-s3": "^3.669.0"
       }
     },
     "node_modules/@aws-sdk/middleware-bucket-endpoint": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.654.0.tgz",
-      "integrity": "sha512-/lWkyeLESiK+rAB4+NCw1cVPle9RN7RW/v7B4b8ORiCn1FwZLUPmEiZSYzyh4in5oa3Mri+W/g+KafZDH6LCbA==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.667.0.tgz",
+      "integrity": "sha512-XGz4jMAkDoTyFdtLz7ZF+C05IAhCTC1PllpvTBaj821z/L0ilhbqVhrT/f2Buw8Id/K5A390csGXgusXyrFFjA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
+        "@aws-sdk/types": "3.667.0",
         "@aws-sdk/util-arn-parser": "3.568.0",
-        "@smithy/node-config-provider": "^3.1.7",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/types": "^3.4.2",
+        "@smithy/node-config-provider": "^3.1.8",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/types": "^3.5.0",
         "@smithy/util-config-provider": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -696,14 +706,14 @@
       }
     },
     "node_modules/@aws-sdk/middleware-expect-continue": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.654.0.tgz",
-      "integrity": "sha512-S7fSlo8vdjkQTy9DmdF54ZsPwc+aA4z5Y9JVqAlGL9QiZe/fPtRE3GZ8BBbMICjBfMEa12tWjzhDz9su2c6PIA==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.667.0.tgz",
+      "integrity": "sha512-0TiSL9S5DSG95NHGIz6qTMuV7GDKVn8tvvGSrSSZu/wXO3JaYSH0AElVpYfc4PtPRqVpEyNA7nnc7W56mMCLWQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -711,19 +721,20 @@
       }
     },
     "node_modules/@aws-sdk/middleware-flexible-checksums": {
-      "version": "3.657.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.657.0.tgz",
-      "integrity": "sha512-aOfK0YmuL8baCqJ5nArHKyyFko/tSWMjGcegOA4Jo+XAu1PEk0wDi78vOHlv4dfSlF8sXJsAo4kaCEDF3UkGAQ==",
+      "version": "3.669.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.669.0.tgz",
+      "integrity": "sha512-01UQLoUzVwWMf+b+AEuwJ2lluBD+Cp8AcbyEHqvEaPdjGKHIS4BCvnY70mZYnAfRtL8R2h9tt7iI61oWU3Gjkg==",
       "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/crc32": "5.2.0",
         "@aws-crypto/crc32c": "5.2.0",
-        "@aws-sdk/types": "3.654.0",
+        "@aws-sdk/core": "3.667.0",
+        "@aws-sdk/types": "3.667.0",
         "@smithy/is-array-buffer": "^3.0.0",
-        "@smithy/node-config-provider": "^3.1.7",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/types": "^3.4.2",
-        "@smithy/util-middleware": "^3.0.6",
+        "@smithy/node-config-provider": "^3.1.8",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/types": "^3.5.0",
+        "@smithy/util-middleware": "^3.0.7",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -732,14 +743,14 @@
       }
     },
     "node_modules/@aws-sdk/middleware-host-header": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.654.0.tgz",
-      "integrity": "sha512-rxGgVHWKp8U2ubMv+t+vlIk7QYUaRCHaVpmUlJv0Wv6Q0KeO9a42T9FxHphjOTlCGQOLcjCreL9CF8Qhtb4mdQ==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.667.0.tgz",
+      "integrity": "sha512-Z7fIAMQnPegs7JjAQvlOeWXwpMRfegh5eCoIP6VLJIeR6DLfYKbP35JBtt98R6DXslrN2RsbTogjbxPEDQfw1w==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -747,13 +758,13 @@
       }
     },
     "node_modules/@aws-sdk/middleware-location-constraint": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.654.0.tgz",
-      "integrity": "sha512-Duvv5c4DEQ7P6c0YlcvEUW3xCJi6X2uktafNGjILhVDMQwShSF/aFqNv/ikWU/luQcmWHZ9DtDjTR9UKLh6eTA==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.667.0.tgz",
+      "integrity": "sha512-ob85H3HhT3/u5O+x0o557xGZ78vSNeSSwMaSitxdsfs2hOuoUl1uk+OeLpi1hkuJnL41FPpokV7TVII2XrFfmg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -761,13 +772,13 @@
       }
     },
     "node_modules/@aws-sdk/middleware-logger": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.654.0.tgz",
-      "integrity": "sha512-OQYb+nWlmASyXfRb989pwkJ9EVUMP1CrKn2eyTk3usl20JZmKo2Vjis6I0tLUkMSxMhnBJJlQKyWkRpD/u1FVg==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.667.0.tgz",
+      "integrity": "sha512-PtTRNpNm/5c746jRgZCNg4X9xEJIwggkGJrF0GP9AB1ANg4pc/sF2Fvn1NtqPe9wtQ2stunJprnm5WkCHN7QiA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -775,14 +786,14 @@
       }
     },
     "node_modules/@aws-sdk/middleware-recursion-detection": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.654.0.tgz",
-      "integrity": "sha512-gKSomgltKVmsT8sC6W7CrADZ4GHwX9epk3GcH6QhebVO3LA9LRbkL3TwOPUXakxxOLLUTYdOZLIOtFf7iH00lg==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.667.0.tgz",
+      "integrity": "sha512-U5glWD3ehFohzpUpopLtmqAlDurGWo2wRGPNgi4SwhWU7UDt6LS7E/UvJjqC0CUrjlzOw+my2A+Ncf+fisMhxQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -790,23 +801,23 @@
       }
     },
     "node_modules/@aws-sdk/middleware-sdk-s3": {
-      "version": "3.658.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.658.0.tgz",
-      "integrity": "sha512-LLJjO+74tXiJvMEsZ7v4M+1aJKZsNWbf/TvZCuNpNkvUakVWCkmPQl2Qmaft/y0LABADSz5yCSFAe2CZz5nIHw==",
+      "version": "3.669.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.669.0.tgz",
+      "integrity": "sha512-b2QUQ7DcIcVCUFhvmFEDI90BemvQhO0ntIajllLqQSy88PSNdLDCVx5mIzfxaaK/1tdY/UsEDRRm1kMQHJDQpg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/core": "3.658.0",
-        "@aws-sdk/types": "3.654.0",
+        "@aws-sdk/core": "3.667.0",
+        "@aws-sdk/types": "3.667.0",
         "@aws-sdk/util-arn-parser": "3.568.0",
-        "@smithy/core": "^2.4.3",
-        "@smithy/node-config-provider": "^3.1.7",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/signature-v4": "^4.1.3",
-        "@smithy/smithy-client": "^3.3.2",
-        "@smithy/types": "^3.4.2",
+        "@smithy/core": "^2.4.8",
+        "@smithy/node-config-provider": "^3.1.8",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/signature-v4": "^4.2.0",
+        "@smithy/smithy-client": "^3.4.0",
+        "@smithy/types": "^3.5.0",
         "@smithy/util-config-provider": "^3.0.0",
-        "@smithy/util-middleware": "^3.0.6",
-        "@smithy/util-stream": "^3.1.6",
+        "@smithy/util-middleware": "^3.0.7",
+        "@smithy/util-stream": "^3.1.9",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -815,13 +826,13 @@
       }
     },
     "node_modules/@aws-sdk/middleware-ssec": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.654.0.tgz",
-      "integrity": "sha512-k7hkQDJh4hcRJC7YojQ11kc37SY4foryen26Eafj5qYjeG2OGMW0oZTJDl1TVFJ7AcCjqIuMIo0Ho2US/2JspQ==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.667.0.tgz",
+      "integrity": "sha512-1wuAUZIkmZIvOmGg5qNQU821CGFHhkuKioxXgNh0DpUxZ9+AeiV7yorJr+bqkb2KBFv1i1TnzGRecvKf/KvZIQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -829,15 +840,17 @@
       }
     },
     "node_modules/@aws-sdk/middleware-user-agent": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.654.0.tgz",
-      "integrity": "sha512-liCcqPAyRsr53cy2tYu4qeH4MMN0eh9g6k56XzI5xd4SghXH5YWh4qOYAlQ8T66ZV4nPMtD8GLtLXGzsH8moFg==",
+      "version": "3.669.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.669.0.tgz",
+      "integrity": "sha512-K8ScPi45zjJrj5Y2gRqVsvKKQCQbvQBfYGcBw9ZOx9TTavH80bOCBjWg/GFnvs4f37tqVc1wMN2oGvcTF6HveQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@aws-sdk/util-endpoints": "3.654.0",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/core": "3.667.0",
+        "@aws-sdk/types": "3.667.0",
+        "@aws-sdk/util-endpoints": "3.667.0",
+        "@smithy/core": "^2.4.8",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -845,16 +858,16 @@
       }
     },
     "node_modules/@aws-sdk/region-config-resolver": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.654.0.tgz",
-      "integrity": "sha512-ydGOrXJxj3x0sJhsXyTmvJVLAE0xxuTWFJihTl67RtaO7VRNtd82I3P3bwoMMaDn5WpmV5mPo8fEUDRlBm3fPg==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.667.0.tgz",
+      "integrity": "sha512-iNr+JhhA902JMKHG9IwT9YdaEx6KGl6vjAL5BRNeOjfj4cZYMog6Lz/IlfOAltMtT0w88DAHDEFrBd2uO0l2eg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/node-config-provider": "^3.1.7",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/node-config-provider": "^3.1.8",
+        "@smithy/types": "^3.5.0",
         "@smithy/util-config-provider": "^3.0.0",
-        "@smithy/util-middleware": "^3.0.6",
+        "@smithy/util-middleware": "^3.0.7",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -862,18 +875,18 @@
       }
     },
     "node_modules/@aws-sdk/s3-request-presigner": {
-      "version": "3.658.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.658.0.tgz",
-      "integrity": "sha512-nQp1yO8U899d45LH7WvGso/F4ZxtoLaLndcHFdyPhFoskczLH+t0a6KWbz4rpNWBKI6pLj1VOvkpwTGnNQ/mMw==",
+      "version": "3.669.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.669.0.tgz",
+      "integrity": "sha512-vlSiieoqw2+xRqjwuRtb6mzqPi7xN8djd9OorHCAwnDryVRWQucRi8ZRf5+BT6Bc+3sbqV3DTgw847EA3rNq2w==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/signature-v4-multi-region": "3.658.0",
-        "@aws-sdk/types": "3.654.0",
-        "@aws-sdk/util-format-url": "3.654.0",
-        "@smithy/middleware-endpoint": "^3.1.3",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/smithy-client": "^3.3.2",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/signature-v4-multi-region": "3.669.0",
+        "@aws-sdk/types": "3.667.0",
+        "@aws-sdk/util-format-url": "3.667.0",
+        "@smithy/middleware-endpoint": "^3.1.4",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/smithy-client": "^3.4.0",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -881,16 +894,16 @@
       }
     },
     "node_modules/@aws-sdk/signature-v4-multi-region": {
-      "version": "3.658.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.658.0.tgz",
-      "integrity": "sha512-eK00rYVQVG2fqqR8QxrjxZxgJKasyz3honFfKFNB5nKyOvKXkVI5QJ3HvbrWgRaMt21n2qcYQZxTO6dTkfeWVA==",
+      "version": "3.669.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.669.0.tgz",
+      "integrity": "sha512-TVwlWAxfBHnFjnfTBQWUhzVJzjwVhkq1+KR0JZV7JrfqeyBOdZjAaV9ie3VNY9HUouecq1fDuKaSwe4JiWQsHg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/middleware-sdk-s3": "3.658.0",
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/signature-v4": "^4.1.3",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/middleware-sdk-s3": "3.669.0",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/signature-v4": "^4.2.0",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -898,31 +911,31 @@
       }
     },
     "node_modules/@aws-sdk/token-providers": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.654.0.tgz",
-      "integrity": "sha512-D8GeJYmvbfWkQDtTB4owmIobSMexZel0fOoetwvgCQ/7L8VPph3Q2bn1TRRIXvH7wdt6DcDxA3tKMHPBkT3GlA==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.667.0.tgz",
+      "integrity": "sha512-ZecJlG8p6D4UTYlBHwOWX6nknVtw/OBJ3yPXTSajBjhUlj9lE2xvejI8gl4rqkyLXk7z3bki+KR4tATbMaM9yg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/property-provider": "^3.1.6",
-        "@smithy/shared-ini-file-loader": "^3.1.7",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/property-provider": "^3.1.7",
+        "@smithy/shared-ini-file-loader": "^3.1.8",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-sso-oidc": "^3.654.0"
+        "@aws-sdk/client-sso-oidc": "^3.667.0"
       }
     },
     "node_modules/@aws-sdk/types": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.654.0.tgz",
-      "integrity": "sha512-VWvbED3SV+10QJIcmU/PKjsKilsTV16d1I7/on4bvD/jo1qGeMXqLDBSen3ks/tuvXZF/mFc7ZW/W2DiLVtO7A==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.667.0.tgz",
+      "integrity": "sha512-gYq0xCsqFfQaSL/yT1Gl1vIUjtsg7d7RhnUfsXaHt8xTxOKRTdH9GjbesBjXOzgOvB0W0vfssfreSNGFlOOMJg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -942,14 +955,14 @@
       }
     },
     "node_modules/@aws-sdk/util-endpoints": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.654.0.tgz",
-      "integrity": "sha512-i902fcBknHs0Irgdpi62+QMvzxE+bczvILXigYrlHL4+PiEnlMVpni5L5W1qCkNZXf8AaMrSBuR1NZAGp6UOUw==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.667.0.tgz",
+      "integrity": "sha512-X22SYDAuQJWnkF1/q17pkX3nGw5XMD9YEUbmt87vUnRq7iyJ3JOpl6UKOBeUBaL838wA5yzdbinmCITJ/VZ1QA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/types": "^3.4.2",
-        "@smithy/util-endpoints": "^2.1.2",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/types": "^3.5.0",
+        "@smithy/util-endpoints": "^2.1.3",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -957,14 +970,14 @@
       }
     },
     "node_modules/@aws-sdk/util-format-url": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.654.0.tgz",
-      "integrity": "sha512-2yAlJ/l1uTJhS52iu4+/EvdIyQhDBL+nATY8rEjFI0H+BHGVrJIH2CL4DByhvi2yvYwsqQX0HYah6pF/yoXukA==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.667.0.tgz",
+      "integrity": "sha512-S0D731SnEPnTfbJ/Dldw5dDrOc8uipK6NLXHDs2xIq0t61iwZLMEiN8yWCs2wAZVVJKpldUM1THLaaufU9SSSA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/querystring-builder": "^3.0.6",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/querystring-builder": "^3.0.7",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -984,26 +997,27 @@
       }
     },
     "node_modules/@aws-sdk/util-user-agent-browser": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.654.0.tgz",
-      "integrity": "sha512-ykYAJqvnxLt7wfrqya28wuH3/7NdrwzfiFd7NqEVQf7dXVxL5RPEpD7DxjcyQo3DsHvvdUvGZVaQhozycn1pzA==",
+      "version": "3.667.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.667.0.tgz",
+      "integrity": "sha512-y1pKlNzNpxzddM0QSnfIfIbi3Z9LTag1VDjYyZRbEGGSVip2J00qKsET+979nRezWMyJgw5GPBQR3Y+rN+jh0Q==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/types": "^3.5.0",
         "bowser": "^2.11.0",
         "tslib": "^2.6.2"
       }
     },
     "node_modules/@aws-sdk/util-user-agent-node": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.654.0.tgz",
-      "integrity": "sha512-a0ojjdBN6pqv6gB4H/QPPSfhs7mFtlVwnmKCM/QrTaFzN0U810PJ1BST3lBx5sa23I5jWHGaoFY+5q65C3clLQ==",
+      "version": "3.669.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.669.0.tgz",
+      "integrity": "sha512-9jxCYrgggy2xd44ZASqI7AMiRVaSiFp+06Kg8BQSU0ijKpBJlwcsqIS8pDT/n6LxuOw2eV5ipvM2C0r1iKzrGA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.654.0",
-        "@smithy/node-config-provider": "^3.1.7",
-        "@smithy/types": "^3.4.2",
+        "@aws-sdk/middleware-user-agent": "3.669.0",
+        "@aws-sdk/types": "3.667.0",
+        "@smithy/node-config-provider": "^3.1.8",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1019,12 +1033,12 @@
       }
     },
     "node_modules/@aws-sdk/xml-builder": {
-      "version": "3.654.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.654.0.tgz",
-      "integrity": "sha512-qA2diK3d/ztC8HUb7NwPKbJRV01NpzTzxFn+L5G3HzJBNeKbjLcprQ/9uG9gp2UEx2Go782FI1ddrMNa0qBICA==",
+      "version": "3.662.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.662.0.tgz",
+      "integrity": "sha512-ikLkXn0igUpnJu2mCZjklvmcDGWT9OaLRv3JyC/cRkTaaSrblPjPM7KKsltxdMTLQ+v7fjCN0TsJpxphMfaOPA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1032,30 +1046,30 @@
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
-      "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz",
+      "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
-      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz",
+      "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
-      "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz",
+      "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6"
+        "@babel/types": "^7.25.8"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -1065,13 +1079,13 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
-      "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz",
+      "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-string-parser": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-string-parser": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -1495,17 +1509,84 @@
         "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
+    "node_modules/@eslint/compat": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.0.tgz",
+      "integrity": "sha512-CkPWddN7J9JPrQedEr2X7AjK9y1jaMJtxZ4A/+jTMFA2+n5BWhcKHW/EbJyARqg2zzQfgtWUtVmG3hrG6+nGpg==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "peerDependencies": {
+        "eslint": "^9.10.0"
+      },
+      "peerDependenciesMeta": {
+        "eslint": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@eslint/config-array": {
+      "version": "0.18.0",
+      "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz",
+      "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@eslint/object-schema": "^2.1.4",
+        "debug": "^4.3.1",
+        "minimatch": "^3.1.2"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
+    "node_modules/@eslint/config-array/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/@eslint/config-array/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/@eslint/core": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz",
+      "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
     "node_modules/@eslint/eslintrc": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
-      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+      "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "ajv": "^6.12.4",
         "debug": "^4.3.2",
-        "espree": "^9.6.0",
-        "globals": "^13.19.0",
+        "espree": "^10.0.1",
+        "globals": "^14.0.0",
         "ignore": "^5.2.0",
         "import-fresh": "^3.2.1",
         "js-yaml": "^4.1.0",
@@ -1513,7 +1594,7 @@
         "strip-json-comments": "^3.1.1"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
@@ -1568,13 +1649,36 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "8.57.1",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
-      "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
+      "version": "9.12.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.12.0.tgz",
+      "integrity": "sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
+    "node_modules/@eslint/object-schema": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz",
+      "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
+    "node_modules/@eslint/plugin-kit": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz",
+      "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "levn": "^0.4.1"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
     "node_modules/@fortawesome/fontawesome-free": {
@@ -1586,44 +1690,59 @@
         "node": ">=6"
       }
     },
-    "node_modules/@humanwhocodes/config-array": {
-      "version": "0.13.0",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
-      "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
-      "deprecated": "Use @eslint/config-array instead",
+    "node_modules/@hey-api/client-axios": {
+      "version": "0.2.7",
+      "resolved": "https://registry.npmjs.org/@hey-api/client-axios/-/client-axios-0.2.7.tgz",
+      "integrity": "sha512-3691It5Bt87/kS1K5+vPt6RdSk/gCnkiaEgjrasgRWKHktJ727f+7QWs+KfmCTSGeXf5ODTu7zNOBwzVkLzGkA==",
+      "license": "MIT",
+      "peerDependencies": {
+        "axios": ">= 1.0.0 < 2"
+      }
+    },
+    "node_modules/@hey-api/openapi-ts": {
+      "version": "0.53.9",
+      "resolved": "https://registry.npmjs.org/@hey-api/openapi-ts/-/openapi-ts-0.53.9.tgz",
+      "integrity": "sha512-5fdjxM7N9IQXXLGZLezRnaP/s/wnh4OProHyX0pdO9T7sVfUk6sO4tmlqjsbmtL3Woh3yLJYFWf/mjuhtcXEpA==",
       "dev": true,
-      "license": "Apache-2.0",
+      "license": "MIT",
       "dependencies": {
-        "@humanwhocodes/object-schema": "^2.0.3",
-        "debug": "^4.3.1",
-        "minimatch": "^3.0.5"
+        "@apidevtools/json-schema-ref-parser": "11.7.0",
+        "c12": "2.0.1",
+        "commander": "12.1.0",
+        "handlebars": "4.7.8"
+      },
+      "bin": {
+        "openapi-ts": "bin/index.cjs"
       },
       "engines": {
-        "node": ">=10.10.0"
+        "node": "^18.0.0 || >=20.0.0"
+      },
+      "peerDependencies": {
+        "typescript": "^5.x"
       }
     },
-    "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+    "node_modules/@humanfs/core": {
+      "version": "0.19.0",
+      "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.0.tgz",
+      "integrity": "sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==",
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=18.18.0"
       }
     },
-    "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+    "node_modules/@humanfs/node": {
+      "version": "0.16.5",
+      "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.5.tgz",
+      "integrity": "sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==",
       "dev": true,
-      "license": "ISC",
+      "license": "Apache-2.0",
       "dependencies": {
-        "brace-expansion": "^1.1.7"
+        "@humanfs/core": "^0.19.0",
+        "@humanwhocodes/retry": "^0.3.0"
       },
       "engines": {
-        "node": "*"
+        "node": ">=18.18.0"
       }
     },
     "node_modules/@humanwhocodes/module-importer": {
@@ -1640,13 +1759,19 @@
         "url": "https://github.com/sponsors/nzakas"
       }
     },
-    "node_modules/@humanwhocodes/object-schema": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
-      "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
-      "deprecated": "Use @eslint/object-schema instead",
+    "node_modules/@humanwhocodes/retry": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+      "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
       "dev": true,
-      "license": "BSD-3-Clause"
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=18.18"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
+      }
     },
     "node_modules/@jridgewell/sourcemap-codec": {
       "version": "1.5.0",
@@ -1705,6 +1830,292 @@
         "node": ">= 8"
       }
     },
+    "node_modules/@parcel/watcher": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz",
+      "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "detect-libc": "^1.0.3",
+        "is-glob": "^4.0.3",
+        "micromatch": "^4.0.5",
+        "node-addon-api": "^7.0.0"
+      },
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      },
+      "optionalDependencies": {
+        "@parcel/watcher-android-arm64": "2.4.1",
+        "@parcel/watcher-darwin-arm64": "2.4.1",
+        "@parcel/watcher-darwin-x64": "2.4.1",
+        "@parcel/watcher-freebsd-x64": "2.4.1",
+        "@parcel/watcher-linux-arm-glibc": "2.4.1",
+        "@parcel/watcher-linux-arm64-glibc": "2.4.1",
+        "@parcel/watcher-linux-arm64-musl": "2.4.1",
+        "@parcel/watcher-linux-x64-glibc": "2.4.1",
+        "@parcel/watcher-linux-x64-musl": "2.4.1",
+        "@parcel/watcher-win32-arm64": "2.4.1",
+        "@parcel/watcher-win32-ia32": "2.4.1",
+        "@parcel/watcher-win32-x64": "2.4.1"
+      }
+    },
+    "node_modules/@parcel/watcher-android-arm64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz",
+      "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-darwin-arm64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz",
+      "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-darwin-x64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz",
+      "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-freebsd-x64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz",
+      "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm-glibc": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz",
+      "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm64-glibc": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz",
+      "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm64-musl": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz",
+      "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-x64-glibc": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz",
+      "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-x64-musl": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz",
+      "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-win32-arm64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz",
+      "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-win32-ia32": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz",
+      "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-win32-x64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz",
+      "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
     "node_modules/@pkgr/core": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
@@ -1775,9 +2186,9 @@
       }
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz",
-      "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz",
+      "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==",
       "cpu": [
         "arm"
       ],
@@ -1789,9 +2200,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz",
-      "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz",
+      "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==",
       "cpu": [
         "arm64"
       ],
@@ -1803,9 +2214,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz",
-      "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz",
+      "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==",
       "cpu": [
         "arm64"
       ],
@@ -1817,9 +2228,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz",
-      "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz",
+      "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==",
       "cpu": [
         "x64"
       ],
@@ -1831,9 +2242,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz",
-      "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz",
+      "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==",
       "cpu": [
         "arm"
       ],
@@ -1845,9 +2256,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz",
-      "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz",
+      "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==",
       "cpu": [
         "arm"
       ],
@@ -1859,9 +2270,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz",
-      "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz",
+      "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==",
       "cpu": [
         "arm64"
       ],
@@ -1873,9 +2284,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz",
-      "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz",
+      "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==",
       "cpu": [
         "arm64"
       ],
@@ -1887,9 +2298,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz",
-      "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz",
+      "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==",
       "cpu": [
         "ppc64"
       ],
@@ -1901,9 +2312,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz",
-      "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz",
+      "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==",
       "cpu": [
         "riscv64"
       ],
@@ -1915,9 +2326,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz",
-      "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz",
+      "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==",
       "cpu": [
         "s390x"
       ],
@@ -1929,9 +2340,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz",
-      "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz",
+      "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==",
       "cpu": [
         "x64"
       ],
@@ -1943,9 +2354,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz",
-      "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz",
+      "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==",
       "cpu": [
         "x64"
       ],
@@ -1957,9 +2368,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz",
-      "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz",
+      "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==",
       "cpu": [
         "arm64"
       ],
@@ -1971,9 +2382,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz",
-      "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz",
+      "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==",
       "cpu": [
         "ia32"
       ],
@@ -1985,9 +2396,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz",
-      "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz",
+      "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==",
       "cpu": [
         "x64"
       ],
@@ -2006,12 +2417,12 @@
       "license": "MIT"
     },
     "node_modules/@smithy/abort-controller": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.4.tgz",
-      "integrity": "sha512-VupaALAQlXViW3/enTf/f5l5JZYSAxoJL7f0nanhNNKnww6DGCg1oYIuNP78KDugnkwthBO6iEcym16HhWV8RQ==",
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.5.tgz",
+      "integrity": "sha512-DhNPnqTqPoG8aZ5dWkFOgsuY+i0GQ3CI6hMmvCoduNsnU9gUZWZBwGfDQsTTB7NvFPkom1df7jMIJWU90kuXXg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2038,15 +2449,15 @@
       }
     },
     "node_modules/@smithy/config-resolver": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.8.tgz",
-      "integrity": "sha512-Tv1obAC18XOd2OnDAjSWmmthzx6Pdeh63FbLin8MlPiuJ2ATpKkq0NcNOJFr0dO+JmZXnwu8FQxKJ3TKJ3Hulw==",
+      "version": "3.0.9",
+      "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.9.tgz",
+      "integrity": "sha512-5d9oBf40qC7n2xUoHmntKLdqsyTMMo/r49+eqSIjJ73eDfEtljAxEhzIQ3bkgXJtR3xiv7YzMT/3FF3ORkjWdg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/node-config-provider": "^3.1.7",
-        "@smithy/types": "^3.4.2",
+        "@smithy/node-config-provider": "^3.1.8",
+        "@smithy/types": "^3.5.0",
         "@smithy/util-config-provider": "^3.0.0",
-        "@smithy/util-middleware": "^3.0.6",
+        "@smithy/util-middleware": "^3.0.7",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2054,19 +2465,19 @@
       }
     },
     "node_modules/@smithy/core": {
-      "version": "2.4.6",
-      "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.6.tgz",
-      "integrity": "sha512-6lQQp99hnyuNNIzeTYSzCUXJHwvvFLY7hfdFGSJM95tjRDJGfzWYFRBXPaM9766LiiTsQ561KErtbufzUFSYUg==",
+      "version": "2.4.8",
+      "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.8.tgz",
+      "integrity": "sha512-x4qWk7p/a4dcf7Vxb2MODIf4OIcqNbK182WxRvZ/3oKPrf/6Fdic5sSElhO1UtXpWKBazWfqg0ZEK9xN1DsuHA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/middleware-endpoint": "^3.1.3",
-        "@smithy/middleware-retry": "^3.0.21",
-        "@smithy/middleware-serde": "^3.0.6",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/smithy-client": "^3.3.5",
-        "@smithy/types": "^3.4.2",
+        "@smithy/middleware-endpoint": "^3.1.4",
+        "@smithy/middleware-retry": "^3.0.23",
+        "@smithy/middleware-serde": "^3.0.7",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/smithy-client": "^3.4.0",
+        "@smithy/types": "^3.5.0",
         "@smithy/util-body-length-browser": "^3.0.0",
-        "@smithy/util-middleware": "^3.0.6",
+        "@smithy/util-middleware": "^3.0.7",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -2075,15 +2486,15 @@
       }
     },
     "node_modules/@smithy/credential-provider-imds": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.3.tgz",
-      "integrity": "sha512-VoxMzSzdvkkjMJNE38yQgx4CfnmT+Z+5EUXkg4x7yag93eQkVQgZvN3XBSHC/ylfBbLbAtdu7flTCChX9I+mVg==",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.4.tgz",
+      "integrity": "sha512-S9bb0EIokfYEuar4kEbLta+ivlKCWOCFsLZuilkNy9i0uEUEHSi47IFLPaxqqCl+0ftKmcOTHayY5nQhAuq7+w==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/node-config-provider": "^3.1.7",
-        "@smithy/property-provider": "^3.1.6",
-        "@smithy/types": "^3.4.2",
-        "@smithy/url-parser": "^3.0.6",
+        "@smithy/node-config-provider": "^3.1.8",
+        "@smithy/property-provider": "^3.1.7",
+        "@smithy/types": "^3.5.0",
+        "@smithy/url-parser": "^3.0.7",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2091,25 +2502,25 @@
       }
     },
     "node_modules/@smithy/eventstream-codec": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.5.tgz",
-      "integrity": "sha512-6pu+PT2r+5ZnWEV3vLV1DzyrpJ0TmehQlniIDCSpZg6+Ji2SfOI38EqUyQ+O8lotVElCrfVc9chKtSMe9cmCZQ==",
+      "version": "3.1.6",
+      "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.6.tgz",
+      "integrity": "sha512-SBiOYPBH+5wOyPS7lfI150ePfGLhnp/eTu5RnV9xvhGvRiKfnl6HzRK9wehBph+il8FxS9KTeadx7Rcmf1GLPQ==",
       "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/crc32": "5.2.0",
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "@smithy/util-hex-encoding": "^3.0.0",
         "tslib": "^2.6.2"
       }
     },
     "node_modules/@smithy/eventstream-serde-browser": {
-      "version": "3.0.9",
-      "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.9.tgz",
-      "integrity": "sha512-PiQLo6OQmZAotJweIcObL1H44gkvuJACKMNqpBBe5Rf2Ax1DOcGi/28+feZI7yTe1ERHlQQaGnm8sSkyDUgsMg==",
+      "version": "3.0.10",
+      "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.10.tgz",
+      "integrity": "sha512-1i9aMY6Pl/SmA6NjvidxnfBLHMPzhKu2BP148pEt5VwhMdmXn36PE2kWKGa9Hj8b0XGtCTRucpCncylevCtI7g==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/eventstream-serde-universal": "^3.0.8",
-        "@smithy/types": "^3.4.2",
+        "@smithy/eventstream-serde-universal": "^3.0.9",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2117,12 +2528,12 @@
       }
     },
     "node_modules/@smithy/eventstream-serde-config-resolver": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.6.tgz",
-      "integrity": "sha512-iew15It+c7WfnVowWkt2a7cdPp533LFJnpjDQgfZQcxv2QiOcyEcea31mnrk5PVbgo0nNH3VbYGq7myw2q/F6A==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.7.tgz",
+      "integrity": "sha512-eVzhGQBPEqXXYHvIUku0jMTxd4gDvenRzUQPTmKVWdRvp9JUCKrbAXGQRYiGxUYq9+cqQckRm0wq3kTWnNtDhw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2130,13 +2541,13 @@
       }
     },
     "node_modules/@smithy/eventstream-serde-node": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.8.tgz",
-      "integrity": "sha512-6m+wI+fT0na+6oao6UqALVA38fsScCpoG5UO/A8ZSyGLnPM2i4MS1cFUhpuALgvLMxfYoTCh7qSeJa0aG4IWpQ==",
+      "version": "3.0.9",
+      "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.9.tgz",
+      "integrity": "sha512-JE0Guqvt0xsmfQ5y1EI342/qtJqznBv8cJqkHZV10PwC8GWGU5KNgFbQnsVCcX+xF+qIqwwfRmeWoJCjuOLmng==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/eventstream-serde-universal": "^3.0.8",
-        "@smithy/types": "^3.4.2",
+        "@smithy/eventstream-serde-universal": "^3.0.9",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2144,13 +2555,13 @@
       }
     },
     "node_modules/@smithy/eventstream-serde-universal": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.8.tgz",
-      "integrity": "sha512-09tqzIQ6e+7jLqGvRji1yJoDbL/zob0OFhq75edgStWErGLf16+yI5hRc/o9/YAybOhUZs/swpW2SPn892G5Gg==",
+      "version": "3.0.9",
+      "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.9.tgz",
+      "integrity": "sha512-bydfgSisfepCufw9kCEnWRxqxJFzX/o8ysXWv+W9F2FIyiaEwZ/D8bBKINbh4ONz3i05QJ1xE7A5OKYvgJsXaw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/eventstream-codec": "^3.1.5",
-        "@smithy/types": "^3.4.2",
+        "@smithy/eventstream-codec": "^3.1.6",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2158,37 +2569,37 @@
       }
     },
     "node_modules/@smithy/fetch-http-handler": {
-      "version": "3.2.8",
-      "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.8.tgz",
-      "integrity": "sha512-Lqe0B8F5RM7zkw//6avq1SJ8AfaRd3ubFUS1eVp5WszV7p6Ne5hQ4dSuMHDpNRPhgTvj4va9Kd/pcVigHEHRow==",
+      "version": "3.2.9",
+      "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz",
+      "integrity": "sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/querystring-builder": "^3.0.6",
-        "@smithy/types": "^3.4.2",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/querystring-builder": "^3.0.7",
+        "@smithy/types": "^3.5.0",
         "@smithy/util-base64": "^3.0.0",
         "tslib": "^2.6.2"
       }
     },
     "node_modules/@smithy/hash-blob-browser": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.5.tgz",
-      "integrity": "sha512-Vi3eoNCmao4iKglS80ktYnBOIqZhjbDDwa1IIbF/VaJ8PsHnZTQ5wSicicPrU7nTI4JPFn92/txzWkh4GlK18Q==",
+      "version": "3.1.6",
+      "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.6.tgz",
+      "integrity": "sha512-BKNcMIaeZ9lB67sgo88iCF4YB35KT8X2dNJ8DqrtZNTgN6tUDYBKThzfGtos/mnZkGkW91AYHisESHmSiYQmKw==",
       "license": "Apache-2.0",
       "dependencies": {
         "@smithy/chunked-blob-reader": "^3.0.0",
         "@smithy/chunked-blob-reader-native": "^3.0.0",
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       }
     },
     "node_modules/@smithy/hash-node": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.6.tgz",
-      "integrity": "sha512-c/FHEdKK/7DU2z6ZE91L36ahyXWayR3B+FzELjnYq7wH5YqIseM24V+pWCS9kFn1Ln8OFGTf+pyYPiHZuX0s/Q==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.7.tgz",
+      "integrity": "sha512-SAGHN+QkrwcHFjfWzs/czX94ZEjPJ0CrWJS3M43WswDXVEuP4AVy9gJ3+AF6JQHZD13bojmuf/Ap/ItDeZ+Qfw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "@smithy/util-buffer-from": "^3.0.0",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
@@ -2198,12 +2609,12 @@
       }
     },
     "node_modules/@smithy/hash-stream-node": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.5.tgz",
-      "integrity": "sha512-61CyFCzqN3VBfcnGX7mof/rkzLb8oHjm4Lr6ZwBIRpBssBb8d09ChrZAqinP2rUrA915BRNkq9NpJz18N7+3hQ==",
+      "version": "3.1.6",
+      "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.6.tgz",
+      "integrity": "sha512-sFSSt7cmCpFWZPfVx7k80Bgb1K2VJ27VmMxH8X+dDhp7Wv8IBgID4K2VK5ehMJROF8hQgcj4WywnkHIwX/xlwQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -2212,12 +2623,12 @@
       }
     },
     "node_modules/@smithy/invalid-dependency": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.6.tgz",
-      "integrity": "sha512-czM7Ioq3s8pIXht7oD+vmgy4Wfb4XavU/k/irO8NdXFFOx7YAlsCCcKOh/lJD1mJSYQqiR7NmpZ9JviryD/7AQ==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.7.tgz",
+      "integrity": "sha512-Bq00GsAhHeYSuZX8Kpu4sbI9agH2BNYnqUmmbTGWOhki9NVsWn2jFr896vvoTMH8KAjNX/ErC/8t5QHuEXG+IA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       }
     },
@@ -2234,24 +2645,24 @@
       }
     },
     "node_modules/@smithy/md5-js": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.6.tgz",
-      "integrity": "sha512-Ze690T8O3M5SVbb70WormwrKzVf9QQRtIuxtJDgpUQDkmt+PtdYDetBbyCbF9ryupxLw6tgzWKgwffAShhVIXQ==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.7.tgz",
+      "integrity": "sha512-+wco9IN9uOW4tNGkZIqTR6IXyfO7Z8A+IOq82QCRn/f/xcmt7H1fXwmQVbfDSvbeFwfNnhv7s+u0G9PzPG6o2w==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       }
     },
     "node_modules/@smithy/middleware-content-length": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.8.tgz",
-      "integrity": "sha512-VuyszlSO49WKh3H9/kIO2kf07VUwGV80QRiaDxUfP8P8UKlokz381ETJvwLhwuypBYhLymCYyNhB3fLAGBX2og==",
+      "version": "3.0.9",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.9.tgz",
+      "integrity": "sha512-t97PidoGElF9hTtLCrof32wfWMqC5g2SEJNxaVH3NjlatuNGsdxXRYO/t+RPnxA15RpYiS0f+zG7FuE2DeGgjA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/types": "^3.4.2",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2259,17 +2670,17 @@
       }
     },
     "node_modules/@smithy/middleware-endpoint": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.3.tgz",
-      "integrity": "sha512-KeM/OrK8MVFUsoJsmCN0MZMVPjKKLudn13xpgwIMpGTYpA8QZB2Xq5tJ+RE6iu3A6NhOI4VajDTwBsm8pwwrhg==",
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.4.tgz",
+      "integrity": "sha512-/ChcVHekAyzUbyPRI8CzPPLj6y8QRAfJngWcLMgsWxKVzw/RzBV69mSOzJYDD3pRwushA1+5tHtPF8fjmzBnrQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/middleware-serde": "^3.0.6",
-        "@smithy/node-config-provider": "^3.1.7",
-        "@smithy/shared-ini-file-loader": "^3.1.7",
-        "@smithy/types": "^3.4.2",
-        "@smithy/url-parser": "^3.0.6",
-        "@smithy/util-middleware": "^3.0.6",
+        "@smithy/middleware-serde": "^3.0.7",
+        "@smithy/node-config-provider": "^3.1.8",
+        "@smithy/shared-ini-file-loader": "^3.1.8",
+        "@smithy/types": "^3.5.0",
+        "@smithy/url-parser": "^3.0.7",
+        "@smithy/util-middleware": "^3.0.7",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2277,18 +2688,18 @@
       }
     },
     "node_modules/@smithy/middleware-retry": {
-      "version": "3.0.21",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.21.tgz",
-      "integrity": "sha512-/h0fElV95LekVVEJuSw+aI11S1Y3zIUwBc6h9ZbUv43Gl2weXsbQwjLoet6j/Qtb0phfrSxS6pNg6FqgJOWZkA==",
+      "version": "3.0.23",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.23.tgz",
+      "integrity": "sha512-x9PbGXxkcXIpm6L26qRSCC+eaYcHwybRmqU8LO/WM2RRlW0g8lz6FIiKbKgGvHuoK3dLZRiQVSQJveiCzwnA5A==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/node-config-provider": "^3.1.7",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/service-error-classification": "^3.0.6",
-        "@smithy/smithy-client": "^3.3.5",
-        "@smithy/types": "^3.4.2",
-        "@smithy/util-middleware": "^3.0.6",
-        "@smithy/util-retry": "^3.0.6",
+        "@smithy/node-config-provider": "^3.1.8",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/service-error-classification": "^3.0.7",
+        "@smithy/smithy-client": "^3.4.0",
+        "@smithy/types": "^3.5.0",
+        "@smithy/util-middleware": "^3.0.7",
+        "@smithy/util-retry": "^3.0.7",
         "tslib": "^2.6.2",
         "uuid": "^9.0.1"
       },
@@ -2297,12 +2708,12 @@
       }
     },
     "node_modules/@smithy/middleware-serde": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.6.tgz",
-      "integrity": "sha512-KKTUSl1MzOM0MAjGbudeaVNtIDo+PpekTBkCNwvfZlKndodrnvRo+00USatiyLOc0ujjO9UydMRu3O9dYML7ag==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.7.tgz",
+      "integrity": "sha512-VytaagsQqtH2OugzVTq4qvjkLNbWehHfGcGr0JLJmlDRrNCeZoWkWsSOw1nhS/4hyUUWF/TLGGml4X/OnEep5g==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2310,12 +2721,12 @@
       }
     },
     "node_modules/@smithy/middleware-stack": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.6.tgz",
-      "integrity": "sha512-2c0eSYhTQ8xQqHMcRxLMpadFbTXg6Zla5l0mwNftFCZMQmuhI7EbAJMx6R5eqfuV3YbJ3QGyS3d5uSmrHV8Khg==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.7.tgz",
+      "integrity": "sha512-EyTbMCdqS1DoeQsO4gI7z2Gzq1MoRFAeS8GkFYIwbedB7Lp5zlLHJdg+56tllIIG5Hnf9ZWX48YKSHlsKvugGA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2323,14 +2734,14 @@
       }
     },
     "node_modules/@smithy/node-config-provider": {
-      "version": "3.1.7",
-      "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.7.tgz",
-      "integrity": "sha512-g3mfnC3Oo8pOI0dYuPXLtdW1WGVb3bR2tkV21GNkm0ZvQjLTtamXAwCWt/FCb0HGvKt3gHHmF1XerG0ICfalOg==",
+      "version": "3.1.8",
+      "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.8.tgz",
+      "integrity": "sha512-E0rU0DglpeJn5ge64mk8wTGEXcQwmpUTY5Zr7IzTpDLmHKiIamINERNZYrPQjg58Ck236sEKSwRSHA4CwshU6Q==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/property-provider": "^3.1.6",
-        "@smithy/shared-ini-file-loader": "^3.1.7",
-        "@smithy/types": "^3.4.2",
+        "@smithy/property-provider": "^3.1.7",
+        "@smithy/shared-ini-file-loader": "^3.1.8",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2338,15 +2749,15 @@
       }
     },
     "node_modules/@smithy/node-http-handler": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.3.tgz",
-      "integrity": "sha512-/gcm5DJ3k1b1zEInzBGAZC8ntJ+jwrz1NcSIu+9dSXd1FfG0G6QgkDI40tt8/WYUbHtLyo8fEqtm2v29koWo/w==",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.4.tgz",
+      "integrity": "sha512-49reY3+JgLMFNm7uTAKBWiKCA6XSvkNp9FqhVmusm2jpVnHORYFeFZ704LShtqWfjZW/nhX+7Iexyb6zQfXYIQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/abort-controller": "^3.1.4",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/querystring-builder": "^3.0.6",
-        "@smithy/types": "^3.4.2",
+        "@smithy/abort-controller": "^3.1.5",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/querystring-builder": "^3.0.7",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2354,12 +2765,12 @@
       }
     },
     "node_modules/@smithy/property-provider": {
-      "version": "3.1.6",
-      "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.6.tgz",
-      "integrity": "sha512-NK3y/T7Q/Bw+Z8vsVs9MYIQ5v7gOX7clyrXcwhhIBQhbPgRl6JDrZbusO9qWDhcEus75Tg+VCxtIRfo3H76fpw==",
+      "version": "3.1.7",
+      "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.7.tgz",
+      "integrity": "sha512-QfzLi1GPMisY7bAM5hOUqBdGYnY5S2JAlr201pghksrQv139f8iiiMalXtjczIP5f6owxFn3MINLNUNvUkgtPw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2367,12 +2778,12 @@
       }
     },
     "node_modules/@smithy/protocol-http": {
-      "version": "4.1.3",
-      "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.3.tgz",
-      "integrity": "sha512-GcbMmOYpH9iRqtC05RbRnc/0FssxSTHlmaNhYBTgSgNCYpdR3Kt88u5GAZTBmouzv+Zlj/VRv92J9ruuDeJuEw==",
+      "version": "4.1.4",
+      "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.4.tgz",
+      "integrity": "sha512-MlWK8eqj0JlpZBnWmjQLqmFp71Ug00P+m72/1xQB3YByXD4zZ+y9N4hYrR0EDmrUCZIkyATWHOXFgtavwGDTzQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2380,12 +2791,12 @@
       }
     },
     "node_modules/@smithy/querystring-builder": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.6.tgz",
-      "integrity": "sha512-sQe08RunoObe+Usujn9+R2zrLuQERi3CWvRO3BvnoWSYUaIrLKuAIeY7cMeDax6xGyfIP3x/yFWbEKSXvOnvVg==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.7.tgz",
+      "integrity": "sha512-65RXGZZ20rzqqxTsChdqSpbhA6tdt5IFNgG6o7e1lnPVLCe6TNWQq4rTl4N87hTDD8mV4IxJJnvyE7brbnRkQw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "@smithy/util-uri-escape": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -2394,12 +2805,12 @@
       }
     },
     "node_modules/@smithy/querystring-parser": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.6.tgz",
-      "integrity": "sha512-UJKw4LlEkytzz2Wq+uIdHf6qOtFfee/o7ruH0jF5I6UAuU+19r9QV7nU3P/uI0l6+oElRHmG/5cBBcGJrD7Ozg==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.7.tgz",
+      "integrity": "sha512-Fouw4KJVWqqUVIu1gZW8BH2HakwLz6dvdrAhXeXfeymOBrZw+hcqaWs+cS1AZPVp4nlbeIujYrKA921ZW2WMPA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2407,24 +2818,24 @@
       }
     },
     "node_modules/@smithy/service-error-classification": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.6.tgz",
-      "integrity": "sha512-53SpchU3+DUZrN7J6sBx9tBiCVGzsib2e4sc512Q7K9fpC5zkJKs6Z9s+qbMxSYrkEkle6hnMtrts7XNkMJJMg==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.7.tgz",
+      "integrity": "sha512-91PRkTfiBf9hxkIchhRKJfl1rsplRDyBnmyFca3y0Z3x/q0JJN480S83LBd8R6sBCkm2bBbqw2FHp0Mbh+ecSA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2"
+        "@smithy/types": "^3.5.0"
       },
       "engines": {
         "node": ">=16.0.0"
       }
     },
     "node_modules/@smithy/shared-ini-file-loader": {
-      "version": "3.1.7",
-      "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.7.tgz",
-      "integrity": "sha512-IA4K2qTJYXkF5OfVN4vsY1hfnUZjaslEE8Fsr/gGFza4TAC2A9NfnZuSY2srQIbt9bwtjHiAayrRVgKse4Q7fA==",
+      "version": "3.1.8",
+      "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.8.tgz",
+      "integrity": "sha512-0NHdQiSkeGl0ICQKcJQ2lCOKH23Nb0EaAa7RDRId6ZqwXkw4LJyIyZ0t3iusD4bnKYDPLGy2/5e2rfUhrt0Acw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2432,16 +2843,16 @@
       }
     },
     "node_modules/@smithy/signature-v4": {
-      "version": "4.1.4",
-      "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.4.tgz",
-      "integrity": "sha512-72MiK7xYukNsnLJI9NqvUHqTu0ziEsfMsYNlWpiJfuGQnCTFKpckThlEatirvcA/LmT1h7rRO+pJD06PYsPu9Q==",
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.0.tgz",
+      "integrity": "sha512-LafbclHNKnsorMgUkKm7Tk7oJ7xizsZ1VwqhGKqoCIrXh4fqDDp73fK99HOEEgcsQbtemmeY/BPv0vTVYYUNEQ==",
       "license": "Apache-2.0",
       "dependencies": {
         "@smithy/is-array-buffer": "^3.0.0",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/types": "^3.4.2",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/types": "^3.5.0",
         "@smithy/util-hex-encoding": "^3.0.0",
-        "@smithy/util-middleware": "^3.0.6",
+        "@smithy/util-middleware": "^3.0.7",
         "@smithy/util-uri-escape": "^3.0.0",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
@@ -2451,16 +2862,16 @@
       }
     },
     "node_modules/@smithy/smithy-client": {
-      "version": "3.3.5",
-      "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.3.5.tgz",
-      "integrity": "sha512-7IZi8J3Dr9n3tX+lcpmJ/5tCYIqoXdblFBaPuv0SEKZFRpCxE+TqIWL6I3t7jLlk9TWu3JSvEZAhtjB9yvB+zA==",
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.0.tgz",
+      "integrity": "sha512-nOfJ1nVQsxiP6srKt43r2My0Gp5PLWCW2ASqUioxIiGmu6d32v4Nekidiv5qOmmtzIrmaD+ADX5SKHUuhReeBQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/middleware-endpoint": "^3.1.3",
-        "@smithy/middleware-stack": "^3.0.6",
-        "@smithy/protocol-http": "^4.1.3",
-        "@smithy/types": "^3.4.2",
-        "@smithy/util-stream": "^3.1.8",
+        "@smithy/middleware-endpoint": "^3.1.4",
+        "@smithy/middleware-stack": "^3.0.7",
+        "@smithy/protocol-http": "^4.1.4",
+        "@smithy/types": "^3.5.0",
+        "@smithy/util-stream": "^3.1.9",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2468,9 +2879,9 @@
       }
     },
     "node_modules/@smithy/types": {
-      "version": "3.4.2",
-      "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.4.2.tgz",
-      "integrity": "sha512-tHiFcfcVedVBHpmHUEUHOCCih8iZbIAYn9NvPsNzaPm/237I3imdDdZoOC8c87H5HBAVEa06tTgb+OcSWV9g5w==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.5.0.tgz",
+      "integrity": "sha512-QN0twHNfe8mNJdH9unwsCK13GURU7oEAZqkBI+rsvpv1jrmserO+WnLE7jidR9W/1dxwZ0u/CB01mV2Gms/K2Q==",
       "license": "Apache-2.0",
       "dependencies": {
         "tslib": "^2.6.2"
@@ -2480,13 +2891,13 @@
       }
     },
     "node_modules/@smithy/url-parser": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.6.tgz",
-      "integrity": "sha512-47Op/NU8Opt49KyGpHtVdnmmJMsp2hEwBdyjuFB9M2V5QVOwA7pBhhxKN5z6ztKGrMw76gd8MlbPuzzvaAncuQ==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.7.tgz",
+      "integrity": "sha512-70UbSSR8J97c1rHZOWhl+VKiZDqHWxs/iW8ZHrHp5fCCPLSBE7GcUlUvKSle3Ca+J9LLbYCj/A79BxztBvAfpA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/querystring-parser": "^3.0.6",
-        "@smithy/types": "^3.4.2",
+        "@smithy/querystring-parser": "^3.0.7",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       }
     },
@@ -2551,14 +2962,14 @@
       }
     },
     "node_modules/@smithy/util-defaults-mode-browser": {
-      "version": "3.0.21",
-      "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.21.tgz",
-      "integrity": "sha512-M/FhTBk4c/SsB91dD/M4gMGfJO7z/qJaM9+XQQIqBOf4qzZYMExnP7R4VdGwxxH8IKMGW+8F0I4rNtVRrcfPoA==",
+      "version": "3.0.23",
+      "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.23.tgz",
+      "integrity": "sha512-Y07qslyRtXDP/C5aWKqxTPBl4YxplEELG3xRrz2dnAQ6Lq/FgNrcKWmV561nNaZmFH+EzeGOX3ZRMbU8p1T6Nw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/property-provider": "^3.1.6",
-        "@smithy/smithy-client": "^3.3.5",
-        "@smithy/types": "^3.4.2",
+        "@smithy/property-provider": "^3.1.7",
+        "@smithy/smithy-client": "^3.4.0",
+        "@smithy/types": "^3.5.0",
         "bowser": "^2.11.0",
         "tslib": "^2.6.2"
       },
@@ -2567,17 +2978,17 @@
       }
     },
     "node_modules/@smithy/util-defaults-mode-node": {
-      "version": "3.0.21",
-      "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.21.tgz",
-      "integrity": "sha512-NiLinPvF86U3S2Pdx/ycqd4bnY5dmFSPNL5KYRwbNjqQFS09M5Wzqk8BNk61/47xCYz1X/6KeiSk9qgYPTtuDw==",
+      "version": "3.0.23",
+      "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.23.tgz",
+      "integrity": "sha512-9Y4WH7f0vnDGuHUa4lGX9e2p+sMwODibsceSV6rfkZOvMC+BY3StB2LdO1NHafpsyHJLpwAgChxQ38tFyd6vkg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/config-resolver": "^3.0.8",
-        "@smithy/credential-provider-imds": "^3.2.3",
-        "@smithy/node-config-provider": "^3.1.7",
-        "@smithy/property-provider": "^3.1.6",
-        "@smithy/smithy-client": "^3.3.5",
-        "@smithy/types": "^3.4.2",
+        "@smithy/config-resolver": "^3.0.9",
+        "@smithy/credential-provider-imds": "^3.2.4",
+        "@smithy/node-config-provider": "^3.1.8",
+        "@smithy/property-provider": "^3.1.7",
+        "@smithy/smithy-client": "^3.4.0",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2585,13 +2996,13 @@
       }
     },
     "node_modules/@smithy/util-endpoints": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.2.tgz",
-      "integrity": "sha512-FEISzffb4H8DLzGq1g4MuDpcv6CIG15fXoQzDH9SjpRJv6h7J++1STFWWinilG0tQh9H1v2UKWG19Jjr2B16zQ==",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.3.tgz",
+      "integrity": "sha512-34eACeKov6jZdHqS5hxBMJ4KyWKztTMulhuQ2UdOoP6vVxMLrOKUqIXAwJe/wiWMhXhydLW664B02CNpQBQ4Aw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/node-config-provider": "^3.1.7",
-        "@smithy/types": "^3.4.2",
+        "@smithy/node-config-provider": "^3.1.8",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2611,12 +3022,12 @@
       }
     },
     "node_modules/@smithy/util-middleware": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.6.tgz",
-      "integrity": "sha512-BxbX4aBhI1O9p87/xM+zWy0GzT3CEVcXFPBRDoHAM+pV0eSW156pR+PSYEz0DQHDMYDsYAflC2bQNz2uaDBUZQ==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.7.tgz",
+      "integrity": "sha512-OVA6fv/3o7TMJTpTgOi1H5OTwnuUa8hzRzhSFDtZyNxi6OZ70L/FHattSmhE212I7b6WSOJAAmbYnvcjTHOJCA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.4.2",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2624,13 +3035,13 @@
       }
     },
     "node_modules/@smithy/util-retry": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.6.tgz",
-      "integrity": "sha512-BRZiuF7IwDntAbevqMco67an0Sr9oLQJqqRCsSPZZHYRnehS0LHDAkJk/pSmI7Z8c/1Vet294H7fY2fWUgB+Rg==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.7.tgz",
+      "integrity": "sha512-nh1ZO1vTeo2YX1plFPSe/OXaHkLAHza5jpokNiiKX2M5YpNUv6RxGJZhpfmiR4jSvVHCjIDmILjrxKmP+/Ghug==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/service-error-classification": "^3.0.6",
-        "@smithy/types": "^3.4.2",
+        "@smithy/service-error-classification": "^3.0.7",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2638,14 +3049,14 @@
       }
     },
     "node_modules/@smithy/util-stream": {
-      "version": "3.1.8",
-      "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.8.tgz",
-      "integrity": "sha512-hoKOqSmb8FD3WLObuB5hwbM7bNIWgcnvkThokTvVq7J5PKjlLUK5qQQcB9zWLHIoSaIlf3VIv2OxZY2wtQjcRQ==",
+      "version": "3.1.9",
+      "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.9.tgz",
+      "integrity": "sha512-7YAR0Ub3MwTMjDfjnup4qa6W8gygZMxikBhFMPESi6ASsl/rZJhwLpF/0k9TuezScCojsM0FryGdz4LZtjKPPQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/fetch-http-handler": "^3.2.8",
-        "@smithy/node-http-handler": "^3.2.3",
-        "@smithy/types": "^3.4.2",
+        "@smithy/fetch-http-handler": "^3.2.9",
+        "@smithy/node-http-handler": "^3.2.4",
+        "@smithy/types": "^3.5.0",
         "@smithy/util-base64": "^3.0.0",
         "@smithy/util-buffer-from": "^3.0.0",
         "@smithy/util-hex-encoding": "^3.0.0",
@@ -2682,13 +3093,13 @@
       }
     },
     "node_modules/@smithy/util-waiter": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.5.tgz",
-      "integrity": "sha512-jYOSvM3H6sZe3CHjzD2VQNCjWBJs+4DbtwBMvUp9y5EnnwNa7NQxTeYeQw0CKCAdGGZ3QvVkyJmvbvs5M/B10A==",
+      "version": "3.1.6",
+      "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.6.tgz",
+      "integrity": "sha512-xs/KAwWOeCklq8aMlnpk25LgxEYHKOEodfjfKclDMLcBJEVEKzDLxZxBQyztcuPJ7F54213NJS8PxoiHNMdItQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/abort-controller": "^3.1.4",
-        "@smithy/types": "^3.4.2",
+        "@smithy/abort-controller": "^3.1.5",
+        "@smithy/types": "^3.5.0",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -2723,9 +3134,9 @@
       }
     },
     "node_modules/@types/estree": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
-      "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+      "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
       "dev": true,
       "license": "MIT"
     },
@@ -2737,15 +3148,22 @@
       "license": "MIT"
     },
     "node_modules/@types/node": {
-      "version": "20.16.7",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.7.tgz",
-      "integrity": "sha512-QkDQjAY3gkvJNcZOWwzy3BN34RweT0OQ9zJyvLCU0kSK22dO2QYh/NHGfbEAYylPYzRB1/iXcojS79wOg5gFSw==",
+      "version": "20.16.11",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.11.tgz",
+      "integrity": "sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "undici-types": "~6.19.2"
       }
     },
+    "node_modules/@types/qs": {
+      "version": "6.9.16",
+      "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz",
+      "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@types/semver": {
       "version": "7.5.8",
       "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
@@ -2775,32 +3193,32 @@
       "license": "MIT"
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz",
-      "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==",
+      "version": "8.8.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.8.1.tgz",
+      "integrity": "sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "7.18.0",
-        "@typescript-eslint/type-utils": "7.18.0",
-        "@typescript-eslint/utils": "7.18.0",
-        "@typescript-eslint/visitor-keys": "7.18.0",
+        "@typescript-eslint/scope-manager": "8.8.1",
+        "@typescript-eslint/type-utils": "8.8.1",
+        "@typescript-eslint/utils": "8.8.1",
+        "@typescript-eslint/visitor-keys": "8.8.1",
         "graphemer": "^1.4.0",
         "ignore": "^5.3.1",
         "natural-compare": "^1.4.0",
         "ts-api-utils": "^1.3.0"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       },
       "peerDependencies": {
-        "@typescript-eslint/parser": "^7.0.0",
-        "eslint": "^8.56.0"
+        "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+        "eslint": "^8.57.0 || ^9.0.0"
       },
       "peerDependenciesMeta": {
         "typescript": {
@@ -2809,27 +3227,27 @@
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz",
-      "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==",
+      "version": "8.8.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.8.1.tgz",
+      "integrity": "sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "@typescript-eslint/scope-manager": "7.18.0",
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/typescript-estree": "7.18.0",
-        "@typescript-eslint/visitor-keys": "7.18.0",
+        "@typescript-eslint/scope-manager": "8.8.1",
+        "@typescript-eslint/types": "8.8.1",
+        "@typescript-eslint/typescript-estree": "8.8.1",
+        "@typescript-eslint/visitor-keys": "8.8.1",
         "debug": "^4.3.4"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       },
       "peerDependencies": {
-        "eslint": "^8.56.0"
+        "eslint": "^8.57.0 || ^9.0.0"
       },
       "peerDependenciesMeta": {
         "typescript": {
@@ -2838,17 +3256,17 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz",
-      "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==",
+      "version": "8.8.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.1.tgz",
+      "integrity": "sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/visitor-keys": "7.18.0"
+        "@typescript-eslint/types": "8.8.1",
+        "@typescript-eslint/visitor-keys": "8.8.1"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
@@ -2856,27 +3274,24 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz",
-      "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==",
+      "version": "8.8.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.8.1.tgz",
+      "integrity": "sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "7.18.0",
-        "@typescript-eslint/utils": "7.18.0",
+        "@typescript-eslint/typescript-estree": "8.8.1",
+        "@typescript-eslint/utils": "8.8.1",
         "debug": "^4.3.4",
         "ts-api-utils": "^1.3.0"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       },
-      "peerDependencies": {
-        "eslint": "^8.56.0"
-      },
       "peerDependenciesMeta": {
         "typescript": {
           "optional": true
@@ -2884,13 +3299,13 @@
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
-      "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
+      "version": "8.8.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.1.tgz",
+      "integrity": "sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
@@ -2898,23 +3313,23 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz",
-      "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==",
+      "version": "8.8.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.1.tgz",
+      "integrity": "sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/visitor-keys": "7.18.0",
+        "@typescript-eslint/types": "8.8.1",
+        "@typescript-eslint/visitor-keys": "8.8.1",
         "debug": "^4.3.4",
-        "globby": "^11.1.0",
+        "fast-glob": "^3.3.2",
         "is-glob": "^4.0.3",
         "minimatch": "^9.0.4",
         "semver": "^7.6.0",
         "ts-api-utils": "^1.3.0"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
@@ -2927,53 +3342,46 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
-      "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
+      "version": "8.8.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.1.tgz",
+      "integrity": "sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "7.18.0",
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/typescript-estree": "7.18.0"
+        "@typescript-eslint/scope-manager": "8.8.1",
+        "@typescript-eslint/types": "8.8.1",
+        "@typescript-eslint/typescript-estree": "8.8.1"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       },
       "peerDependencies": {
-        "eslint": "^8.56.0"
+        "eslint": "^8.57.0 || ^9.0.0"
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz",
-      "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==",
+      "version": "8.8.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.1.tgz",
+      "integrity": "sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "7.18.0",
+        "@typescript-eslint/types": "8.8.1",
         "eslint-visitor-keys": "^3.4.3"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@ungap/structured-clone": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
-      "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
-      "dev": true,
-      "license": "ISC"
-    },
     "node_modules/@vitejs/plugin-vue": {
       "version": "5.1.4",
       "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.4.tgz",
@@ -2989,68 +3397,68 @@
       }
     },
     "node_modules/@volar/language-core": {
-      "version": "2.4.5",
-      "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.5.tgz",
-      "integrity": "sha512-F4tA0DCO5Q1F5mScHmca0umsi2ufKULAnMOVBfMsZdT4myhVl4WdKRwCaKcfOkIEuyrAVvtq1ESBdZ+rSyLVww==",
+      "version": "2.4.6",
+      "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.6.tgz",
+      "integrity": "sha512-FxUfxaB8sCqvY46YjyAAV6c3mMIq/NWQMVvJ+uS4yxr1KzOvyg61gAuOnNvgCvO4TZ7HcLExBEsWcDu4+K4E8A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@volar/source-map": "2.4.5"
+        "@volar/source-map": "2.4.6"
       }
     },
     "node_modules/@volar/source-map": {
-      "version": "2.4.5",
-      "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.5.tgz",
-      "integrity": "sha512-varwD7RaKE2J/Z+Zu6j3mNNJbNT394qIxXwdvz/4ao/vxOfyClZpSDtLKkwWmecinkOVos5+PWkWraelfMLfpw==",
+      "version": "2.4.6",
+      "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.6.tgz",
+      "integrity": "sha512-Nsh7UW2ruK+uURIPzjJgF0YRGP5CX9nQHypA2OMqdM2FKy7rh+uv3XgPnWPw30JADbKvZ5HuBzG4gSbVDYVtiw==",
       "dev": true,
       "license": "MIT"
     },
     "node_modules/@volar/typescript": {
-      "version": "2.4.5",
-      "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.5.tgz",
-      "integrity": "sha512-mcT1mHvLljAEtHviVcBuOyAwwMKz1ibXTi5uYtP/pf4XxoAzpdkQ+Br2IC0NPCvLCbjPZmbf3I0udndkfB1CDg==",
+      "version": "2.4.6",
+      "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.6.tgz",
+      "integrity": "sha512-NMIrA7y5OOqddL9VtngPWYmdQU03htNKFtAYidbYfWA0TOhyGVd9tfcP4TsLWQ+RBWDZCbBqsr8xzU0ZOxYTCQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@volar/language-core": "2.4.5",
+        "@volar/language-core": "2.4.6",
         "path-browserify": "^1.0.1",
         "vscode-uri": "^3.0.8"
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.8.tgz",
-      "integrity": "sha512-Uzlxp91EPjfbpeO5KtC0KnXPkuTfGsNDeaKQJxQN718uz+RqDYarEf7UhQJGK+ZYloD2taUbHTI2J4WrUaZQNA==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.12.tgz",
+      "integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.8",
+        "@vue/shared": "3.5.12",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.8.tgz",
-      "integrity": "sha512-GUNHWvoDSbSa5ZSHT9SnV5WkStWfzJwwTd6NMGzilOE/HM5j+9EB9zGXdtu/fCNEmctBqMs6C9SvVPpVPuk1Eg==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz",
+      "integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.5.8",
-        "@vue/shared": "3.5.8"
+        "@vue/compiler-core": "3.5.12",
+        "@vue/shared": "3.5.12"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.8.tgz",
-      "integrity": "sha512-taYpngQtSysrvO9GULaOSwcG5q821zCoIQBtQQSx7Uf7DxpR6CIHR90toPr9QfDD2mqHQPCSgoWBvJu0yV9zjg==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.12.tgz",
+      "integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.8",
-        "@vue/compiler-dom": "3.5.8",
-        "@vue/compiler-ssr": "3.5.8",
-        "@vue/shared": "3.5.8",
+        "@vue/compiler-core": "3.5.12",
+        "@vue/compiler-dom": "3.5.12",
+        "@vue/compiler-ssr": "3.5.12",
+        "@vue/shared": "3.5.12",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.11",
         "postcss": "^8.4.47",
@@ -3058,13 +3466,13 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.8.tgz",
-      "integrity": "sha512-W96PtryNsNG9u0ZnN5Q5j27Z/feGrFV6zy9q5tzJVyJaLiwYxvC0ek4IXClZygyhjm+XKM7WD9pdKi/wIRVC/Q==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.12.tgz",
+      "integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.8",
-        "@vue/shared": "3.5.8"
+        "@vue/compiler-dom": "3.5.12",
+        "@vue/shared": "3.5.12"
       }
     },
     "node_modules/@vue/compiler-vue2": {
@@ -3085,38 +3493,39 @@
       "license": "MIT"
     },
     "node_modules/@vue/eslint-config-prettier": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
-      "integrity": "sha512-z1ZIAAUS9pKzo/ANEfd2sO+v2IUalz7cM/cTLOZ7vRFOPk5/xuRKQteOu1DErFLAh/lYGXMVZ0IfYKlyInuDVg==",
+      "version": "10.0.0",
+      "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-10.0.0.tgz",
+      "integrity": "sha512-iDEjsfT+UXQTJfe+4mstb/B5BSZ5RpL6FO3F97XxElIXdD04gkH+F7PR4fBMEVyJi4892G4LQVPQ8oXxVyp8Dw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "eslint-config-prettier": "^9.0.0",
-        "eslint-plugin-prettier": "^5.0.0"
+        "eslint-config-prettier": "^9.1.0",
+        "eslint-plugin-prettier": "^5.2.1"
       },
       "peerDependencies": {
-        "eslint": ">= 8.0.0",
+        "eslint": ">= 8.21.0",
         "prettier": ">= 3.0.0"
       }
     },
     "node_modules/@vue/eslint-config-typescript": {
-      "version": "13.0.0",
-      "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-13.0.0.tgz",
-      "integrity": "sha512-MHh9SncG/sfqjVqjcuFLOLD6Ed4dRAis4HNt0dXASeAuLqIAx4YMB1/m2o4pUKK1vCt8fUvYG8KKX2Ot3BVZTg==",
+      "version": "14.0.1",
+      "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-14.0.1.tgz",
+      "integrity": "sha512-jE5myCG9OiXQOuTSiwCqmM5ktGuiL/xI2SC1DUf+AntvFTDOW5+RZtGKw8L+Af5jlSe0k45RNVh0a/wklcckGQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/eslint-plugin": "^7.1.1",
-        "@typescript-eslint/parser": "^7.1.1",
-        "vue-eslint-parser": "^9.3.1"
+        "@typescript-eslint/eslint-plugin": "^8.8.1",
+        "@typescript-eslint/parser": "^8.8.1",
+        "typescript-eslint": "^8.8.1",
+        "vue-eslint-parser": "^9.4.3"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "peerDependencies": {
-        "eslint": "^8.56.0",
-        "eslint-plugin-vue": "^9.0.0",
-        "typescript": ">=4.7.4"
+        "eslint": "^9.10.0",
+        "eslint-plugin-vue": "^9.28.0",
+        "typescript": ">=4.8.4"
       },
       "peerDependenciesMeta": {
         "typescript": {
@@ -3150,53 +3559,53 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.8.tgz",
-      "integrity": "sha512-mlgUyFHLCUZcAYkqvzYnlBRCh0t5ZQfLYit7nukn1GR96gc48Bp4B7OIcSfVSvlG1k3BPfD+p22gi1t2n9tsXg==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.12.tgz",
+      "integrity": "sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.5.8"
+        "@vue/shared": "3.5.12"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.8.tgz",
-      "integrity": "sha512-fJuPelh64agZ8vKkZgp5iCkPaEqFJsYzxLk9vSC0X3G8ppknclNDr61gDc45yBGTaN5Xqc1qZWU3/NoaBMHcjQ==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.12.tgz",
+      "integrity": "sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.8",
-        "@vue/shared": "3.5.8"
+        "@vue/reactivity": "3.5.12",
+        "@vue/shared": "3.5.12"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.8.tgz",
-      "integrity": "sha512-DpAUz+PKjTZPUOB6zJgkxVI3GuYc2iWZiNeeHQUw53kdrparSTG6HeXUrYDjaam8dVsCdvQxDz6ZWxnyjccUjQ==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.12.tgz",
+      "integrity": "sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.8",
-        "@vue/runtime-core": "3.5.8",
-        "@vue/shared": "3.5.8",
+        "@vue/reactivity": "3.5.12",
+        "@vue/runtime-core": "3.5.12",
+        "@vue/shared": "3.5.12",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.8.tgz",
-      "integrity": "sha512-7AmC9/mEeV9mmXNVyUIm1a1AjUhyeeGNbkLh39J00E7iPeGks8OGRB5blJiMmvqSh8SkaS7jkLWSpXtxUCeagA==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.12.tgz",
+      "integrity": "sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.5.8",
-        "@vue/shared": "3.5.8"
+        "@vue/compiler-ssr": "3.5.12",
+        "@vue/shared": "3.5.12"
       },
       "peerDependencies": {
-        "vue": "3.5.8"
+        "vue": "3.5.12"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.8.tgz",
-      "integrity": "sha512-mJleSWbAGySd2RJdX1RBtcrUBX6snyOc0qHpgk3lGi4l9/P/3ny3ELqFWqYdkXIwwNN/kdm8nD9ky8o6l/Lx2A==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.12.tgz",
+      "integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==",
       "license": "MIT"
     },
     "node_modules/@vue/tsconfig": {
@@ -3245,16 +3654,6 @@
         "url": "https://github.com/sponsors/epoberezkin"
       }
     },
-    "node_modules/ansi-regex": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/ansi-styles": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -3295,16 +3694,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/array-union": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
-      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/arraybuffer.prototype.slice": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
@@ -3365,8 +3754,8 @@
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
       "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
-      "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "peer": true
     },
     "node_modules/available-typed-arrays": {
       "version": "1.0.7",
@@ -3388,8 +3777,8 @@
       "version": "1.7.7",
       "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz",
       "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==",
-      "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "follow-redirects": "^1.15.6",
         "form-data": "^4.0.0",
@@ -3543,14 +3932,18 @@
       }
     },
     "node_modules/browserify-rsa": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
-      "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz",
+      "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "bn.js": "^5.0.0",
-        "randombytes": "^2.0.1"
+        "bn.js": "^5.2.1",
+        "randombytes": "^2.1.0",
+        "safe-buffer": "^5.2.1"
+      },
+      "engines": {
+        "node": ">= 0.10"
       }
     },
     "node_modules/browserify-sign": {
@@ -3656,11 +4049,39 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/c12": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/c12/-/c12-2.0.1.tgz",
+      "integrity": "sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chokidar": "^4.0.1",
+        "confbox": "^0.1.7",
+        "defu": "^6.1.4",
+        "dotenv": "^16.4.5",
+        "giget": "^1.2.3",
+        "jiti": "^2.3.0",
+        "mlly": "^1.7.1",
+        "ohash": "^1.1.4",
+        "pathe": "^1.1.2",
+        "perfect-debounce": "^1.0.0",
+        "pkg-types": "^1.2.0",
+        "rc9": "^2.1.2"
+      },
+      "peerDependencies": {
+        "magicast": "^0.3.5"
+      },
+      "peerDependenciesMeta": {
+        "magicast": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/call-bind": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
       "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "es-define-property": "^1.0.0",
@@ -3686,19 +4107,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/camelcase": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
-      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/chalk": {
       "version": "4.1.2",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -3756,6 +4164,16 @@
         "url": "https://paulmillr.com/funding/"
       }
     },
+    "node_modules/chownr": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+      "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/cipher-base": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
@@ -3767,6 +4185,16 @@
         "safe-buffer": "^5.0.1"
       }
     },
+    "node_modules/citty": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz",
+      "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "consola": "^3.2.3"
+      }
+    },
     "node_modules/color-convert": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -3791,8 +4219,8 @@
       "version": "1.0.8",
       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
       "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
-      "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "delayed-stream": "~1.0.0"
       },
@@ -3824,6 +4252,23 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/confbox": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz",
+      "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/consola": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz",
+      "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.18.0 || >=16.10.0"
+      }
+    },
     "node_modules/console-browserify": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
@@ -4051,7 +4496,6 @@
       "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==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "es-define-property": "^1.0.0",
@@ -4083,12 +4527,19 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/defu": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz",
+      "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/delayed-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
       "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
-      "dev": true,
       "license": "MIT",
+      "peer": true,
       "engines": {
         "node": ">=0.4.0"
       }
@@ -4104,6 +4555,26 @@
         "minimalistic-assert": "^1.0.0"
       }
     },
+    "node_modules/destr": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz",
+      "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/detect-libc": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+      "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "bin": {
+        "detect-libc": "bin/detect-libc.js"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
     "node_modules/diffie-hellman": {
       "version": "5.0.3",
       "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
@@ -4121,33 +4592,7 @@
       "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
       "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
       "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/dir-glob": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
-      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "path-type": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/doctrine": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
-      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
+      "license": "MIT"
     },
     "node_modules/domain-browser": {
       "version": "4.23.0",
@@ -4163,11 +4608,24 @@
       }
     },
     "node_modules/dompurify": {
-      "version": "3.1.6",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz",
-      "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==",
+      "version": "3.1.7",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.7.tgz",
+      "integrity": "sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==",
       "license": "(MPL-2.0 OR Apache-2.0)"
     },
+    "node_modules/dotenv": {
+      "version": "16.4.5",
+      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
+      "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://dotenvx.com"
+      }
+    },
     "node_modules/elliptic": {
       "version": "6.5.7",
       "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz",
@@ -4278,7 +4736,6 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
       "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "get-intrinsic": "^1.2.4"
@@ -4291,7 +4748,6 @@
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
       "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
-      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">= 0.4"
@@ -4396,59 +4852,64 @@
       }
     },
     "node_modules/eslint": {
-      "version": "8.57.1",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
-      "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
+      "version": "9.12.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.12.0.tgz",
+      "integrity": "sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
-        "@eslint-community/regexpp": "^4.6.1",
-        "@eslint/eslintrc": "^2.1.4",
-        "@eslint/js": "8.57.1",
-        "@humanwhocodes/config-array": "^0.13.0",
+        "@eslint-community/regexpp": "^4.11.0",
+        "@eslint/config-array": "^0.18.0",
+        "@eslint/core": "^0.6.0",
+        "@eslint/eslintrc": "^3.1.0",
+        "@eslint/js": "9.12.0",
+        "@eslint/plugin-kit": "^0.2.0",
+        "@humanfs/node": "^0.16.5",
         "@humanwhocodes/module-importer": "^1.0.1",
-        "@nodelib/fs.walk": "^1.2.8",
-        "@ungap/structured-clone": "^1.2.0",
+        "@humanwhocodes/retry": "^0.3.1",
+        "@types/estree": "^1.0.6",
+        "@types/json-schema": "^7.0.15",
         "ajv": "^6.12.4",
         "chalk": "^4.0.0",
         "cross-spawn": "^7.0.2",
         "debug": "^4.3.2",
-        "doctrine": "^3.0.0",
         "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^7.2.2",
-        "eslint-visitor-keys": "^3.4.3",
-        "espree": "^9.6.1",
-        "esquery": "^1.4.2",
+        "eslint-scope": "^8.1.0",
+        "eslint-visitor-keys": "^4.1.0",
+        "espree": "^10.2.0",
+        "esquery": "^1.5.0",
         "esutils": "^2.0.2",
         "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^6.0.1",
+        "file-entry-cache": "^8.0.0",
         "find-up": "^5.0.0",
         "glob-parent": "^6.0.2",
-        "globals": "^13.19.0",
-        "graphemer": "^1.4.0",
         "ignore": "^5.2.0",
         "imurmurhash": "^0.1.4",
         "is-glob": "^4.0.0",
-        "is-path-inside": "^3.0.3",
-        "js-yaml": "^4.1.0",
         "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.4.1",
         "lodash.merge": "^4.6.2",
         "minimatch": "^3.1.2",
         "natural-compare": "^1.4.0",
         "optionator": "^0.9.3",
-        "strip-ansi": "^6.0.1",
         "text-table": "^0.2.0"
       },
       "bin": {
         "eslint": "bin/eslint.js"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
-        "url": "https://opencollective.com/eslint"
+        "url": "https://eslint.org/donate"
+      },
+      "peerDependencies": {
+        "jiti": "*"
+      },
+      "peerDependenciesMeta": {
+        "jiti": {
+          "optional": true
+        }
       }
     },
     "node_modules/eslint-config-prettier": {
@@ -4518,10 +4979,26 @@
         "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0"
       }
     },
+    "node_modules/eslint-plugin-vue/node_modules/globals": {
+      "version": "13.24.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/eslint-scope": {
-      "version": "7.2.2",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
-      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz",
+      "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
@@ -4529,7 +5006,7 @@
         "estraverse": "^5.2.0"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
@@ -4576,6 +5053,19 @@
         "concat-map": "0.0.1"
       }
     },
+    "node_modules/eslint/node_modules/eslint-visitor-keys": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz",
+      "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/eslint/node_modules/json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -4597,18 +5087,31 @@
       }
     },
     "node_modules/espree": {
-      "version": "9.6.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
-      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "version": "10.2.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz",
+      "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "acorn": "^8.9.0",
+        "acorn": "^8.12.0",
         "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^3.4.1"
+        "eslint-visitor-keys": "^4.1.0"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/espree/node_modules/eslint-visitor-keys": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz",
+      "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
@@ -4686,6 +5189,30 @@
         "safe-buffer": "^5.1.1"
       }
     },
+    "node_modules/execa": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+      "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cross-spawn": "^7.0.3",
+        "get-stream": "^8.0.1",
+        "human-signals": "^5.0.0",
+        "is-stream": "^3.0.0",
+        "merge-stream": "^2.0.0",
+        "npm-run-path": "^5.1.0",
+        "onetime": "^6.0.0",
+        "signal-exit": "^4.1.0",
+        "strip-final-newline": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=16.17"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
+      }
+    },
     "node_modules/fast-deep-equal": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -4744,9 +5271,9 @@
       "license": "MIT"
     },
     "node_modules/fast-uri": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
-      "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz",
+      "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==",
       "license": "MIT"
     },
     "node_modules/fast-xml-parser": {
@@ -4782,16 +5309,16 @@
       }
     },
     "node_modules/file-entry-cache": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
-      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+      "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "flat-cache": "^3.0.4"
+        "flat-cache": "^4.0.0"
       },
       "engines": {
-        "node": "^10.12.0 || >=12.0.0"
+        "node": ">=16.0.0"
       }
     },
     "node_modules/filesize": {
@@ -4834,18 +5361,17 @@
       }
     },
     "node_modules/flat-cache": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
-      "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+      "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "flatted": "^3.2.9",
-        "keyv": "^4.5.3",
-        "rimraf": "^3.0.2"
+        "keyv": "^4.5.4"
       },
       "engines": {
-        "node": "^10.12.0 || >=12.0.0"
+        "node": ">=16"
       }
     },
     "node_modules/flatted": {
@@ -4859,7 +5385,6 @@
       "version": "1.15.9",
       "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
       "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
-      "dev": true,
       "funding": [
         {
           "type": "individual",
@@ -4867,6 +5392,7 @@
         }
       ],
       "license": "MIT",
+      "peer": true,
       "engines": {
         "node": ">=4.0"
       },
@@ -4887,11 +5413,11 @@
       }
     },
     "node_modules/form-data": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
-      "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
-      "dev": true,
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
+      "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "asynckit": "^0.4.0",
         "combined-stream": "^1.0.8",
@@ -4901,27 +5427,31 @@
         "node": ">= 6"
       }
     },
-    "node_modules/fs-extra": {
-      "version": "11.2.0",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
-      "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+    "node_modules/fs-minipass": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "graceful-fs": "^4.2.0",
-        "jsonfile": "^6.0.1",
-        "universalify": "^2.0.0"
+        "minipass": "^3.0.0"
       },
       "engines": {
-        "node": ">=14.14"
+        "node": ">= 8"
       }
     },
-    "node_modules/fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+    "node_modules/fs-minipass/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
       "dev": true,
-      "license": "ISC"
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
     },
     "node_modules/fsevents": {
       "version": "2.3.3",
@@ -4942,7 +5472,6 @@
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
       "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
-      "dev": true,
       "license": "MIT",
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -4981,7 +5510,6 @@
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
       "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "es-errors": "^1.3.0",
@@ -4997,6 +5525,19 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/get-stream": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+      "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/get-symbol-description": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
@@ -5015,26 +5556,24 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/glob": {
-      "version": "7.2.3",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
+    "node_modules/giget": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz",
+      "integrity": "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.1.1",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
+        "citty": "^0.1.6",
+        "consola": "^3.2.3",
+        "defu": "^6.1.4",
+        "node-fetch-native": "^1.6.3",
+        "nypm": "^0.3.8",
+        "ohash": "^1.1.3",
+        "pathe": "^1.1.2",
+        "tar": "^6.2.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+      "bin": {
+        "giget": "dist/cli.mjs"
       }
     },
     "node_modules/glob-parent": {
@@ -5050,41 +5589,14 @@
         "node": ">=10.13.0"
       }
     },
-    "node_modules/glob/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/glob/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/globals": {
-      "version": "13.24.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "type-fest": "^0.20.2"
-      },
       "engines": {
-        "node": ">=8"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -5107,32 +5619,10 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/globby": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-union": "^2.1.0",
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.2.9",
-        "ignore": "^5.2.0",
-        "merge2": "^1.4.1",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/gopd": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
       "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "get-intrinsic": "^1.1.3"
@@ -5210,7 +5700,6 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
       "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "es-define-property": "^1.0.0"
@@ -5223,7 +5712,6 @@
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
       "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
-      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">= 0.4"
@@ -5236,7 +5724,6 @@
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
       "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
-      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">= 0.4"
@@ -5290,7 +5777,6 @@
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
       "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "function-bind": "^1.1.2"
@@ -5345,6 +5831,16 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/human-signals": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+      "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=16.17.0"
+      }
+    },
     "node_modules/idb-keyval": {
       "version": "6.2.1",
       "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz",
@@ -5415,18 +5911,6 @@
         "node": ">=0.8.19"
       }
     },
-    "node_modules/inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
-      "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
     "node_modules/inherits": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
@@ -5675,16 +6159,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/is-path-inside": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
-      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/is-regex": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -5718,6 +6192,19 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-stream": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+      "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/is-string": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
@@ -5803,6 +6290,16 @@
         "node": ">=10"
       }
     },
+    "node_modules/jiti": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.3.3.tgz",
+      "integrity": "sha512-EX4oNDwcXSivPrw2qKH2LB5PoFxEvgtv2JgwW0bU858HoLQ+kutSvjLMUqBd0PeJYEinLWhoI9Ol0eYMqj/wNQ==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "jiti": "lib/jiti-cli.mjs"
+      }
+    },
     "node_modules/js-yaml": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -5843,19 +6340,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/jsonfile": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
-      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "universalify": "^2.0.0"
-      },
-      "optionalDependencies": {
-        "graceful-fs": "^4.1.6"
-      }
-    },
     "node_modules/keyv": {
       "version": "4.5.4",
       "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
@@ -5927,9 +6411,9 @@
       "license": "MIT"
     },
     "node_modules/magic-string": {
-      "version": "0.30.11",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
-      "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
+      "version": "0.30.12",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz",
+      "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==",
       "license": "MIT",
       "dependencies": {
         "@jridgewell/sourcemap-codec": "^1.5.0"
@@ -5956,6 +6440,13 @@
         "node": ">= 0.10.0"
       }
     },
+    "node_modules/merge-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/merge2": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -6005,8 +6496,8 @@
       "version": "1.52.0",
       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
       "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-      "dev": true,
       "license": "MIT",
+      "peer": true,
       "engines": {
         "node": ">= 0.6"
       }
@@ -6015,8 +6506,8 @@
       "version": "2.1.35",
       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
       "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-      "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "mime-db": "1.52.0"
       },
@@ -6024,6 +6515,19 @@
         "node": ">= 0.6"
       }
     },
+    "node_modules/mimic-fn": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+      "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/minimalistic-assert": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@@ -6036,32 +6540,95 @@
       "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
       "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT"
+    },
+    "node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/minimist": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/minipass": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+      "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minizlib": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "minipass": "^3.0.0",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
     },
-    "node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+    "node_modules/minizlib/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "brace-expansion": "^2.0.1"
+        "yallist": "^4.0.0"
       },
       "engines": {
-        "node": ">=16 || 14 >=14.17"
+        "node": ">=8"
+      }
+    },
+    "node_modules/mkdirp": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "mkdirp": "bin/cmd.js"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+      "engines": {
+        "node": ">=10"
       }
     },
-    "node_modules/minimist": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
-      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+    "node_modules/mlly": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.2.tgz",
+      "integrity": "sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==",
       "dev": true,
       "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "dependencies": {
+        "acorn": "^8.12.1",
+        "pathe": "^1.1.2",
+        "pkg-types": "^1.2.0",
+        "ufo": "^1.5.4"
       }
     },
     "node_modules/ms": {
@@ -6117,6 +6684,20 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/node-addon-api": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
+      "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/node-fetch-native": {
+      "version": "1.6.4",
+      "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz",
+      "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/node-stdlib-browser": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.2.1.tgz",
@@ -6405,6 +6986,35 @@
         "which": "bin/which"
       }
     },
+    "node_modules/npm-run-path": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+      "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "path-key": "^4.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/npm-run-path/node_modules/path-key": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+      "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/nth-check": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
@@ -6418,11 +7028,31 @@
         "url": "https://github.com/fb55/nth-check?sponsor=1"
       }
     },
+    "node_modules/nypm": {
+      "version": "0.3.12",
+      "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.12.tgz",
+      "integrity": "sha512-D3pzNDWIvgA+7IORhD/IuWzEk4uXv6GsgOxiid4UU3h9oq5IqV1KtPDi63n4sZJ/xcWlr88c0QM2RgN5VbOhFA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "citty": "^0.1.6",
+        "consola": "^3.2.3",
+        "execa": "^8.0.1",
+        "pathe": "^1.1.2",
+        "pkg-types": "^1.2.0",
+        "ufo": "^1.5.4"
+      },
+      "bin": {
+        "nypm": "dist/cli.mjs"
+      },
+      "engines": {
+        "node": "^14.16.0 || >=16.10.0"
+      }
+    },
     "node_modules/object-inspect": {
       "version": "1.13.2",
       "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
       "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
-      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">= 0.4"
@@ -6477,31 +7107,27 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+    "node_modules/ohash": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz",
+      "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==",
       "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "wrappy": "1"
-      }
+      "license": "MIT"
     },
-    "node_modules/openapi-typescript-codegen": {
-      "version": "0.29.0",
-      "resolved": "https://registry.npmjs.org/openapi-typescript-codegen/-/openapi-typescript-codegen-0.29.0.tgz",
-      "integrity": "sha512-/wC42PkD0LGjDTEULa/XiWQbv4E9NwLjwLjsaJ/62yOsoYhwvmBR31kPttn1DzQ2OlGe5stACcF/EIkZk43M6w==",
+    "node_modules/onetime": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+      "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@apidevtools/json-schema-ref-parser": "^11.5.4",
-        "camelcase": "^6.3.0",
-        "commander": "^12.0.0",
-        "fs-extra": "^11.2.0",
-        "handlebars": "^4.7.8"
+        "mimic-fn": "^4.0.0"
       },
-      "bin": {
-        "openapi": "bin/index.js"
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/optionator": {
@@ -6630,16 +7256,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/path-key": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
@@ -6658,15 +7274,25 @@
       "license": "MIT"
     },
     "node_modules/path-type": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+      "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "pify": "^3.0.0"
+      },
       "engines": {
-        "node": ">=8"
+        "node": ">=4"
       }
     },
+    "node_modules/pathe": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
+      "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/pbkdf2": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
@@ -6684,6 +7310,13 @@
         "node": ">=0.12"
       }
     },
+    "node_modules/perfect-debounce": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
+      "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/picocolors": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz",
@@ -6727,9 +7360,9 @@
       }
     },
     "node_modules/pinia": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.2.2.tgz",
-      "integrity": "sha512-ja2XqFWZC36mupU4z1ZzxeTApV7DOw44cV4dhQ9sGwun+N89v/XP7+j7q6TanS1u1tdbK4r+1BUx7heMaIdagA==",
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.2.4.tgz",
+      "integrity": "sha512-K7ZhpMY9iJ9ShTC0cR2+PnxdQRuwVIsXDO/WIEV/RnMC/vmSoKDTKW/exNQYPI+4ij10UjXqdNiEHwn47McANQ==",
       "license": "MIT",
       "dependencies": {
         "@vue/devtools-api": "^6.6.3",
@@ -6791,6 +7424,18 @@
         "node": ">=10"
       }
     },
+    "node_modules/pkg-types": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.1.tgz",
+      "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "confbox": "^0.1.8",
+        "mlly": "^1.7.2",
+        "pathe": "^1.1.2"
+      }
+    },
     "node_modules/possible-typed-array-names": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
@@ -6903,8 +7548,8 @@
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
       "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
-      "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "peer": true
     },
     "node_modules/public-encrypt": {
       "version": "4.0.3",
@@ -6939,7 +7584,6 @@
       "version": "6.13.0",
       "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
       "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
-      "dev": true,
       "license": "BSD-3-Clause",
       "dependencies": {
         "side-channel": "^1.0.6"
@@ -7002,6 +7646,17 @@
         "safe-buffer": "^5.1.0"
       }
     },
+    "node_modules/rc9": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz",
+      "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "defu": "^6.1.4",
+        "destr": "^2.0.3"
+      }
+    },
     "node_modules/read-pkg": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
@@ -7017,19 +7672,6 @@
         "node": ">=4"
       }
     },
-    "node_modules/read-pkg/node_modules/path-type": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
-      "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "pify": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/readable-stream": {
       "version": "3.6.2",
       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
@@ -7045,9 +7687,9 @@
       }
     },
     "node_modules/readdirp": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.1.tgz",
-      "integrity": "sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz",
+      "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -7059,16 +7701,16 @@
       }
     },
     "node_modules/regexp.prototype.flags": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
-      "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
+      "version": "1.5.3",
+      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz",
+      "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.6",
+        "call-bind": "^1.0.7",
         "define-properties": "^1.2.1",
         "es-errors": "^1.3.0",
-        "set-function-name": "^2.0.1"
+        "set-function-name": "^2.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -7125,23 +7767,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/rimraf": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-      "deprecated": "Rimraf versions prior to v4 are no longer supported",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "glob": "^7.1.3"
-      },
-      "bin": {
-        "rimraf": "bin.js"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
     "node_modules/ripemd160": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
@@ -7154,13 +7779,13 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz",
-      "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz",
+      "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@types/estree": "1.0.5"
+        "@types/estree": "1.0.6"
       },
       "bin": {
         "rollup": "dist/bin/rollup"
@@ -7170,22 +7795,22 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.22.4",
-        "@rollup/rollup-android-arm64": "4.22.4",
-        "@rollup/rollup-darwin-arm64": "4.22.4",
-        "@rollup/rollup-darwin-x64": "4.22.4",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.22.4",
-        "@rollup/rollup-linux-arm-musleabihf": "4.22.4",
-        "@rollup/rollup-linux-arm64-gnu": "4.22.4",
-        "@rollup/rollup-linux-arm64-musl": "4.22.4",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4",
-        "@rollup/rollup-linux-riscv64-gnu": "4.22.4",
-        "@rollup/rollup-linux-s390x-gnu": "4.22.4",
-        "@rollup/rollup-linux-x64-gnu": "4.22.4",
-        "@rollup/rollup-linux-x64-musl": "4.22.4",
-        "@rollup/rollup-win32-arm64-msvc": "4.22.4",
-        "@rollup/rollup-win32-ia32-msvc": "4.22.4",
-        "@rollup/rollup-win32-x64-msvc": "4.22.4",
+        "@rollup/rollup-android-arm-eabi": "4.24.0",
+        "@rollup/rollup-android-arm64": "4.24.0",
+        "@rollup/rollup-darwin-arm64": "4.24.0",
+        "@rollup/rollup-darwin-x64": "4.24.0",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.24.0",
+        "@rollup/rollup-linux-arm-musleabihf": "4.24.0",
+        "@rollup/rollup-linux-arm64-gnu": "4.24.0",
+        "@rollup/rollup-linux-arm64-musl": "4.24.0",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0",
+        "@rollup/rollup-linux-riscv64-gnu": "4.24.0",
+        "@rollup/rollup-linux-s390x-gnu": "4.24.0",
+        "@rollup/rollup-linux-x64-gnu": "4.24.0",
+        "@rollup/rollup-linux-x64-musl": "4.24.0",
+        "@rollup/rollup-win32-arm64-msvc": "4.24.0",
+        "@rollup/rollup-win32-ia32-msvc": "4.24.0",
+        "@rollup/rollup-win32-x64-msvc": "4.24.0",
         "fsevents": "~2.3.2"
       }
     },
@@ -7271,12 +7896,13 @@
       }
     },
     "node_modules/sass": {
-      "version": "1.79.3",
-      "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.3.tgz",
-      "integrity": "sha512-m7dZxh0W9EZ3cw50Me5GOuYm/tVAJAn91SUnohLRo9cXBixGUOdvmryN+dXpwR831bhoY3Zv7rEFt85PUwTmzA==",
+      "version": "1.79.5",
+      "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.5.tgz",
+      "integrity": "sha512-W1h5kp6bdhqFh2tk3DsI771MoEJjvrSY/2ihJRJS4pjIyfJCw0nTsxqhnrUzaLMOJjFchj8rOvraI/YUVjtx5g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
+        "@parcel/watcher": "^2.4.1",
         "chokidar": "^4.0.0",
         "immutable": "^4.0.0",
         "source-map-js": ">=0.6.2 <2.0.0"
@@ -7304,7 +7930,6 @@
       "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==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "define-data-property": "^1.1.4",
@@ -7417,7 +8042,6 @@
       "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==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "call-bind": "^1.0.7",
@@ -7432,14 +8056,17 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+    "node_modules/signal-exit": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "engines": {
-        "node": ">=8"
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
     "node_modules/sortablejs": {
@@ -7606,27 +8233,27 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/strip-ansi": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+    "node_modules/strip-bom": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+      "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^5.0.1"
-      },
       "engines": {
-        "node": ">=8"
+        "node": ">=4"
       }
     },
-    "node_modules/strip-bom": {
+    "node_modules/strip-final-newline": {
       "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+      "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=4"
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/strip-json-comments": {
@@ -7675,9 +8302,9 @@
       }
     },
     "node_modules/synckit": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz",
-      "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==",
+      "version": "0.9.2",
+      "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz",
+      "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -7691,6 +8318,24 @@
         "url": "https://opencollective.com/unts"
       }
     },
+    "node_modules/tar": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
+      "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "minipass": "^5.0.0",
+        "minizlib": "^2.1.1",
+        "mkdirp": "^1.0.3",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -7876,6 +8521,37 @@
         "node": ">=14.17"
       }
     },
+    "node_modules/typescript-eslint": {
+      "version": "8.8.1",
+      "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.8.1.tgz",
+      "integrity": "sha512-R0dsXFt6t4SAFjUSKFjMh4pXDtq04SsFKCVGDP3ZOzNP7itF0jBcZYU4fMsZr4y7O7V7Nc751dDeESbe4PbQMQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/eslint-plugin": "8.8.1",
+        "@typescript-eslint/parser": "8.8.1",
+        "@typescript-eslint/utils": "8.8.1"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/ufo": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz",
+      "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/uglify-js": {
       "version": "3.19.3",
       "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz",
@@ -7913,16 +8589,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/universalify": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
-      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 10.0.0"
-      }
-    },
     "node_modules/uri-js": {
       "version": "4.4.1",
       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -8093,16 +8759,16 @@
       "license": "MIT"
     },
     "node_modules/vue": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.8.tgz",
-      "integrity": "sha512-hvuvuCy51nP/1fSRvrrIqTLSvrSyz2Pq+KQ8S8SXCxTWVE0nMaOnSDnSOxV1eYmGfvK7mqiwvd1C59CEEz7dAQ==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.12.tgz",
+      "integrity": "sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.8",
-        "@vue/compiler-sfc": "3.5.8",
-        "@vue/runtime-dom": "3.5.8",
-        "@vue/server-renderer": "3.5.8",
-        "@vue/shared": "3.5.8"
+        "@vue/compiler-dom": "3.5.12",
+        "@vue/compiler-sfc": "3.5.12",
+        "@vue/runtime-dom": "3.5.12",
+        "@vue/server-renderer": "3.5.12",
+        "@vue/shared": "3.5.12"
       },
       "peerDependencies": {
         "typescript": "*"
@@ -8138,6 +8804,41 @@
         "eslint": ">=6.0.0"
       }
     },
+    "node_modules/vue-eslint-parser/node_modules/eslint-scope": {
+      "version": "7.2.2",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/vue-eslint-parser/node_modules/espree": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "acorn": "^8.9.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.4.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/vue-matomo": {
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/vue-matomo/-/vue-matomo-4.2.0.tgz",
@@ -8260,13 +8961,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
-      "dev": true,
-      "license": "ISC"
-    },
     "node_modules/xml-name-validator": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
@@ -8287,6 +8981,13 @@
         "node": ">=0.4"
       }
     },
+    "node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "license": "ISC"
+    },
     "node_modules/yocto-queue": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
diff --git a/package.json b/package.json
index 63dff7b047b1bd32c0c567a52a2c3ff3f05daf9f..1e19e55b67ca313b633818cc8580d6d1309f433b 100644
--- a/package.json
+++ b/package.json
@@ -9,14 +9,15 @@
     "preview": "vite preview --port 5173",
     "build-only": "vite build",
     "type-check": "vue-tsc --noEmit",
-    "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
-    "generate-clowm-client": "openapi --input http://localhost:9999/api/openapi.json --output src/client --client axios"
+    "lint": "eslint --fix .",
+    "generate-clowm-client": "openapi-ts"
   },
   "dependencies": {
     "@aws-sdk/client-s3": "^3.637.0",
     "@aws-sdk/lib-storage": "^3.637.0",
     "@aws-sdk/s3-request-presigner": "^3.637.0",
     "@fortawesome/fontawesome-free": "~6.6.0",
+    "@hey-api/client-axios": "^0.2.7",
     "@popperjs/core": "~2.11.8",
     "ajv": "~8.17.0",
     "bootstrap": "~5.3.0",
@@ -27,6 +28,7 @@
     "filesize": "~10.1.0",
     "idb-keyval": "^6.2.1",
     "pinia": "~2.2.0",
+    "qs": "^6.13.0",
     "semver": "~7.6.0",
     "showdown": "~2.1.0",
     "sortablejs": "^1.15.2",
@@ -36,24 +38,25 @@
     "vue3-cookies": "~1.0.0"
   },
   "devDependencies": {
+    "@eslint/compat": "^1.2.0",
+    "@hey-api/openapi-ts": "^0.53.9",
     "@rushstack/eslint-patch": "~1.10.0",
     "@tsconfig/node20": "^20.1.2",
     "@types/bootstrap": "~5.2.0",
     "@types/dompurify": "~3.0.0",
     "@types/node": "^20.11.0",
+    "@types/qs": "^6.9.16",
     "@types/semver": "~7.5.1",
     "@types/showdown": "~2.0.1",
     "@types/sortablejs": "^1.15.7",
     "@vitejs/plugin-vue": "~5.1.0",
-    "@vue/eslint-config-prettier": "~9.0.0",
-    "@vue/eslint-config-typescript": "~13.0.0",
+    "@vue/eslint-config-prettier": "~10.0.0",
+    "@vue/eslint-config-typescript": "~14.0.0",
     "@vue/tsconfig": "~0.5.0",
-    "axios": "~1.7.0",
-    "eslint": "~8.57.0",
+    "eslint": "~9.12.0",
     "eslint-plugin-vue": "~9.28.0",
     "highlight.js": "^11.9.0",
     "npm-run-all": "~4.1.5",
-    "openapi-typescript-codegen": "^0.29.0",
     "prettier": "~3.3.0",
     "sass": "^1.66.0",
     "typescript": "~5.5.0",
diff --git a/src/App.vue b/src/App.vue
index 3e68f03ab8676d5e78ab1b84a8d1224a0976735b..4a20ed47680f1a9a6a28d22fbda726e0bb846978 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -3,9 +3,8 @@ import { onBeforeMount, onMounted } from "vue";
 import { useCookies } from "vue3-cookies";
 import { useUserStore } from "@/stores/users";
 import { useRoute, useRouter } from "vue-router";
-import { OpenAPI } from "@/client";
+import { client } from "@/client/services.gen";
 import { environment } from "@/environment";
-import axios from "axios";
 import { useNameStore } from "@/stores/names";
 import AppHeader from "@/components/AppHeader.vue";
 import AppFooter from "@/components/AppFooter.vue";
@@ -13,6 +12,7 @@ import { useResourceStore } from "@/stores/resources";
 import { useWorkflowStore } from "@/stores/workflows";
 import { useBucketStore } from "@/stores/buckets";
 import { useS3KeyStore } from "@/stores/s3keys";
+import { stringify as param_stringify } from "qs";
 
 const { cookies } = useCookies();
 const router = useRouter();
@@ -25,12 +25,16 @@ const bucketRepository = useBucketStore();
 const s3KeyRepository = useS3KeyStore();
 
 onBeforeMount(() => {
-  OpenAPI.BASE = environment.API_BASE_URL;
+  client.setConfig({
+    baseURL: environment.API_BASE_URL,
+    paramsSerializer: (params) =>
+      param_stringify(params, { arrayFormat: "repeat" }),
+  });
   userRepository.updateJWT(cookies.get("clowm-jwt"));
   if (userRepository.authenticated) {
     userRepository.getCurrentUser();
   }
-  axios.interceptors.response.use(
+  client.instance.interceptors.response.use(
     (res) => res,
     (err) => {
       if (
@@ -43,7 +47,9 @@ onBeforeMount(() => {
           name: "login",
           query: {
             login_error:
-              err.response.status === 401 ? "token_invalid" : "token_expired",
+              err.response.status === 401
+                ? "session token invalid"
+                : "session expired",
             next: route.name !== "login" ? encodeURI(route.path) : undefined,
           },
         });
diff --git a/src/client/core/ApiError.ts b/src/client/core/ApiError.ts
deleted file mode 100644
index ec7b16af6f41b1323a8e3aa3d529bf2324959e66..0000000000000000000000000000000000000000
--- a/src/client/core/ApiError.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { ApiRequestOptions } from './ApiRequestOptions';
-import type { ApiResult } from './ApiResult';
-
-export class ApiError extends Error {
-    public readonly url: string;
-    public readonly status: number;
-    public readonly statusText: string;
-    public readonly body: any;
-    public readonly request: ApiRequestOptions;
-
-    constructor(request: ApiRequestOptions, response: ApiResult, message: string) {
-        super(message);
-
-        this.name = 'ApiError';
-        this.url = response.url;
-        this.status = response.status;
-        this.statusText = response.statusText;
-        this.body = response.body;
-        this.request = request;
-    }
-}
diff --git a/src/client/core/ApiRequestOptions.ts b/src/client/core/ApiRequestOptions.ts
deleted file mode 100644
index 93143c3ce1ba5323894d4ac10299f62493f030f6..0000000000000000000000000000000000000000
--- a/src/client/core/ApiRequestOptions.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type ApiRequestOptions = {
-    readonly method: 'GET' | 'PUT' | 'POST' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'PATCH';
-    readonly url: string;
-    readonly path?: Record<string, any>;
-    readonly cookies?: Record<string, any>;
-    readonly headers?: Record<string, any>;
-    readonly query?: Record<string, any>;
-    readonly formData?: Record<string, any>;
-    readonly body?: any;
-    readonly mediaType?: string;
-    readonly responseHeader?: string;
-    readonly errors?: Record<number, string>;
-};
diff --git a/src/client/core/ApiResult.ts b/src/client/core/ApiResult.ts
deleted file mode 100644
index ee1126e2ccd1e37dba97511c38c56a282ceac4dc..0000000000000000000000000000000000000000
--- a/src/client/core/ApiResult.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type ApiResult = {
-    readonly url: string;
-    readonly ok: boolean;
-    readonly status: number;
-    readonly statusText: string;
-    readonly body: any;
-};
diff --git a/src/client/core/CancelablePromise.ts b/src/client/core/CancelablePromise.ts
deleted file mode 100644
index d70de92946d977e9da7970871375117a8b04770a..0000000000000000000000000000000000000000
--- a/src/client/core/CancelablePromise.ts
+++ /dev/null
@@ -1,131 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export class CancelError extends Error {
-
-    constructor(message: string) {
-        super(message);
-        this.name = 'CancelError';
-    }
-
-    public get isCancelled(): boolean {
-        return true;
-    }
-}
-
-export interface OnCancel {
-    readonly isResolved: boolean;
-    readonly isRejected: boolean;
-    readonly isCancelled: boolean;
-
-    (cancelHandler: () => void): void;
-}
-
-export class CancelablePromise<T> implements Promise<T> {
-    #isResolved: boolean;
-    #isRejected: boolean;
-    #isCancelled: boolean;
-    readonly #cancelHandlers: (() => void)[];
-    readonly #promise: Promise<T>;
-    #resolve?: (value: T | PromiseLike<T>) => void;
-    #reject?: (reason?: any) => void;
-
-    constructor(
-        executor: (
-            resolve: (value: T | PromiseLike<T>) => void,
-            reject: (reason?: any) => void,
-            onCancel: OnCancel
-        ) => void
-    ) {
-        this.#isResolved = false;
-        this.#isRejected = false;
-        this.#isCancelled = false;
-        this.#cancelHandlers = [];
-        this.#promise = new Promise<T>((resolve, reject) => {
-            this.#resolve = resolve;
-            this.#reject = reject;
-
-            const onResolve = (value: T | PromiseLike<T>): void => {
-                if (this.#isResolved || this.#isRejected || this.#isCancelled) {
-                    return;
-                }
-                this.#isResolved = true;
-                if (this.#resolve) this.#resolve(value);
-            };
-
-            const onReject = (reason?: any): void => {
-                if (this.#isResolved || this.#isRejected || this.#isCancelled) {
-                    return;
-                }
-                this.#isRejected = true;
-                if (this.#reject) this.#reject(reason);
-            };
-
-            const onCancel = (cancelHandler: () => void): void => {
-                if (this.#isResolved || this.#isRejected || this.#isCancelled) {
-                    return;
-                }
-                this.#cancelHandlers.push(cancelHandler);
-            };
-
-            Object.defineProperty(onCancel, 'isResolved', {
-                get: (): boolean => this.#isResolved,
-            });
-
-            Object.defineProperty(onCancel, 'isRejected', {
-                get: (): boolean => this.#isRejected,
-            });
-
-            Object.defineProperty(onCancel, 'isCancelled', {
-                get: (): boolean => this.#isCancelled,
-            });
-
-            return executor(onResolve, onReject, onCancel as OnCancel);
-        });
-    }
-
-    get [Symbol.toStringTag]() {
-        return "Cancellable Promise";
-    }
-
-    public then<TResult1 = T, TResult2 = never>(
-        onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,
-        onRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null
-    ): Promise<TResult1 | TResult2> {
-        return this.#promise.then(onFulfilled, onRejected);
-    }
-
-    public catch<TResult = never>(
-        onRejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null
-    ): Promise<T | TResult> {
-        return this.#promise.catch(onRejected);
-    }
-
-    public finally(onFinally?: (() => void) | null): Promise<T> {
-        return this.#promise.finally(onFinally);
-    }
-
-    public cancel(): void {
-        if (this.#isResolved || this.#isRejected || this.#isCancelled) {
-            return;
-        }
-        this.#isCancelled = true;
-        if (this.#cancelHandlers.length) {
-            try {
-                for (const cancelHandler of this.#cancelHandlers) {
-                    cancelHandler();
-                }
-            } catch (error) {
-                console.warn('Cancellation threw an error', error);
-                return;
-            }
-        }
-        this.#cancelHandlers.length = 0;
-        if (this.#reject) this.#reject(new CancelError('Request aborted'));
-    }
-
-    public get isCancelled(): boolean {
-        return this.#isCancelled;
-    }
-}
diff --git a/src/client/core/OpenAPI.ts b/src/client/core/OpenAPI.ts
deleted file mode 100644
index 2745d3477a41ac7553a988ad41f38a72f63c9dda..0000000000000000000000000000000000000000
--- a/src/client/core/OpenAPI.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { ApiRequestOptions } from './ApiRequestOptions';
-
-type Resolver<T> = (options: ApiRequestOptions) => Promise<T>;
-type Headers = Record<string, string>;
-
-export type OpenAPIConfig = {
-    BASE: string;
-    VERSION: string;
-    WITH_CREDENTIALS: boolean;
-    CREDENTIALS: 'include' | 'omit' | 'same-origin';
-    TOKEN?: string | Resolver<string> | undefined;
-    USERNAME?: string | Resolver<string> | undefined;
-    PASSWORD?: string | Resolver<string> | undefined;
-    HEADERS?: Headers | Resolver<Headers> | undefined;
-    ENCODE_PATH?: ((path: string) => string) | undefined;
-};
-
-export const OpenAPI: OpenAPIConfig = {
-    BASE: '/api',
-    VERSION: '1.0.0',
-    WITH_CREDENTIALS: false,
-    CREDENTIALS: 'include',
-    TOKEN: undefined,
-    USERNAME: undefined,
-    PASSWORD: undefined,
-    HEADERS: undefined,
-    ENCODE_PATH: undefined,
-};
diff --git a/src/client/core/request.ts b/src/client/core/request.ts
deleted file mode 100644
index 1dc6fef4aab4086ff57b48d26b20ec26bb8fa472..0000000000000000000000000000000000000000
--- a/src/client/core/request.ts
+++ /dev/null
@@ -1,323 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import axios from 'axios';
-import type { AxiosError, AxiosRequestConfig, AxiosResponse, AxiosInstance } from 'axios';
-import FormData from 'form-data';
-
-import { ApiError } from './ApiError';
-import type { ApiRequestOptions } from './ApiRequestOptions';
-import type { ApiResult } from './ApiResult';
-import { CancelablePromise } from './CancelablePromise';
-import type { OnCancel } from './CancelablePromise';
-import type { OpenAPIConfig } from './OpenAPI';
-
-export const isDefined = <T>(value: T | null | undefined): value is Exclude<T, null | undefined> => {
-    return value !== undefined && value !== null;
-};
-
-export const isString = (value: any): value is string => {
-    return typeof value === 'string';
-};
-
-export const isStringWithValue = (value: any): value is string => {
-    return isString(value) && value !== '';
-};
-
-export const isBlob = (value: any): value is Blob => {
-    return (
-        typeof value === 'object' &&
-        typeof value.type === 'string' &&
-        typeof value.stream === 'function' &&
-        typeof value.arrayBuffer === 'function' &&
-        typeof value.constructor === 'function' &&
-        typeof value.constructor.name === 'string' &&
-        /^(Blob|File)$/.test(value.constructor.name) &&
-        /^(Blob|File)$/.test(value[Symbol.toStringTag])
-    );
-};
-
-export const isFormData = (value: any): value is FormData => {
-    return value instanceof FormData;
-};
-
-export const isSuccess = (status: number): boolean => {
-    return status >= 200 && status < 300;
-};
-
-export const base64 = (str: string): string => {
-    try {
-        return btoa(str);
-    } catch (err) {
-        // @ts-ignore
-        return Buffer.from(str).toString('base64');
-    }
-};
-
-export const getQueryString = (params: Record<string, any>): string => {
-    const qs: string[] = [];
-
-    const append = (key: string, value: any) => {
-        qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);
-    };
-
-    const process = (key: string, value: any) => {
-        if (isDefined(value)) {
-            if (Array.isArray(value)) {
-                value.forEach(v => {
-                    process(key, v);
-                });
-            } else if (typeof value === 'object') {
-                Object.entries(value).forEach(([k, v]) => {
-                    process(`${key}[${k}]`, v);
-                });
-            } else {
-                append(key, value);
-            }
-        }
-    };
-
-    Object.entries(params).forEach(([key, value]) => {
-        process(key, value);
-    });
-
-    if (qs.length > 0) {
-        return `?${qs.join('&')}`;
-    }
-
-    return '';
-};
-
-const getUrl = (config: OpenAPIConfig, options: ApiRequestOptions): string => {
-    const encoder = config.ENCODE_PATH || encodeURI;
-
-    const path = options.url
-        .replace('{api-version}', config.VERSION)
-        .replace(/{(.*?)}/g, (substring: string, group: string) => {
-            if (options.path?.hasOwnProperty(group)) {
-                return encoder(String(options.path[group]));
-            }
-            return substring;
-        });
-
-    const url = `${config.BASE}${path}`;
-    if (options.query) {
-        return `${url}${getQueryString(options.query)}`;
-    }
-    return url;
-};
-
-export const getFormData = (options: ApiRequestOptions): FormData | undefined => {
-    if (options.formData) {
-        const formData = new FormData();
-
-        const process = (key: string, value: any) => {
-            if (isString(value) || isBlob(value)) {
-                formData.append(key, value);
-            } else {
-                formData.append(key, JSON.stringify(value));
-            }
-        };
-
-        Object.entries(options.formData)
-            .filter(([_, value]) => isDefined(value))
-            .forEach(([key, value]) => {
-                if (Array.isArray(value)) {
-                    value.forEach(v => process(key, v));
-                } else {
-                    process(key, value);
-                }
-            });
-
-        return formData;
-    }
-    return undefined;
-};
-
-type Resolver<T> = (options: ApiRequestOptions) => Promise<T>;
-
-export const resolve = async <T>(options: ApiRequestOptions, resolver?: T | Resolver<T>): Promise<T | undefined> => {
-    if (typeof resolver === 'function') {
-        return (resolver as Resolver<T>)(options);
-    }
-    return resolver;
-};
-
-export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptions, formData?: FormData): Promise<Record<string, string>> => {
-    const [token, username, password, additionalHeaders] = await Promise.all([
-        resolve(options, config.TOKEN),
-        resolve(options, config.USERNAME),
-        resolve(options, config.PASSWORD),
-        resolve(options, config.HEADERS),
-    ]);
-
-    const formHeaders = typeof formData?.getHeaders === 'function' && formData?.getHeaders() || {}
-
-    const headers = Object.entries({
-        Accept: 'application/json',
-        ...additionalHeaders,
-        ...options.headers,
-        ...formHeaders,
-    })
-    .filter(([_, value]) => isDefined(value))
-    .reduce((headers, [key, value]) => ({
-        ...headers,
-        [key]: String(value),
-    }), {} as Record<string, string>);
-
-    if (isStringWithValue(token)) {
-        headers['Authorization'] = `Bearer ${token}`;
-    }
-
-    if (isStringWithValue(username) && isStringWithValue(password)) {
-        const credentials = base64(`${username}:${password}`);
-        headers['Authorization'] = `Basic ${credentials}`;
-    }
-
-    if (options.body !== undefined) {
-        if (options.mediaType) {
-            headers['Content-Type'] = options.mediaType;
-        } else if (isBlob(options.body)) {
-            headers['Content-Type'] = options.body.type || 'application/octet-stream';
-        } else if (isString(options.body)) {
-            headers['Content-Type'] = 'text/plain';
-        } else if (!isFormData(options.body)) {
-            headers['Content-Type'] = 'application/json';
-        }
-    }
-
-    return headers;
-};
-
-export const getRequestBody = (options: ApiRequestOptions): any => {
-    if (options.body) {
-        return options.body;
-    }
-    return undefined;
-};
-
-export const sendRequest = async <T>(
-    config: OpenAPIConfig,
-    options: ApiRequestOptions,
-    url: string,
-    body: any,
-    formData: FormData | undefined,
-    headers: Record<string, string>,
-    onCancel: OnCancel,
-    axiosClient: AxiosInstance
-): Promise<AxiosResponse<T>> => {
-    const source = axios.CancelToken.source();
-
-    const requestConfig: AxiosRequestConfig = {
-        url,
-        headers,
-        data: body ?? formData,
-        method: options.method,
-        withCredentials: config.WITH_CREDENTIALS,
-        withXSRFToken: config.CREDENTIALS === 'include' ? config.WITH_CREDENTIALS : false,
-        cancelToken: source.token,
-    };
-
-    onCancel(() => source.cancel('The user aborted a request.'));
-
-    try {
-        return await axiosClient.request(requestConfig);
-    } catch (error) {
-        const axiosError = error as AxiosError<T>;
-        if (axiosError.response) {
-            return axiosError.response;
-        }
-        throw error;
-    }
-};
-
-export const getResponseHeader = (response: AxiosResponse<any>, responseHeader?: string): string | undefined => {
-    if (responseHeader) {
-        const content = response.headers[responseHeader];
-        if (isString(content)) {
-            return content;
-        }
-    }
-    return undefined;
-};
-
-export const getResponseBody = (response: AxiosResponse<any>): any => {
-    if (response.status !== 204) {
-        return response.data;
-    }
-    return undefined;
-};
-
-export const catchErrorCodes = (options: ApiRequestOptions, result: ApiResult): void => {
-    const errors: Record<number, string> = {
-        400: 'Bad Request',
-        401: 'Unauthorized',
-        403: 'Forbidden',
-        404: 'Not Found',
-        500: 'Internal Server Error',
-        502: 'Bad Gateway',
-        503: 'Service Unavailable',
-        ...options.errors,
-    }
-
-    const error = errors[result.status];
-    if (error) {
-        throw new ApiError(options, result, error);
-    }
-
-    if (!result.ok) {
-        const errorStatus = result.status ?? 'unknown';
-        const errorStatusText = result.statusText ?? 'unknown';
-        const errorBody = (() => {
-            try {
-                return JSON.stringify(result.body, null, 2);
-            } catch (e) {
-                return undefined;
-            }
-        })();
-
-        throw new ApiError(options, result,
-            `Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}`
-        );
-    }
-};
-
-/**
- * Request method
- * @param config The OpenAPI configuration object
- * @param options The request options from the service
- * @param axiosClient The axios client instance to use
- * @returns CancelablePromise<T>
- * @throws ApiError
- */
-export const request = <T>(config: OpenAPIConfig, options: ApiRequestOptions, axiosClient: AxiosInstance = axios): CancelablePromise<T> => {
-    return new CancelablePromise(async (resolve, reject, onCancel) => {
-        try {
-            const url = getUrl(config, options);
-            const formData = getFormData(options);
-            const body = getRequestBody(options);
-            const headers = await getHeaders(config, options, formData);
-
-            if (!onCancel.isCancelled) {
-                const response = await sendRequest<T>(config, options, url, body, formData, headers, onCancel, axiosClient);
-                const responseBody = getResponseBody(response);
-                const responseHeader = getResponseHeader(response, options.responseHeader);
-
-                const result: ApiResult = {
-                    url,
-                    ok: isSuccess(response.status),
-                    status: response.status,
-                    statusText: response.statusText,
-                    body: responseHeader ?? responseBody,
-                };
-
-                catchErrorCodes(options, result);
-
-                resolve(result.body);
-            }
-        } catch (error) {
-            reject(error);
-        }
-    });
-};
diff --git a/src/client/index.ts b/src/client/index.ts
index d41e0596cb641d285a010c46ecddee04a8051320..46996fcbec42e740782111bb80e2efd1165d5457 100644
--- a/src/client/index.ts
+++ b/src/client/index.ts
@@ -1,80 +1,3 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export { ApiError } from './core/ApiError';
-export { CancelablePromise, CancelError } from './core/CancelablePromise';
-export { OpenAPI } from './core/OpenAPI';
-export type { OpenAPIConfig } from './core/OpenAPI';
-
-export type { AnonymizedWorkflowExecution } from './models/AnonymizedWorkflowExecution';
-export type { ApiTokenIn } from './models/ApiTokenIn';
-export type { ApiTokenOut } from './models/ApiTokenOut';
-export type { ApiTokenPrivateOut } from './models/ApiTokenPrivateOut';
-export type { Body_Bucket_update_bucket_public_state } from './models/Body_Bucket_update_bucket_public_state';
-export type { Body_Workflow_Version_upload_workflow_version_icon } from './models/Body_Workflow_Version_upload_workflow_version_icon';
-export type { BucketIn } from './models/BucketIn';
-export type { BucketOut } from './models/BucketOut';
-export type { BucketPermissionIn } from './models/BucketPermissionIn';
-export type { BucketPermissionOut } from './models/BucketPermissionOut';
-export type { BucketPermissionParameters } from './models/BucketPermissionParameters';
-export type { BucketSizeLimits } from './models/BucketSizeLimits';
-export { BucketType } from './models/BucketType';
-export type { DevWorkflowExecutionIn } from './models/DevWorkflowExecutionIn';
-export { DocumentationEnum } from './models/DocumentationEnum';
-export type { ErrorDetail } from './models/ErrorDetail';
-export { FileTree } from './models/FileTree';
-export type { HTTPValidationError } from './models/HTTPValidationError';
-export type { IconUpdateOut } from './models/IconUpdateOut';
-export { NextflowVersion } from './models/NextflowVersion';
-export { OIDCProvider } from './models/OIDCProvider';
-export type { OwnershipTransferRequestIn } from './models/OwnershipTransferRequestIn';
-export type { OwnershipTransferRequestOut } from './models/OwnershipTransferRequestOut';
-export { OwnershipTypeEnum } from './models/OwnershipTypeEnum';
-export type { ParameterExtension } from './models/ParameterExtension';
-export { Permission } from './models/Permission';
-export { PermissionStatus } from './models/PermissionStatus';
-export type { ResourceIn } from './models/ResourceIn';
-export type { ResourceOut } from './models/ResourceOut';
-export type { ResourceVersionIn } from './models/ResourceVersionIn';
-export type { ResourceVersionOut } from './models/ResourceVersionOut';
-export { ResourceVersionStatus } from './models/ResourceVersionStatus';
-export { RoleEnum } from './models/RoleEnum';
-export type { S3Key } from './models/S3Key';
-export { ScopeEnum } from './models/ScopeEnum';
-export type { UserIn } from './models/UserIn';
-export type { UserOut } from './models/UserOut';
-export type { UserOutExtended } from './models/UserOutExtended';
-export type { UserRequestAnswer } from './models/UserRequestAnswer';
-export type { UserRoles } from './models/UserRoles';
-export type { UserSynchronizationRequestIn } from './models/UserSynchronizationRequestIn';
-export type { UserSynchronizationRequestOut } from './models/UserSynchronizationRequestOut';
-export type { ValidationError } from './models/ValidationError';
-export type { WorkflowCredentialsIn } from './models/WorkflowCredentialsIn';
-export type { WorkflowCredentialsOut } from './models/WorkflowCredentialsOut';
-export type { WorkflowExecutionIn } from './models/WorkflowExecutionIn';
-export type { WorkflowExecutionOut } from './models/WorkflowExecutionOut';
-export { WorkflowExecutionStatus } from './models/WorkflowExecutionStatus';
-export type { WorkflowIn } from './models/WorkflowIn';
-export type { WorkflowModeIn } from './models/WorkflowModeIn';
-export type { WorkflowModeOut } from './models/WorkflowModeOut';
-export type { WorkflowOut } from './models/WorkflowOut';
-export type { WorkflowStatistic } from './models/WorkflowStatistic';
-export type { WorkflowUpdate } from './models/WorkflowUpdate';
-export type { WorkflowVersion } from './models/WorkflowVersion';
-export { WorkflowVersionStatus } from './models/WorkflowVersionStatus';
-export type { WorkflowVersionStatusSchema } from './models/WorkflowVersionStatusSchema';
-
-export { ApiTokenService } from './services/ApiTokenService';
-export { AuthService } from './services/AuthService';
-export { BucketService } from './services/BucketService';
-export { BucketPermissionService } from './services/BucketPermissionService';
-export { ResourceService } from './services/ResourceService';
-export { ResourceVersionService } from './services/ResourceVersionService';
-export { S3KeyService } from './services/S3KeyService';
-export { UserService } from './services/UserService';
-export { WorkflowService } from './services/WorkflowService';
-export { WorkflowCredentialsService } from './services/WorkflowCredentialsService';
-export { WorkflowExecutionService } from './services/WorkflowExecutionService';
-export { WorkflowModeService } from './services/WorkflowModeService';
-export { WorkflowVersionService } from './services/WorkflowVersionService';
+// This file is auto-generated by @hey-api/openapi-ts
+export * from "./services.gen";
+export * from "./types.gen";
diff --git a/src/client/models/AnonymizedWorkflowExecution.ts b/src/client/models/AnonymizedWorkflowExecution.ts
deleted file mode 100644
index 271df1bd1de51d908c544286bce2d0f6fe489899..0000000000000000000000000000000000000000
--- a/src/client/models/AnonymizedWorkflowExecution.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { WorkflowExecutionStatus } from './WorkflowExecutionStatus';
-export type AnonymizedWorkflowExecution = {
-    /**
-     * ID of the workflow execution
-     */
-    workflow_execution_id: string;
-    /**
-     * Anonymized user ID of the user who ran the workflow execution
-     */
-    pseudo_uid: string;
-    /**
-     * ID of the workflow mode this workflow execution ran in
-     */
-    workflow_mode_id?: (string | null);
-    /**
-     * Hash of the git commit
-     */
-    workflow_version_id: string;
-    /**
-     * Day of the workflow execution
-     */
-    started_at: string;
-    /**
-     * ID of the workflow
-     */
-    workflow_id: string;
-    /**
-     * ID of developer of the workflow
-     */
-    developer_id: string;
-    /**
-     * End status of the workflow execution
-     */
-    status: WorkflowExecutionStatus;
-};
-
diff --git a/src/client/models/ApiTokenIn.ts b/src/client/models/ApiTokenIn.ts
deleted file mode 100644
index 38a68cae7c7cb1a5d59cc3983b88d7442ba74ffc..0000000000000000000000000000000000000000
--- a/src/client/models/ApiTokenIn.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { ScopeEnum } from './ScopeEnum';
-export type ApiTokenIn = {
-    /**
-     * Short name for the API token
-     */
-    name: string;
-    /**
-     * Unix timestamp when the token should expire
-     */
-    expires_at?: (number | null);
-    /**
-     * List of scopes this Api token has
-     */
-    scopes: Array<ScopeEnum>;
-};
-
diff --git a/src/client/models/ApiTokenOut.ts b/src/client/models/ApiTokenOut.ts
deleted file mode 100644
index 9935a1280b6382682564752519c431ed19c0068f..0000000000000000000000000000000000000000
--- a/src/client/models/ApiTokenOut.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { ScopeEnum } from './ScopeEnum';
-export type ApiTokenOut = {
-    /**
-     * Short name for the API token
-     */
-    name: string;
-    /**
-     * Unix timestamp when the token should expire
-     */
-    expires_at?: (number | null);
-    /**
-     * List of scopes this Api token has
-     */
-    scopes: Array<ScopeEnum>;
-    /**
-     * The ID of the token
-     */
-    token_id: string;
-    /**
-     * The ID of the owner
-     */
-    uid: string;
-    /**
-     * The UNIX timestamp when this token was created
-     */
-    created_at: number;
-    /**
-     * The UNIX timestamp when this token was used the last time
-     */
-    last_used?: (number | null);
-};
-
diff --git a/src/client/models/ApiTokenPrivateOut.ts b/src/client/models/ApiTokenPrivateOut.ts
deleted file mode 100644
index ec2b60922e80a0eef21707eaec4e9c6f3e342cb0..0000000000000000000000000000000000000000
--- a/src/client/models/ApiTokenPrivateOut.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { ScopeEnum } from './ScopeEnum';
-export type ApiTokenPrivateOut = {
-    /**
-     * Short name for the API token
-     */
-    name: string;
-    /**
-     * Unix timestamp when the token should expire
-     */
-    expires_at?: (number | null);
-    /**
-     * List of scopes this Api token has
-     */
-    scopes: Array<ScopeEnum>;
-    /**
-     * The ID of the token
-     */
-    token_id: string;
-    /**
-     * The ID of the owner
-     */
-    uid: string;
-    /**
-     * The UNIX timestamp when this token was created
-     */
-    created_at: number;
-    /**
-     * The UNIX timestamp when this token was used the last time
-     */
-    last_used?: (number | null);
-    /**
-     * The actual token used for authentication
-     */
-    token: string;
-};
-
diff --git a/src/client/models/Body_Bucket_update_bucket_public_state.ts b/src/client/models/Body_Bucket_update_bucket_public_state.ts
deleted file mode 100644
index 105f5ecfc334dd76e653f78b2adaa77761c14d7d..0000000000000000000000000000000000000000
--- a/src/client/models/Body_Bucket_update_bucket_public_state.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type Body_Bucket_update_bucket_public_state = {
-    /**
-     * New State
-     */
-    public: boolean;
-};
-
diff --git a/src/client/models/Body_Workflow_Version_upload_workflow_version_icon.ts b/src/client/models/Body_Workflow_Version_upload_workflow_version_icon.ts
deleted file mode 100644
index b9b4fb0e29341a1d6fd9df456f6ceb9734049f5b..0000000000000000000000000000000000000000
--- a/src/client/models/Body_Workflow_Version_upload_workflow_version_icon.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type Body_Workflow_Version_upload_workflow_version_icon = {
-    /**
-     * Icon for the Workflow.
-     */
-    icon: Blob;
-};
-
diff --git a/src/client/models/BucketIn.ts b/src/client/models/BucketIn.ts
deleted file mode 100644
index 86846020f5817830fa44ea53712a389b1301c862..0000000000000000000000000000000000000000
--- a/src/client/models/BucketIn.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-/**
- * Schema for creating a new bucket.
- */
-export type BucketIn = {
-    /**
-     * Name of the bucket
-     */
-    name: string;
-    /**
-     * Description of the bucket
-     */
-    description: string;
-};
-
diff --git a/src/client/models/BucketOut.ts b/src/client/models/BucketOut.ts
deleted file mode 100644
index be4829455e8185d9955156a9aedde65e79d19a4c..0000000000000000000000000000000000000000
--- a/src/client/models/BucketOut.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-/**
- * Schema for answering a request with a bucket.
- */
-export type BucketOut = {
-    /**
-     * Size limit of the bucket in KiB
-     */
-    size_limit?: (number | null);
-    /**
-     * Number of objects limit of the bucket
-     */
-    object_limit?: (number | null);
-    /**
-     * Name of the bucket
-     */
-    name: string;
-    /**
-     * Description of the bucket
-     */
-    description: string;
-    /**
-     * Time when the bucket was created as UNIX timestamp
-     */
-    created_at: number;
-    /**
-     * UID of the owner
-     */
-    owner_id: string;
-    /**
-     * Flag if the bucket is anonymously readable
-     */
-    public: boolean;
-};
-
diff --git a/src/client/models/BucketPermissionIn.ts b/src/client/models/BucketPermissionIn.ts
deleted file mode 100644
index 3da058f7cc8c9550913f55fd0beea79ceff5666b..0000000000000000000000000000000000000000
--- a/src/client/models/BucketPermissionIn.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { Permission } from './Permission';
-export type BucketPermissionIn = {
-    /**
-     * Start date of permission as UNIX timestamp
-     */
-    from_timestamp?: (number | null);
-    /**
-     * End date of permission as UNIX timestamp
-     */
-    to_timestamp?: (number | null);
-    /**
-     * Prefix of subfolder
-     */
-    file_prefix?: (string | null);
-    /**
-     * Permission
-     */
-    permission?: (Permission | 'READ' | 'WRITE' | 'READWRITE');
-    /**
-     * UID of the grantee
-     */
-    uid: string;
-    /**
-     * Name of Bucket
-     */
-    bucket_name: string;
-};
-
diff --git a/src/client/models/BucketPermissionOut.ts b/src/client/models/BucketPermissionOut.ts
deleted file mode 100644
index f064f17575feafdbb6249cace7300ec7ca6c5250..0000000000000000000000000000000000000000
--- a/src/client/models/BucketPermissionOut.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { Permission } from './Permission';
-/**
- * Schema for the bucket permissions.
- */
-export type BucketPermissionOut = {
-    /**
-     * Start date of permission as UNIX timestamp
-     */
-    from_timestamp?: (number | null);
-    /**
-     * End date of permission as UNIX timestamp
-     */
-    to_timestamp?: (number | null);
-    /**
-     * Prefix of subfolder
-     */
-    file_prefix?: (string | null);
-    /**
-     * Permission
-     */
-    permission?: (Permission | 'READ' | 'WRITE' | 'READWRITE');
-    /**
-     * UID of the grantee
-     */
-    uid: string;
-    /**
-     * Name of Bucket
-     */
-    bucket_name: string;
-};
-
diff --git a/src/client/models/BucketPermissionParameters.ts b/src/client/models/BucketPermissionParameters.ts
deleted file mode 100644
index 5d0fa16f4a67da5b309cb10f779afb31278cbf94..0000000000000000000000000000000000000000
--- a/src/client/models/BucketPermissionParameters.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { Permission } from './Permission';
-/**
- * Schema for the parameters of a bucket permission.
- */
-export type BucketPermissionParameters = {
-    /**
-     * Start date of permission as UNIX timestamp
-     */
-    from_timestamp?: (number | null);
-    /**
-     * End date of permission as UNIX timestamp
-     */
-    to_timestamp?: (number | null);
-    /**
-     * Prefix of subfolder
-     */
-    file_prefix?: (string | null);
-    /**
-     * Permission
-     */
-    permission?: (Permission | 'READ' | 'WRITE' | 'READWRITE');
-};
-
diff --git a/src/client/models/BucketSizeLimits.ts b/src/client/models/BucketSizeLimits.ts
deleted file mode 100644
index 25323318a3e290b53e09e86f58dfc01b2905e124..0000000000000000000000000000000000000000
--- a/src/client/models/BucketSizeLimits.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-/**
- * Schema to represent bucket limits.
- */
-export type BucketSizeLimits = {
-    /**
-     * Size limit of the bucket in KiB
-     */
-    size_limit?: (number | null);
-    /**
-     * Number of objects limit of the bucket
-     */
-    object_limit?: (number | null);
-};
-
diff --git a/src/client/models/BucketType.ts b/src/client/models/BucketType.ts
deleted file mode 100644
index a974bb8026a85c4a3f683118ddd719e7e8c37bef..0000000000000000000000000000000000000000
--- a/src/client/models/BucketType.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-/**
- * Enumeration for the type of buckets to fetch from the DB
- *
- * OWN: Only fetch buckets that the user owns
- * PERMISSION: Only fetch foreign buckets that the user has access to
- * ALL: Fetch all buckets that the user has access to
- */
-export enum BucketType {
-    OWN = 'OWN',
-    ALL = 'ALL',
-    PERMISSION = 'PERMISSION',
-}
diff --git a/src/client/models/DevWorkflowExecutionIn.ts b/src/client/models/DevWorkflowExecutionIn.ts
deleted file mode 100644
index e075238c1ef96b282a13b5d8c1483ec554dd4fb4..0000000000000000000000000000000000000000
--- a/src/client/models/DevWorkflowExecutionIn.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { NextflowVersion } from './NextflowVersion';
-import type { WorkflowModeIn } from './WorkflowModeIn';
-export type DevWorkflowExecutionIn = {
-    /**
-     * Parameters for this workflow
-     */
-    parameters: Record<string, any>;
-    /**
-     * S3 Path where to save logs and reports. If None, nothing will be uploaded.
-     */
-    logs_s3_path?: (string | null);
-    /**
-     * S3 Path where to save provenance information. If None, nothing will be uploaded.
-     */
-    provenance_s3_path?: (string | null);
-    /**
-     * S3 Path where to save debug information from Nextflow. If None, nothing will be uploaded.
-     */
-    debug_s3_path?: (string | null);
-    /**
-     * Hash of the git commit
-     */
-    git_commit_hash: string;
-    /**
-     * URL to the Git repository belonging to this workflow
-     */
-    repository_url: string;
-    /**
-     * Token to access the content git repository
-     */
-    token?: (string | null);
-    /**
-     * Mode of the workflow with an alternative entrypoint
-     */
-    mode?: (WorkflowModeIn | null);
-    /**
-     * The version of Nextflow this workflow execution requires
-     */
-    nextflow_version: NextflowVersion;
-};
-
diff --git a/src/client/models/DocumentationEnum.ts b/src/client/models/DocumentationEnum.ts
deleted file mode 100644
index a80f7b59a5f013f5dfa74412abb0c7023b0bd8c2..0000000000000000000000000000000000000000
--- a/src/client/models/DocumentationEnum.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export enum DocumentationEnum {
-    USAGE_MD = 'usage.md',
-    INPUT_MD = 'input.md',
-    OUTPUT_MD = 'output.md',
-    CHANGELOG_MD = 'changelog.md',
-    PARAMETER_SCHEMA_JSON = 'parameter_schema.json',
-    CLOWM_INFO_JSON = 'clowm_info.json',
-}
diff --git a/src/client/models/ErrorDetail.ts b/src/client/models/ErrorDetail.ts
deleted file mode 100644
index 3b8a588e591ca42adc538757044eee2cf6b5881a..0000000000000000000000000000000000000000
--- a/src/client/models/ErrorDetail.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-/**
- * Schema for a error due to a rejected request.
- */
-export type ErrorDetail = {
-    /**
-     * Detail about the occurred error
-     */
-    detail: string;
-};
-
diff --git a/src/client/models/FileTree.ts b/src/client/models/FileTree.ts
deleted file mode 100644
index 1771d7910d84faca0d50045561a8b879a2980d84..0000000000000000000000000000000000000000
--- a/src/client/models/FileTree.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type FileTree = {
-    type: FileTree.type;
-    name: string;
-    target?: (string | null);
-    contents?: (Array<FileTree> | null);
-    size: number;
-};
-export namespace FileTree {
-    export enum type {
-        FILE = 'file',
-        DIRECTORY = 'directory',
-        LINK = 'link',
-    }
-}
-
diff --git a/src/client/models/HTTPValidationError.ts b/src/client/models/HTTPValidationError.ts
deleted file mode 100644
index f9b1a79e2c6debaa712bb1660d4353552f6fbfad..0000000000000000000000000000000000000000
--- a/src/client/models/HTTPValidationError.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { ValidationError } from './ValidationError';
-export type HTTPValidationError = {
-    detail?: Array<ValidationError>;
-};
-
diff --git a/src/client/models/IconUpdateOut.ts b/src/client/models/IconUpdateOut.ts
deleted file mode 100644
index c53f21ab315ad28a74e27d42e4561c18e9c04d7d..0000000000000000000000000000000000000000
--- a/src/client/models/IconUpdateOut.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type IconUpdateOut = {
-    /**
-     * URL to the uploaded icon
-     */
-    icon_url: string;
-};
-
diff --git a/src/client/models/NextflowVersion.ts b/src/client/models/NextflowVersion.ts
deleted file mode 100644
index 2796ec26e07fd8a6261eb2032ac236c8702f673d..0000000000000000000000000000000000000000
--- a/src/client/models/NextflowVersion.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export enum NextflowVersion {
-    _22_10_0 = '22.10.0',
-    _22_10_1 = '22.10.1',
-    _22_10_2 = '22.10.2',
-    _22_10_3 = '22.10.3',
-    _22_10_4 = '22.10.4',
-    _22_10_5 = '22.10.5',
-    _22_10_6 = '22.10.6',
-    _22_10_7 = '22.10.7',
-    _22_10_8 = '22.10.8',
-    _23_04_0 = '23.04.0',
-    _23_04_1 = '23.04.1',
-    _23_04_2 = '23.04.2',
-    _23_04_3 = '23.04.3',
-    _23_04_4 = '23.04.4',
-    _23_04_5 = '23.04.5',
-    _23_10_0 = '23.10.0',
-    _23_10_1 = '23.10.1',
-    _23_10_2 = '23.10.2',
-    _23_10_3 = '23.10.3',
-    _23_10_4 = '23.10.4',
-    _24_04_1 = '24.04.1',
-    _24_04_2 = '24.04.2',
-    _24_04_3 = '24.04.3',
-    _24_04_4 = '24.04.4',
-}
diff --git a/src/client/models/OIDCProvider.ts b/src/client/models/OIDCProvider.ts
deleted file mode 100644
index b8e466e6bb596bbb6ce7902ff364dd875f2473d6..0000000000000000000000000000000000000000
--- a/src/client/models/OIDCProvider.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export enum OIDCProvider {
-    LIFESCIENCE = 'lifescience',
-}
diff --git a/src/client/models/OwnershipTransferRequestIn.ts b/src/client/models/OwnershipTransferRequestIn.ts
deleted file mode 100644
index b41f58f518c3addcff53c7e02a313e05f37467db..0000000000000000000000000000000000000000
--- a/src/client/models/OwnershipTransferRequestIn.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type OwnershipTransferRequestIn = {
-    /**
-     * The new owner that get the request
-     */
-    new_owner_uid: string;
-    /**
-     * An optional comment for the transfer request
-     */
-    comment?: (string | null);
-};
-
diff --git a/src/client/models/OwnershipTransferRequestOut.ts b/src/client/models/OwnershipTransferRequestOut.ts
deleted file mode 100644
index eef1427eb7433aa66ae42e098aa6491ce3211758..0000000000000000000000000000000000000000
--- a/src/client/models/OwnershipTransferRequestOut.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { OwnershipTypeEnum } from './OwnershipTypeEnum';
-export type OwnershipTransferRequestOut = {
-    /**
-     * The new owner that get the request
-     */
-    new_owner_uid: string;
-    /**
-     * An optional comment for the transfer request
-     */
-    comment?: string;
-    /**
-     * Time when the ownership transfer was requested as UNIX timestamp
-     */
-    created_at: number;
-    /**
-     * The current uid of the current owner if he exists
-     */
-    current_owner_uid?: (string | null);
-    /**
-     * Id of the target that gets its ownership transferred
-     */
-    target_id: string;
-    /**
-     * Name of the target
-     */
-    target_name: string;
-    /**
-     * Description of then target
-     */
-    target_description: string;
-    /**
-     * Target type of the ownership transfer
-     */
-    target_type: OwnershipTypeEnum;
-};
-
diff --git a/src/client/models/OwnershipTypeEnum.ts b/src/client/models/OwnershipTypeEnum.ts
deleted file mode 100644
index 2520016ea6f90c6d55b38dc64af70aa202b6fc3d..0000000000000000000000000000000000000000
--- a/src/client/models/OwnershipTypeEnum.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export enum OwnershipTypeEnum {
-    BUCKET = 'bucket',
-    WORKFLOW = 'workflow',
-    RESOURCE = 'resource',
-}
diff --git a/src/client/models/ParameterExtension.ts b/src/client/models/ParameterExtension.ts
deleted file mode 100644
index 6c96a7e822ca5b9f15635b64a1f870b2d81e5dba..0000000000000000000000000000000000000000
--- a/src/client/models/ParameterExtension.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type ParameterExtension = {
-    /**
-     * The inner dictionary contains the display name as key and the parameter value as value. The outer dictionary has the parameter name as key.
-     */
-    mapping?: Record<string, Record<string, (string | number)>>;
-    /**
-     * Dictionary with parameter name as key and default value as value
-     */
-    defaults?: Record<string, (string | number | boolean)>;
-};
-
diff --git a/src/client/models/Permission.ts b/src/client/models/Permission.ts
deleted file mode 100644
index e8896fc75f77bfe5636267d2c12e557cfb0ec402..0000000000000000000000000000000000000000
--- a/src/client/models/Permission.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-/**
- * Enumeration for the possible permission on a bucket.
- */
-export enum Permission {
-    READ = 'READ',
-    WRITE = 'WRITE',
-    READWRITE = 'READWRITE',
-}
diff --git a/src/client/models/PermissionStatus.ts b/src/client/models/PermissionStatus.ts
deleted file mode 100644
index 4d3c03cdbfba2ec55e1526f355f944f348c61dbc..0000000000000000000000000000000000000000
--- a/src/client/models/PermissionStatus.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-/**
- * Status of a bucket permission. Can be either `ACTIVE` or `INACTIVE`. A permission can only get `INACTIVE` if the
- * permission itself has a time limit and the current time is not in the timespan.
- */
-export enum PermissionStatus {
-    ACTIVE = 'ACTIVE',
-    INACTIVE = 'INACTIVE',
-}
diff --git a/src/client/models/ResourceIn.ts b/src/client/models/ResourceIn.ts
deleted file mode 100644
index 2f6c25344f26b22af9af2f6e1299a61686178613..0000000000000000000000000000000000000000
--- a/src/client/models/ResourceIn.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type ResourceIn = {
-    /**
-     * Short tag describing the version of the resource
-     */
-    release: string;
-    /**
-     * Short Name for the resource
-     */
-    name: string;
-    /**
-     * Short description for this resource
-     */
-    description: string;
-    /**
-     * A link or similar where the resource originates from
-     */
-    source: string;
-    /**
-     * Flag if this resource should be default visible in the UI
-     */
-    private?: boolean;
-};
-
diff --git a/src/client/models/ResourceOut.ts b/src/client/models/ResourceOut.ts
deleted file mode 100644
index b9d4d9a7776164e55048a56f15d000cebc98bcca..0000000000000000000000000000000000000000
--- a/src/client/models/ResourceOut.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { ResourceVersionOut } from './ResourceVersionOut';
-export type ResourceOut = {
-    /**
-     * Short Name for the resource
-     */
-    name: string;
-    /**
-     * Short description for this resource
-     */
-    description: string;
-    /**
-     * A link or similar where the resource originates from
-     */
-    source: string;
-    /**
-     * Flag if this resource should be default visible in the UI
-     */
-    private?: boolean;
-    /**
-     * ID of the resource
-     */
-    resource_id: string;
-    /**
-     * ID of the maintainer
-     */
-    maintainer_id: (string | null);
-    /**
-     * Versions of the resource
-     */
-    versions: Array<ResourceVersionOut>;
-};
-
diff --git a/src/client/models/ResourceVersionIn.ts b/src/client/models/ResourceVersionIn.ts
deleted file mode 100644
index c4421228c96da6c8a0530d37ed86fdecdbb99628..0000000000000000000000000000000000000000
--- a/src/client/models/ResourceVersionIn.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type ResourceVersionIn = {
-    /**
-     * Short tag describing the version of the resource
-     */
-    release: string;
-};
-
diff --git a/src/client/models/ResourceVersionOut.ts b/src/client/models/ResourceVersionOut.ts
deleted file mode 100644
index 793f7c2e1b416666ff6e9c4f1719147268c0d4ed..0000000000000000000000000000000000000000
--- a/src/client/models/ResourceVersionOut.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { ResourceVersionStatus } from './ResourceVersionStatus';
-export type ResourceVersionOut = {
-    /**
-     * Short tag describing the version of the resource
-     */
-    release: string;
-    /**
-     * Status of the resource version
-     */
-    status: ResourceVersionStatus;
-    /**
-     * ID of the resource version
-     */
-    resource_version_id: string;
-    /**
-     * ID of the resource
-     */
-    resource_id: string;
-    /**
-     * Timestamp when the version was created as UNIX timestamp
-     */
-    created_at: number;
-    /**
-     * Size of the compressed resource in bytes
-     */
-    compressed_size: number;
-    /**
-     * Path to the resource on the cluster if the resource is synchronized
-     */
-    readonly cluster_path: string;
-    /**
-     * Path to the resource in the S3 Bucket. Not publicly available.
-     */
-    readonly s3_path: string;
-};
-
diff --git a/src/client/models/ResourceVersionStatus.ts b/src/client/models/ResourceVersionStatus.ts
deleted file mode 100644
index 3b2b88014dbff47537b8b6a4ca2d36296732ee26..0000000000000000000000000000000000000000
--- a/src/client/models/ResourceVersionStatus.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-/**
- * Enumeration for the possible status of a resource version.
- */
-export enum ResourceVersionStatus {
-    RESOURCE_REQUESTED = 'RESOURCE_REQUESTED',
-    WAIT_FOR_REVIEW = 'WAIT_FOR_REVIEW',
-    DENIED = 'DENIED',
-    APPROVED = 'APPROVED',
-    SYNC_REQUESTED = 'SYNC_REQUESTED',
-    SYNCHRONIZING = 'SYNCHRONIZING',
-    SYNC_ERROR = 'SYNC_ERROR',
-    SYNCHRONIZED = 'SYNCHRONIZED',
-    SETTING_LATEST = 'SETTING_LATEST',
-    LATEST = 'LATEST',
-    CLUSTER_DELETING = 'CLUSTER_DELETING',
-    CLUSTER_DELETE_ERROR = 'CLUSTER_DELETE_ERROR',
-    S3_DELETING = 'S3_DELETING',
-    S3_DELETE_ERROR = 'S3_DELETE_ERROR',
-    S3_DELETED = 'S3_DELETED',
-}
diff --git a/src/client/models/RoleEnum.ts b/src/client/models/RoleEnum.ts
deleted file mode 100644
index f99f38d450bf8b9fc149f8884bacd7d9ba3a960d..0000000000000000000000000000000000000000
--- a/src/client/models/RoleEnum.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export enum RoleEnum {
-    ADMINISTRATOR = 'administrator',
-    USER = 'user',
-    REVIEWER = 'reviewer',
-    DEVELOPER = 'developer',
-    DB_MAINTAINER = 'db_maintainer',
-}
diff --git a/src/client/models/S3Key.ts b/src/client/models/S3Key.ts
deleted file mode 100644
index 84bdd82f8c45c04d10fe0919505c4d2428329d46..0000000000000000000000000000000000000000
--- a/src/client/models/S3Key.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-/**
- * Schema for a S3 key associated with a user.
- */
-export type S3Key = {
-    /**
-     * UID of the user of that access key
-     */
-    uid: string;
-    /**
-     * ID of the S3 access key
-     */
-    access_key: string;
-    /**
-     * Secret of the S3 access key
-     */
-    secret_key: string;
-};
-
diff --git a/src/client/models/ScopeEnum.ts b/src/client/models/ScopeEnum.ts
deleted file mode 100644
index b68957318bf3c25a225479669b054b9e74c61103..0000000000000000000000000000000000000000
--- a/src/client/models/ScopeEnum.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export enum ScopeEnum {
-    READ = 'read',
-    WRITE = 'write',
-}
diff --git a/src/client/models/UserIn.ts b/src/client/models/UserIn.ts
deleted file mode 100644
index f95190fbc2b4dd57167c586d634b415b75d0e0b0..0000000000000000000000000000000000000000
--- a/src/client/models/UserIn.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { RoleEnum } from './RoleEnum';
-export type UserIn = {
-    /**
-     * Full Name of the user
-     */
-    display_name: string;
-    roles?: Array<RoleEnum>;
-    /**
-     * Email of the user
-     */
-    email: string;
-};
-
diff --git a/src/client/models/UserOut.ts b/src/client/models/UserOut.ts
deleted file mode 100644
index 31a72c1fcd2a2572d993fcd4783b1ebac1019e39..0000000000000000000000000000000000000000
--- a/src/client/models/UserOut.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-/**
- * Schema for a user.
- */
-export type UserOut = {
-    /**
-     * Full Name of the user
-     */
-    display_name: string;
-    /**
-     * ID of the user
-     */
-    uid: string;
-};
-
diff --git a/src/client/models/UserOutExtended.ts b/src/client/models/UserOutExtended.ts
deleted file mode 100644
index 709361b6a4248f1e99d2aadc193eaa6862d72740..0000000000000000000000000000000000000000
--- a/src/client/models/UserOutExtended.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { RoleEnum } from './RoleEnum';
-export type UserOutExtended = {
-    /**
-     * Roles of the user
-     */
-    roles: Array<RoleEnum>;
-    /**
-     * Full Name of the user
-     */
-    display_name: string;
-    /**
-     * ID of the user
-     */
-    uid: string;
-    /**
-     * Lifesicence ID of the user
-     */
-    lifescience_id?: (string | null);
-    /**
-     * Timestamp when the invitation token was created as UNIX timestamp
-     */
-    invitation_token_created_at?: (number | null);
-    /**
-     * URL to the gravatar avatar based on the users email
-     */
-    gravatar_url: string;
-};
-
diff --git a/src/client/models/UserRequestAnswer.ts b/src/client/models/UserRequestAnswer.ts
deleted file mode 100644
index 371bc72fdc40b0acccdcbf3c43ad5444c1721454..0000000000000000000000000000000000000000
--- a/src/client/models/UserRequestAnswer.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type UserRequestAnswer = {
-    /**
-     * Flag to indicate if the request was denied.
-     */
-    deny?: boolean;
-    /**
-     * Reason why the request was denied or approved. Required if request is denied.
-     */
-    reason?: (string | null);
-};
-
diff --git a/src/client/models/UserRoles.ts b/src/client/models/UserRoles.ts
deleted file mode 100644
index 0ec55923947ba54d7c9a08b122819d6c480c2f68..0000000000000000000000000000000000000000
--- a/src/client/models/UserRoles.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { RoleEnum } from './RoleEnum';
-export type UserRoles = {
-    /**
-     * Roles of the user
-     */
-    roles: Array<RoleEnum>;
-};
-
diff --git a/src/client/models/UserSynchronizationRequestIn.ts b/src/client/models/UserSynchronizationRequestIn.ts
deleted file mode 100644
index 14f1c691227c3a3dd0e9e3cab7010991e03a52b9..0000000000000000000000000000000000000000
--- a/src/client/models/UserSynchronizationRequestIn.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type UserSynchronizationRequestIn = {
-    /**
-     * Reason why the request was requested.
-     */
-    reason: string;
-};
-
diff --git a/src/client/models/UserSynchronizationRequestOut.ts b/src/client/models/UserSynchronizationRequestOut.ts
deleted file mode 100644
index 9f0bd3d6e70bcb52675bfe961a0b60fc6c591903..0000000000000000000000000000000000000000
--- a/src/client/models/UserSynchronizationRequestOut.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type UserSynchronizationRequestOut = {
-    /**
-     * Reason why the request was requested.
-     */
-    reason: string;
-    /**
-     * ID of the resource version
-     */
-    resource_version_id: string;
-    /**
-     * ID of the resource
-     */
-    resource_id: string;
-    /**
-     * ID of the user that requested this resource synchronization
-     */
-    requester_id: string;
-};
-
diff --git a/src/client/models/ValidationError.ts b/src/client/models/ValidationError.ts
deleted file mode 100644
index aaf1c921e8b674c3da9543cc2cb597e8e90d6d8f..0000000000000000000000000000000000000000
--- a/src/client/models/ValidationError.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type ValidationError = {
-    loc: Array<(string | number)>;
-    msg: string;
-    type: string;
-};
-
diff --git a/src/client/models/WorkflowCredentialsIn.ts b/src/client/models/WorkflowCredentialsIn.ts
deleted file mode 100644
index 7887b8f262b348915cd85cd44c90362d4732bd9f..0000000000000000000000000000000000000000
--- a/src/client/models/WorkflowCredentialsIn.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type WorkflowCredentialsIn = {
-    /**
-     * Token to access the content git repository
-     */
-    token: string;
-};
-
diff --git a/src/client/models/WorkflowCredentialsOut.ts b/src/client/models/WorkflowCredentialsOut.ts
deleted file mode 100644
index 3500a19860539a5481a39b56f833b7c6ddaa6b56..0000000000000000000000000000000000000000
--- a/src/client/models/WorkflowCredentialsOut.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type WorkflowCredentialsOut = {
-    /**
-     * Token to access the content git repository
-     */
-    token?: (string | null);
-};
-
diff --git a/src/client/models/WorkflowExecutionIn.ts b/src/client/models/WorkflowExecutionIn.ts
deleted file mode 100644
index 6b39b2f28323e5169cc2cb8e3d93238126249cf2..0000000000000000000000000000000000000000
--- a/src/client/models/WorkflowExecutionIn.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type WorkflowExecutionIn = {
-    /**
-     * Parameters for this workflow
-     */
-    parameters: Record<string, any>;
-    /**
-     * S3 Path where to save logs and reports. If None, nothing will be uploaded.
-     */
-    logs_s3_path?: (string | null);
-    /**
-     * S3 Path where to save provenance information. If None, nothing will be uploaded.
-     */
-    provenance_s3_path?: (string | null);
-    /**
-     * S3 Path where to save debug information from Nextflow. If None, nothing will be uploaded.
-     */
-    debug_s3_path?: (string | null);
-    /**
-     * Workflow version git commit hash
-     */
-    workflow_version_id: string;
-    /**
-     * Optional notes for this workflow execution
-     */
-    notes?: (string | null);
-    /**
-     * ID of the workflow mode this workflow execution runs in
-     */
-    mode_id?: (string | null);
-};
-
diff --git a/src/client/models/WorkflowExecutionOut.ts b/src/client/models/WorkflowExecutionOut.ts
deleted file mode 100644
index 9e991b700763a2e92367a9645a011b9bef9bf2ed..0000000000000000000000000000000000000000
--- a/src/client/models/WorkflowExecutionOut.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { WorkflowExecutionStatus } from './WorkflowExecutionStatus';
-export type WorkflowExecutionOut = {
-    /**
-     * Workflow version git commit hash
-     */
-    workflow_version_id?: (string | null);
-    /**
-     * Optional notes for this workflow execution
-     */
-    notes?: (string | null);
-    /**
-     * ID of the workflow mode this workflow execution runs in
-     */
-    mode_id?: (string | null);
-    /**
-     * ID of the workflow execution
-     */
-    execution_id: string;
-    /**
-     * UID of user who started the workflow
-     */
-    executor_id?: (string | null);
-    /**
-     * Start time of the workflow execution as UNIX timestamp
-     */
-    start_time: number;
-    /**
-     * End time of the workflow execution as UNIX timestamp
-     */
-    end_time?: (number | null);
-    /**
-     * Status of the workflow execution
-     */
-    status: WorkflowExecutionStatus;
-    /**
-     * Id of the workflow
-     */
-    workflow_id?: (string | null);
-    /**
-     * S3 Path where logs and reports are saved.
-     */
-    logs_s3_path?: (string | null);
-    /**
-     * S3 Path where provenance information is saved.
-     */
-    provenance_s3_path?: (string | null);
-    /**
-     * S3 Path where debug information from Nextflow is saved.
-     */
-    debug_s3_path?: (string | null);
-    /**
-     * The consumed cpu time in ISO 8601 format
-     */
-    cpu_time: string;
-};
-
diff --git a/src/client/models/WorkflowExecutionStatus.ts b/src/client/models/WorkflowExecutionStatus.ts
deleted file mode 100644
index e0bc72f4011a92b6eb1478f7cbc71e409e5a2629..0000000000000000000000000000000000000000
--- a/src/client/models/WorkflowExecutionStatus.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-/**
- * Enumeration for the status on a workflow execution.
- */
-export enum WorkflowExecutionStatus {
-    PENDING = 'PENDING',
-    SCHEDULED = 'SCHEDULED',
-    RUNNING = 'RUNNING',
-    CANCELED = 'CANCELED',
-    SUCCESS = 'SUCCESS',
-    ERROR = 'ERROR',
-}
diff --git a/src/client/models/WorkflowIn.ts b/src/client/models/WorkflowIn.ts
deleted file mode 100644
index f433bf975a0b5f8684942d6c6c14b5ae47e41d44..0000000000000000000000000000000000000000
--- a/src/client/models/WorkflowIn.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { NextflowVersion } from './NextflowVersion';
-import type { WorkflowModeIn } from './WorkflowModeIn';
-export type WorkflowIn = {
-    /**
-     * Short descriptive name of the workflow
-     */
-    name: string;
-    /**
-     * Short description of the workflow
-     */
-    short_description: string;
-    /**
-     * URL to the Git repository belonging to this workflow
-     */
-    repository_url: string;
-    /**
-     * Hash of the git commit
-     */
-    git_commit_hash: string;
-    /**
-     * Initial version of the Workflow. Should follow semantic versioning
-     */
-    initial_version?: string;
-    /**
-     * Token to access the content git repository
-     */
-    token?: (string | null);
-    /**
-     * List of modes with alternative entrypoint the new workflow has
-     */
-    modes?: Array<WorkflowModeIn>;
-    /**
-     * The version of Nextflow this workflow version requires
-     */
-    nextflow_version: NextflowVersion;
-};
-
diff --git a/src/client/models/WorkflowModeIn.ts b/src/client/models/WorkflowModeIn.ts
deleted file mode 100644
index c09b4349d3129125b8e3989d1d7ab097c100a915..0000000000000000000000000000000000000000
--- a/src/client/models/WorkflowModeIn.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type WorkflowModeIn = {
-    /**
-     * Path to the alternative parameter schema
-     */
-    schema_path: string;
-    /**
-     * Name of the process the workflow should start with. Argument to the parameter '-entry'
-     */
-    entrypoint: string;
-    /**
-     * Name of the workflow mode
-     */
-    name: string;
-};
-
diff --git a/src/client/models/WorkflowModeOut.ts b/src/client/models/WorkflowModeOut.ts
deleted file mode 100644
index 3adeebeca35255fd467c705685bd4098366a4d61..0000000000000000000000000000000000000000
--- a/src/client/models/WorkflowModeOut.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type WorkflowModeOut = {
-    /**
-     * Path to the alternative parameter schema
-     */
-    schema_path: string;
-    /**
-     * Name of the process the workflow should start with. Argument to the parameter '-entry'
-     */
-    entrypoint: string;
-    /**
-     * Name of the workflow mode
-     */
-    name: string;
-    /**
-     * ID of the workflow mode
-     */
-    mode_id: string;
-};
-
diff --git a/src/client/models/WorkflowOut.ts b/src/client/models/WorkflowOut.ts
deleted file mode 100644
index 0f41c54708f8442104ed669472d31780574fd1e1..0000000000000000000000000000000000000000
--- a/src/client/models/WorkflowOut.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { WorkflowVersion } from './WorkflowVersion';
-export type WorkflowOut = {
-    /**
-     * Short descriptive name of the workflow
-     */
-    name: string;
-    /**
-     * Short description of the workflow
-     */
-    short_description: string;
-    /**
-     * URL to the Git repository belonging to this workflow
-     */
-    repository_url: string;
-    /**
-     * ID of the workflow
-     */
-    workflow_id: string;
-    /**
-     * Versions of the workflow
-     */
-    versions: Array<WorkflowVersion>;
-    /**
-     * ID of developer of the workflow
-     */
-    developer_id?: (string | null);
-    /**
-     * Flag if the workflow is hosted in a private git repository
-     */
-    private?: boolean;
-};
-
diff --git a/src/client/models/WorkflowStatistic.ts b/src/client/models/WorkflowStatistic.ts
deleted file mode 100644
index ba9815f493841b6192cc61a7ae1eda1fc2afcfff..0000000000000000000000000000000000000000
--- a/src/client/models/WorkflowStatistic.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-export type WorkflowStatistic = {
-    /**
-     * Day of the datapoint
-     */
-    day: string;
-    /**
-     * Number of started workflows on that day
-     */
-    count: number;
-};
-
diff --git a/src/client/models/WorkflowUpdate.ts b/src/client/models/WorkflowUpdate.ts
deleted file mode 100644
index a67749a44add93e13f56fc724ec2379f5df1c46d..0000000000000000000000000000000000000000
--- a/src/client/models/WorkflowUpdate.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { NextflowVersion } from './NextflowVersion';
-import type { WorkflowModeIn } from './WorkflowModeIn';
-export type WorkflowUpdate = {
-    /**
-     * Version of the Workflow. Should follow semantic versioning
-     */
-    version: string;
-    /**
-     * Hash of the git commit
-     */
-    git_commit_hash: string;
-    /**
-     * Add modes to the new workflow version
-     */
-    append_modes?: Array<WorkflowModeIn>;
-    /**
-     * Delete modes for the new workflow version.
-     */
-    delete_modes?: Array<string>;
-    /**
-     * The version of Nextflow this new workflow version requires.
-     */
-    nextflow_version: NextflowVersion;
-};
-
diff --git a/src/client/models/WorkflowVersion.ts b/src/client/models/WorkflowVersion.ts
deleted file mode 100644
index 3e3138e5f54dcb89bdb0e91b831191489885659f..0000000000000000000000000000000000000000
--- a/src/client/models/WorkflowVersion.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { NextflowVersion } from './NextflowVersion';
-import type { ParameterExtension } from './ParameterExtension';
-import type { WorkflowVersionStatus } from './WorkflowVersionStatus';
-export type WorkflowVersion = {
-    /**
-     * Status of the workflow version
-     */
-    status: WorkflowVersionStatus;
-    /**
-     * ID of the corresponding workflow
-     */
-    workflow_id: string;
-    /**
-     * Version of the Workflow. Should follow semantic versioning
-     */
-    version: string;
-    /**
-     * URL to the uploaded icon
-     */
-    icon_url?: (string | null);
-    /**
-     * Hash of the git commit
-     */
-    workflow_version_id: string;
-    /**
-     * Timestamp when the version was created as UNIX timestamp
-     */
-    created_at: number;
-    /**
-     * Optional modes his workflow version has
-     */
-    modes?: Array<string>;
-    /**
-     * Parameter extension specific for this CloWM instance
-     */
-    parameter_extension?: (ParameterExtension | null);
-    /**
-     * The version of Nextflow this workflow version requires
-     */
-    nextflow_version: NextflowVersion;
-};
-
diff --git a/src/client/models/WorkflowVersionStatus.ts b/src/client/models/WorkflowVersionStatus.ts
deleted file mode 100644
index cb031bbc90005091e8be8a16b0db718c829d10fb..0000000000000000000000000000000000000000
--- a/src/client/models/WorkflowVersionStatus.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-/**
- * Enumeration for the possible status of a workflow version.
- */
-export enum WorkflowVersionStatus {
-    CREATED = 'CREATED',
-    DENIED = 'DENIED',
-    PUBLISHED = 'PUBLISHED',
-    DEPRECATED = 'DEPRECATED',
-}
diff --git a/src/client/models/WorkflowVersionStatusSchema.ts b/src/client/models/WorkflowVersionStatusSchema.ts
deleted file mode 100644
index c4dd3e49c2f9a8ec1950133364eb023835ac468f..0000000000000000000000000000000000000000
--- a/src/client/models/WorkflowVersionStatusSchema.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { WorkflowVersionStatus } from './WorkflowVersionStatus';
-export type WorkflowVersionStatusSchema = {
-    /**
-     * Status of the workflow version
-     */
-    status: WorkflowVersionStatus;
-};
-
diff --git a/src/client/services.gen.ts b/src/client/services.gen.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a501638e1c19b611c26ea1226550eda6ceea9911
--- /dev/null
+++ b/src/client/services.gen.ts
@@ -0,0 +1,2133 @@
+// This file is auto-generated by @hey-api/openapi-ts
+
+import {
+  createClient,
+  createConfig,
+  type Options,
+  formDataBodySerializer,
+} from "@hey-api/client-axios";
+import type {
+  AuthLoginData,
+  AuthLoginCallbackData,
+  ApiTokenListTokenData,
+  ApiTokenListTokenError,
+  ApiTokenListTokenResponse,
+  ApiTokenCreateTokenData,
+  ApiTokenCreateTokenError,
+  ApiTokenCreateTokenResponse,
+  ApiTokenGetTokenData,
+  ApiTokenGetTokenError,
+  ApiTokenGetTokenResponse,
+  ApiTokenDeleteTokenData,
+  ApiTokenDeleteTokenError,
+  ApiTokenDeleteTokenResponse,
+  UserCreateUserData,
+  UserCreateUserError,
+  UserCreateUserResponse,
+  UserListUsersData,
+  UserListUsersError,
+  UserListUsersResponse,
+  UserSearchUsersData,
+  UserSearchUsersError,
+  UserSearchUsersResponse,
+  UserGetLoggedInUserError,
+  UserGetLoggedInUserResponse,
+  UserGetUserData,
+  UserGetUserError,
+  UserGetUserResponse,
+  UserUpdateRolesData,
+  UserUpdateRolesError,
+  UserUpdateRolesResponse,
+  UserResendInvitationData,
+  UserResendInvitationError,
+  UserResendInvitationResponse,
+  S3KeyGetUserKeysData,
+  S3KeyGetUserKeysError,
+  S3KeyGetUserKeysResponse,
+  S3KeyCreateUserKeyData,
+  S3KeyCreateUserKeyError,
+  S3KeyCreateUserKeyResponse,
+  S3KeyGetUserKeyData,
+  S3KeyGetUserKeyError,
+  S3KeyGetUserKeyResponse,
+  S3KeyDeleteUserKeyData,
+  S3KeyDeleteUserKeyError,
+  S3KeyDeleteUserKeyResponse,
+  BucketListBucketsData,
+  BucketListBucketsError,
+  BucketListBucketsResponse,
+  BucketCreateBucketData,
+  BucketCreateBucketError,
+  BucketCreateBucketResponse,
+  BucketListBucketOtrsData,
+  BucketListBucketOtrsError,
+  BucketListBucketOtrsResponse,
+  BucketGetBucketData,
+  BucketGetBucketError,
+  BucketGetBucketResponse,
+  BucketDeleteBucketData,
+  BucketDeleteBucketError,
+  BucketDeleteBucketResponse,
+  BucketGetBucketOtrData,
+  BucketGetBucketOtrError,
+  BucketGetBucketOtrResponse,
+  BucketCreateBucketOtrData,
+  BucketCreateBucketOtrError,
+  BucketCreateBucketOtrResponse,
+  BucketAcceptBucketOtrData,
+  BucketAcceptBucketOtrError,
+  BucketAcceptBucketOtrResponse,
+  BucketDeleteBucketOtrData,
+  BucketDeleteBucketOtrError,
+  BucketDeleteBucketOtrResponse,
+  BucketUpdateBucketPublicStateData,
+  BucketUpdateBucketPublicStateError,
+  BucketUpdateBucketPublicStateResponse,
+  BucketUpdateBucketLimitsData,
+  BucketUpdateBucketLimitsError,
+  BucketUpdateBucketLimitsResponse,
+  BucketPermissionListPermissionsData,
+  BucketPermissionListPermissionsError,
+  BucketPermissionListPermissionsResponse,
+  BucketPermissionCreatePermissionData,
+  BucketPermissionCreatePermissionError,
+  BucketPermissionCreatePermissionResponse,
+  BucketPermissionListPermissionsPerUserData,
+  BucketPermissionListPermissionsPerUserError,
+  BucketPermissionListPermissionsPerUserResponse,
+  BucketPermissionListPermissionsPerBucketData,
+  BucketPermissionListPermissionsPerBucketError,
+  BucketPermissionListPermissionsPerBucketResponse,
+  BucketPermissionGetPermissionForBucketData,
+  BucketPermissionGetPermissionForBucketError,
+  BucketPermissionGetPermissionForBucketResponse,
+  BucketPermissionUpdatePermissionData,
+  BucketPermissionUpdatePermissionError,
+  BucketPermissionUpdatePermissionResponse,
+  BucketPermissionDeletePermissionData,
+  BucketPermissionDeletePermissionError,
+  BucketPermissionDeletePermissionResponse,
+  WorkflowCreateWorkflowData,
+  WorkflowCreateWorkflowError,
+  WorkflowCreateWorkflowResponse,
+  WorkflowListWorkflowsData,
+  WorkflowListWorkflowsError,
+  WorkflowListWorkflowsResponse,
+  WorkflowListWorkflowOtrsData,
+  WorkflowListWorkflowOtrsError,
+  WorkflowListWorkflowOtrsResponse,
+  WorkflowGetDeveloperWorkflowStatisticsData,
+  WorkflowGetDeveloperWorkflowStatisticsError,
+  WorkflowGetDeveloperWorkflowStatisticsResponse,
+  WorkflowGetWorkflowData,
+  WorkflowGetWorkflowError,
+  WorkflowGetWorkflowResponse,
+  WorkflowDeleteWorkflowData,
+  WorkflowDeleteWorkflowError,
+  WorkflowDeleteWorkflowResponse,
+  WorkflowGetWorkflowOtrData,
+  WorkflowGetWorkflowOtrError,
+  WorkflowGetWorkflowOtrResponse,
+  WorkflowCreateWorkflowOtrData,
+  WorkflowCreateWorkflowOtrError,
+  WorkflowCreateWorkflowOtrResponse,
+  WorkflowAcceptWorkflowOtrData,
+  WorkflowAcceptWorkflowOtrError,
+  WorkflowAcceptWorkflowOtrResponse,
+  WorkflowDeleteWorkflowOtrData,
+  WorkflowDeleteWorkflowOtrError,
+  WorkflowDeleteWorkflowOtrResponse,
+  WorkflowGetWorkflowStatisticsData,
+  WorkflowGetWorkflowStatisticsError,
+  WorkflowGetWorkflowStatisticsResponse,
+  WorkflowUpdateWorkflowData,
+  WorkflowUpdateWorkflowError,
+  WorkflowUpdateWorkflowResponse,
+  WorkflowVersionListWorkflowVersionData,
+  WorkflowVersionListWorkflowVersionError,
+  WorkflowVersionListWorkflowVersionResponse,
+  WorkflowVersionGetWorkflowVersionData,
+  WorkflowVersionGetWorkflowVersionError,
+  WorkflowVersionGetWorkflowVersionResponse,
+  WorkflowVersionUpdateWorkflowVersionStatusData,
+  WorkflowVersionUpdateWorkflowVersionStatusError,
+  WorkflowVersionUpdateWorkflowVersionStatusResponse,
+  WorkflowVersionDeprecateWorkflowVersionData,
+  WorkflowVersionDeprecateWorkflowVersionError,
+  WorkflowVersionDeprecateWorkflowVersionResponse,
+  WorkflowVersionUpdateWorkflowVersionParameterExtensionData,
+  WorkflowVersionUpdateWorkflowVersionParameterExtensionError,
+  WorkflowVersionUpdateWorkflowVersionParameterExtensionResponse,
+  WorkflowVersionDeleteWorkflowVersionParameterExtensionData,
+  WorkflowVersionDeleteWorkflowVersionParameterExtensionError,
+  WorkflowVersionDeleteWorkflowVersionParameterExtensionResponse,
+  WorkflowVersionDownloadWorkflowDocumentationData,
+  WorkflowVersionDownloadWorkflowDocumentationError,
+  WorkflowVersionDownloadWorkflowDocumentationResponse,
+  WorkflowVersionUploadWorkflowVersionIconData,
+  WorkflowVersionUploadWorkflowVersionIconError,
+  WorkflowVersionUploadWorkflowVersionIconResponse,
+  WorkflowVersionDeleteWorkflowVersionIconData,
+  WorkflowVersionDeleteWorkflowVersionIconError,
+  WorkflowVersionDeleteWorkflowVersionIconResponse,
+  WorkflowExecutionStartWorkflowData,
+  WorkflowExecutionStartWorkflowError,
+  WorkflowExecutionStartWorkflowResponse,
+  WorkflowExecutionListWorkflowExecutionsData,
+  WorkflowExecutionListWorkflowExecutionsError,
+  WorkflowExecutionListWorkflowExecutionsResponse,
+  WorkflowExecutionStartArbitraryWorkflowData,
+  WorkflowExecutionStartArbitraryWorkflowError,
+  WorkflowExecutionStartArbitraryWorkflowResponse,
+  WorkflowExecutionGetWorkflowExecutionData,
+  WorkflowExecutionGetWorkflowExecutionError,
+  WorkflowExecutionGetWorkflowExecutionResponse,
+  WorkflowExecutionDeleteWorkflowExecutionData,
+  WorkflowExecutionDeleteWorkflowExecutionError,
+  WorkflowExecutionDeleteWorkflowExecutionResponse,
+  WorkflowExecutionGetWorkflowExecutionParamsData,
+  WorkflowExecutionGetWorkflowExecutionParamsError,
+  WorkflowExecutionGetWorkflowExecutionParamsResponse,
+  WorkflowExecutionCancelWorkflowExecutionData,
+  WorkflowExecutionCancelWorkflowExecutionError,
+  WorkflowExecutionCancelWorkflowExecutionResponse,
+  WorkflowCredentialsGetWorkflowCredentialsData,
+  WorkflowCredentialsGetWorkflowCredentialsError,
+  WorkflowCredentialsGetWorkflowCredentialsResponse,
+  WorkflowCredentialsUpdateWorkflowCredentialsData,
+  WorkflowCredentialsUpdateWorkflowCredentialsError,
+  WorkflowCredentialsUpdateWorkflowCredentialsResponse,
+  WorkflowCredentialsDeleteWorkflowCredentialsData,
+  WorkflowCredentialsDeleteWorkflowCredentialsError,
+  WorkflowCredentialsDeleteWorkflowCredentialsResponse,
+  WorkflowModeGetWorkflowModeData,
+  WorkflowModeGetWorkflowModeError,
+  WorkflowModeGetWorkflowModeResponse,
+  ResourceCreateResourceData,
+  ResourceCreateResourceError,
+  ResourceCreateResourceResponse,
+  ResourceListResourcesData,
+  ResourceListResourcesError,
+  ResourceListResourcesResponse,
+  ResourceListSyncRequestsError,
+  ResourceListSyncRequestsResponse,
+  ResourceListResourceOtrsData,
+  ResourceListResourceOtrsError,
+  ResourceListResourceOtrsResponse,
+  ResourceGetResourceData,
+  ResourceGetResourceError,
+  ResourceGetResourceResponse,
+  ResourceDeleteResourceData,
+  ResourceDeleteResourceError,
+  ResourceDeleteResourceResponse,
+  ResourceGetResourceOtrData,
+  ResourceGetResourceOtrError,
+  ResourceGetResourceOtrResponse,
+  ResourceCreateResourceOtrData,
+  ResourceCreateResourceOtrError,
+  ResourceCreateResourceOtrResponse,
+  ResourceAcceptResourceOtrData,
+  ResourceAcceptResourceOtrError,
+  ResourceAcceptResourceOtrResponse,
+  ResourceDeleteResourceOtrData,
+  ResourceDeleteResourceOtrError,
+  ResourceDeleteResourceOtrResponse,
+  ResourceVersionListResourceVersionsData,
+  ResourceVersionListResourceVersionsError,
+  ResourceVersionListResourceVersionsResponse,
+  ResourceVersionRequestResourceVersionData,
+  ResourceVersionRequestResourceVersionError,
+  ResourceVersionRequestResourceVersionResponse,
+  ResourceVersionGetResourceVersionData,
+  ResourceVersionGetResourceVersionError,
+  ResourceVersionGetResourceVersionResponse,
+  ResourceVersionResourceFileTreeData,
+  ResourceVersionResourceFileTreeError,
+  ResourceVersionResourceFileTreeResponse,
+  ResourceVersionRequestResourceVersionReviewData,
+  ResourceVersionRequestResourceVersionReviewError,
+  ResourceVersionRequestResourceVersionReviewResponse,
+  ResourceVersionRequestResourceVersionSyncData,
+  ResourceVersionRequestResourceVersionSyncError,
+  ResourceVersionRequestResourceVersionSyncResponse,
+  ResourceVersionResourceVersionReviewData,
+  ResourceVersionResourceVersionReviewError,
+  ResourceVersionResourceVersionReviewResponse,
+  ResourceVersionResourceVersionSyncData,
+  ResourceVersionResourceVersionSyncError,
+  ResourceVersionResourceVersionSyncResponse,
+  ResourceVersionResourceVersionLatestData,
+  ResourceVersionResourceVersionLatestError,
+  ResourceVersionResourceVersionLatestResponse,
+  ResourceVersionDeleteResourceVersionClusterData,
+  ResourceVersionDeleteResourceVersionClusterError,
+  ResourceVersionDeleteResourceVersionClusterResponse,
+  ResourceVersionDeleteResourceVersionS3Data,
+  ResourceVersionDeleteResourceVersionS3Error,
+  ResourceVersionDeleteResourceVersionS3Response,
+} from "./types.gen";
+
+export const client = createClient(createConfig());
+
+export class AuthService {
+  /**
+   * Kickstart the login flow
+   * Redirect route to OIDC provider to kickstart the login process.
+   */
+  public static authLogin<ThrowOnError extends boolean = false>(
+    options?: Options<AuthLoginData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<void, unknown, ThrowOnError>({
+      ...options,
+      url: "/auth/login",
+    });
+  }
+
+  /**
+   * LifeScience Login Callback
+   * Callback for the Life Science Identity Provider.
+   *
+   * Visit the route login route to start the login process.
+   *
+   * If the user is already known to the system, then a JWT token will be created and sent via the 'set-cookie' header.
+   * The key for this Cookie is 'bearer'.
+   *
+   * If the user is new, he will be created and then a JWT token is issued.
+   *
+   * This JWT has to be sent to all authorized endpoints via the HTTPBearer scheme.
+   */
+  public static authLoginCallback<ThrowOnError extends boolean = false>(
+    options: Options<AuthLoginCallbackData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<void, unknown, ThrowOnError>({
+      ...options,
+      url: "/auth/callback/{provider}",
+    });
+  }
+
+  /**
+   * Logout
+   * Logout the user from the system by deleting the bearer cookie.
+   */
+  public static authLogout<ThrowOnError extends boolean = false>(
+    options?: Options<unknown, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<void, unknown, ThrowOnError>({
+      ...options,
+      url: "/auth/logout",
+    });
+  }
+}
+
+export class ApiTokenService {
+  /**
+   * List API token
+   * List meta information about all API token.
+   *
+   * Permissions `api_token:list_all` required. See parameter `uid` for exception.
+   */
+  public static apiTokenListToken<ThrowOnError extends boolean = false>(
+    options?: Options<ApiTokenListTokenData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      ApiTokenListTokenResponse,
+      ApiTokenListTokenError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/tokens",
+    });
+  }
+
+  /**
+   * Create new API token
+   * Create a new API token for the current user.
+   *
+   * Permission `api_token:create` required.
+   */
+  public static apiTokenCreateToken<ThrowOnError extends boolean = false>(
+    options: Options<ApiTokenCreateTokenData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).post<
+      ApiTokenCreateTokenResponse,
+      ApiTokenCreateTokenError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/tokens",
+    });
+  }
+
+  /**
+   * Get API token
+   * Get an API token by id.
+   *
+   * Permission `api_token:read` required if the current user is the owner of the API token,
+   * otherwise `api_token:read_any` required.
+   */
+  public static apiTokenGetToken<ThrowOnError extends boolean = false>(
+    options: Options<ApiTokenGetTokenData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      ApiTokenGetTokenResponse,
+      ApiTokenGetTokenError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/tokens/{tid}",
+    });
+  }
+
+  /**
+   * Delete API token
+   * Delete an API token by id.
+   *
+   * Permission `api_token:delete` required if the current user is the owner of the API token,
+   * otherwise `api_token:delete_any` required.
+   */
+  public static apiTokenDeleteToken<ThrowOnError extends boolean = false>(
+    options: Options<ApiTokenDeleteTokenData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).delete<
+      ApiTokenDeleteTokenResponse,
+      ApiTokenDeleteTokenError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/tokens/{tid}",
+    });
+  }
+}
+
+export class UserService {
+  /**
+   * Create User
+   * Create a new user in the system and notify him.
+   *
+   * Permission `user:create` required.
+   */
+  public static userCreateUser<ThrowOnError extends boolean = false>(
+    options: Options<UserCreateUserData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).post<
+      UserCreateUserResponse,
+      UserCreateUserError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/users",
+    });
+  }
+
+  /**
+   * List users and search by their name
+   * List all users in the system..
+   *
+   * Permission `user:list` required.
+   */
+  public static userListUsers<ThrowOnError extends boolean = false>(
+    options?: Options<UserListUsersData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      UserListUsersResponse,
+      UserListUsersError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/users",
+    });
+  }
+
+  /**
+   * Search Users
+   * Search for users in the system by their name.
+   *
+   * Permission `user: search` required.
+   */
+  public static userSearchUsers<ThrowOnError extends boolean = false>(
+    options: Options<UserSearchUsersData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      UserSearchUsersResponse,
+      UserSearchUsersError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/users/search",
+    });
+  }
+
+  /**
+   * Get the logged in user
+   * Return the user associated with the used JWT.
+   *
+   * Permission `user:read` required.
+   */
+  public static userGetLoggedInUser<ThrowOnError extends boolean = false>(
+    options?: Options<unknown, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      UserGetLoggedInUserResponse,
+      UserGetLoggedInUserError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/users/me",
+    });
+  }
+
+  /**
+   * Get a user by its uid
+   * Return the user with the specific uid.
+   *
+   * Permission `user:read` required.
+   */
+  public static userGetUser<ThrowOnError extends boolean = false>(
+    options: Options<UserGetUserData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      UserGetUserResponse,
+      UserGetUserError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/users/{uid}",
+    });
+  }
+
+  /**
+   * Update user roles
+   * Update the roles of a user.
+   *
+   * Permission `user:update` required.
+   */
+  public static userUpdateRoles<ThrowOnError extends boolean = false>(
+    options: Options<UserUpdateRolesData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).put<
+      UserUpdateRolesResponse,
+      UserUpdateRolesError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/users/{uid}/roles",
+    });
+  }
+
+  /**
+   * Resend Invitation
+   * Resend the invitation link for an user that has an open invitation.
+   *
+   * Permission `user:create` required.
+   */
+  public static userResendInvitation<ThrowOnError extends boolean = false>(
+    options: Options<UserResendInvitationData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).patch<
+      UserResendInvitationResponse,
+      UserResendInvitationError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/users/{uid}/invitation",
+    });
+  }
+}
+
+export class S3KeyService {
+  /**
+   * Get the S3 Access keys from a user
+   * Get all the S3 Access keys for a specific user.
+   *
+   * Permission `s3_key:list` required.
+   */
+  public static s3KeyGetUserKeys<ThrowOnError extends boolean = false>(
+    options: Options<S3KeyGetUserKeysData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      S3KeyGetUserKeysResponse,
+      S3KeyGetUserKeysError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/users/{uid}/keys",
+    });
+  }
+
+  /**
+   * Create a Access key for a user
+   * Create a S3 Access key for a specific user.
+   *
+   * Permission `s3_key:create` required.
+   */
+  public static s3KeyCreateUserKey<ThrowOnError extends boolean = false>(
+    options: Options<S3KeyCreateUserKeyData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).post<
+      S3KeyCreateUserKeyResponse,
+      S3KeyCreateUserKeyError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/users/{uid}/keys",
+    });
+  }
+
+  /**
+   * Get a specific S3 Access key from a user
+   * Get a specific S3 Access Key for a specific user.
+   *
+   * Permission `s3_key:read` required.
+   */
+  public static s3KeyGetUserKey<ThrowOnError extends boolean = false>(
+    options: Options<S3KeyGetUserKeyData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      S3KeyGetUserKeyResponse,
+      S3KeyGetUserKeyError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/users/{uid}/keys/{access_id}",
+    });
+  }
+
+  /**
+   * Delete a specific S3 Access key from a user
+   * Delete a specific S3 Access key for a specific user.
+   *
+   * Permission `s3_key:delete` required if the current user is the target, otherwise `s3_key:delete_any` required.
+   */
+  public static s3KeyDeleteUserKey<ThrowOnError extends boolean = false>(
+    options: Options<S3KeyDeleteUserKeyData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).delete<
+      S3KeyDeleteUserKeyResponse,
+      S3KeyDeleteUserKeyError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/users/{uid}/keys/{access_id}",
+    });
+  }
+}
+
+export class BucketService {
+  /**
+   * List buckets
+   * List all the buckets in the system or of the desired user where the user has permissions for.
+   *
+   * Permission `bucket:list_all` required. See parameter `owner_id` for exception.
+   */
+  public static bucketListBuckets<ThrowOnError extends boolean = false>(
+    options?: Options<BucketListBucketsData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      BucketListBucketsResponse,
+      BucketListBucketsError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/buckets",
+    });
+  }
+
+  /**
+   * Create a bucket for the current user
+   * Create a bucket for the current user.
+   *
+   * The name of the bucket has some constraints.
+   * For more information see the
+   * [Ceph documentation](https://docs.ceph.com/en/quincy/radosgw/s3/bucketops/#constraints)
+   *
+   * Permission `bucket:create` required.
+   */
+  public static bucketCreateBucket<ThrowOnError extends boolean = false>(
+    options: Options<BucketCreateBucketData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).post<
+      BucketCreateBucketResponse,
+      BucketCreateBucketError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/buckets",
+    });
+  }
+
+  /**
+   * List bucket OTRs
+   * Get the ownership transfer requests for buckets.
+   *
+   * Permission `bucket:list` required if `current_owner_id` or `new_owner_id` is the current users id,
+   * otherwise `bucket:list_all`
+   */
+  public static bucketListBucketOtrs<ThrowOnError extends boolean = false>(
+    options?: Options<BucketListBucketOtrsData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      BucketListBucketOtrsResponse,
+      BucketListBucketOtrsError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/buckets/ownership_transfer_request",
+    });
+  }
+
+  /**
+   * Get a bucket by its name
+   * Get a bucket by its name if the current user has READ permissions for the bucket.
+   *
+   * Permission `bucket:read` required if the current user is the owner of the bucket,
+   * otherwise `bucket:read_any` required.
+   */
+  public static bucketGetBucket<ThrowOnError extends boolean = false>(
+    options: Options<BucketGetBucketData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      BucketGetBucketResponse,
+      BucketGetBucketError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/buckets/{bucket_name}",
+    });
+  }
+
+  /**
+   * Delete a bucket
+   * Delete a bucket by its name. Only the owner of the bucket can delete the bucket.
+   *
+   * Permission `bucket:delete` required if the current user is the owner of the bucket,
+   * otherwise `bucket:delete_any` required.
+   */
+  public static bucketDeleteBucket<ThrowOnError extends boolean = false>(
+    options: Options<BucketDeleteBucketData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).delete<
+      BucketDeleteBucketResponse,
+      BucketDeleteBucketError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/buckets/{bucket_name}",
+    });
+  }
+
+  /**
+   * Get a bucket OTR
+   * Get a specific bucket ownership transfer request.
+   *
+   * Permission `bucket:read` required if the current user is the current or new owner of the bucket,
+   * otherwise `bucket:read_any` required.
+   */
+  public static bucketGetBucketOtr<ThrowOnError extends boolean = false>(
+    options: Options<BucketGetBucketOtrData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      BucketGetBucketOtrResponse,
+      BucketGetBucketOtrError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/buckets/{bucket_name}/ownership_transfer_request",
+    });
+  }
+
+  /**
+   * Create a bucket OTR
+   * Create a ownership transfer request for a specific bucket.
+   *
+   * Permission `bucket:update` required if the current user is the current owner of the bucket,
+   * otherwise `bucket:update_any` required.
+   */
+  public static bucketCreateBucketOtr<ThrowOnError extends boolean = false>(
+    options: Options<BucketCreateBucketOtrData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).post<
+      BucketCreateBucketOtrResponse,
+      BucketCreateBucketOtrError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/buckets/{bucket_name}/ownership_transfer_request",
+    });
+  }
+
+  /**
+   * Accept a bucket OTR
+   * Accept an ownership transfer request for a specific workflow.
+   *
+   * Permission `bucket:update` required if the current user is the new owner of the workflow,
+   * otherwise `bucket:update_any` required.
+   */
+  public static bucketAcceptBucketOtr<ThrowOnError extends boolean = false>(
+    options: Options<BucketAcceptBucketOtrData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).patch<
+      BucketAcceptBucketOtrResponse,
+      BucketAcceptBucketOtrError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/buckets/{bucket_name}/ownership_transfer_request",
+    });
+  }
+
+  /**
+   * Delete a bucket OTR
+   * Delete/Reject a bucket ownership transfer request.
+   *
+   * Permission `bucket:update` required if the current user is the current or new owner of the bucket,
+   * otherwise `bucket:update_any` required.
+   */
+  public static bucketDeleteBucketOtr<ThrowOnError extends boolean = false>(
+    options: Options<BucketDeleteBucketOtrData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).delete<
+      BucketDeleteBucketOtrResponse,
+      BucketDeleteBucketOtrError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/buckets/{bucket_name}/ownership_transfer_request",
+    });
+  }
+
+  /**
+   * Update public status
+   * Update the buckets public state.
+   *
+   * Permission `bucket:update` required if the current user is the owner of the bucket,
+   * otherwise `bucket:update_any` required.
+   */
+  public static bucketUpdateBucketPublicState<
+    ThrowOnError extends boolean = false,
+  >(options: Options<BucketUpdateBucketPublicStateData, ThrowOnError>) {
+    return (options?.client ?? client).patch<
+      BucketUpdateBucketPublicStateResponse,
+      BucketUpdateBucketPublicStateError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/buckets/{bucket_name}/public",
+    });
+  }
+
+  /**
+   * Update bucket limits
+   * Update the buckets size limits.
+   *
+   * Permission `bucket:update_any` required.
+   */
+  public static bucketUpdateBucketLimits<ThrowOnError extends boolean = false>(
+    options: Options<BucketUpdateBucketLimitsData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).patch<
+      BucketUpdateBucketLimitsResponse,
+      BucketUpdateBucketLimitsError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/buckets/{bucket_name}/limits",
+    });
+  }
+}
+
+export class BucketPermissionService {
+  /**
+   * Get all permissions.
+   * List all the bucket permissions in the system.
+   *
+   * Permission `bucket_permission:list_all` required.
+   */
+  public static bucketPermissionListPermissions<
+    ThrowOnError extends boolean = false,
+  >(options?: Options<BucketPermissionListPermissionsData, ThrowOnError>) {
+    return (options?.client ?? client).get<
+      BucketPermissionListPermissionsResponse,
+      BucketPermissionListPermissionsError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/permissions",
+    });
+  }
+
+  /**
+   * Create a permission.
+   * Create a permission for a bucket and user.
+   *
+   * Permission `bucket_permission:create` required.
+   */
+  public static bucketPermissionCreatePermission<
+    ThrowOnError extends boolean = false,
+  >(options: Options<BucketPermissionCreatePermissionData, ThrowOnError>) {
+    return (options?.client ?? client).post<
+      BucketPermissionCreatePermissionResponse,
+      BucketPermissionCreatePermissionError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/permissions",
+    });
+  }
+
+  /**
+   * Get all permissions for a user.
+   * List all the bucket permissions for the given user.
+   *
+   * Permission `bucket_permission:list` required if current user is the target the bucket permission,
+   * otherwise `bucket_permission:list_all` required.
+   */
+  public static bucketPermissionListPermissionsPerUser<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<BucketPermissionListPermissionsPerUserData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      BucketPermissionListPermissionsPerUserResponse,
+      BucketPermissionListPermissionsPerUserError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/permissions/user/{uid}",
+    });
+  }
+
+  /**
+   * Get all permissions for a bucket.
+   * List all the bucket permissions for the given bucket.
+   *
+   * Permission `bucket_permission:list` required if current user is owner of the bucket,
+   * otherwise `bucket_permission:list_all` required.
+   */
+  public static bucketPermissionListPermissionsPerBucket<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<
+      BucketPermissionListPermissionsPerBucketData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).get<
+      BucketPermissionListPermissionsPerBucketResponse,
+      BucketPermissionListPermissionsPerBucketError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/permissions/bucket/{bucket_name}",
+    });
+  }
+
+  /**
+   * Get permission for bucket and user combination.
+   * Get the bucket permissions for the specific combination of bucket and user.
+   *
+   * Permission `bucket_permission:read` required if current user is the target or owner of the bucket permission,
+   * otherwise `bucket_permission:read_any` required.
+   */
+  public static bucketPermissionGetPermissionForBucket<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<BucketPermissionGetPermissionForBucketData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      BucketPermissionGetPermissionForBucketResponse,
+      BucketPermissionGetPermissionForBucketError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/permissions/bucket/{bucket_name}/user/{uid}",
+    });
+  }
+
+  /**
+   * Update a bucket permission
+   * Update a permission for a bucket and user.
+   *
+   * Permission `bucket_permission:update` required.
+   */
+  public static bucketPermissionUpdatePermission<
+    ThrowOnError extends boolean = false,
+  >(options: Options<BucketPermissionUpdatePermissionData, ThrowOnError>) {
+    return (options?.client ?? client).put<
+      BucketPermissionUpdatePermissionResponse,
+      BucketPermissionUpdatePermissionError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/permissions/bucket/{bucket_name}/user/{uid}",
+    });
+  }
+
+  /**
+   * Delete a bucket permission
+   * Delete the bucket permissions for the specific combination of bucket and user.
+   *
+   * Permission `bucket_permission:delete` required if current user is the target or owner of the bucket permission,
+   * otherwise `bucket_permission:delete_any` required.
+   */
+  public static bucketPermissionDeletePermission<
+    ThrowOnError extends boolean = false,
+  >(options: Options<BucketPermissionDeletePermissionData, ThrowOnError>) {
+    return (options?.client ?? client).delete<
+      BucketPermissionDeletePermissionResponse,
+      BucketPermissionDeletePermissionError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/permissions/bucket/{bucket_name}/user/{uid}",
+    });
+  }
+}
+
+export class WorkflowService {
+  /**
+   * Create a new workflow
+   * Create a new workflow.
+   *
+   * For private Gitlab repositories, a Project Access Token with the role Reporter and scope `read_api` is needed.
+   *
+   * For private GitHub repositories, a Personal Access Token (classic) with scope `repo` is needed.
+   *
+   * Permission `workflow:create` required.
+   */
+  public static workflowCreateWorkflow<ThrowOnError extends boolean = false>(
+    options: Options<WorkflowCreateWorkflowData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).post<
+      WorkflowCreateWorkflowResponse,
+      WorkflowCreateWorkflowError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows",
+    });
+  }
+
+  /**
+   * List workflows
+   * List all workflows.
+   *
+   * Permission `workflow:list` required.
+   */
+  public static workflowListWorkflows<ThrowOnError extends boolean = false>(
+    options?: Options<WorkflowListWorkflowsData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      WorkflowListWorkflowsResponse,
+      WorkflowListWorkflowsError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows",
+    });
+  }
+
+  /**
+   * List workflow OTRs
+   * Get the ownership transfer requests for workflows.
+   *
+   * Permission `workflow:list` required if `current_owner_id` or `new_owner_id` is the current users id,
+   * otherwise `workflow:list_all`
+   */
+  public static workflowListWorkflowOtrs<ThrowOnError extends boolean = false>(
+    options?: Options<WorkflowListWorkflowOtrsData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      WorkflowListWorkflowOtrsResponse,
+      WorkflowListWorkflowOtrsError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/ownership_transfer_request",
+    });
+  }
+
+  /**
+   * Get anonymized workflow execution
+   * Get the workflow executions with meta information and anonymized user IDs.
+   *
+   * Permission `workflow:read` required if the `developer_id` is the same as the uid of the current user,
+   * other `workflow:read_any`.
+   */
+  public static workflowGetDeveloperWorkflowStatistics<
+    ThrowOnError extends boolean = false,
+  >(
+    options?: Options<WorkflowGetDeveloperWorkflowStatisticsData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      WorkflowGetDeveloperWorkflowStatisticsResponse,
+      WorkflowGetDeveloperWorkflowStatisticsError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/developer_statistics",
+    });
+  }
+
+  /**
+   * Get a workflow
+   * Get a specific workflow.
+   *
+   * Permission `workflow:read` required.
+   */
+  public static workflowGetWorkflow<ThrowOnError extends boolean = false>(
+    options: Options<WorkflowGetWorkflowData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      WorkflowGetWorkflowResponse,
+      WorkflowGetWorkflowError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}",
+    });
+  }
+
+  /**
+   * Delete a workflow
+   * Delete a workflow.
+   *
+   * Permission `workflow:delete` required if the `developer_id` is the same as the uid of the current user,
+   * other `workflow:delete_any`.
+   */
+  public static workflowDeleteWorkflow<ThrowOnError extends boolean = false>(
+    options: Options<WorkflowDeleteWorkflowData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).delete<
+      WorkflowDeleteWorkflowResponse,
+      WorkflowDeleteWorkflowError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}",
+    });
+  }
+
+  /**
+   * Get a workflow OTR
+   * Get a specific workflow ownership transfer request.
+   *
+   * Permission `workflow:read` required if current user is the current or new owner of the workflow,
+   * otherwise `workflow:read_any` required.
+   */
+  public static workflowGetWorkflowOtr<ThrowOnError extends boolean = false>(
+    options: Options<WorkflowGetWorkflowOtrData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      WorkflowGetWorkflowOtrResponse,
+      WorkflowGetWorkflowOtrError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/ownership_transfer_request",
+    });
+  }
+
+  /**
+   * Create a workflow OTR
+   * Create a ownership transfer request for a specific workflow.
+   *
+   * Permission `workflow:update` required if the current user is the current owner of the workflow,
+   * otherwise `workflow:update_any` required.
+   */
+  public static workflowCreateWorkflowOtr<ThrowOnError extends boolean = false>(
+    options: Options<WorkflowCreateWorkflowOtrData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).post<
+      WorkflowCreateWorkflowOtrResponse,
+      WorkflowCreateWorkflowOtrError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/ownership_transfer_request",
+    });
+  }
+
+  /**
+   * Accept a workflow OTR
+   * Accept an ownership transfer request for a specific workflow.
+   *
+   * Permission `workflow:update` required if the current user is the new owner of the workflow,
+   * otherwise `workflow:update_any` required.
+   */
+  public static workflowAcceptWorkflowOtr<ThrowOnError extends boolean = false>(
+    options: Options<WorkflowAcceptWorkflowOtrData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).patch<
+      WorkflowAcceptWorkflowOtrResponse,
+      WorkflowAcceptWorkflowOtrError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/ownership_transfer_request",
+    });
+  }
+
+  /**
+   * Delete a workflow OTR
+   * Delete/Reject a workflow ownership transfer request.
+   *
+   * Permission `workflow:update` required if current user is the current or new owner of the workflow,
+   * otherwise `workflow:update_any` required.
+   */
+  public static workflowDeleteWorkflowOtr<ThrowOnError extends boolean = false>(
+    options: Options<WorkflowDeleteWorkflowOtrData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).delete<
+      WorkflowDeleteWorkflowOtrResponse,
+      WorkflowDeleteWorkflowOtrError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/ownership_transfer_request",
+    });
+  }
+
+  /**
+   * Get statistics for a workflow
+   * Get the number of started workflow per day.
+   *
+   * Permission `workflow:read` required.
+   */
+  public static workflowGetWorkflowStatistics<
+    ThrowOnError extends boolean = false,
+  >(options: Options<WorkflowGetWorkflowStatisticsData, ThrowOnError>) {
+    return (options?.client ?? client).get<
+      WorkflowGetWorkflowStatisticsResponse,
+      WorkflowGetWorkflowStatisticsError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/statistics",
+    });
+  }
+
+  /**
+   * Update a workflow
+   * Create a new workflow version.
+   *
+   * Permission `workflow:update` required.
+   */
+  public static workflowUpdateWorkflow<ThrowOnError extends boolean = false>(
+    options: Options<WorkflowUpdateWorkflowData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).post<
+      WorkflowUpdateWorkflowResponse,
+      WorkflowUpdateWorkflowError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/update",
+    });
+  }
+}
+
+export class WorkflowVersionService {
+  /**
+   * Get all versions of a workflow
+   * List all versions of a Workflow.
+   *
+   * Permission `workflow:list` required.
+   */
+  public static workflowVersionListWorkflowVersion<
+    ThrowOnError extends boolean = false,
+  >(options: Options<WorkflowVersionListWorkflowVersionData, ThrowOnError>) {
+    return (options?.client ?? client).get<
+      WorkflowVersionListWorkflowVersionResponse,
+      WorkflowVersionListWorkflowVersionError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/versions",
+    });
+  }
+
+  /**
+   * Get a workflow version
+   * Get a specific version of a workflow.
+   *
+   * Permission `workflow:read` required if the version is public or you are the developer of the workflow,
+   * otherwise `workflow:read_any`
+   */
+  public static workflowVersionGetWorkflowVersion<
+    ThrowOnError extends boolean = false,
+  >(options: Options<WorkflowVersionGetWorkflowVersionData, ThrowOnError>) {
+    return (options?.client ?? client).get<
+      WorkflowVersionGetWorkflowVersionResponse,
+      WorkflowVersionGetWorkflowVersionError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/versions/{git_commit_hash}",
+    });
+  }
+
+  /**
+   * Update status of workflow version
+   * Update the status of a workflow version.
+   *
+   * Permission `workflow:update_status`
+   */
+  public static workflowVersionUpdateWorkflowVersionStatus<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<
+      WorkflowVersionUpdateWorkflowVersionStatusData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).patch<
+      WorkflowVersionUpdateWorkflowVersionStatusResponse,
+      WorkflowVersionUpdateWorkflowVersionStatusError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/versions/{git_commit_hash}/status",
+    });
+  }
+
+  /**
+   * Deprecate a workflow version
+   * Deprecate a workflow version.
+   *
+   * Permission `workflow:update` required if you are the developer of the workflow,
+   * otherwise `workflow:update_status`
+   */
+  public static workflowVersionDeprecateWorkflowVersion<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<WorkflowVersionDeprecateWorkflowVersionData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).patch<
+      WorkflowVersionDeprecateWorkflowVersionResponse,
+      WorkflowVersionDeprecateWorkflowVersionError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/versions/{git_commit_hash}/deprecate",
+    });
+  }
+
+  /**
+   * Update parameter extension of workflow version
+   * Update the parameter extension of a workflow version.
+   *
+   * Permission `workflow:update` required.
+   */
+  public static workflowVersionUpdateWorkflowVersionParameterExtension<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<
+      WorkflowVersionUpdateWorkflowVersionParameterExtensionData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).patch<
+      WorkflowVersionUpdateWorkflowVersionParameterExtensionResponse,
+      WorkflowVersionUpdateWorkflowVersionParameterExtensionError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/versions/{git_commit_hash}/parameter-extension",
+    });
+  }
+
+  /**
+   * Delete parameter extension of workflow version
+   * Delete the parameter extension of a workflow version.
+   *
+   * Permission `workflow:update` required.
+   */
+  public static workflowVersionDeleteWorkflowVersionParameterExtension<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<
+      WorkflowVersionDeleteWorkflowVersionParameterExtensionData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).delete<
+      WorkflowVersionDeleteWorkflowVersionParameterExtensionResponse,
+      WorkflowVersionDeleteWorkflowVersionParameterExtensionError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/versions/{git_commit_hash}/parameter-extension",
+    });
+  }
+
+  /**
+   * Fetch documentation for a workflow version
+   * Get the documentation for a specific workflow version.
+   * Streams the response directly from the right git repository.
+   *
+   * Permission `workflow:read` required.
+   */
+  public static workflowVersionDownloadWorkflowDocumentation<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<
+      WorkflowVersionDownloadWorkflowDocumentationData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).get<
+      WorkflowVersionDownloadWorkflowDocumentationResponse,
+      WorkflowVersionDownloadWorkflowDocumentationError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/versions/{git_commit_hash}/documentation",
+    });
+  }
+
+  /**
+   * Upload icon for workflow version
+   * Upload an icon for the workflow version and returns the new icon URL.
+   *
+   * Permission `workflow:update` required.
+   */
+  public static workflowVersionUploadWorkflowVersionIcon<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<
+      WorkflowVersionUploadWorkflowVersionIconData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).post<
+      WorkflowVersionUploadWorkflowVersionIconResponse,
+      WorkflowVersionUploadWorkflowVersionIconError,
+      ThrowOnError
+    >({
+      ...options,
+      ...formDataBodySerializer,
+      headers: {
+        "Content-Type": null,
+        ...options?.headers,
+      },
+      url: "/workflows/{wid}/versions/{git_commit_hash}/icon",
+    });
+  }
+
+  /**
+   * Delete icon of workflow version
+   * Delete the icon of the workflow version.
+   *
+   * Permission `workflow:update` required.
+   */
+  public static workflowVersionDeleteWorkflowVersionIcon<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<
+      WorkflowVersionDeleteWorkflowVersionIconData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).delete<
+      WorkflowVersionDeleteWorkflowVersionIconResponse,
+      WorkflowVersionDeleteWorkflowVersionIconError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/versions/{git_commit_hash}/icon",
+    });
+  }
+}
+
+export class WorkflowExecutionService {
+  /**
+   * Start a new workflow execution
+   * Start a new workflow execution. Workflow versions wit status `DEPRECATED` or `DENIED` can't be started.
+   *
+   * Permission `workflow_execution:create` required if workflow versions status is `PUBLISHED`,
+   * otherwise `workflow_execution:create_any` required.
+   */
+  public static workflowExecutionStartWorkflow<
+    ThrowOnError extends boolean = false,
+  >(options: Options<WorkflowExecutionStartWorkflowData, ThrowOnError>) {
+    return (options?.client ?? client).post<
+      WorkflowExecutionStartWorkflowResponse,
+      WorkflowExecutionStartWorkflowError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflow_executions",
+    });
+  }
+
+  /**
+   * Get all workflow executions
+   * Get all workflow executions.
+   *
+   * This endpoint enforces keyset pagination. To iterate over all workflow executions, follow the link provided in the
+   * `Link` header.
+   * A missing `Link` header indicates that you iterated over all workflow executions with the current filters.
+   *
+   * Permission `workflow_execution:list` required, if `executor_id` is the same as the current user,
+   * otherwise `workflow_execution:list_all` required.
+   */
+  public static workflowExecutionListWorkflowExecutions<
+    ThrowOnError extends boolean = false,
+  >(
+    options?: Options<
+      WorkflowExecutionListWorkflowExecutionsData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).get<
+      WorkflowExecutionListWorkflowExecutionsResponse,
+      WorkflowExecutionListWorkflowExecutionsError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflow_executions",
+    });
+  }
+
+  /**
+   * Start a workflow execution with arbitrary git repository
+   * Start a new workflow execution from an arbitrary git repository.
+   *
+   * For private Gitlab repositories, a Project Access Token with the role Reporter and scope `read_api` is needed.
+   *
+   * For private GitHub repositories, a Personal Access Token (classic) with scope `repo` is needed.
+   *
+   * Permission `workflow:create` required.
+   */
+  public static workflowExecutionStartArbitraryWorkflow<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<WorkflowExecutionStartArbitraryWorkflowData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).post<
+      WorkflowExecutionStartArbitraryWorkflowResponse,
+      WorkflowExecutionStartArbitraryWorkflowError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflow_executions/arbitrary",
+    });
+  }
+
+  /**
+   * Get a workflow execution
+   * Get a specific workflow execution.
+   *
+   * Permission `workflow_execution:read` required if the current user started the workflow execution,
+   * otherwise `workflow_execution:read_any` required.
+   */
+  public static workflowExecutionGetWorkflowExecution<
+    ThrowOnError extends boolean = false,
+  >(options: Options<WorkflowExecutionGetWorkflowExecutionData, ThrowOnError>) {
+    return (options?.client ?? client).get<
+      WorkflowExecutionGetWorkflowExecutionResponse,
+      WorkflowExecutionGetWorkflowExecutionError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflow_executions/{eid}",
+    });
+  }
+
+  /**
+   * Delete a workflow execution
+   * Delete a specific workflow execution.
+   *
+   * Permission `workflow_execution:delete` required if the current user started the workflow execution,
+   * otherwise `workflow_execution:delete_any` required.
+   */
+  public static workflowExecutionDeleteWorkflowExecution<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<
+      WorkflowExecutionDeleteWorkflowExecutionData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).delete<
+      WorkflowExecutionDeleteWorkflowExecutionResponse,
+      WorkflowExecutionDeleteWorkflowExecutionError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflow_executions/{eid}",
+    });
+  }
+
+  /**
+   * Get the parameters of a workflow execution
+   * Get the parameters of a specific workflow execution.
+   *
+   * Permission `workflow_execution:read` required if the current user started the workflow execution,
+   * otherwise `workflow_execution:read_any` required.
+   */
+  public static workflowExecutionGetWorkflowExecutionParams<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<
+      WorkflowExecutionGetWorkflowExecutionParamsData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).get<
+      WorkflowExecutionGetWorkflowExecutionParamsResponse,
+      WorkflowExecutionGetWorkflowExecutionParamsError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflow_executions/{eid}/params",
+    });
+  }
+
+  /**
+   * Cancel a workflow execution
+   * Cancel a running workflow execution.
+   *
+   * Permission `workflow_execution:cancel` required if the current user started the workflow execution,
+   * otherwise `workflow_execution:cancel_any` required.
+   */
+  public static workflowExecutionCancelWorkflowExecution<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<
+      WorkflowExecutionCancelWorkflowExecutionData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).post<
+      WorkflowExecutionCancelWorkflowExecutionResponse,
+      WorkflowExecutionCancelWorkflowExecutionError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflow_executions/{eid}/cancel",
+    });
+  }
+}
+
+export class WorkflowCredentialsService {
+  /**
+   * Get the credentials of a workflow
+   * Get the credentials for the repository of a workflow. Only the developer of a workflow can do this.
+   *
+   * Permission `workflow:update` required.
+   */
+  public static workflowCredentialsGetWorkflowCredentials<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<
+      WorkflowCredentialsGetWorkflowCredentialsData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).get<
+      WorkflowCredentialsGetWorkflowCredentialsResponse,
+      WorkflowCredentialsGetWorkflowCredentialsError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/credentials",
+    });
+  }
+
+  /**
+   * Update the credentials of a workflow
+   * Update the credentials for the repository of a workflow.
+   *
+   * Permission `workflow:update` required.
+   */
+  public static workflowCredentialsUpdateWorkflowCredentials<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<
+      WorkflowCredentialsUpdateWorkflowCredentialsData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).put<
+      WorkflowCredentialsUpdateWorkflowCredentialsResponse,
+      WorkflowCredentialsUpdateWorkflowCredentialsError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/credentials",
+    });
+  }
+
+  /**
+   * Delete the credentials of a workflow
+   * Delete the credentials for the repository of a workflow.
+   *
+   * Permission `workflow:delete` required if the developer of the workflow is the same as the current user,
+   * other `workflow:delete_any`.
+   */
+  public static workflowCredentialsDeleteWorkflowCredentials<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<
+      WorkflowCredentialsDeleteWorkflowCredentialsData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).delete<
+      WorkflowCredentialsDeleteWorkflowCredentialsResponse,
+      WorkflowCredentialsDeleteWorkflowCredentialsError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflows/{wid}/credentials",
+    });
+  }
+}
+
+export class WorkflowModeService {
+  /**
+   * Get workflow mode
+   * Get a workflow mode
+   *
+   * Permission `workflow:read` required
+   */
+  public static workflowModeGetWorkflowMode<
+    ThrowOnError extends boolean = false,
+  >(options: Options<WorkflowModeGetWorkflowModeData, ThrowOnError>) {
+    return (options?.client ?? client).get<
+      WorkflowModeGetWorkflowModeResponse,
+      WorkflowModeGetWorkflowModeError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/workflow_modes/{mode_id}",
+    });
+  }
+}
+
+export class ResourceService {
+  /**
+   * Request a new resource
+   * Request a new resources.
+   *
+   * Permission `resource:create` required.
+   */
+  public static resourceCreateResource<ThrowOnError extends boolean = false>(
+    options: Options<ResourceCreateResourceData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).post<
+      ResourceCreateResourceResponse,
+      ResourceCreateResourceError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources",
+    });
+  }
+
+  /**
+   * List resources
+   * List all resources.
+   *
+   * Permission `resource:list` required.
+   */
+  public static resourceListResources<ThrowOnError extends boolean = false>(
+    options?: Options<ResourceListResourcesData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      ResourceListResourcesResponse,
+      ResourceListResourcesError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources",
+    });
+  }
+
+  /**
+   * List resource sync requests
+   * List all resource sync requests.
+   *
+   * Permission `resource:update_any` required.
+   */
+  public static resourceListSyncRequests<ThrowOnError extends boolean = false>(
+    options?: Options<unknown, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      ResourceListSyncRequestsResponse,
+      ResourceListSyncRequestsError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/sync_requests",
+    });
+  }
+
+  /**
+   * List resource OTRs
+   * Get the ownership transfer requests for resources.
+   *
+   * Permission `resource:list` required if `current_owner_id` or `new_owner_id` is the current users id,
+   * otherwise `resource:list_all`
+   */
+  public static resourceListResourceOtrs<ThrowOnError extends boolean = false>(
+    options?: Options<ResourceListResourceOtrsData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      ResourceListResourceOtrsResponse,
+      ResourceListResourceOtrsError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/ownership_transfer_request",
+    });
+  }
+
+  /**
+   * Get a resource
+   * Get a specific resource.
+   *
+   * Permission `resource:read` required.
+   */
+  public static resourceGetResource<ThrowOnError extends boolean = false>(
+    options: Options<ResourceGetResourceData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      ResourceGetResourceResponse,
+      ResourceGetResourceError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}",
+    });
+  }
+
+  /**
+   * Delete a resource
+   * Delete a resources.
+   *
+   * Permission `resource:delete` required.
+   */
+  public static resourceDeleteResource<ThrowOnError extends boolean = false>(
+    options: Options<ResourceDeleteResourceData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).delete<
+      ResourceDeleteResourceResponse,
+      ResourceDeleteResourceError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}",
+    });
+  }
+
+  /**
+   * Get a resource OTR
+   * Get a specific resource ownership transfer request.
+   *
+   * Permission `resource:read` required if the current user is the current or new owner of the resource,
+   * otherwise `resource:read_any` required.
+   */
+  public static resourceGetResourceOtr<ThrowOnError extends boolean = false>(
+    options: Options<ResourceGetResourceOtrData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).get<
+      ResourceGetResourceOtrResponse,
+      ResourceGetResourceOtrError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}/ownership_transfer_request",
+    });
+  }
+
+  /**
+   * Create a resource OTR
+   * Create a ownership transfer request for a specific resource.
+   *
+   * Permission `resource:update` required if the current user is the current owner of the resource,
+   * otherwise `resource:update_any` required.
+   */
+  public static resourceCreateResourceOtr<ThrowOnError extends boolean = false>(
+    options: Options<ResourceCreateResourceOtrData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).post<
+      ResourceCreateResourceOtrResponse,
+      ResourceCreateResourceOtrError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}/ownership_transfer_request",
+    });
+  }
+
+  /**
+   * Accept a resource OTR
+   * Accept an ownership transfer request for a specific resource.
+   *
+   * Permission `resource:update` required if the current user is the new owner of the resource,
+   * otherwise `resource:update_any` required.
+   */
+  public static resourceAcceptResourceOtr<ThrowOnError extends boolean = false>(
+    options: Options<ResourceAcceptResourceOtrData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).patch<
+      ResourceAcceptResourceOtrResponse,
+      ResourceAcceptResourceOtrError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}/ownership_transfer_request",
+    });
+  }
+
+  /**
+   * Delete a resource OTR
+   * Delete/Reject a resource ownership transfer request.
+   *
+   * Permission `resource:update` required if the current user is the current or new owner of the resource,
+   * otherwise `resource:update_any` required.
+   */
+  public static resourceDeleteResourceOtr<ThrowOnError extends boolean = false>(
+    options: Options<ResourceDeleteResourceOtrData, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).delete<
+      ResourceDeleteResourceOtrResponse,
+      ResourceDeleteResourceOtrError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}/ownership_transfer_request",
+    });
+  }
+}
+
+export class ResourceVersionService {
+  /**
+   * List versions of a resource
+   * List all the resource version for a specific resource.
+   *
+   * Permission 'resource:read' required.
+   */
+  public static resourceVersionListResourceVersions<
+    ThrowOnError extends boolean = false,
+  >(options: Options<ResourceVersionListResourceVersionsData, ThrowOnError>) {
+    return (options?.client ?? client).get<
+      ResourceVersionListResourceVersionsResponse,
+      ResourceVersionListResourceVersionsError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}/versions",
+    });
+  }
+
+  /**
+   * Request new version of a resource
+   * Request a new resource version.
+   *
+   * Permission `resource:update` required if the current user is the maintainer, `resource:update_any` otherwise.
+   */
+  public static resourceVersionRequestResourceVersion<
+    ThrowOnError extends boolean = false,
+  >(options: Options<ResourceVersionRequestResourceVersionData, ThrowOnError>) {
+    return (options?.client ?? client).post<
+      ResourceVersionRequestResourceVersionResponse,
+      ResourceVersionRequestResourceVersionError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}/versions",
+    });
+  }
+
+  /**
+   * Get version of a resource
+   * Get a specific resource version for a specific resource.
+   *
+   * Permission `resource:read` required. If the status of the resource version is not `LATEST` or `SYNCHRONIZED` and
+   * the current user is not the maintainer, then the permission `resource:read_any` is required.
+   */
+  public static resourceVersionGetResourceVersion<
+    ThrowOnError extends boolean = false,
+  >(options: Options<ResourceVersionGetResourceVersionData, ThrowOnError>) {
+    return (options?.client ?? client).get<
+      ResourceVersionGetResourceVersionResponse,
+      ResourceVersionGetResourceVersionError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}/versions/{rvid}",
+    });
+  }
+
+  /**
+   * Download folder structure of resource
+   * Get the folder structure of the resources. Only available if the resource was previously downloaded to the cluster.
+   *
+   * Permission `resource:read` required.
+   */
+  public static resourceVersionResourceFileTree<
+    ThrowOnError extends boolean = false,
+  >(options: Options<ResourceVersionResourceFileTreeData, ThrowOnError>) {
+    return (options?.client ?? client).get<
+      ResourceVersionResourceFileTreeResponse,
+      ResourceVersionResourceFileTreeError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}/versions/{rvid}/tree",
+    });
+  }
+
+  /**
+   * Request resource version review
+   * Request the review of a resource version.
+   *
+   * Permission `resource:update` required.
+   */
+  public static resourceVersionRequestResourceVersionReview<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<
+      ResourceVersionRequestResourceVersionReviewData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).put<
+      ResourceVersionRequestResourceVersionReviewResponse,
+      ResourceVersionRequestResourceVersionReviewError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}/versions/{rvid}/request_review",
+    });
+  }
+
+  /**
+   * Request resource version synchronization
+   * Request the synchronization of a resource version to the cluster.
+   *
+   * Permission `resource:request_sync` required.
+   */
+  public static resourceVersionRequestResourceVersionSync<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<
+      ResourceVersionRequestResourceVersionSyncData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).put<
+      ResourceVersionRequestResourceVersionSyncResponse,
+      ResourceVersionRequestResourceVersionSyncError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}/versions/{rvid}/request_sync",
+    });
+  }
+
+  /**
+   * Review resource version
+   * Review answer the resource version.
+   *
+   * Permission `resource:update_status` required.
+   */
+  public static resourceVersionResourceVersionReview<
+    ThrowOnError extends boolean = false,
+  >(options: Options<ResourceVersionResourceVersionReviewData, ThrowOnError>) {
+    return (options?.client ?? client).put<
+      ResourceVersionResourceVersionReviewResponse,
+      ResourceVersionResourceVersionReviewError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}/versions/{rvid}/review",
+    });
+  }
+
+  /**
+   * Synchronize resource version with cluster
+   * Synchronize the resource version to the cluster.
+   *
+   * Permission `resource:update_any` required.
+   */
+  public static resourceVersionResourceVersionSync<
+    ThrowOnError extends boolean = false,
+  >(options: Options<ResourceVersionResourceVersionSyncData, ThrowOnError>) {
+    return (options?.client ?? client).put<
+      ResourceVersionResourceVersionSyncResponse,
+      ResourceVersionResourceVersionSyncError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}/versions/{rvid}/sync",
+    });
+  }
+
+  /**
+   * Set resource version to latest
+   * Set the resource version as the latest version.
+   *
+   * Permission `resource:update_any` required.
+   */
+  public static resourceVersionResourceVersionLatest<
+    ThrowOnError extends boolean = false,
+  >(options: Options<ResourceVersionResourceVersionLatestData, ThrowOnError>) {
+    return (options?.client ?? client).put<
+      ResourceVersionResourceVersionLatestResponse,
+      ResourceVersionResourceVersionLatestError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}/versions/{rvid}/latest",
+    });
+  }
+
+  /**
+   * Delete resource version on cluster
+   * Delete the resource version on the cluster.
+   *
+   * Permission `resource:delete_any` required.
+   */
+  public static resourceVersionDeleteResourceVersionCluster<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<
+      ResourceVersionDeleteResourceVersionClusterData,
+      ThrowOnError
+    >,
+  ) {
+    return (options?.client ?? client).delete<
+      ResourceVersionDeleteResourceVersionClusterResponse,
+      ResourceVersionDeleteResourceVersionClusterError,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}/versions/{rvid}/cluster",
+    });
+  }
+
+  /**
+   * Delete resource version in S3
+   * Delete the resource version in the S3 bucket.
+   *
+   * Permission `resource:delete_any` required.
+   */
+  public static resourceVersionDeleteResourceVersionS3<
+    ThrowOnError extends boolean = false,
+  >(
+    options: Options<ResourceVersionDeleteResourceVersionS3Data, ThrowOnError>,
+  ) {
+    return (options?.client ?? client).delete<
+      ResourceVersionDeleteResourceVersionS3Response,
+      ResourceVersionDeleteResourceVersionS3Error,
+      ThrowOnError
+    >({
+      ...options,
+      url: "/resources/{rid}/versions/{rvid}/s3",
+    });
+  }
+}
diff --git a/src/client/services/ApiTokenService.ts b/src/client/services/ApiTokenService.ts
deleted file mode 100644
index a088864e6bfe05b57cc85b40635d80da8ed11188..0000000000000000000000000000000000000000
--- a/src/client/services/ApiTokenService.ts
+++ /dev/null
@@ -1,121 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { ApiTokenIn } from '../models/ApiTokenIn';
-import type { ApiTokenOut } from '../models/ApiTokenOut';
-import type { ApiTokenPrivateOut } from '../models/ApiTokenPrivateOut';
-import type { CancelablePromise } from '../core/CancelablePromise';
-import { OpenAPI } from '../core/OpenAPI';
-import { request as __request } from '../core/request';
-export class ApiTokenService {
-    /**
-     * List API token
-     * List meta information about all API token.
-     *
-     * Permissions `api_token:list_all` required. See parameter `uid` for exception.
-     * @param uid UID of the user to filter for. Permission `api_token:list` required if current users is the target.
-     * @returns ApiTokenOut Successful Response
-     * @throws ApiError
-     */
-    public static apiTokenListToken(
-        uid?: string,
-    ): CancelablePromise<Array<ApiTokenOut>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/tokens',
-            query: {
-                'uid': uid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Create new API token
-     * Create a new API token for the current user.
-     *
-     * Permission `api_token:create` required.
-     * @param requestBody
-     * @returns ApiTokenPrivateOut Successful Response
-     * @throws ApiError
-     */
-    public static apiTokenCreateToken(
-        requestBody: ApiTokenIn,
-    ): CancelablePromise<ApiTokenPrivateOut> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/tokens',
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get API token
-     * Get an API token by id.
-     *
-     * Permission `api_token:read` required if the current user is the owner of the API token,
-     * otherwise `api_token:read_any` required.
-     * @param tid ID of an API token
-     * @returns ApiTokenOut Successful Response
-     * @throws ApiError
-     */
-    public static apiTokenGetToken(
-        tid: string,
-    ): CancelablePromise<ApiTokenOut> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/tokens/{tid}',
-            path: {
-                'tid': tid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Delete API token
-     * Delete an API token by id.
-     *
-     * Permission `api_token:delete` required if the current user is the owner of the API token,
-     * otherwise `api_token:delete_any` required.
-     * @param tid ID of an API token
-     * @returns void
-     * @throws ApiError
-     */
-    public static apiTokenDeleteToken(
-        tid: string,
-    ): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'DELETE',
-            url: '/tokens/{tid}',
-            path: {
-                'tid': tid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-}
diff --git a/src/client/services/AuthService.ts b/src/client/services/AuthService.ts
deleted file mode 100644
index 2ca01686cd70b916d4a985f87ccee423df7a3d81..0000000000000000000000000000000000000000
--- a/src/client/services/AuthService.ts
+++ /dev/null
@@ -1,84 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { OIDCProvider } from '../models/OIDCProvider';
-import type { CancelablePromise } from '../core/CancelablePromise';
-import { OpenAPI } from '../core/OpenAPI';
-import { request as __request } from '../core/request';
-export class AuthService {
-    /**
-     * Kickstart the login flow
-     * Redirect route to OIDC provider to kickstart the login process.
-     * @param invitationToken Unique token to validate an invitation
-     * @param provider The OIDC provider to use for login
-     * @param next Will be appended to redirect response in the callback route as URL query parameter `next`
-     * @returns void
-     * @throws ApiError
-     */
-    public static authLogin(
-        invitationToken?: string,
-        provider?: OIDCProvider,
-        next?: string,
-    ): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/auth/login',
-            query: {
-                'invitation_token': invitationToken,
-                'provider': provider,
-                'next': next,
-            },
-            errors: {
-                302: `Successful Response`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * LifeScience Login Callback
-     * Callback for the Life Science Identity Provider.
-     *
-     * Visit the route login route to start the login process.
-     *
-     * If the user is already known to the system, then a JWT token will be created and sent via the 'set-cookie' header.
-     * The key for this Cookie is 'bearer'.
-     *
-     * If the user is new, he will be created and then a JWT token is issued.
-     *
-     * This JWT has to be sent to all authorized endpoints via the HTTPBearer scheme.
-     * @param provider
-     * @returns void
-     * @throws ApiError
-     */
-    public static authLoginCallback(
-        provider: OIDCProvider,
-    ): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/auth/callback/{provider}',
-            path: {
-                'provider': provider,
-            },
-            errors: {
-                302: `Successful Response`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Logout
-     * Logout the user from the system by deleting the bearer cookie.
-     * @returns void
-     * @throws ApiError
-     */
-    public static authLogout(): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/auth/logout',
-            errors: {
-                302: `Successful Response`,
-            },
-        });
-    }
-}
diff --git a/src/client/services/BucketPermissionService.ts b/src/client/services/BucketPermissionService.ts
deleted file mode 100644
index 3bd601f14a6e47ae4944d970883b2907950d3402..0000000000000000000000000000000000000000
--- a/src/client/services/BucketPermissionService.ts
+++ /dev/null
@@ -1,238 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { BucketPermissionIn } from '../models/BucketPermissionIn';
-import type { BucketPermissionOut } from '../models/BucketPermissionOut';
-import type { BucketPermissionParameters } from '../models/BucketPermissionParameters';
-import type { Permission } from '../models/Permission';
-import type { PermissionStatus } from '../models/PermissionStatus';
-import type { CancelablePromise } from '../core/CancelablePromise';
-import { OpenAPI } from '../core/OpenAPI';
-import { request as __request } from '../core/request';
-export class BucketPermissionService {
-    /**
-     * Get all permissions.
-     * List all the bucket permissions in the system.
-     *
-     * Permission `bucket_permission:list_all` required.
-     * @param permissionTypes Type of Bucket Permissions to fetch
-     * @param permissionStatus Status of Bucket Permissions to fetch
-     * @returns BucketPermissionOut Successful Response
-     * @throws ApiError
-     */
-    public static bucketPermissionListPermissions(
-        permissionTypes?: Array<Permission>,
-        permissionStatus?: PermissionStatus,
-    ): CancelablePromise<Array<BucketPermissionOut>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/permissions',
-            query: {
-                'permission_types': permissionTypes,
-                'permission_status': permissionStatus,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Create a permission.
-     * Create a permission for a bucket and user.
-     *
-     * Permission `bucket_permission:create` required.
-     * @param requestBody
-     * @returns BucketPermissionOut Successful Response
-     * @throws ApiError
-     */
-    public static bucketPermissionCreatePermission(
-        requestBody: BucketPermissionIn,
-    ): CancelablePromise<BucketPermissionOut> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/permissions',
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get all permissions for a user.
-     * List all the bucket permissions for the given user.
-     *
-     * Permission `bucket_permission:list` required if current user is the target the bucket permission,
-     * otherwise `bucket_permission:list_all` required.
-     * @param uid UID of a user
-     * @param permissionTypes Type of Bucket Permissions to fetch
-     * @param permissionStatus Status of Bucket Permissions to fetch
-     * @returns BucketPermissionOut Successful Response
-     * @throws ApiError
-     */
-    public static bucketPermissionListPermissionsPerUser(
-        uid: string,
-        permissionTypes?: Array<Permission>,
-        permissionStatus?: PermissionStatus,
-    ): CancelablePromise<Array<BucketPermissionOut>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/permissions/user/{uid}',
-            path: {
-                'uid': uid,
-            },
-            query: {
-                'permission_types': permissionTypes,
-                'permission_status': permissionStatus,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get all permissions for a bucket.
-     * List all the bucket permissions for the given bucket.
-     *
-     * Permission `bucket_permission:list` required if current user is owner of the bucket,
-     * otherwise `bucket_permission:list_all` required.
-     * @param bucketName Name of bucket
-     * @param permissionTypes Type of Bucket Permissions to fetch
-     * @param permissionStatus Status of Bucket Permissions to fetch
-     * @returns BucketPermissionOut Successful Response
-     * @throws ApiError
-     */
-    public static bucketPermissionListPermissionsPerBucket(
-        bucketName: string,
-        permissionTypes?: Array<Permission>,
-        permissionStatus?: PermissionStatus,
-    ): CancelablePromise<Array<BucketPermissionOut>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/permissions/bucket/{bucket_name}',
-            path: {
-                'bucket_name': bucketName,
-            },
-            query: {
-                'permission_types': permissionTypes,
-                'permission_status': permissionStatus,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get permission for bucket and user combination.
-     * Get the bucket permissions for the specific combination of bucket and user.
-     *
-     * Permission `bucket_permission:read` required if current user is the target or owner of the bucket permission,
-     * otherwise `bucket_permission:read_any` required.
-     * @param bucketName Name of bucket
-     * @param uid UID of a user
-     * @returns BucketPermissionOut Successful Response
-     * @throws ApiError
-     */
-    public static bucketPermissionGetPermissionForBucket(
-        bucketName: string,
-        uid: string,
-    ): CancelablePromise<BucketPermissionOut> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/permissions/bucket/{bucket_name}/user/{uid}',
-            path: {
-                'bucket_name': bucketName,
-                'uid': uid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Update a bucket permission
-     * Update a permission for a bucket and user.
-     *
-     * Permission `bucket_permission:update` required.
-     * @param bucketName Name of bucket
-     * @param uid UID of a user
-     * @param requestBody
-     * @returns BucketPermissionOut Successful Response
-     * @throws ApiError
-     */
-    public static bucketPermissionUpdatePermission(
-        bucketName: string,
-        uid: string,
-        requestBody: BucketPermissionParameters,
-    ): CancelablePromise<BucketPermissionOut> {
-        return __request(OpenAPI, {
-            method: 'PUT',
-            url: '/permissions/bucket/{bucket_name}/user/{uid}',
-            path: {
-                'bucket_name': bucketName,
-                'uid': uid,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Delete a bucket permission
-     * Delete the bucket permissions for the specific combination of bucket and user.
-     *
-     * Permission `bucket_permission:delete` required if current user is the target or owner of the bucket permission,
-     * otherwise `bucket_permission:delete_any` required.
-     * @param bucketName Name of bucket
-     * @param uid UID of a user
-     * @returns void
-     * @throws ApiError
-     */
-    public static bucketPermissionDeletePermission(
-        bucketName: string,
-        uid: string,
-    ): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'DELETE',
-            url: '/permissions/bucket/{bucket_name}/user/{uid}',
-            path: {
-                'bucket_name': bucketName,
-                'uid': uid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-}
diff --git a/src/client/services/BucketService.ts b/src/client/services/BucketService.ts
deleted file mode 100644
index 34d6b6965204146cdcc9cc15ddc477e8c1da15fd..0000000000000000000000000000000000000000
--- a/src/client/services/BucketService.ts
+++ /dev/null
@@ -1,347 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { Body_Bucket_update_bucket_public_state } from '../models/Body_Bucket_update_bucket_public_state';
-import type { BucketIn } from '../models/BucketIn';
-import type { BucketOut } from '../models/BucketOut';
-import type { BucketSizeLimits } from '../models/BucketSizeLimits';
-import type { BucketType } from '../models/BucketType';
-import type { OwnershipTransferRequestIn } from '../models/OwnershipTransferRequestIn';
-import type { OwnershipTransferRequestOut } from '../models/OwnershipTransferRequestOut';
-import type { CancelablePromise } from '../core/CancelablePromise';
-import { OpenAPI } from '../core/OpenAPI';
-import { request as __request } from '../core/request';
-export class BucketService {
-    /**
-     * List buckets
-     * List all the buckets in the system or of the desired user where the user has permissions for.
-     *
-     * Permission `bucket:list_all` required. See parameter `owner_id` for exception.
-     * @param ownerId UID of the user for whom to fetch the buckets for. Permission `bucket:read_any` required if current user is not the target.
-     * @param bucketType Type of the bucket to get. Ignored when `user` parameter not set
-     * @returns BucketOut Successful Response
-     * @throws ApiError
-     */
-    public static bucketListBuckets(
-        ownerId?: string,
-        bucketType?: BucketType,
-    ): CancelablePromise<Array<BucketOut>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/buckets',
-            query: {
-                'owner_id': ownerId,
-                'bucket_type': bucketType,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Create a bucket for the current user
-     * Create a bucket for the current user.
-     *
-     * The name of the bucket has some constraints.
-     * For more information see the
-     * [Ceph documentation](https://docs.ceph.com/en/quincy/radosgw/s3/bucketops/#constraints)
-     *
-     * Permission `bucket:create` required.
-     * @param requestBody
-     * @returns BucketOut Successful Response
-     * @throws ApiError
-     */
-    public static bucketCreateBucket(
-        requestBody: BucketIn,
-    ): CancelablePromise<BucketOut> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/buckets',
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * List bucket OTRs
-     * Get the ownership transfer requests for buckets.
-     *
-     * Permission `bucket:list` required if `current_owner_id` or `new_owner_id` is the current users id,
-     * otherwise `bucket:list_all`
-     * @param currentOwnerId UID of user who is the current owner.
-     * @param newOwnerId UID of user who will be the new owner.
-     * @returns OwnershipTransferRequestOut Successful Response
-     * @throws ApiError
-     */
-    public static bucketListBucketOtrs(
-        currentOwnerId?: string,
-        newOwnerId?: string,
-    ): CancelablePromise<Array<OwnershipTransferRequestOut>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/buckets/ownership_transfer_request',
-            query: {
-                'current_owner_id': currentOwnerId,
-                'new_owner_id': newOwnerId,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get a bucket by its name
-     * Get a bucket by its name if the current user has READ permissions for the bucket.
-     *
-     * Permission `bucket:read` required if the current user is the owner of the bucket,
-     * otherwise `bucket:read_any` required.
-     * @param bucketName Name of bucket
-     * @returns BucketOut Successful Response
-     * @throws ApiError
-     */
-    public static bucketGetBucket(
-        bucketName: string,
-    ): CancelablePromise<BucketOut> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/buckets/{bucket_name}',
-            path: {
-                'bucket_name': bucketName,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Delete a bucket
-     * Delete a bucket by its name. Only the owner of the bucket can delete the bucket.
-     *
-     * Permission `bucket:delete` required if the current user is the owner of the bucket,
-     * otherwise `bucket:delete_any` required.
-     * @param bucketName Name of bucket
-     * @param forceDelete Delete even non-empty bucket
-     * @returns void
-     * @throws ApiError
-     */
-    public static bucketDeleteBucket(
-        bucketName: string,
-        forceDelete: boolean = false,
-    ): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'DELETE',
-            url: '/buckets/{bucket_name}',
-            path: {
-                'bucket_name': bucketName,
-            },
-            query: {
-                'force_delete': forceDelete,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get a bucket OTR
-     * Get a specific bucket ownership transfer request.
-     *
-     * Permission `bucket:read` required if the current user is the current or new owner of the bucket,
-     * otherwise `bucket:read_any` required.
-     * @param bucketName Name of bucket
-     * @returns OwnershipTransferRequestOut Successful Response
-     * @throws ApiError
-     */
-    public static bucketGetBucketOtr(
-        bucketName: string,
-    ): CancelablePromise<OwnershipTransferRequestOut> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/buckets/{bucket_name}/ownership_transfer_request',
-            path: {
-                'bucket_name': bucketName,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Create a bucket OTR
-     * Create a ownership transfer request for a specific bucket.
-     *
-     * Permission `bucket:update` required if the current user is the current owner of the bucket,
-     * otherwise `bucket:update_any` required.
-     * @param bucketName Name of bucket
-     * @param requestBody
-     * @returns OwnershipTransferRequestOut Successful Response
-     * @throws ApiError
-     */
-    public static bucketCreateBucketOtr(
-        bucketName: string,
-        requestBody: OwnershipTransferRequestIn,
-    ): CancelablePromise<OwnershipTransferRequestOut> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/buckets/{bucket_name}/ownership_transfer_request',
-            path: {
-                'bucket_name': bucketName,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Accept a bucket OTR
-     * Accept an ownership transfer request for a specific workflow.
-     *
-     * Permission `bucket:update` required if the current user is the new owner of the workflow,
-     * otherwise `bucket:update_any` required.
-     * @param bucketName Name of bucket
-     * @returns BucketOut Successful Response
-     * @throws ApiError
-     */
-    public static bucketAcceptBucketOtr(
-        bucketName: string,
-    ): CancelablePromise<BucketOut> {
-        return __request(OpenAPI, {
-            method: 'PATCH',
-            url: '/buckets/{bucket_name}/ownership_transfer_request',
-            path: {
-                'bucket_name': bucketName,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Delete a bucket OTR
-     * Delete/Reject a bucket ownership transfer request.
-     *
-     * Permission `bucket:update` required if the current user is the current or new owner of the bucket,
-     * otherwise `bucket:update_any` required.
-     * @param bucketName Name of bucket
-     * @returns void
-     * @throws ApiError
-     */
-    public static bucketDeleteBucketOtr(
-        bucketName: string,
-    ): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'DELETE',
-            url: '/buckets/{bucket_name}/ownership_transfer_request',
-            path: {
-                'bucket_name': bucketName,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Update public status
-     * Update the buckets public state.
-     *
-     * Permission `bucket:update` required if the current user is the owner of the bucket,
-     * otherwise `bucket:update_any` required.
-     * @param bucketName Name of bucket
-     * @param requestBody
-     * @returns BucketOut Successful Response
-     * @throws ApiError
-     */
-    public static bucketUpdateBucketPublicState(
-        bucketName: string,
-        requestBody: Body_Bucket_update_bucket_public_state,
-    ): CancelablePromise<BucketOut> {
-        return __request(OpenAPI, {
-            method: 'PATCH',
-            url: '/buckets/{bucket_name}/public',
-            path: {
-                'bucket_name': bucketName,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Update bucket limits
-     * Update the buckets size limits.
-     *
-     * Permission `bucket:update_any` required.
-     * @param bucketName Name of bucket
-     * @param requestBody
-     * @returns BucketOut Successful Response
-     * @throws ApiError
-     */
-    public static bucketUpdateBucketLimits(
-        bucketName: string,
-        requestBody: BucketSizeLimits,
-    ): CancelablePromise<BucketOut> {
-        return __request(OpenAPI, {
-            method: 'PATCH',
-            url: '/buckets/{bucket_name}/limits',
-            path: {
-                'bucket_name': bucketName,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-}
diff --git a/src/client/services/ResourceService.ts b/src/client/services/ResourceService.ts
deleted file mode 100644
index 1c43391a9c519b0496610671f12cf4ce51679c88..0000000000000000000000000000000000000000
--- a/src/client/services/ResourceService.ts
+++ /dev/null
@@ -1,303 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { OwnershipTransferRequestIn } from '../models/OwnershipTransferRequestIn';
-import type { OwnershipTransferRequestOut } from '../models/OwnershipTransferRequestOut';
-import type { ResourceIn } from '../models/ResourceIn';
-import type { ResourceOut } from '../models/ResourceOut';
-import type { ResourceVersionStatus } from '../models/ResourceVersionStatus';
-import type { UserSynchronizationRequestOut } from '../models/UserSynchronizationRequestOut';
-import type { CancelablePromise } from '../core/CancelablePromise';
-import { OpenAPI } from '../core/OpenAPI';
-import { request as __request } from '../core/request';
-export class ResourceService {
-    /**
-     * Request a new resource
-     * Request a new resources.
-     *
-     * Permission `resource:create` required.
-     * @param requestBody
-     * @returns ResourceOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceCreateResource(
-        requestBody: ResourceIn,
-    ): CancelablePromise<ResourceOut> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/resources',
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * List resources
-     * List all resources.
-     *
-     * Permission `resource:list` required.
-     * @param maintainerId Filter for resource by maintainer. If current user is the same as maintainer ID, permission `resource:list` required, otherwise `resource:list_filter`.
-     * @param versionStatus Which versions of the resource to include in the response. Permission `resource:list_filter` required if None or querying for non-public resources, otherwise only permission `resource:list` required.
-     * @param nameSubstring Filter resources by a substring in their name.
-     * @param _public Filter resources to by the public flag
-     * @returns ResourceOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceListResources(
-        maintainerId?: string,
-        versionStatus?: Array<ResourceVersionStatus>,
-        nameSubstring?: string,
-        _public?: boolean,
-    ): CancelablePromise<Array<ResourceOut>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/resources',
-            query: {
-                'maintainer_id': maintainerId,
-                'version_status': versionStatus,
-                'name_substring': nameSubstring,
-                'public': _public,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * List resource sync requests
-     * List all resource sync requests.
-     *
-     * Permission `resource:update_any` required.
-     * @returns UserSynchronizationRequestOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceListSyncRequests(): CancelablePromise<Array<UserSynchronizationRequestOut>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/resources/sync_requests',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-            },
-        });
-    }
-    /**
-     * List resource OTRs
-     * Get the ownership transfer requests for resources.
-     *
-     * Permission `resource:list` required if `current_owner_id` or `new_owner_id` is the current users id,
-     * otherwise `resource:list_all`
-     * @param currentOwnerId UID of user who is the current owner.
-     * @param newOwnerId UID of user who will be the new owner.
-     * @returns OwnershipTransferRequestOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceListResourceOtrs(
-        currentOwnerId?: string,
-        newOwnerId?: string,
-    ): CancelablePromise<Array<OwnershipTransferRequestOut>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/resources/ownership_transfer_request',
-            query: {
-                'current_owner_id': currentOwnerId,
-                'new_owner_id': newOwnerId,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get a resource
-     * Get a specific resource.
-     *
-     * Permission `resource:read` required.
-     * @param rid
-     * @param versionStatus Which versions of the resource to include in the response. Permission `resource:read_any` required if None or querying for non-public resources, otherwise only permission `resource:read` required.
-     * @returns ResourceOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceGetResource(
-        rid: string,
-        versionStatus?: Array<ResourceVersionStatus>,
-    ): CancelablePromise<ResourceOut> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/resources/{rid}',
-            path: {
-                'rid': rid,
-            },
-            query: {
-                'version_status': versionStatus,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Delete a resource
-     * Delete a resources.
-     *
-     * Permission `resource:delete` required.
-     * @param rid
-     * @returns void
-     * @throws ApiError
-     */
-    public static resourceDeleteResource(
-        rid: string,
-    ): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'DELETE',
-            url: '/resources/{rid}',
-            path: {
-                'rid': rid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get a resource OTR
-     * Get a specific resource ownership transfer request.
-     *
-     * Permission `resource:read` required if the current user is the current or new owner of the resource,
-     * otherwise `resource:read_any` required.
-     * @param rid
-     * @returns OwnershipTransferRequestOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceGetResourceOtr(
-        rid: string,
-    ): CancelablePromise<OwnershipTransferRequestOut> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/resources/{rid}/ownership_transfer_request',
-            path: {
-                'rid': rid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Create a resource OTR
-     * Create a ownership transfer request for a specific resource.
-     *
-     * Permission `resource:update` required if the current user is the current owner of the resource,
-     * otherwise `resource:update_any` required.
-     * @param rid
-     * @param requestBody
-     * @returns OwnershipTransferRequestOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceCreateResourceOtr(
-        rid: string,
-        requestBody: OwnershipTransferRequestIn,
-    ): CancelablePromise<OwnershipTransferRequestOut> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/resources/{rid}/ownership_transfer_request',
-            path: {
-                'rid': rid,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Accept a resource OTR
-     * Accept an ownership transfer request for a specific resource.
-     *
-     * Permission `resource:update` required if the current user is the new owner of the resource,
-     * otherwise `resource:update_any` required.
-     * @param rid
-     * @returns ResourceOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceAcceptResourceOtr(
-        rid: string,
-    ): CancelablePromise<ResourceOut> {
-        return __request(OpenAPI, {
-            method: 'PATCH',
-            url: '/resources/{rid}/ownership_transfer_request',
-            path: {
-                'rid': rid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Delete a resource OTR
-     * Delete/Reject a resource ownership transfer request.
-     *
-     * Permission `resource:update` required if the current user is the current or new owner of the resource,
-     * otherwise `resource:update_any` required.
-     * @param rid
-     * @returns void
-     * @throws ApiError
-     */
-    public static resourceDeleteResourceOtr(
-        rid: string,
-    ): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'DELETE',
-            url: '/resources/{rid}/ownership_transfer_request',
-            path: {
-                'rid': rid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-}
diff --git a/src/client/services/ResourceVersionService.ts b/src/client/services/ResourceVersionService.ts
deleted file mode 100644
index 82096e84490e9b687f1261dbf902a605303b46d8..0000000000000000000000000000000000000000
--- a/src/client/services/ResourceVersionService.ts
+++ /dev/null
@@ -1,361 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { FileTree } from '../models/FileTree';
-import type { ResourceVersionIn } from '../models/ResourceVersionIn';
-import type { ResourceVersionOut } from '../models/ResourceVersionOut';
-import type { ResourceVersionStatus } from '../models/ResourceVersionStatus';
-import type { UserRequestAnswer } from '../models/UserRequestAnswer';
-import type { UserSynchronizationRequestIn } from '../models/UserSynchronizationRequestIn';
-import type { CancelablePromise } from '../core/CancelablePromise';
-import { OpenAPI } from '../core/OpenAPI';
-import { request as __request } from '../core/request';
-export class ResourceVersionService {
-    /**
-     * List versions of a resource
-     * List all the resource version for a specific resource.
-     *
-     * Permission 'resource:read' required.
-     * @param rid
-     * @param versionStatus Which versions of the resource to include in the response. Permission `resource:read_any` required if None or querying for non-public resources, otherwise only permission `resource:read` required.
-     * @returns ResourceVersionOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceVersionListResourceVersions(
-        rid: string,
-        versionStatus?: Array<ResourceVersionStatus>,
-    ): CancelablePromise<Array<ResourceVersionOut>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/resources/{rid}/versions',
-            path: {
-                'rid': rid,
-            },
-            query: {
-                'version_status': versionStatus,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Request new version of a resource
-     * Request a new resource version.
-     *
-     * Permission `resource:update` required if the current user is the maintainer, `resource:update_any` otherwise.
-     * @param rid
-     * @param requestBody
-     * @returns ResourceVersionOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceVersionRequestResourceVersion(
-        rid: string,
-        requestBody: ResourceVersionIn,
-    ): CancelablePromise<ResourceVersionOut> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/resources/{rid}/versions',
-            path: {
-                'rid': rid,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get version of a resource
-     * Get a specific resource version for a specific resource.
-     *
-     * Permission `resource:read` required. If the status of the resource version is not `LATEST` or `SYNCHRONIZED` and
-     * the current user is not the maintainer, then the permission `resource:read_any` is required.
-     * @param rid
-     * @param rvid
-     * @returns ResourceVersionOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceVersionGetResourceVersion(
-        rid: string,
-        rvid: string,
-    ): CancelablePromise<ResourceVersionOut> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/resources/{rid}/versions/{rvid}',
-            path: {
-                'rid': rid,
-                'rvid': rvid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Download folder structure of resource
-     * Get the folder structure of the resources. Only available if the resource was previously downloaded to the cluster.
-     *
-     * Permission `resource:read` required.
-     * @param rvid
-     * @param rid
-     * @returns FileTree Successful Response
-     * @throws ApiError
-     */
-    public static resourceVersionResourceFileTree(
-        rvid: string,
-        rid: string,
-    ): CancelablePromise<Array<FileTree>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/resources/{rid}/versions/{rvid}/tree',
-            path: {
-                'rvid': rvid,
-                'rid': rid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Request resource version review
-     * Request the review of a resource version.
-     *
-     * Permission `resource:update` required.
-     * @param rid
-     * @param rvid
-     * @returns ResourceVersionOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceVersionRequestResourceVersionReview(
-        rid: string,
-        rvid: string,
-    ): CancelablePromise<ResourceVersionOut> {
-        return __request(OpenAPI, {
-            method: 'PUT',
-            url: '/resources/{rid}/versions/{rvid}/request_review',
-            path: {
-                'rid': rid,
-                'rvid': rvid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Request resource version synchronization
-     * Request the synchronization of a resource version to the cluster.
-     *
-     * Permission `resource:request_sync` required.
-     * @param rid
-     * @param rvid
-     * @param requestBody
-     * @returns ResourceVersionOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceVersionRequestResourceVersionSync(
-        rid: string,
-        rvid: string,
-        requestBody: UserSynchronizationRequestIn,
-    ): CancelablePromise<ResourceVersionOut> {
-        return __request(OpenAPI, {
-            method: 'PUT',
-            url: '/resources/{rid}/versions/{rvid}/request_sync',
-            path: {
-                'rid': rid,
-                'rvid': rvid,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Review resource version
-     * Review answer the resource version.
-     *
-     * Permission `resource:update_status` required.
-     * @param rid
-     * @param rvid
-     * @param requestBody
-     * @returns ResourceVersionOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceVersionResourceVersionReview(
-        rid: string,
-        rvid: string,
-        requestBody: UserRequestAnswer,
-    ): CancelablePromise<ResourceVersionOut> {
-        return __request(OpenAPI, {
-            method: 'PUT',
-            url: '/resources/{rid}/versions/{rvid}/review',
-            path: {
-                'rid': rid,
-                'rvid': rvid,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Synchronize resource version with cluster
-     * Synchronize the resource version to the cluster.
-     *
-     * Permission `resource:update_any` required.
-     * @param rid
-     * @param rvid
-     * @param requestBody
-     * @returns ResourceVersionOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceVersionResourceVersionSync(
-        rid: string,
-        rvid: string,
-        requestBody: UserRequestAnswer,
-    ): CancelablePromise<ResourceVersionOut> {
-        return __request(OpenAPI, {
-            method: 'PUT',
-            url: '/resources/{rid}/versions/{rvid}/sync',
-            path: {
-                'rid': rid,
-                'rvid': rvid,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Set resource version to latest
-     * Set the resource version as the latest version.
-     *
-     * Permission `resource:update_any` required.
-     * @param rid
-     * @param rvid
-     * @returns ResourceVersionOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceVersionResourceVersionLatest(
-        rid: string,
-        rvid: string,
-    ): CancelablePromise<ResourceVersionOut> {
-        return __request(OpenAPI, {
-            method: 'PUT',
-            url: '/resources/{rid}/versions/{rvid}/latest',
-            path: {
-                'rid': rid,
-                'rvid': rvid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Delete resource version on cluster
-     * Delete the resource version on the cluster.
-     *
-     * Permission `resource:delete_any` required.
-     * @param rid
-     * @param rvid
-     * @returns ResourceVersionOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceVersionDeleteResourceVersionCluster(
-        rid: string,
-        rvid: string,
-    ): CancelablePromise<ResourceVersionOut> {
-        return __request(OpenAPI, {
-            method: 'DELETE',
-            url: '/resources/{rid}/versions/{rvid}/cluster',
-            path: {
-                'rid': rid,
-                'rvid': rvid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Delete resource version in S3
-     * Delete the resource version in the S3 bucket.
-     *
-     * Permission `resource:delete_any` required.
-     * @param rid
-     * @param rvid
-     * @returns ResourceVersionOut Successful Response
-     * @throws ApiError
-     */
-    public static resourceVersionDeleteResourceVersionS3(
-        rid: string,
-        rvid: string,
-    ): CancelablePromise<ResourceVersionOut> {
-        return __request(OpenAPI, {
-            method: 'DELETE',
-            url: '/resources/{rid}/versions/{rvid}/s3',
-            path: {
-                'rid': rid,
-                'rvid': rvid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-}
diff --git a/src/client/services/S3KeyService.ts b/src/client/services/S3KeyService.ts
deleted file mode 100644
index 11e696118ce7822e2c5bbe0c04a0ffd199f28d30..0000000000000000000000000000000000000000
--- a/src/client/services/S3KeyService.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { S3Key } from '../models/S3Key';
-import type { CancelablePromise } from '../core/CancelablePromise';
-import { OpenAPI } from '../core/OpenAPI';
-import { request as __request } from '../core/request';
-export class S3KeyService {
-    /**
-     * Get the S3 Access keys from a user
-     * Get all the S3 Access keys for a specific user.
-     *
-     * Permission `s3_key:list` required.
-     * @param uid UID of a user
-     * @returns S3Key Successful Response
-     * @throws ApiError
-     */
-    public static s3KeyGetUserKeys(
-        uid: string,
-    ): CancelablePromise<Array<S3Key>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/users/{uid}/keys',
-            path: {
-                'uid': uid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Create a Access key for a user
-     * Create a S3 Access key for a specific user.
-     *
-     * Permission `s3_key:create` required.
-     * @param uid UID of a user
-     * @returns S3Key Successful Response
-     * @throws ApiError
-     */
-    public static s3KeyCreateUserKey(
-        uid: string,
-    ): CancelablePromise<S3Key> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/users/{uid}/keys',
-            path: {
-                'uid': uid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get a specific S3 Access key from a user
-     * Get a specific S3 Access Key for a specific user.
-     *
-     * Permission `s3_key:read` required.
-     * @param accessId ID of the S3 access key
-     * @param uid UID of a user
-     * @returns S3Key Successful Response
-     * @throws ApiError
-     */
-    public static s3KeyGetUserKey(
-        accessId: string,
-        uid: string,
-    ): CancelablePromise<S3Key> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/users/{uid}/keys/{access_id}',
-            path: {
-                'access_id': accessId,
-                'uid': uid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Delete a specific S3 Access key from a user
-     * Delete a specific S3 Access key for a specific user.
-     *
-     * Permission `s3_key:delete` required if the current user is the target, otherwise `s3_key:delete_any` required.
-     * @param accessId ID of the S3 access key
-     * @param uid UID of a user
-     * @returns void
-     * @throws ApiError
-     */
-    public static s3KeyDeleteUserKey(
-        accessId: string,
-        uid: string,
-    ): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'DELETE',
-            url: '/users/{uid}/keys/{access_id}',
-            path: {
-                'access_id': accessId,
-                'uid': uid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-}
diff --git a/src/client/services/UserService.ts b/src/client/services/UserService.ts
deleted file mode 100644
index f7c3951968b68b00f72eb75a85e31484fa1a3a8f..0000000000000000000000000000000000000000
--- a/src/client/services/UserService.ts
+++ /dev/null
@@ -1,202 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { RoleEnum } from '../models/RoleEnum';
-import type { UserIn } from '../models/UserIn';
-import type { UserOut } from '../models/UserOut';
-import type { UserOutExtended } from '../models/UserOutExtended';
-import type { UserRoles } from '../models/UserRoles';
-import type { CancelablePromise } from '../core/CancelablePromise';
-import { OpenAPI } from '../core/OpenAPI';
-import { request as __request } from '../core/request';
-export class UserService {
-    /**
-     * Create User
-     * Create a new user in the system and notify him.
-     *
-     * Permission `user:create` required.
-     * @param requestBody
-     * @returns UserOutExtended Successful Response
-     * @throws ApiError
-     */
-    public static userCreateUser(
-        requestBody: UserIn,
-    ): CancelablePromise<UserOutExtended> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/users',
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * List users and search by their name
-     * List all users in the system..
-     *
-     * Permission `user:list` required.
-     * @param nameSubstring Filter users by a substring in their name.
-     * @param filterRoles Filter users by their role. If multiple are selected, they are concatenating by an OR Expression.
-     * @returns UserOutExtended Successful Response
-     * @throws ApiError
-     */
-    public static userListUsers(
-        nameSubstring?: string,
-        filterRoles?: Array<RoleEnum>,
-    ): CancelablePromise<Array<UserOutExtended>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/users',
-            query: {
-                'name_substring': nameSubstring,
-                'filter_roles': filterRoles,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Search Users
-     * Search for users in the system by their name.
-     *
-     * Permission `user: search` required.
-     * @param nameSubstring Filter users by a substring in their name.
-     * @returns UserOut Successful Response
-     * @throws ApiError
-     */
-    public static userSearchUsers(
-        nameSubstring: string,
-    ): CancelablePromise<Array<UserOut>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/users/search',
-            query: {
-                'name_substring': nameSubstring,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get the logged in user
-     * Return the user associated with the used JWT.
-     *
-     * Permission `user:read` required.
-     * @returns UserOutExtended Successful Response
-     * @throws ApiError
-     */
-    public static userGetLoggedInUser(): CancelablePromise<UserOutExtended> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/users/me',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-            },
-        });
-    }
-    /**
-     * Get a user by its uid
-     * Return the user with the specific uid.
-     *
-     * Permission `user:read` required.
-     * @param uid UID of a user
-     * @returns UserOut Successful Response
-     * @throws ApiError
-     */
-    public static userGetUser(
-        uid: string,
-    ): CancelablePromise<UserOut> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/users/{uid}',
-            path: {
-                'uid': uid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Update user roles
-     * Update the roles of a user.
-     *
-     * Permission `user:update` required.
-     * @param uid UID of a user
-     * @param requestBody
-     * @returns UserOutExtended Successful Response
-     * @throws ApiError
-     */
-    public static userUpdateRoles(
-        uid: string,
-        requestBody: UserRoles,
-    ): CancelablePromise<UserOutExtended> {
-        return __request(OpenAPI, {
-            method: 'PUT',
-            url: '/users/{uid}/roles',
-            path: {
-                'uid': uid,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Resend Invitation
-     * Resend the invitation link for an user that has an open invitation.
-     *
-     * Permission `user:create` required.
-     * @param uid UID of a user
-     * @returns UserOutExtended Successful Response
-     * @throws ApiError
-     */
-    public static userResendInvitation(
-        uid: string,
-    ): CancelablePromise<UserOutExtended> {
-        return __request(OpenAPI, {
-            method: 'PATCH',
-            url: '/users/{uid}/invitation',
-            path: {
-                'uid': uid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-}
diff --git a/src/client/services/WorkflowCredentialsService.ts b/src/client/services/WorkflowCredentialsService.ts
deleted file mode 100644
index 01e4e44bec76bf5ee746fa2d9edfab0e5f49a688..0000000000000000000000000000000000000000
--- a/src/client/services/WorkflowCredentialsService.ts
+++ /dev/null
@@ -1,97 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { WorkflowCredentialsIn } from '../models/WorkflowCredentialsIn';
-import type { WorkflowCredentialsOut } from '../models/WorkflowCredentialsOut';
-import type { CancelablePromise } from '../core/CancelablePromise';
-import { OpenAPI } from '../core/OpenAPI';
-import { request as __request } from '../core/request';
-export class WorkflowCredentialsService {
-    /**
-     * Get the credentials of a workflow
-     * Get the credentials for the repository of a workflow. Only the developer of a workflow can do this.
-     *
-     * Permission `workflow:update` required.
-     * @param wid ID of a workflow
-     * @returns WorkflowCredentialsOut Successful Response
-     * @throws ApiError
-     */
-    public static workflowCredentialsGetWorkflowCredentials(
-        wid: string,
-    ): CancelablePromise<WorkflowCredentialsOut> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/workflows/{wid}/credentials',
-            path: {
-                'wid': wid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Update the credentials of a workflow
-     * Update the credentials for the repository of a workflow.
-     *
-     * Permission `workflow:update` required.
-     * @param wid ID of a workflow
-     * @param requestBody
-     * @returns any Successful Response
-     * @throws ApiError
-     */
-    public static workflowCredentialsUpdateWorkflowCredentials(
-        wid: string,
-        requestBody: WorkflowCredentialsIn,
-    ): CancelablePromise<any> {
-        return __request(OpenAPI, {
-            method: 'PUT',
-            url: '/workflows/{wid}/credentials',
-            path: {
-                'wid': wid,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Delete the credentials of a workflow
-     * Delete the credentials for the repository of a workflow.
-     *
-     * Permission `workflow:delete` required if the developer of the workflow is the same as the current user,
-     * other `workflow:delete_any`.
-     * @param wid ID of a workflow
-     * @returns void
-     * @throws ApiError
-     */
-    public static workflowCredentialsDeleteWorkflowCredentials(
-        wid: string,
-    ): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'DELETE',
-            url: '/workflows/{wid}/credentials',
-            path: {
-                'wid': wid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-}
diff --git a/src/client/services/WorkflowExecutionService.ts b/src/client/services/WorkflowExecutionService.ts
deleted file mode 100644
index c0879d98f3edbbb8092fbb5557075d4cb7193df1..0000000000000000000000000000000000000000
--- a/src/client/services/WorkflowExecutionService.ts
+++ /dev/null
@@ -1,238 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { DevWorkflowExecutionIn } from '../models/DevWorkflowExecutionIn';
-import type { WorkflowExecutionIn } from '../models/WorkflowExecutionIn';
-import type { WorkflowExecutionOut } from '../models/WorkflowExecutionOut';
-import type { WorkflowExecutionStatus } from '../models/WorkflowExecutionStatus';
-import type { CancelablePromise } from '../core/CancelablePromise';
-import { OpenAPI } from '../core/OpenAPI';
-import { request as __request } from '../core/request';
-export class WorkflowExecutionService {
-    /**
-     * Start a new workflow execution
-     * Start a new workflow execution. Workflow versions wit status `DEPRECATED` or `DENIED` can't be started.
-     *
-     * Permission `workflow_execution:create` required if workflow versions status is `PUBLISHED`,
-     * otherwise `workflow_execution:create_any` required.
-     * @param requestBody
-     * @returns WorkflowExecutionOut Successful Response
-     * @throws ApiError
-     */
-    public static workflowExecutionStartWorkflow(
-        requestBody: WorkflowExecutionIn,
-    ): CancelablePromise<WorkflowExecutionOut> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/workflow_executions',
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get all workflow executions
-     * Get all workflow executions.
-     *
-     * This endpoint enforces keyset pagination. To iterate over all workflow executions, follow the link provided in the
-     * `Link` header.
-     * A missing `Link` header indicates that you iterated over all workflow executions with the current filters.
-     *
-     * Permission `workflow_execution:list` required, if `executor_id` is the same as the current user,
-     * otherwise `workflow_execution:list_all` required.
-     * @param executorId Filter for workflow executions by a user. If none, Permission `workflow_execution:read_any` required.
-     * @param executionStatus Filter for status of workflow execution
-     * @param workflowVersionId Filter for workflow version
-     * @param workflowId Filter for workflow
-     * @param startAfter Filter for workflow executions that started after this UNIX timestamp
-     * @param startBefore Filter for workflow executions that started before this UNIX timestamp
-     * @param idAfter Id of the item to start the query from. DO NOT SET MANUALLY.
-     * @param perPage Number of items to list per page
-     * @param sort Sort order of items with creation time
-     * @returns WorkflowExecutionOut Successful Response
-     * @throws ApiError
-     */
-    public static workflowExecutionListWorkflowExecutions(
-        executorId?: string,
-        executionStatus?: Array<WorkflowExecutionStatus>,
-        workflowVersionId?: string,
-        workflowId?: string,
-        startAfter?: number,
-        startBefore?: number,
-        idAfter?: string,
-        perPage: number = 20,
-        sort: 'asc' | 'desc' = 'desc',
-    ): CancelablePromise<Array<WorkflowExecutionOut>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/workflow_executions',
-            query: {
-                'executor_id': executorId,
-                'execution_status': executionStatus,
-                'workflow_version_id': workflowVersionId,
-                'workflow_id': workflowId,
-                'start_after': startAfter,
-                'start_before': startBefore,
-                'id_after': idAfter,
-                'per_page': perPage,
-                'sort': sort,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Start a workflow execution with arbitrary git repository
-     * Start a new workflow execution from an arbitrary git repository.
-     *
-     * For private Gitlab repositories, a Project Access Token with the role Reporter and scope `read_api` is needed.
-     *
-     * For private GitHub repositories, a Personal Access Token (classic) with scope `repo` is needed.
-     *
-     * Permission `workflow:create` required.
-     * @param requestBody
-     * @returns WorkflowExecutionOut Successful Response
-     * @throws ApiError
-     */
-    public static workflowExecutionStartArbitraryWorkflow(
-        requestBody: DevWorkflowExecutionIn,
-    ): CancelablePromise<WorkflowExecutionOut> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/workflow_executions/arbitrary',
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get a workflow execution
-     * Get a specific workflow execution.
-     *
-     * Permission `workflow_execution:read` required if the current user started the workflow execution,
-     * otherwise `workflow_execution:read_any` required.
-     * @param eid ID of a workflow execution.
-     * @returns WorkflowExecutionOut Successful Response
-     * @throws ApiError
-     */
-    public static workflowExecutionGetWorkflowExecution(
-        eid: string,
-    ): CancelablePromise<WorkflowExecutionOut> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/workflow_executions/{eid}',
-            path: {
-                'eid': eid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Delete a workflow execution
-     * Delete a specific workflow execution.
-     *
-     * Permission `workflow_execution:delete` required if the current user started the workflow execution,
-     * otherwise `workflow_execution:delete_any` required.
-     * @param eid ID of a workflow execution.
-     * @returns void
-     * @throws ApiError
-     */
-    public static workflowExecutionDeleteWorkflowExecution(
-        eid: string,
-    ): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'DELETE',
-            url: '/workflow_executions/{eid}',
-            path: {
-                'eid': eid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get the parameters of a workflow execution
-     * Get the parameters of a specific workflow execution.
-     *
-     * Permission `workflow_execution:read` required if the current user started the workflow execution,
-     * otherwise `workflow_execution:read_any` required.
-     * @param eid ID of a workflow execution.
-     * @returns any Successful Response
-     * @throws ApiError
-     */
-    public static workflowExecutionGetWorkflowExecutionParams(
-        eid: string,
-    ): CancelablePromise<Record<string, any>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/workflow_executions/{eid}/params',
-            path: {
-                'eid': eid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Cancel a workflow execution
-     * Cancel a running workflow execution.
-     *
-     * Permission `workflow_execution:cancel` required if the current user started the workflow execution,
-     * otherwise `workflow_execution:cancel_any` required.
-     * @param eid ID of a workflow execution.
-     * @returns void
-     * @throws ApiError
-     */
-    public static workflowExecutionCancelWorkflowExecution(
-        eid: string,
-    ): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/workflow_executions/{eid}/cancel',
-            path: {
-                'eid': eid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-}
diff --git a/src/client/services/WorkflowModeService.ts b/src/client/services/WorkflowModeService.ts
deleted file mode 100644
index f96352df298d6fcc826dbb056d0d7d338bff098b..0000000000000000000000000000000000000000
--- a/src/client/services/WorkflowModeService.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { WorkflowModeOut } from '../models/WorkflowModeOut';
-import type { CancelablePromise } from '../core/CancelablePromise';
-import { OpenAPI } from '../core/OpenAPI';
-import { request as __request } from '../core/request';
-export class WorkflowModeService {
-    /**
-     * Get workflow mode
-     * Get a workflow mode
-     *
-     * Permission `workflow:read` required
-     * @param modeId ID of a workflow mode
-     * @returns WorkflowModeOut Successful Response
-     * @throws ApiError
-     */
-    public static workflowModeGetWorkflowMode(
-        modeId: string,
-    ): CancelablePromise<WorkflowModeOut> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/workflow_modes/{mode_id}',
-            path: {
-                'mode_id': modeId,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-}
diff --git a/src/client/services/WorkflowService.ts b/src/client/services/WorkflowService.ts
deleted file mode 100644
index f1cc9bfed611d53bbbc2bc55b9180072fc2ad0d4..0000000000000000000000000000000000000000
--- a/src/client/services/WorkflowService.ts
+++ /dev/null
@@ -1,383 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { AnonymizedWorkflowExecution } from '../models/AnonymizedWorkflowExecution';
-import type { OwnershipTransferRequestIn } from '../models/OwnershipTransferRequestIn';
-import type { OwnershipTransferRequestOut } from '../models/OwnershipTransferRequestOut';
-import type { WorkflowIn } from '../models/WorkflowIn';
-import type { WorkflowOut } from '../models/WorkflowOut';
-import type { WorkflowStatistic } from '../models/WorkflowStatistic';
-import type { WorkflowUpdate } from '../models/WorkflowUpdate';
-import type { WorkflowVersion } from '../models/WorkflowVersion';
-import type { WorkflowVersionStatus } from '../models/WorkflowVersionStatus';
-import type { CancelablePromise } from '../core/CancelablePromise';
-import { OpenAPI } from '../core/OpenAPI';
-import { request as __request } from '../core/request';
-export class WorkflowService {
-    /**
-     * Create a new workflow
-     * Create a new workflow.
-     *
-     * For private Gitlab repositories, a Project Access Token with the role Reporter and scope `read_api` is needed.
-     *
-     * For private GitHub repositories, a Personal Access Token (classic) with scope `repo` is needed.
-     *
-     * Permission `workflow:create` required.
-     * @param requestBody
-     * @returns WorkflowOut Successful Response
-     * @throws ApiError
-     */
-    public static workflowCreateWorkflow(
-        requestBody: WorkflowIn,
-    ): CancelablePromise<WorkflowOut> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/workflows',
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * List workflows
-     * List all workflows.
-     *
-     * Permission `workflow:list` required.
-     * @param nameSubstring Filter workflows by a substring in their name.
-     * @param versionStatus Which versions of the workflow to include in the response. Permission `workflow:list_filter` required, unless `developer_id` is provided and current user is developer, then only permission `workflow:list` required. Default `PUBLISHED` and `DEPRECATED`.
-     * @param developerId Filter for workflow by developer. If current user is the developer, permission `workflow:list` required, otherwise `workflow:list_filter`.
-     * @returns WorkflowOut Successful Response
-     * @throws ApiError
-     */
-    public static workflowListWorkflows(
-        nameSubstring?: string,
-        versionStatus?: Array<WorkflowVersionStatus>,
-        developerId?: string,
-    ): CancelablePromise<Array<WorkflowOut>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/workflows',
-            query: {
-                'name_substring': nameSubstring,
-                'version_status': versionStatus,
-                'developer_id': developerId,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * List workflow OTRs
-     * Get the ownership transfer requests for workflows.
-     *
-     * Permission `workflow:list` required if `current_owner_id` or `new_owner_id` is the current users id,
-     * otherwise `workflow:list_all`
-     * @param currentOwnerId UID of user who is the current owner.
-     * @param newOwnerId UID of user who will be the new owner.
-     * @returns OwnershipTransferRequestOut Successful Response
-     * @throws ApiError
-     */
-    public static workflowListWorkflowOtrs(
-        currentOwnerId?: string,
-        newOwnerId?: string,
-    ): CancelablePromise<Array<OwnershipTransferRequestOut>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/workflows/ownership_transfer_request',
-            query: {
-                'current_owner_id': currentOwnerId,
-                'new_owner_id': newOwnerId,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get anonymized workflow execution
-     * Get the workflow executions with meta information and anonymized user IDs.
-     *
-     * Permission `workflow:read` required if the `developer_id` is the same as the uid of the current user,
-     * other `workflow:read_any`.
-     * @param developerId Filter by the developer of the workflows
-     * @param workflowId Filter by workflow IDs
-     * @param start Filter by workflow executions after this date
-     * @param end Filter by workflow executions before this date
-     * @returns AnonymizedWorkflowExecution Successful Response
-     * @throws ApiError
-     */
-    public static workflowGetDeveloperWorkflowStatistics(
-        developerId?: string,
-        workflowId?: Array<string>,
-        start?: string,
-        end?: string,
-    ): CancelablePromise<Array<AnonymizedWorkflowExecution>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/workflows/developer_statistics',
-            query: {
-                'developer_id': developerId,
-                'workflow_id': workflowId,
-                'start': start,
-                'end': end,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get a workflow
-     * Get a specific workflow.
-     *
-     * Permission `workflow:read` required.
-     * @param wid ID of a workflow
-     * @param versionStatus Which versions of the workflow to include in the response. Permission `workflow:read_any` required if you are not the developer of this workflow. Default `PUBLISHED` and `DEPRECATED`
-     * @returns WorkflowOut Successful Response
-     * @throws ApiError
-     */
-    public static workflowGetWorkflow(
-        wid: string,
-        versionStatus?: Array<WorkflowVersionStatus>,
-    ): CancelablePromise<WorkflowOut> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/workflows/{wid}',
-            path: {
-                'wid': wid,
-            },
-            query: {
-                'version_status': versionStatus,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Delete a workflow
-     * Delete a workflow.
-     *
-     * Permission `workflow:delete` required if the `developer_id` is the same as the uid of the current user,
-     * other `workflow:delete_any`.
-     * @param wid ID of a workflow
-     * @returns void
-     * @throws ApiError
-     */
-    public static workflowDeleteWorkflow(
-        wid: string,
-    ): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'DELETE',
-            url: '/workflows/{wid}',
-            path: {
-                'wid': wid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get a workflow OTR
-     * Get a specific workflow ownership transfer request.
-     *
-     * Permission `workflow:read` required if current user is the current or new owner of the workflow,
-     * otherwise `workflow:read_any` required.
-     * @param wid ID of a workflow
-     * @returns OwnershipTransferRequestOut Successful Response
-     * @throws ApiError
-     */
-    public static workflowGetWorkflowOtr(
-        wid: string,
-    ): CancelablePromise<OwnershipTransferRequestOut> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/workflows/{wid}/ownership_transfer_request',
-            path: {
-                'wid': wid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Create a workflow OTR
-     * Create a ownership transfer request for a specific workflow.
-     *
-     * Permission `workflow:update` required if the current user is the current owner of the workflow,
-     * otherwise `workflow:update_any` required.
-     * @param wid ID of a workflow
-     * @param requestBody
-     * @returns OwnershipTransferRequestOut Successful Response
-     * @throws ApiError
-     */
-    public static workflowCreateWorkflowOtr(
-        wid: string,
-        requestBody: OwnershipTransferRequestIn,
-    ): CancelablePromise<OwnershipTransferRequestOut> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/workflows/{wid}/ownership_transfer_request',
-            path: {
-                'wid': wid,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Accept a workflow OTR
-     * Accept an ownership transfer request for a specific workflow.
-     *
-     * Permission `workflow:update` required if the current user is the new owner of the workflow,
-     * otherwise `workflow:update_any` required.
-     * @param wid ID of a workflow
-     * @returns WorkflowOut Successful Response
-     * @throws ApiError
-     */
-    public static workflowAcceptWorkflowOtr(
-        wid: string,
-    ): CancelablePromise<WorkflowOut> {
-        return __request(OpenAPI, {
-            method: 'PATCH',
-            url: '/workflows/{wid}/ownership_transfer_request',
-            path: {
-                'wid': wid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Delete a workflow OTR
-     * Delete/Reject a workflow ownership transfer request.
-     *
-     * Permission `workflow:update` required if current user is the current or new owner of the workflow,
-     * otherwise `workflow:update_any` required.
-     * @param wid ID of a workflow
-     * @returns void
-     * @throws ApiError
-     */
-    public static workflowDeleteWorkflowOtr(
-        wid: string,
-    ): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'DELETE',
-            url: '/workflows/{wid}/ownership_transfer_request',
-            path: {
-                'wid': wid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get statistics for a workflow
-     * Get the number of started workflow per day.
-     *
-     * Permission `workflow:read` required.
-     * @param wid ID of a workflow
-     * @returns WorkflowStatistic Successful Response
-     * @throws ApiError
-     */
-    public static workflowGetWorkflowStatistics(
-        wid: string,
-    ): CancelablePromise<Array<WorkflowStatistic>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/workflows/{wid}/statistics',
-            path: {
-                'wid': wid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Update a workflow
-     * Create a new workflow version.
-     *
-     * Permission `workflow:update` required.
-     * @param wid ID of a workflow
-     * @param requestBody
-     * @returns WorkflowVersion Successful Response
-     * @throws ApiError
-     */
-    public static workflowUpdateWorkflow(
-        wid: string,
-        requestBody: WorkflowUpdate,
-    ): CancelablePromise<WorkflowVersion> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/workflows/{wid}/update',
-            path: {
-                'wid': wid,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-}
diff --git a/src/client/services/WorkflowVersionService.ts b/src/client/services/WorkflowVersionService.ts
deleted file mode 100644
index f5d3ef06ab4779c3a5b4488cf4c9149156e22161..0000000000000000000000000000000000000000
--- a/src/client/services/WorkflowVersionService.ts
+++ /dev/null
@@ -1,311 +0,0 @@
-/* generated using openapi-typescript-codegen -- do not edit */
-/* istanbul ignore file */
-/* tslint:disable */
-/* eslint-disable */
-import type { Body_Workflow_Version_upload_workflow_version_icon } from '../models/Body_Workflow_Version_upload_workflow_version_icon';
-import type { DocumentationEnum } from '../models/DocumentationEnum';
-import type { IconUpdateOut } from '../models/IconUpdateOut';
-import type { ParameterExtension } from '../models/ParameterExtension';
-import type { WorkflowVersion } from '../models/WorkflowVersion';
-import type { WorkflowVersionStatus } from '../models/WorkflowVersionStatus';
-import type { WorkflowVersionStatusSchema } from '../models/WorkflowVersionStatusSchema';
-import type { CancelablePromise } from '../core/CancelablePromise';
-import { OpenAPI } from '../core/OpenAPI';
-import { request as __request } from '../core/request';
-export class WorkflowVersionService {
-    /**
-     * Get all versions of a workflow
-     * List all versions of a Workflow.
-     *
-     * Permission `workflow:list` required.
-     * @param wid ID of a workflow
-     * @param versionStatus Which versions of the workflow to include in the response. Permission `workflow:list_filter` required if you are not the developer of this workflow. Default `PUBLISHED` and `DEPRECATED`
-     * @returns WorkflowVersion Successful Response
-     * @throws ApiError
-     */
-    public static workflowVersionListWorkflowVersion(
-        wid: string,
-        versionStatus?: Array<WorkflowVersionStatus>,
-    ): CancelablePromise<Array<WorkflowVersion>> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/workflows/{wid}/versions',
-            path: {
-                'wid': wid,
-            },
-            query: {
-                'version_status': versionStatus,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Get a workflow version
-     * Get a specific version of a workflow.
-     *
-     * Permission `workflow:read` required if the version is public or you are the developer of the workflow,
-     * otherwise `workflow:read_any`
-     * @param gitCommitHash Git commit `git_commit_hash` of specific version or `latest`.
-     * @param wid ID of a workflow
-     * @returns WorkflowVersion Successful Response
-     * @throws ApiError
-     */
-    public static workflowVersionGetWorkflowVersion(
-        gitCommitHash: string,
-        wid: string,
-    ): CancelablePromise<WorkflowVersion> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/workflows/{wid}/versions/{git_commit_hash}',
-            path: {
-                'git_commit_hash': gitCommitHash,
-                'wid': wid,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Update status of workflow version
-     * Update the status of a workflow version.
-     *
-     * Permission `workflow:update_status`
-     * @param wid ID of a workflow
-     * @param gitCommitHash Git commit git_commit_hash of specific version.
-     * @param requestBody
-     * @returns WorkflowVersion Successful Response
-     * @throws ApiError
-     */
-    public static workflowVersionUpdateWorkflowVersionStatus(
-        wid: string,
-        gitCommitHash: string,
-        requestBody: WorkflowVersionStatusSchema,
-    ): CancelablePromise<WorkflowVersion> {
-        return __request(OpenAPI, {
-            method: 'PATCH',
-            url: '/workflows/{wid}/versions/{git_commit_hash}/status',
-            path: {
-                'wid': wid,
-                'git_commit_hash': gitCommitHash,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Deprecate a workflow version
-     * Deprecate a workflow version.
-     *
-     * Permission `workflow:update` required if you are the developer of the workflow,
-     * otherwise `workflow:update_status`
-     * @param wid ID of a workflow
-     * @param gitCommitHash Git commit git_commit_hash of specific version.
-     * @returns WorkflowVersion Successful Response
-     * @throws ApiError
-     */
-    public static workflowVersionDeprecateWorkflowVersion(
-        wid: string,
-        gitCommitHash: string,
-    ): CancelablePromise<WorkflowVersion> {
-        return __request(OpenAPI, {
-            method: 'PATCH',
-            url: '/workflows/{wid}/versions/{git_commit_hash}/deprecate',
-            path: {
-                'wid': wid,
-                'git_commit_hash': gitCommitHash,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Update parameter extension of workflow version
-     * Update the parameter extension of a workflow version.
-     *
-     * Permission `workflow:update` required.
-     * @param wid ID of a workflow
-     * @param gitCommitHash Git commit git_commit_hash of specific version.
-     * @param requestBody
-     * @returns WorkflowVersion Successful Response
-     * @throws ApiError
-     */
-    public static workflowVersionUpdateWorkflowVersionParameterExtension(
-        wid: string,
-        gitCommitHash: string,
-        requestBody: ParameterExtension,
-    ): CancelablePromise<WorkflowVersion> {
-        return __request(OpenAPI, {
-            method: 'PATCH',
-            url: '/workflows/{wid}/versions/{git_commit_hash}/parameter-extension',
-            path: {
-                'wid': wid,
-                'git_commit_hash': gitCommitHash,
-            },
-            body: requestBody,
-            mediaType: 'application/json',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Delete parameter extension of workflow version
-     * Delete the parameter extension of a workflow version.
-     *
-     * Permission `workflow:update` required.
-     * @param wid ID of a workflow
-     * @param gitCommitHash Git commit git_commit_hash of specific version.
-     * @returns void
-     * @throws ApiError
-     */
-    public static workflowVersionDeleteWorkflowVersionParameterExtension(
-        wid: string,
-        gitCommitHash: string,
-    ): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'DELETE',
-            url: '/workflows/{wid}/versions/{git_commit_hash}/parameter-extension',
-            path: {
-                'wid': wid,
-                'git_commit_hash': gitCommitHash,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Fetch documentation for a workflow version
-     * Get the documentation for a specific workflow version.
-     * Streams the response directly from the right git repository.
-     *
-     * Permission `workflow:read` required.
-     * @param wid ID of a workflow
-     * @param gitCommitHash Git commit git_commit_hash of specific version.
-     * @param document Specify which type of documentation the client wants to fetch
-     * @param modeId Workflow Mode
-     * @returns any Successful Response
-     * @throws ApiError
-     */
-    public static workflowVersionDownloadWorkflowDocumentation(
-        wid: string,
-        gitCommitHash: string,
-        document?: DocumentationEnum,
-        modeId?: string,
-    ): CancelablePromise<any> {
-        return __request(OpenAPI, {
-            method: 'GET',
-            url: '/workflows/{wid}/versions/{git_commit_hash}/documentation',
-            path: {
-                'wid': wid,
-                'git_commit_hash': gitCommitHash,
-            },
-            query: {
-                'document': document,
-                'mode_id': modeId,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Upload icon for workflow version
-     * Upload an icon for the workflow version and returns the new icon URL.
-     *
-     * Permission `workflow:update` required.
-     * @param wid ID of a workflow
-     * @param gitCommitHash Git commit git_commit_hash of specific version.
-     * @param formData
-     * @returns IconUpdateOut Successful Response
-     * @throws ApiError
-     */
-    public static workflowVersionUploadWorkflowVersionIcon(
-        wid: string,
-        gitCommitHash: string,
-        formData: Body_Workflow_Version_upload_workflow_version_icon,
-    ): CancelablePromise<IconUpdateOut> {
-        return __request(OpenAPI, {
-            method: 'POST',
-            url: '/workflows/{wid}/versions/{git_commit_hash}/icon',
-            path: {
-                'wid': wid,
-                'git_commit_hash': gitCommitHash,
-            },
-            formData: formData,
-            mediaType: 'multipart/form-data',
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-    /**
-     * Delete icon of workflow version
-     * Delete the icon of the workflow version.
-     *
-     * Permission `workflow:update` required.
-     * @param wid ID of a workflow
-     * @param gitCommitHash Git commit git_commit_hash of specific version.
-     * @returns void
-     * @throws ApiError
-     */
-    public static workflowVersionDeleteWorkflowVersionIcon(
-        wid: string,
-        gitCommitHash: string,
-    ): CancelablePromise<void> {
-        return __request(OpenAPI, {
-            method: 'DELETE',
-            url: '/workflows/{wid}/versions/{git_commit_hash}/icon',
-            path: {
-                'wid': wid,
-                'git_commit_hash': gitCommitHash,
-            },
-            errors: {
-                400: `Error decoding JWT Token`,
-                401: `Not Authenticated`,
-                403: `Not Authorized`,
-                404: `Entity not Found`,
-                422: `Validation Error`,
-            },
-        });
-    }
-}
diff --git a/src/client/types.gen.ts b/src/client/types.gen.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b3835a4585c11c4c63bccc1d70873d2011467489
--- /dev/null
+++ b/src/client/types.gen.ts
@@ -0,0 +1,2403 @@
+// This file is auto-generated by @hey-api/openapi-ts
+
+export type AnonymizedWorkflowExecution = {
+  /**
+   * ID of the workflow execution
+   */
+  workflow_execution_id: string;
+  /**
+   * Anonymized user ID of the user who ran the workflow execution
+   */
+  pseudo_uid: string;
+  /**
+   * ID of the workflow mode this workflow execution ran in
+   */
+  workflow_mode_id?: string | null;
+  /**
+   * Hash of the git commit
+   */
+  workflow_version_id: string;
+  /**
+   * Day of the workflow execution
+   */
+  started_at: string;
+  /**
+   * ID of the workflow
+   */
+  workflow_id: string;
+  /**
+   * ID of developer of the workflow
+   */
+  developer_id: string;
+  /**
+   * End status of the workflow execution
+   */
+  status: WorkflowExecutionStatus;
+};
+
+export type ApiTokenIn = {
+  /**
+   * Short name for the API token
+   */
+  name: string;
+  /**
+   * Unix timestamp when the token should expire
+   */
+  expires_at?: number | null;
+  /**
+   * List of scopes this Api token has
+   */
+  scopes: Array<ScopeEnum>;
+};
+
+export type ApiTokenOut = {
+  /**
+   * Short name for the API token
+   */
+  name: string;
+  /**
+   * Unix timestamp when the token should expire
+   */
+  expires_at?: number | null;
+  /**
+   * List of scopes this Api token has
+   */
+  scopes: Array<ScopeEnum>;
+  /**
+   * The ID of the token
+   */
+  token_id: string;
+  /**
+   * The ID of the owner
+   */
+  uid: string;
+  /**
+   * The UNIX timestamp when this token was created
+   */
+  created_at: number;
+  /**
+   * The UNIX timestamp when this token was used the last time
+   */
+  last_used?: number | null;
+};
+
+export type ApiTokenPrivateOut = {
+  /**
+   * Short name for the API token
+   */
+  name: string;
+  /**
+   * Unix timestamp when the token should expire
+   */
+  expires_at?: number | null;
+  /**
+   * List of scopes this Api token has
+   */
+  scopes: Array<ScopeEnum>;
+  /**
+   * The ID of the token
+   */
+  token_id: string;
+  /**
+   * The ID of the owner
+   */
+  uid: string;
+  /**
+   * The UNIX timestamp when this token was created
+   */
+  created_at: number;
+  /**
+   * The UNIX timestamp when this token was used the last time
+   */
+  last_used?: number | null;
+  /**
+   * The actual token used for authentication
+   */
+  token: string;
+};
+
+export type Body_Bucket_update_bucket_public_state = {
+  /**
+   * New State
+   */
+  public: boolean;
+};
+
+export type Body_Workflow_Version_upload_workflow_version_icon = {
+  /**
+   * Icon for the Workflow.
+   */
+  icon: Blob | File;
+};
+
+/**
+ * Schema for creating a new bucket.
+ */
+export type BucketIn = {
+  /**
+   * Name of the bucket
+   */
+  name: string;
+  /**
+   * Description of the bucket
+   */
+  description: string;
+};
+
+/**
+ * Schema for answering a request with a bucket.
+ */
+export type BucketOut = {
+  /**
+   * Size limit of the bucket in KiB
+   */
+  size_limit?: number | null;
+  /**
+   * Number of objects limit of the bucket
+   */
+  object_limit?: number | null;
+  /**
+   * Name of the bucket
+   */
+  name: string;
+  /**
+   * Description of the bucket
+   */
+  description: string;
+  /**
+   * Time when the bucket was created as UNIX timestamp
+   */
+  created_at: number;
+  /**
+   * UID of the owner
+   */
+  owner_id: string;
+  /**
+   * Flag if the bucket is anonymously readable
+   */
+  public: boolean;
+};
+
+export type BucketPermissionIn = {
+  /**
+   * Start date of permission as UNIX timestamp
+   */
+  from_timestamp?: number | null;
+  /**
+   * End date of permission as UNIX timestamp
+   */
+  to_timestamp?: number | null;
+  /**
+   * Prefix of subfolder
+   */
+  file_prefix?: string | null;
+  /**
+   * Permission
+   */
+  permission?: Permission | "READ" | "WRITE" | "READWRITE";
+  /**
+   * UID of the grantee
+   */
+  uid: string;
+  /**
+   * Name of Bucket
+   */
+  bucket_name: string;
+};
+
+/**
+ * Schema for the bucket permissions.
+ */
+export type BucketPermissionOut = {
+  /**
+   * Start date of permission as UNIX timestamp
+   */
+  from_timestamp?: number | null;
+  /**
+   * End date of permission as UNIX timestamp
+   */
+  to_timestamp?: number | null;
+  /**
+   * Prefix of subfolder
+   */
+  file_prefix?: string | null;
+  /**
+   * Permission
+   */
+  permission?: Permission | "READ" | "WRITE" | "READWRITE";
+  /**
+   * UID of the grantee
+   */
+  uid: string;
+  /**
+   * Name of Bucket
+   */
+  bucket_name: string;
+};
+
+/**
+ * Schema for the parameters of a bucket permission.
+ */
+export type BucketPermissionParameters = {
+  /**
+   * Start date of permission as UNIX timestamp
+   */
+  from_timestamp?: number | null;
+  /**
+   * End date of permission as UNIX timestamp
+   */
+  to_timestamp?: number | null;
+  /**
+   * Prefix of subfolder
+   */
+  file_prefix?: string | null;
+  /**
+   * Permission
+   */
+  permission?: Permission | "READ" | "WRITE" | "READWRITE";
+};
+
+/**
+ * Schema to represent bucket limits.
+ */
+export type BucketSizeLimits = {
+  /**
+   * Size limit of the bucket in KiB
+   */
+  size_limit?: number | null;
+  /**
+   * Number of objects limit of the bucket
+   */
+  object_limit?: number | null;
+};
+
+/**
+ * Enumeration for the type of buckets to fetch from the DB
+ *
+ * OWN: Only fetch buckets that the user owns
+ * PERMISSION: Only fetch foreign buckets that the user has access to
+ * ALL: Fetch all buckets that the user has access to
+ */
+export enum BucketType {
+  OWN = "OWN",
+  ALL = "ALL",
+  PERMISSION = "PERMISSION",
+}
+
+export type DevWorkflowExecutionIn = {
+  /**
+   * Parameters for this workflow
+   */
+  parameters: {
+    [key: string]: unknown;
+  };
+  /**
+   * S3 Path where to save logs and reports. If None, nothing will be uploaded.
+   */
+  logs_s3_path?: string | null;
+  /**
+   * S3 Path where to save provenance information. If None, nothing will be uploaded.
+   */
+  provenance_s3_path?: string | null;
+  /**
+   * S3 Path where to save debug information from Nextflow. If None, nothing will be uploaded.
+   */
+  debug_s3_path?: string | null;
+  /**
+   * Hash of the git commit
+   */
+  git_commit_hash: string;
+  /**
+   * URL to the Git repository belonging to this workflow
+   */
+  repository_url: string;
+  /**
+   * Token to access the content git repository
+   */
+  token?: string | null;
+  /**
+   * Mode of the workflow with an alternative entrypoint
+   */
+  mode?: WorkflowModeIn | null;
+  /**
+   * The version of Nextflow this workflow execution requires
+   */
+  nextflow_version: NextflowVersion;
+};
+
+export enum DocumentationEnum {
+  USAGE_MD = "usage.md",
+  INPUT_MD = "input.md",
+  OUTPUT_MD = "output.md",
+  CHANGELOG_MD = "changelog.md",
+  PARAMETER_SCHEMA_JSON = "parameter_schema.json",
+  CLOWM_INFO_JSON = "clowm_info.json",
+}
+
+/**
+ * Schema for a error due to a rejected request.
+ */
+export type ErrorDetail = {
+  /**
+   * Detail about the occurred error
+   */
+  detail: string;
+};
+
+export type FileTree = {
+  type: "file" | "directory" | "link";
+  name: string;
+  target?: string | null;
+  contents?: Array<FileTree> | null;
+  size: number;
+};
+
+export enum type {
+  FILE = "file",
+  DIRECTORY = "directory",
+  LINK = "link",
+}
+
+export type HTTPValidationError = {
+  detail?: Array<ValidationError>;
+};
+
+export type IconUpdateOut = {
+  /**
+   * URL to the uploaded icon
+   */
+  icon_url: string;
+};
+
+export enum NextflowVersion {
+  _22_10_0 = "22.10.0",
+  _22_10_1 = "22.10.1",
+  _22_10_2 = "22.10.2",
+  _22_10_3 = "22.10.3",
+  _22_10_4 = "22.10.4",
+  _22_10_5 = "22.10.5",
+  _22_10_6 = "22.10.6",
+  _22_10_7 = "22.10.7",
+  _22_10_8 = "22.10.8",
+  _23_04_0 = "23.04.0",
+  _23_04_1 = "23.04.1",
+  _23_04_2 = "23.04.2",
+  _23_04_3 = "23.04.3",
+  _23_04_4 = "23.04.4",
+  _23_04_5 = "23.04.5",
+  _23_10_0 = "23.10.0",
+  _23_10_1 = "23.10.1",
+  _23_10_2 = "23.10.2",
+  _23_10_3 = "23.10.3",
+  _23_10_4 = "23.10.4",
+  _24_04_1 = "24.04.1",
+  _24_04_2 = "24.04.2",
+  _24_04_3 = "24.04.3",
+  _24_04_4 = "24.04.4",
+}
+
+export enum OIDCProvider {
+  LIFESCIENCE = "lifescience",
+}
+
+export type OwnershipTransferRequestIn = {
+  /**
+   * The new owner that get the request
+   */
+  new_owner_uid: string;
+  /**
+   * An optional comment for the transfer request
+   */
+  comment?: string | null;
+};
+
+export type OwnershipTransferRequestOut = {
+  /**
+   * The new owner that get the request
+   */
+  new_owner_uid: string;
+  /**
+   * An optional comment for the transfer request
+   */
+  comment?: string;
+  /**
+   * Time when the ownership transfer was requested as UNIX timestamp
+   */
+  created_at: number;
+  /**
+   * The current uid of the current owner if he exists
+   */
+  current_owner_uid?: string | null;
+  /**
+   * Id of the target that gets its ownership transferred
+   */
+  target_id: string;
+  /**
+   * Name of the target
+   */
+  target_name: string;
+  /**
+   * Description of then target
+   */
+  target_description: string;
+  /**
+   * Target type of the ownership transfer
+   */
+  target_type: OwnershipTypeEnum;
+};
+
+export enum OwnershipTypeEnum {
+  BUCKET = "bucket",
+  WORKFLOW = "workflow",
+  RESOURCE = "resource",
+}
+
+export type ParameterExtension = {
+  /**
+   * The inner dictionary contains the display name as key and the parameter value as value. The outer dictionary has the parameter name as key.
+   */
+  mapping?: {
+    [key: string]: {
+      [key: string]: string | number;
+    };
+  };
+  /**
+   * Dictionary with parameter name as key and default value as value
+   */
+  defaults?: {
+    [key: string]: string | number | boolean;
+  };
+};
+
+/**
+ * Enumeration for the possible permission on a bucket.
+ */
+export enum Permission {
+  READ = "READ",
+  WRITE = "WRITE",
+  READWRITE = "READWRITE",
+}
+
+/**
+ * Status of a bucket permission. Can be either `ACTIVE` or `INACTIVE`. A permission can only get `INACTIVE` if the
+ * permission itself has a time limit and the current time is not in the timespan.
+ */
+export enum PermissionStatus {
+  ACTIVE = "ACTIVE",
+  INACTIVE = "INACTIVE",
+}
+
+export type ResourceIn = {
+  /**
+   * Short tag describing the version of the resource
+   */
+  release: string;
+  /**
+   * Short Name for the resource
+   */
+  name: string;
+  /**
+   * Short description for this resource
+   */
+  description: string;
+  /**
+   * A link or similar where the resource originates from
+   */
+  source: string;
+  /**
+   * Flag if this resource should be default visible in the UI
+   */
+  private?: boolean;
+};
+
+export type ResourceOut = {
+  /**
+   * Short Name for the resource
+   */
+  name: string;
+  /**
+   * Short description for this resource
+   */
+  description: string;
+  /**
+   * A link or similar where the resource originates from
+   */
+  source: string;
+  /**
+   * Flag if this resource should be default visible in the UI
+   */
+  private?: boolean;
+  /**
+   * ID of the resource
+   */
+  resource_id: string;
+  /**
+   * ID of the maintainer
+   */
+  maintainer_id: string | null;
+  /**
+   * Versions of the resource
+   */
+  versions: Array<ResourceVersionOut>;
+};
+
+export type ResourceVersionIn = {
+  /**
+   * Short tag describing the version of the resource
+   */
+  release: string;
+};
+
+export type ResourceVersionOut = {
+  /**
+   * Short tag describing the version of the resource
+   */
+  release: string;
+  /**
+   * Status of the resource version
+   */
+  status: ResourceVersionStatus;
+  /**
+   * ID of the resource version
+   */
+  resource_version_id: string;
+  /**
+   * ID of the resource
+   */
+  resource_id: string;
+  /**
+   * Timestamp when the version was created as UNIX timestamp
+   */
+  created_at: number;
+  /**
+   * Size of the compressed resource in bytes
+   */
+  compressed_size: number;
+  /**
+   * Path to the resource on the cluster if the resource is synchronized
+   */
+  readonly cluster_path: string;
+  /**
+   * Path to the resource in the S3 Bucket. Not publicly available.
+   */
+  readonly s3_path: string;
+};
+
+/**
+ * Enumeration for the possible status of a resource version.
+ */
+export enum ResourceVersionStatus {
+  RESOURCE_REQUESTED = "RESOURCE_REQUESTED",
+  WAIT_FOR_REVIEW = "WAIT_FOR_REVIEW",
+  DENIED = "DENIED",
+  APPROVED = "APPROVED",
+  SYNC_REQUESTED = "SYNC_REQUESTED",
+  SYNCHRONIZING = "SYNCHRONIZING",
+  SYNC_ERROR = "SYNC_ERROR",
+  SYNCHRONIZED = "SYNCHRONIZED",
+  SETTING_LATEST = "SETTING_LATEST",
+  LATEST = "LATEST",
+  CLUSTER_DELETING = "CLUSTER_DELETING",
+  CLUSTER_DELETE_ERROR = "CLUSTER_DELETE_ERROR",
+  S3_DELETING = "S3_DELETING",
+  S3_DELETE_ERROR = "S3_DELETE_ERROR",
+  S3_DELETED = "S3_DELETED",
+}
+
+export enum RoleEnum {
+  ADMINISTRATOR = "administrator",
+  USER = "user",
+  REVIEWER = "reviewer",
+  DEVELOPER = "developer",
+  DB_MAINTAINER = "db_maintainer",
+}
+
+/**
+ * Schema for a S3 key associated with a user.
+ */
+export type S3Key = {
+  /**
+   * UID of the user of that access key
+   */
+  uid: string;
+  /**
+   * ID of the S3 access key
+   */
+  access_key: string;
+  /**
+   * Secret of the S3 access key
+   */
+  secret_key: string;
+};
+
+export enum ScopeEnum {
+  READ = "read",
+  WRITE = "write",
+}
+
+export type UserIn = {
+  /**
+   * Full Name of the user
+   */
+  display_name: string;
+  roles?: Array<RoleEnum>;
+  /**
+   * Email of the user
+   */
+  email: string;
+};
+
+/**
+ * Schema for a user.
+ */
+export type UserOut = {
+  /**
+   * Full Name of the user
+   */
+  display_name: string;
+  /**
+   * ID of the user
+   */
+  uid: string;
+};
+
+export type UserOutExtended = {
+  /**
+   * Roles of the user
+   */
+  roles: Array<RoleEnum>;
+  /**
+   * Full Name of the user
+   */
+  display_name: string;
+  /**
+   * ID of the user
+   */
+  uid: string;
+  /**
+   * Lifesicence ID of the user
+   */
+  lifescience_id?: string | null;
+  /**
+   * Timestamp when the invitation token was created as UNIX timestamp
+   */
+  invitation_token_created_at?: number | null;
+  /**
+   * URL to the gravatar avatar based on the users email
+   */
+  gravatar_url: string;
+};
+
+export type UserRequestAnswer = {
+  /**
+   * Flag to indicate if the request was denied.
+   */
+  deny?: boolean;
+  /**
+   * Reason why the request was denied or approved. Required if request is denied.
+   */
+  reason?: string | null;
+};
+
+export type UserRoles = {
+  /**
+   * Roles of the user
+   */
+  roles: Array<RoleEnum>;
+};
+
+export type UserSynchronizationRequestIn = {
+  /**
+   * Reason why the request was requested.
+   */
+  reason: string;
+};
+
+export type UserSynchronizationRequestOut = {
+  /**
+   * Reason why the request was requested.
+   */
+  reason: string;
+  /**
+   * ID of the resource version
+   */
+  resource_version_id: string;
+  /**
+   * ID of the resource
+   */
+  resource_id: string;
+  /**
+   * ID of the user that requested this resource synchronization
+   */
+  requester_id: string;
+};
+
+export type ValidationError = {
+  loc: Array<string | number>;
+  msg: string;
+  type: string;
+};
+
+export type WorkflowCredentialsIn = {
+  /**
+   * Token to access the content git repository
+   */
+  token: string;
+};
+
+export type WorkflowCredentialsOut = {
+  /**
+   * Token to access the content git repository
+   */
+  token?: string | null;
+};
+
+export type WorkflowExecutionIn = {
+  /**
+   * Parameters for this workflow
+   */
+  parameters: {
+    [key: string]: unknown;
+  };
+  /**
+   * S3 Path where to save logs and reports. If None, nothing will be uploaded.
+   */
+  logs_s3_path?: string | null;
+  /**
+   * S3 Path where to save provenance information. If None, nothing will be uploaded.
+   */
+  provenance_s3_path?: string | null;
+  /**
+   * S3 Path where to save debug information from Nextflow. If None, nothing will be uploaded.
+   */
+  debug_s3_path?: string | null;
+  /**
+   * Workflow version git commit hash
+   */
+  workflow_version_id: string;
+  /**
+   * Optional notes for this workflow execution
+   */
+  notes?: string | null;
+  /**
+   * ID of the workflow mode this workflow execution runs in
+   */
+  mode_id?: string | null;
+};
+
+export type WorkflowExecutionOut = {
+  /**
+   * Workflow version git commit hash
+   */
+  workflow_version_id?: string | null;
+  /**
+   * Optional notes for this workflow execution
+   */
+  notes?: string | null;
+  /**
+   * ID of the workflow mode this workflow execution runs in
+   */
+  mode_id?: string | null;
+  /**
+   * ID of the workflow execution
+   */
+  execution_id: string;
+  /**
+   * UID of user who started the workflow
+   */
+  executor_id?: string | null;
+  /**
+   * Start time of the workflow execution as UNIX timestamp
+   */
+  start_time: number;
+  /**
+   * End time of the workflow execution as UNIX timestamp
+   */
+  end_time?: number | null;
+  /**
+   * Status of the workflow execution
+   */
+  status: WorkflowExecutionStatus;
+  /**
+   * Id of the workflow
+   */
+  workflow_id?: string | null;
+  /**
+   * S3 Path where logs and reports are saved.
+   */
+  logs_s3_path?: string | null;
+  /**
+   * S3 Path where provenance information is saved.
+   */
+  provenance_s3_path?: string | null;
+  /**
+   * S3 Path where debug information from Nextflow is saved.
+   */
+  debug_s3_path?: string | null;
+  /**
+   * The consumed cpu time in ISO 8601 format
+   */
+  cpu_time: string;
+};
+
+/**
+ * Enumeration for the status on a workflow execution.
+ */
+export enum WorkflowExecutionStatus {
+  PENDING = "PENDING",
+  SCHEDULED = "SCHEDULED",
+  RUNNING = "RUNNING",
+  CANCELED = "CANCELED",
+  SUCCESS = "SUCCESS",
+  ERROR = "ERROR",
+}
+
+export type WorkflowIn = {
+  /**
+   * Short descriptive name of the workflow
+   */
+  name: string;
+  /**
+   * Short description of the workflow
+   */
+  short_description: string;
+  /**
+   * URL to the Git repository belonging to this workflow
+   */
+  repository_url: string;
+  /**
+   * Hash of the git commit
+   */
+  git_commit_hash: string;
+  /**
+   * Initial version of the Workflow. Should follow semantic versioning
+   */
+  initial_version?: string;
+  /**
+   * Token to access the content git repository
+   */
+  token?: string | null;
+  /**
+   * List of modes with alternative entrypoint the new workflow has
+   */
+  modes?: Array<WorkflowModeIn>;
+  /**
+   * The version of Nextflow this workflow version requires
+   */
+  nextflow_version: NextflowVersion;
+};
+
+export type WorkflowModeIn = {
+  /**
+   * Path to the alternative parameter schema
+   */
+  schema_path: string;
+  /**
+   * Name of the process the workflow should start with. Argument to the parameter '-entry'
+   */
+  entrypoint: string;
+  /**
+   * Name of the workflow mode
+   */
+  name: string;
+};
+
+export type WorkflowModeOut = {
+  /**
+   * Path to the alternative parameter schema
+   */
+  schema_path: string;
+  /**
+   * Name of the process the workflow should start with. Argument to the parameter '-entry'
+   */
+  entrypoint: string;
+  /**
+   * Name of the workflow mode
+   */
+  name: string;
+  /**
+   * ID of the workflow mode
+   */
+  mode_id: string;
+};
+
+export type WorkflowOut = {
+  /**
+   * Short descriptive name of the workflow
+   */
+  name: string;
+  /**
+   * Short description of the workflow
+   */
+  short_description: string;
+  /**
+   * URL to the Git repository belonging to this workflow
+   */
+  repository_url: string;
+  /**
+   * ID of the workflow
+   */
+  workflow_id: string;
+  /**
+   * Versions of the workflow
+   */
+  versions: Array<WorkflowVersion>;
+  /**
+   * ID of developer of the workflow
+   */
+  developer_id?: string | null;
+  /**
+   * Flag if the workflow is hosted in a private git repository
+   */
+  private?: boolean;
+};
+
+export type WorkflowStatistic = {
+  /**
+   * Day of the datapoint
+   */
+  day: string;
+  /**
+   * Number of started workflows on that day
+   */
+  count: number;
+};
+
+export type WorkflowUpdate = {
+  /**
+   * Version of the Workflow. Should follow semantic versioning
+   */
+  version: string;
+  /**
+   * Hash of the git commit
+   */
+  git_commit_hash: string;
+  /**
+   * Add modes to the new workflow version
+   */
+  append_modes?: Array<WorkflowModeIn>;
+  /**
+   * Delete modes for the new workflow version.
+   */
+  delete_modes?: Array<string>;
+  /**
+   * The version of Nextflow this new workflow version requires.
+   */
+  nextflow_version: NextflowVersion;
+};
+
+export type WorkflowVersion = {
+  /**
+   * Status of the workflow version
+   */
+  status: WorkflowVersionStatus;
+  /**
+   * ID of the corresponding workflow
+   */
+  workflow_id: string;
+  /**
+   * Version of the Workflow. Should follow semantic versioning
+   */
+  version: string;
+  /**
+   * URL to the uploaded icon
+   */
+  icon_url?: string | null;
+  /**
+   * Hash of the git commit
+   */
+  workflow_version_id: string;
+  /**
+   * Timestamp when the version was created as UNIX timestamp
+   */
+  created_at: number;
+  /**
+   * Optional modes his workflow version has
+   */
+  modes?: Array<string>;
+  /**
+   * Parameter extension specific for this CloWM instance
+   */
+  parameter_extension?: ParameterExtension | null;
+  /**
+   * The version of Nextflow this workflow version requires
+   */
+  nextflow_version: NextflowVersion;
+};
+
+/**
+ * Enumeration for the possible status of a workflow version.
+ */
+export enum WorkflowVersionStatus {
+  CREATED = "CREATED",
+  DENIED = "DENIED",
+  PUBLISHED = "PUBLISHED",
+  DEPRECATED = "DEPRECATED",
+}
+
+export type WorkflowVersionStatusSchema = {
+  /**
+   * Status of the workflow version
+   */
+  status: WorkflowVersionStatus;
+};
+
+export type AuthLoginData = {
+  query?: {
+    /**
+     * Unique token to validate an invitation
+     */
+    invitation_token?: string;
+    /**
+     * Will be appended to redirect response in the callback route as URL query parameter `next`
+     */
+    next?: string;
+    /**
+     * The OIDC provider to use for login
+     */
+    provider?: OIDCProvider;
+  };
+};
+
+export type AuthLoginCallbackData = {
+  path: {
+    provider: OIDCProvider;
+  };
+};
+
+export type ApiTokenListTokenData = {
+  query?: {
+    /**
+     * UID of the user to filter for. Permission `api_token:list` required if current users is the target.
+     */
+    uid?: string;
+  };
+};
+
+export type ApiTokenListTokenResponse = Array<ApiTokenOut>;
+
+export type ApiTokenListTokenError = ErrorDetail | HTTPValidationError;
+
+export type ApiTokenCreateTokenData = {
+  body: ApiTokenIn;
+};
+
+export type ApiTokenCreateTokenResponse = ApiTokenPrivateOut;
+
+export type ApiTokenCreateTokenError = ErrorDetail | HTTPValidationError;
+
+export type ApiTokenGetTokenData = {
+  path: {
+    /**
+     * ID of an API token
+     */
+    tid: string;
+  };
+};
+
+export type ApiTokenGetTokenResponse = ApiTokenOut;
+
+export type ApiTokenGetTokenError = ErrorDetail | HTTPValidationError;
+
+export type ApiTokenDeleteTokenData = {
+  path: {
+    /**
+     * ID of an API token
+     */
+    tid: string;
+  };
+};
+
+export type ApiTokenDeleteTokenResponse = void;
+
+export type ApiTokenDeleteTokenError = ErrorDetail | HTTPValidationError;
+
+export type UserCreateUserData = {
+  body: UserIn;
+};
+
+export type UserCreateUserResponse = UserOutExtended;
+
+export type UserCreateUserError = ErrorDetail | HTTPValidationError;
+
+export type UserListUsersData = {
+  query?: {
+    /**
+     * Filter users by their role. If multiple are selected, they are concatenating by an OR Expression.
+     */
+    filter_roles?: Array<RoleEnum>;
+    /**
+     * Filter users by a substring in their name.
+     */
+    name_substring?: string;
+  };
+};
+
+export type UserListUsersResponse = Array<UserOutExtended>;
+
+export type UserListUsersError = ErrorDetail | HTTPValidationError;
+
+export type UserSearchUsersData = {
+  query: {
+    /**
+     * Filter users by a substring in their name.
+     */
+    name_substring: string;
+  };
+};
+
+export type UserSearchUsersResponse = Array<UserOut>;
+
+export type UserSearchUsersError = ErrorDetail | HTTPValidationError;
+
+export type UserGetLoggedInUserResponse = UserOutExtended;
+
+export type UserGetLoggedInUserError = ErrorDetail;
+
+export type UserGetUserData = {
+  path: {
+    /**
+     * UID of a user
+     */
+    uid: string;
+  };
+};
+
+export type UserGetUserResponse = UserOut;
+
+export type UserGetUserError = ErrorDetail | HTTPValidationError;
+
+export type UserUpdateRolesData = {
+  body: UserRoles;
+  path: {
+    /**
+     * UID of a user
+     */
+    uid: string;
+  };
+};
+
+export type UserUpdateRolesResponse = UserOutExtended;
+
+export type UserUpdateRolesError = ErrorDetail | HTTPValidationError;
+
+export type UserResendInvitationData = {
+  path: {
+    /**
+     * UID of a user
+     */
+    uid: string;
+  };
+};
+
+export type UserResendInvitationResponse = UserOutExtended;
+
+export type UserResendInvitationError = ErrorDetail | HTTPValidationError;
+
+export type S3KeyGetUserKeysData = {
+  path: {
+    /**
+     * UID of a user
+     */
+    uid: string;
+  };
+};
+
+export type S3KeyGetUserKeysResponse = Array<S3Key>;
+
+export type S3KeyGetUserKeysError = ErrorDetail | HTTPValidationError;
+
+export type S3KeyCreateUserKeyData = {
+  path: {
+    /**
+     * UID of a user
+     */
+    uid: string;
+  };
+};
+
+export type S3KeyCreateUserKeyResponse = S3Key;
+
+export type S3KeyCreateUserKeyError = ErrorDetail | HTTPValidationError;
+
+export type S3KeyGetUserKeyData = {
+  path: {
+    /**
+     * ID of the S3 access key
+     */
+    access_id: string;
+    /**
+     * UID of a user
+     */
+    uid: string;
+  };
+};
+
+export type S3KeyGetUserKeyResponse = S3Key;
+
+export type S3KeyGetUserKeyError = ErrorDetail | HTTPValidationError;
+
+export type S3KeyDeleteUserKeyData = {
+  path: {
+    /**
+     * ID of the S3 access key
+     */
+    access_id: string;
+    /**
+     * UID of a user
+     */
+    uid: string;
+  };
+};
+
+export type S3KeyDeleteUserKeyResponse = void;
+
+export type S3KeyDeleteUserKeyError = ErrorDetail | HTTPValidationError;
+
+export type BucketListBucketsData = {
+  query?: {
+    /**
+     * Type of the bucket to get. Ignored when `user` parameter not set
+     */
+    bucket_type?: BucketType;
+    /**
+     * UID of the user for whom to fetch the buckets for. Permission `bucket:read_any` required if current user is not the target.
+     */
+    owner_id?: string;
+  };
+};
+
+export type BucketListBucketsResponse = Array<BucketOut>;
+
+export type BucketListBucketsError = ErrorDetail | HTTPValidationError;
+
+export type BucketCreateBucketData = {
+  body: BucketIn;
+};
+
+export type BucketCreateBucketResponse = BucketOut;
+
+export type BucketCreateBucketError = ErrorDetail | HTTPValidationError;
+
+export type BucketListBucketOtrsData = {
+  query?: {
+    /**
+     * UID of user who is the current owner.
+     */
+    current_owner_id?: string;
+    /**
+     * UID of user who will be the new owner.
+     */
+    new_owner_id?: string;
+  };
+};
+
+export type BucketListBucketOtrsResponse = Array<OwnershipTransferRequestOut>;
+
+export type BucketListBucketOtrsError = ErrorDetail | HTTPValidationError;
+
+export type BucketGetBucketData = {
+  path: {
+    /**
+     * Name of bucket
+     */
+    bucket_name: string;
+  };
+};
+
+export type BucketGetBucketResponse = BucketOut;
+
+export type BucketGetBucketError = ErrorDetail | HTTPValidationError;
+
+export type BucketDeleteBucketData = {
+  path: {
+    /**
+     * Name of bucket
+     */
+    bucket_name: string;
+  };
+  query?: {
+    /**
+     * Delete even non-empty bucket
+     */
+    force_delete?: boolean;
+  };
+};
+
+export type BucketDeleteBucketResponse = void;
+
+export type BucketDeleteBucketError = ErrorDetail | HTTPValidationError;
+
+export type BucketGetBucketOtrData = {
+  path: {
+    /**
+     * Name of bucket
+     */
+    bucket_name: string;
+  };
+};
+
+export type BucketGetBucketOtrResponse = OwnershipTransferRequestOut;
+
+export type BucketGetBucketOtrError = ErrorDetail | HTTPValidationError;
+
+export type BucketCreateBucketOtrData = {
+  body: OwnershipTransferRequestIn;
+  path: {
+    /**
+     * Name of bucket
+     */
+    bucket_name: string;
+  };
+};
+
+export type BucketCreateBucketOtrResponse = OwnershipTransferRequestOut;
+
+export type BucketCreateBucketOtrError = ErrorDetail | HTTPValidationError;
+
+export type BucketAcceptBucketOtrData = {
+  path: {
+    /**
+     * Name of bucket
+     */
+    bucket_name: string;
+  };
+};
+
+export type BucketAcceptBucketOtrResponse = BucketOut;
+
+export type BucketAcceptBucketOtrError = ErrorDetail | HTTPValidationError;
+
+export type BucketDeleteBucketOtrData = {
+  path: {
+    /**
+     * Name of bucket
+     */
+    bucket_name: string;
+  };
+};
+
+export type BucketDeleteBucketOtrResponse = void;
+
+export type BucketDeleteBucketOtrError = ErrorDetail | HTTPValidationError;
+
+export type BucketUpdateBucketPublicStateData = {
+  body: Body_Bucket_update_bucket_public_state;
+  path: {
+    /**
+     * Name of bucket
+     */
+    bucket_name: string;
+  };
+};
+
+export type BucketUpdateBucketPublicStateResponse = BucketOut;
+
+export type BucketUpdateBucketPublicStateError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type BucketUpdateBucketLimitsData = {
+  body: BucketSizeLimits;
+  path: {
+    /**
+     * Name of bucket
+     */
+    bucket_name: string;
+  };
+};
+
+export type BucketUpdateBucketLimitsResponse = BucketOut;
+
+export type BucketUpdateBucketLimitsError = ErrorDetail | HTTPValidationError;
+
+export type BucketPermissionListPermissionsData = {
+  query?: {
+    /**
+     * Status of Bucket Permissions to fetch
+     */
+    permission_status?: PermissionStatus;
+    /**
+     * Type of Bucket Permissions to fetch
+     */
+    permission_types?: Array<Permission>;
+  };
+};
+
+export type BucketPermissionListPermissionsResponse =
+  Array<BucketPermissionOut>;
+
+export type BucketPermissionListPermissionsError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type BucketPermissionCreatePermissionData = {
+  body: BucketPermissionIn;
+};
+
+export type BucketPermissionCreatePermissionResponse = BucketPermissionOut;
+
+export type BucketPermissionCreatePermissionError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type BucketPermissionListPermissionsPerUserData = {
+  path: {
+    /**
+     * UID of a user
+     */
+    uid: string;
+  };
+  query?: {
+    /**
+     * Status of Bucket Permissions to fetch
+     */
+    permission_status?: PermissionStatus;
+    /**
+     * Type of Bucket Permissions to fetch
+     */
+    permission_types?: Array<Permission>;
+  };
+};
+
+export type BucketPermissionListPermissionsPerUserResponse =
+  Array<BucketPermissionOut>;
+
+export type BucketPermissionListPermissionsPerUserError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type BucketPermissionListPermissionsPerBucketData = {
+  path: {
+    /**
+     * Name of bucket
+     */
+    bucket_name: string;
+  };
+  query?: {
+    /**
+     * Status of Bucket Permissions to fetch
+     */
+    permission_status?: PermissionStatus;
+    /**
+     * Type of Bucket Permissions to fetch
+     */
+    permission_types?: Array<Permission>;
+  };
+};
+
+export type BucketPermissionListPermissionsPerBucketResponse =
+  Array<BucketPermissionOut>;
+
+export type BucketPermissionListPermissionsPerBucketError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type BucketPermissionGetPermissionForBucketData = {
+  path: {
+    /**
+     * Name of bucket
+     */
+    bucket_name: string;
+    /**
+     * UID of a user
+     */
+    uid: string;
+  };
+};
+
+export type BucketPermissionGetPermissionForBucketResponse =
+  BucketPermissionOut;
+
+export type BucketPermissionGetPermissionForBucketError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type BucketPermissionUpdatePermissionData = {
+  body: BucketPermissionParameters;
+  path: {
+    /**
+     * Name of bucket
+     */
+    bucket_name: string;
+    /**
+     * UID of a user
+     */
+    uid: string;
+  };
+};
+
+export type BucketPermissionUpdatePermissionResponse = BucketPermissionOut;
+
+export type BucketPermissionUpdatePermissionError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type BucketPermissionDeletePermissionData = {
+  path: {
+    /**
+     * Name of bucket
+     */
+    bucket_name: string;
+    /**
+     * UID of a user
+     */
+    uid: string;
+  };
+};
+
+export type BucketPermissionDeletePermissionResponse = void;
+
+export type BucketPermissionDeletePermissionError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowCreateWorkflowData = {
+  body: WorkflowIn;
+};
+
+export type WorkflowCreateWorkflowResponse = WorkflowOut;
+
+export type WorkflowCreateWorkflowError = ErrorDetail | HTTPValidationError;
+
+export type WorkflowListWorkflowsData = {
+  query?: {
+    /**
+     * Filter for workflow by developer. If current user is the developer, permission `workflow:list` required, otherwise `workflow:list_filter`.
+     */
+    developer_id?: string;
+    /**
+     * Filter workflows by a substring in their name.
+     */
+    name_substring?: string;
+    /**
+     * Which versions of the workflow to include in the response. Permission `workflow:list_filter` required, unless `developer_id` is provided and current user is developer, then only permission `workflow:list` required. Default `PUBLISHED` and `DEPRECATED`.
+     */
+    version_status?: Array<WorkflowVersionStatus>;
+  };
+};
+
+export type WorkflowListWorkflowsResponse = Array<WorkflowOut>;
+
+export type WorkflowListWorkflowsError = ErrorDetail | HTTPValidationError;
+
+export type WorkflowListWorkflowOtrsData = {
+  query?: {
+    /**
+     * UID of user who is the current owner.
+     */
+    current_owner_id?: string;
+    /**
+     * UID of user who will be the new owner.
+     */
+    new_owner_id?: string;
+  };
+};
+
+export type WorkflowListWorkflowOtrsResponse =
+  Array<OwnershipTransferRequestOut>;
+
+export type WorkflowListWorkflowOtrsError = ErrorDetail | HTTPValidationError;
+
+export type WorkflowGetDeveloperWorkflowStatisticsData = {
+  query?: {
+    /**
+     * Filter by the developer of the workflows
+     */
+    developer_id?: string;
+    /**
+     * Filter by workflow executions before this date
+     */
+    end?: string;
+    /**
+     * Filter by workflow executions after this date
+     */
+    start?: string;
+    /**
+     * Filter by workflow IDs
+     */
+    workflow_id?: Array<string>;
+  };
+};
+
+export type WorkflowGetDeveloperWorkflowStatisticsResponse =
+  Array<AnonymizedWorkflowExecution>;
+
+export type WorkflowGetDeveloperWorkflowStatisticsError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowGetWorkflowData = {
+  path: {
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+  query?: {
+    /**
+     * Which versions of the workflow to include in the response. Permission `workflow:read_any` required if you are not the developer of this workflow. Default `PUBLISHED` and `DEPRECATED`
+     */
+    version_status?: Array<WorkflowVersionStatus>;
+  };
+};
+
+export type WorkflowGetWorkflowResponse = WorkflowOut;
+
+export type WorkflowGetWorkflowError = ErrorDetail | HTTPValidationError;
+
+export type WorkflowDeleteWorkflowData = {
+  path: {
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowDeleteWorkflowResponse = void;
+
+export type WorkflowDeleteWorkflowError = ErrorDetail | HTTPValidationError;
+
+export type WorkflowGetWorkflowOtrData = {
+  path: {
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowGetWorkflowOtrResponse = OwnershipTransferRequestOut;
+
+export type WorkflowGetWorkflowOtrError = ErrorDetail | HTTPValidationError;
+
+export type WorkflowCreateWorkflowOtrData = {
+  body: OwnershipTransferRequestIn;
+  path: {
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowCreateWorkflowOtrResponse = OwnershipTransferRequestOut;
+
+export type WorkflowCreateWorkflowOtrError = ErrorDetail | HTTPValidationError;
+
+export type WorkflowAcceptWorkflowOtrData = {
+  path: {
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowAcceptWorkflowOtrResponse = WorkflowOut;
+
+export type WorkflowAcceptWorkflowOtrError = ErrorDetail | HTTPValidationError;
+
+export type WorkflowDeleteWorkflowOtrData = {
+  path: {
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowDeleteWorkflowOtrResponse = void;
+
+export type WorkflowDeleteWorkflowOtrError = ErrorDetail | HTTPValidationError;
+
+export type WorkflowGetWorkflowStatisticsData = {
+  path: {
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowGetWorkflowStatisticsResponse = Array<WorkflowStatistic>;
+
+export type WorkflowGetWorkflowStatisticsError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowUpdateWorkflowData = {
+  body: WorkflowUpdate;
+  path: {
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowUpdateWorkflowResponse = WorkflowVersion;
+
+export type WorkflowUpdateWorkflowError = ErrorDetail | HTTPValidationError;
+
+export type WorkflowVersionListWorkflowVersionData = {
+  path: {
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+  query?: {
+    /**
+     * Which versions of the workflow to include in the response. Permission `workflow:list_filter` required if you are not the developer of this workflow. Default `PUBLISHED` and `DEPRECATED`
+     */
+    version_status?: Array<WorkflowVersionStatus>;
+  };
+};
+
+export type WorkflowVersionListWorkflowVersionResponse = Array<WorkflowVersion>;
+
+export type WorkflowVersionListWorkflowVersionError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowVersionGetWorkflowVersionData = {
+  path: {
+    /**
+     * Git commit `git_commit_hash` of specific version or `latest`.
+     */
+    git_commit_hash: string;
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowVersionGetWorkflowVersionResponse = WorkflowVersion;
+
+export type WorkflowVersionGetWorkflowVersionError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowVersionUpdateWorkflowVersionStatusData = {
+  body: WorkflowVersionStatusSchema;
+  path: {
+    /**
+     * Git commit git_commit_hash of specific version.
+     */
+    git_commit_hash: string;
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowVersionUpdateWorkflowVersionStatusResponse =
+  WorkflowVersion;
+
+export type WorkflowVersionUpdateWorkflowVersionStatusError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowVersionDeprecateWorkflowVersionData = {
+  path: {
+    /**
+     * Git commit git_commit_hash of specific version.
+     */
+    git_commit_hash: string;
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowVersionDeprecateWorkflowVersionResponse = WorkflowVersion;
+
+export type WorkflowVersionDeprecateWorkflowVersionError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowVersionUpdateWorkflowVersionParameterExtensionData = {
+  body: ParameterExtension;
+  path: {
+    /**
+     * Git commit git_commit_hash of specific version.
+     */
+    git_commit_hash: string;
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowVersionUpdateWorkflowVersionParameterExtensionResponse =
+  WorkflowVersion;
+
+export type WorkflowVersionUpdateWorkflowVersionParameterExtensionError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowVersionDeleteWorkflowVersionParameterExtensionData = {
+  path: {
+    /**
+     * Git commit git_commit_hash of specific version.
+     */
+    git_commit_hash: string;
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowVersionDeleteWorkflowVersionParameterExtensionResponse =
+  void;
+
+export type WorkflowVersionDeleteWorkflowVersionParameterExtensionError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowVersionDownloadWorkflowDocumentationData = {
+  path: {
+    /**
+     * Git commit git_commit_hash of specific version.
+     */
+    git_commit_hash: string;
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+  query?: {
+    /**
+     * Specify which type of documentation the client wants to fetch
+     */
+    document?: DocumentationEnum;
+    /**
+     * Workflow Mode
+     */
+    mode_id?: string;
+  };
+};
+
+export type WorkflowVersionDownloadWorkflowDocumentationResponse = unknown;
+
+export type WorkflowVersionDownloadWorkflowDocumentationError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowVersionUploadWorkflowVersionIconData = {
+  body: Body_Workflow_Version_upload_workflow_version_icon;
+  path: {
+    /**
+     * Git commit git_commit_hash of specific version.
+     */
+    git_commit_hash: string;
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowVersionUploadWorkflowVersionIconResponse = IconUpdateOut;
+
+export type WorkflowVersionUploadWorkflowVersionIconError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowVersionDeleteWorkflowVersionIconData = {
+  path: {
+    /**
+     * Git commit git_commit_hash of specific version.
+     */
+    git_commit_hash: string;
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowVersionDeleteWorkflowVersionIconResponse = void;
+
+export type WorkflowVersionDeleteWorkflowVersionIconError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowExecutionStartWorkflowData = {
+  body: WorkflowExecutionIn;
+};
+
+export type WorkflowExecutionStartWorkflowResponse = WorkflowExecutionOut;
+
+export type WorkflowExecutionStartWorkflowError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowExecutionListWorkflowExecutionsData = {
+  query?: {
+    /**
+     * Filter for status of workflow execution
+     */
+    execution_status?: Array<WorkflowExecutionStatus>;
+    /**
+     * Filter for workflow executions by a user. If none, Permission `workflow_execution:read_any` required.
+     */
+    executor_id?: string;
+    /**
+     * Id of the item to start the query from. DO NOT SET MANUALLY.
+     */
+    id_after?: string;
+    /**
+     * Number of items to list per page
+     */
+    per_page?: number;
+    /**
+     * Sort order of items with creation time
+     */
+    sort?: "asc" | "desc";
+    /**
+     * Filter for workflow executions that started after this UNIX timestamp
+     */
+    start_after?: number;
+    /**
+     * Filter for workflow executions that started before this UNIX timestamp
+     */
+    start_before?: number;
+    /**
+     * Filter for workflow
+     */
+    workflow_id?: string;
+    /**
+     * Filter for workflow version
+     */
+    workflow_version_id?: string;
+  };
+};
+
+export type WorkflowExecutionListWorkflowExecutionsResponse =
+  Array<WorkflowExecutionOut>;
+
+export type WorkflowExecutionListWorkflowExecutionsError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowExecutionStartArbitraryWorkflowData = {
+  body: DevWorkflowExecutionIn;
+};
+
+export type WorkflowExecutionStartArbitraryWorkflowResponse =
+  WorkflowExecutionOut;
+
+export type WorkflowExecutionStartArbitraryWorkflowError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowExecutionGetWorkflowExecutionData = {
+  path: {
+    /**
+     * ID of a workflow execution.
+     */
+    eid: string;
+  };
+};
+
+export type WorkflowExecutionGetWorkflowExecutionResponse =
+  WorkflowExecutionOut;
+
+export type WorkflowExecutionGetWorkflowExecutionError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowExecutionDeleteWorkflowExecutionData = {
+  path: {
+    /**
+     * ID of a workflow execution.
+     */
+    eid: string;
+  };
+};
+
+export type WorkflowExecutionDeleteWorkflowExecutionResponse = void;
+
+export type WorkflowExecutionDeleteWorkflowExecutionError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowExecutionGetWorkflowExecutionParamsData = {
+  path: {
+    /**
+     * ID of a workflow execution.
+     */
+    eid: string;
+  };
+};
+
+export type WorkflowExecutionGetWorkflowExecutionParamsResponse = {
+  [key: string]: unknown;
+};
+
+export type WorkflowExecutionGetWorkflowExecutionParamsError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowExecutionCancelWorkflowExecutionData = {
+  path: {
+    /**
+     * ID of a workflow execution.
+     */
+    eid: string;
+  };
+};
+
+export type WorkflowExecutionCancelWorkflowExecutionResponse = void;
+
+export type WorkflowExecutionCancelWorkflowExecutionError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowCredentialsGetWorkflowCredentialsData = {
+  path: {
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowCredentialsGetWorkflowCredentialsResponse =
+  WorkflowCredentialsOut;
+
+export type WorkflowCredentialsGetWorkflowCredentialsError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowCredentialsUpdateWorkflowCredentialsData = {
+  body: WorkflowCredentialsIn;
+  path: {
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowCredentialsUpdateWorkflowCredentialsResponse = unknown;
+
+export type WorkflowCredentialsUpdateWorkflowCredentialsError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowCredentialsDeleteWorkflowCredentialsData = {
+  path: {
+    /**
+     * ID of a workflow
+     */
+    wid: string;
+  };
+};
+
+export type WorkflowCredentialsDeleteWorkflowCredentialsResponse = void;
+
+export type WorkflowCredentialsDeleteWorkflowCredentialsError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type WorkflowModeGetWorkflowModeData = {
+  path: {
+    /**
+     * ID of a workflow mode
+     */
+    mode_id: string;
+  };
+};
+
+export type WorkflowModeGetWorkflowModeResponse = WorkflowModeOut;
+
+export type WorkflowModeGetWorkflowModeError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type ResourceCreateResourceData = {
+  body: ResourceIn;
+};
+
+export type ResourceCreateResourceResponse = ResourceOut;
+
+export type ResourceCreateResourceError = ErrorDetail | HTTPValidationError;
+
+export type ResourceListResourcesData = {
+  query?: {
+    /**
+     * Filter for resource by maintainer. If current user is the same as maintainer ID, permission `resource:list` required, otherwise `resource:list_filter`.
+     */
+    maintainer_id?: string;
+    /**
+     * Filter resources by a substring in their name.
+     */
+    name_substring?: string;
+    /**
+     * Filter resources to by the public flag
+     */
+    public?: boolean;
+    /**
+     * Which versions of the resource to include in the response. Permission `resource:list_filter` required if None or querying for non-public resources, otherwise only permission `resource:list` required.
+     */
+    version_status?: Array<ResourceVersionStatus>;
+  };
+};
+
+export type ResourceListResourcesResponse = Array<ResourceOut>;
+
+export type ResourceListResourcesError = ErrorDetail | HTTPValidationError;
+
+export type ResourceListSyncRequestsResponse =
+  Array<UserSynchronizationRequestOut>;
+
+export type ResourceListSyncRequestsError = ErrorDetail;
+
+export type ResourceListResourceOtrsData = {
+  query?: {
+    /**
+     * UID of user who is the current owner.
+     */
+    current_owner_id?: string;
+    /**
+     * UID of user who will be the new owner.
+     */
+    new_owner_id?: string;
+  };
+};
+
+export type ResourceListResourceOtrsResponse =
+  Array<OwnershipTransferRequestOut>;
+
+export type ResourceListResourceOtrsError = ErrorDetail | HTTPValidationError;
+
+export type ResourceGetResourceData = {
+  path: {
+    rid: string;
+  };
+  query?: {
+    /**
+     * Which versions of the resource to include in the response. Permission `resource:read_any` required if None or querying for non-public resources, otherwise only permission `resource:read` required.
+     */
+    version_status?: Array<ResourceVersionStatus>;
+  };
+};
+
+export type ResourceGetResourceResponse = ResourceOut;
+
+export type ResourceGetResourceError = ErrorDetail | HTTPValidationError;
+
+export type ResourceDeleteResourceData = {
+  path: {
+    rid: string;
+  };
+};
+
+export type ResourceDeleteResourceResponse = void;
+
+export type ResourceDeleteResourceError = ErrorDetail | HTTPValidationError;
+
+export type ResourceGetResourceOtrData = {
+  path: {
+    rid: string;
+  };
+};
+
+export type ResourceGetResourceOtrResponse = OwnershipTransferRequestOut;
+
+export type ResourceGetResourceOtrError = ErrorDetail | HTTPValidationError;
+
+export type ResourceCreateResourceOtrData = {
+  body: OwnershipTransferRequestIn;
+  path: {
+    rid: string;
+  };
+};
+
+export type ResourceCreateResourceOtrResponse = OwnershipTransferRequestOut;
+
+export type ResourceCreateResourceOtrError = ErrorDetail | HTTPValidationError;
+
+export type ResourceAcceptResourceOtrData = {
+  path: {
+    rid: string;
+  };
+};
+
+export type ResourceAcceptResourceOtrResponse = ResourceOut;
+
+export type ResourceAcceptResourceOtrError = ErrorDetail | HTTPValidationError;
+
+export type ResourceDeleteResourceOtrData = {
+  path: {
+    rid: string;
+  };
+};
+
+export type ResourceDeleteResourceOtrResponse = void;
+
+export type ResourceDeleteResourceOtrError = ErrorDetail | HTTPValidationError;
+
+export type ResourceVersionListResourceVersionsData = {
+  path: {
+    rid: string;
+  };
+  query?: {
+    /**
+     * Which versions of the resource to include in the response. Permission `resource:read_any` required if None or querying for non-public resources, otherwise only permission `resource:read` required.
+     */
+    version_status?: Array<ResourceVersionStatus>;
+  };
+};
+
+export type ResourceVersionListResourceVersionsResponse =
+  Array<ResourceVersionOut>;
+
+export type ResourceVersionListResourceVersionsError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type ResourceVersionRequestResourceVersionData = {
+  body: ResourceVersionIn;
+  path: {
+    rid: string;
+  };
+};
+
+export type ResourceVersionRequestResourceVersionResponse = ResourceVersionOut;
+
+export type ResourceVersionRequestResourceVersionError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type ResourceVersionGetResourceVersionData = {
+  path: {
+    rid: string;
+    rvid: string;
+  };
+};
+
+export type ResourceVersionGetResourceVersionResponse = ResourceVersionOut;
+
+export type ResourceVersionGetResourceVersionError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type ResourceVersionResourceFileTreeData = {
+  path: {
+    rid: string;
+    rvid: string;
+  };
+};
+
+export type ResourceVersionResourceFileTreeResponse = Array<FileTree>;
+
+export type ResourceVersionResourceFileTreeError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type ResourceVersionRequestResourceVersionReviewData = {
+  path: {
+    rid: string;
+    rvid: string;
+  };
+};
+
+export type ResourceVersionRequestResourceVersionReviewResponse =
+  ResourceVersionOut;
+
+export type ResourceVersionRequestResourceVersionReviewError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type ResourceVersionRequestResourceVersionSyncData = {
+  body: UserSynchronizationRequestIn;
+  path: {
+    rid: string;
+    rvid: string;
+  };
+};
+
+export type ResourceVersionRequestResourceVersionSyncResponse =
+  ResourceVersionOut;
+
+export type ResourceVersionRequestResourceVersionSyncError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type ResourceVersionResourceVersionReviewData = {
+  body: UserRequestAnswer;
+  path: {
+    rid: string;
+    rvid: string;
+  };
+};
+
+export type ResourceVersionResourceVersionReviewResponse = ResourceVersionOut;
+
+export type ResourceVersionResourceVersionReviewError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type ResourceVersionResourceVersionSyncData = {
+  body: UserRequestAnswer;
+  path: {
+    rid: string;
+    rvid: string;
+  };
+};
+
+export type ResourceVersionResourceVersionSyncResponse = ResourceVersionOut;
+
+export type ResourceVersionResourceVersionSyncError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type ResourceVersionResourceVersionLatestData = {
+  path: {
+    rid: string;
+    rvid: string;
+  };
+};
+
+export type ResourceVersionResourceVersionLatestResponse = ResourceVersionOut;
+
+export type ResourceVersionResourceVersionLatestError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type ResourceVersionDeleteResourceVersionClusterData = {
+  path: {
+    rid: string;
+    rvid: string;
+  };
+};
+
+export type ResourceVersionDeleteResourceVersionClusterResponse =
+  ResourceVersionOut;
+
+export type ResourceVersionDeleteResourceVersionClusterError =
+  | ErrorDetail
+  | HTTPValidationError;
+
+export type ResourceVersionDeleteResourceVersionS3Data = {
+  path: {
+    rid: string;
+    rvid: string;
+  };
+};
+
+export type ResourceVersionDeleteResourceVersionS3Response = ResourceVersionOut;
+
+export type ResourceVersionDeleteResourceVersionS3Error =
+  | ErrorDetail
+  | HTTPValidationError;
diff --git a/src/components/AppFooter.vue b/src/components/AppFooter.vue
index 9e72ff98eec42a174b7fd62398eaeaf9fdeb7a09..a1ad09b1c6ceb816c4b13cca4f646295f980a28e 100644
--- a/src/components/AppFooter.vue
+++ b/src/components/AppFooter.vue
@@ -7,13 +7,13 @@
     <nav class="container-xxl bd-gutter text-light justify-content-end">
       <ul class="m-0 p-0">
         <li>
-          <router-link :to="{ name: 'imprint' }">Imprint</router-link>
+          <router-link :to="{ name: 'imprint' }"> Imprint </router-link>
         </li>
         <li>
-          <router-link :to="{ name: 'privacy' }">Privacy</router-link>
+          <router-link :to="{ name: 'privacy' }"> Privacy </router-link>
         </li>
         <li>
-          <router-link :to="{ name: 'terms' }">Terms</router-link>
+          <router-link :to="{ name: 'terms' }"> Terms </router-link>
         </li>
         <li>
           <a href="https://gitlab.ub.uni-bielefeld.de/cmg/clowm">GitLab</a>
diff --git a/src/components/AppHeader.vue b/src/components/AppHeader.vue
index 9e01c484e642dae1585ffffb088914d29e70ce30..23da1d1cedeced3160cd53374444bb5e551a18bc 100644
--- a/src/components/AppHeader.vue
+++ b/src/components/AppHeader.vue
@@ -2,9 +2,9 @@
 import { useUserStore } from "@/stores/users";
 import { useRoute, useRouter } from "vue-router";
 import { watch, ref, computed } from "vue";
-import { OpenAPI } from "@/client";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import { useSettingsStore } from "@/stores/settings";
+import { environment } from "@/environment";
 
 const userRepository = useUserStore();
 const settingsStore = useSettingsStore();
@@ -67,12 +67,12 @@ watch(
         CloWM
       </router-link>
 
-      <div class="d-flex flex-grow-1" v-if="userRepository.authenticated">
+      <div v-if="userRepository.authenticated" class="d-flex flex-grow-1">
         <ul class="navbar-nav">
           <li class="nav-item dropdown">
             <a
-              class="nav-link dropdown-toggle"
               id=""
+              class="nav-link dropdown-toggle"
               :class="{ 'text-light': objectStorageActive }"
               href="#"
               role="button"
@@ -107,9 +107,9 @@ watch(
           </li>
           <li class="nav-item dropdown">
             <a
+              id="workflowDropdown"
               class="nav-link dropdown-toggle"
               :class="{ 'text-light': workflowActive }"
-              id="workflowDropdown"
               href="#"
               role="button"
               data-bs-toggle="dropdown"
@@ -161,9 +161,9 @@ watch(
           </li>
           <li class="nav-item dropdown">
             <a
+              id="resourceDropdown"
               class="nav-link dropdown-toggle"
               :class="{ 'text-light': resourceActive }"
-              id="resourceDropdown"
               href="#"
               role="button"
               data-bs-toggle="dropdown"
@@ -210,9 +210,9 @@ watch(
           </li>
           <li v-if="userRepository.admin">
             <a
+              id="adminDropdown"
               class="nav-link dropdown-toggle"
               :class="{ 'text-light': adminActive }"
-              id="adminDropdown"
               href="#"
               role="button"
               data-bs-toggle="dropdown"
@@ -316,9 +316,9 @@ watch(
 
         <div class="dropdown">
           <a
+            id="dropdownUser1"
             href="#"
             class="d-flex align-items-center text-white text-decoration-none dropdown-toggle-split"
-            id="dropdownUser1"
             data-bs-toggle="dropdown"
             aria-expanded="false"
           >
@@ -357,8 +357,8 @@ watch(
             <li>
               <a
                 class="dropdown-item"
+                :href="environment.API_BASE_URL + '/auth/logout'"
                 @click="logout"
-                :href="OpenAPI.BASE + '/auth/logout'"
                 >Sign out</a
               >
             </li>
diff --git a/src/components/BootstrapToast.vue b/src/components/BootstrapToast.vue
index 224526455fa5cec134793e8d0be4736193b58e1b..6e1b760d7b876f5a27c12374bf507d7d45ab63c2 100644
--- a/src/components/BootstrapToast.vue
+++ b/src/components/BootstrapToast.vue
@@ -27,13 +27,13 @@ const colorClassName = computed<string>(() => {
 <template>
   <Teleport to="#global-toast-container">
     <div
+      :id="props.toastId"
       role="alert"
       aria-live="assertive"
       aria-atomic="true"
       class="toast align-items-center border-0"
       :class="colorClassName"
       data-bs-autohide="true"
-      :id="props.toastId"
       v-on="{
         'hidden.bs.toast': emit('hidden.bs.toast'),
         'hide.bs.toast': emit('hide.bs.toast'),
@@ -53,7 +53,7 @@ const colorClassName = computed<string>(() => {
             aria-label="Close"
           ></button>
         </div>
-        <div class="mt-2 pt-2 border-top" v-if="slots.body">
+        <div v-if="slots.body" class="mt-2 pt-2 border-top">
           <slot name="body"></slot>
         </div>
       </div>
diff --git a/src/components/CopyToClipboardIcon.vue b/src/components/CopyToClipboardIcon.vue
index 6b9f65d11483ec2742d1a5fc5ca8da3619c30567..1558815a91866976a1e9cb22078e5208b733349d 100644
--- a/src/components/CopyToClipboardIcon.vue
+++ b/src/components/CopyToClipboardIcon.vue
@@ -47,18 +47,18 @@ onMounted(() => {
   </bootstrap-toast>
   <button
     v-if="props.button"
-    @click="copyToClipboard"
     class="btn btn-primary btn-sm"
+    @click="copyToClipboard"
   >
     Copy to Clipboard
     <font-awesome-icon icon="fa-solid fa-clipboard" class="ms-1" />
   </button>
   <span
     v-else
+    :id="'tooltip-' + randomIDSuffix"
     class="hover-info cursor-pointer"
     data-bs-toggle="tooltip"
     data-bs-title="Copy to Clipboard"
-    :id="'tooltip-' + randomIDSuffix"
   >
     <font-awesome-icon icon="fa-solid fa-clipboard" @click="copyToClipboard" />
   </span>
diff --git a/src/components/DraggableLists.vue b/src/components/DraggableLists.vue
index 6f44ea1188f698d110568cc0a4cf7aaf65494d59..6878bcacd9087fd07475a9487e2318047ed6a7f0 100644
--- a/src/components/DraggableLists.vue
+++ b/src/components/DraggableLists.vue
@@ -51,14 +51,14 @@ onMounted(() => {
       <h5><slot name="leftHeader" /></h5>
       <ul
         id="items"
-        class="list-group flex-fill border border-dashed p-1 overflow-y-auto"
         ref="leftListElement"
+        class="list-group flex-fill border border-dashed p-1 overflow-y-auto"
         style="max-height: 40vh"
       >
         <li
           v-for="(left, index) in leftList"
-          class="list-group-item"
           :key="left"
+          class="list-group-item"
           @click="
             rightList.push(left);
             leftList.splice(index, 1);
@@ -72,14 +72,14 @@ onMounted(() => {
       <h5><slot name="rightHeader" /></h5>
       <ul
         id="items"
-        class="list-group flex-fill border border-dashed p-1 overflow-y-auto"
         ref="rightListElement"
+        class="list-group flex-fill border border-dashed p-1 overflow-y-auto"
         style="max-height: 40vh"
       >
         <li
           v-for="(right, index) in rightList"
-          class="list-group-item"
           :key="right"
+          class="list-group-item"
           @click="
             leftList.push(right);
             rightList.splice(index, 1);
diff --git a/src/components/FontAwesomeIcon.vue b/src/components/FontAwesomeIcon.vue
index 425a7ceb0da098acbe2c714e71a4d51ff2dfd5c0..b0f1d09c3e5f87ce1fc043940a7b5237ea51062e 100644
--- a/src/components/FontAwesomeIcon.vue
+++ b/src/components/FontAwesomeIcon.vue
@@ -1,14 +1,14 @@
 <template>
   <span
-    class="align-middle"
     ref="iconElement"
+    class="align-middle"
     :class="icon"
     :style="{
       color: props.fill,
     }"
     :data-bs-toogle="tooltip.length > 0 ? 'tooltip' : undefined"
     :data-bs-title="tooltip.length > 0 ? tooltip : undefined"
-  ></span>
+  />
 </template>
 
 <script setup lang="ts">
diff --git a/src/components/MarkdownRenderer.vue b/src/components/MarkdownRenderer.vue
index dc19fb1022ed02c6513a06614d8a8cbdb8ca06ee..906e7d5ba849cfedb744a53d043ae44eb295d540 100644
--- a/src/components/MarkdownRenderer.vue
+++ b/src/components/MarkdownRenderer.vue
@@ -1,4 +1,5 @@
 <script setup lang="ts">
+/* eslint vue/no-v-html: "off" */
 import showdown from "showdown";
 import DOMPurify from "dompurify";
 import { computed } from "vue";
diff --git a/src/components/admin/CreateUserModal.vue b/src/components/admin/CreateUserModal.vue
index e73772f9266edf9e56659a96b6e818a1b8a144d4..b6cfa1cb4b6f7a4e6e8f54067fd2a0887cdc235a 100644
--- a/src/components/admin/CreateUserModal.vue
+++ b/src/components/admin/CreateUserModal.vue
@@ -1,5 +1,9 @@
 <script setup lang="ts">
-import { RoleEnum, type UserIn, type UserOutExtended } from "@/client";
+import {
+  RoleEnum,
+  type UserIn,
+  type UserOutExtended,
+} from "@/client/types.gen";
 import { onMounted, reactive, ref } from "vue";
 import { Modal, Toast } from "bootstrap";
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
@@ -86,7 +90,7 @@ onMounted(() => {
     <template #body>Error: {{ formState.errorMessage }}</template>
   </bootstrap-toast>
   <bootstrap-modal
-    :modalId="props.modalId"
+    :modal-id="props.modalId"
     :static-backdrop="true"
     modal-label="Create user"
   >
@@ -94,22 +98,22 @@ onMounted(() => {
     <template #body>
       <form
         id="create-user-form"
-        @submit.prevent="createUser()"
-        :class="{ 'was-validated': formState.validated }"
         ref="createUserForm"
+        :class="{ 'was-validated': formState.validated }"
         novalidate
+        @submit.prevent="createUser()"
       >
         <div class="mb-3">
           <label for="create-user-name" class="form-label">Name</label>
           <input
+            id="create-user-name"
+            v-model="formState.user.display_name"
             type="text"
             class="form-control"
-            id="create-user-name"
             minlength="3"
             maxlength="256"
             required
             placeholder="John Doe"
-            v-model="formState.user.display_name"
           />
           <div class="invalid-feedback">Please choose a name.</div>
         </div>
@@ -118,14 +122,14 @@ onMounted(() => {
             >Email address</label
           >
           <input
+            id="create-user-email"
+            v-model="formState.user.email"
             type="email"
             class="form-control"
-            id="create-user-email"
             required
             placeholder="name@example.com"
             minlength="3"
             maxlength="256"
-            v-model="formState.user.email"
           />
           <div class="invalid-feedback">
             Please provide a valid email address.
@@ -134,16 +138,16 @@ onMounted(() => {
         <div class="mb-3">
           <div class="mb-1">Roles:</div>
           <div
-            class="form-check"
             v-for="role in Object.values(RoleEnum)"
             :key="role"
+            class="form-check"
           >
             <input
+              :id="`create-user-role-${role}`"
+              v-model="formState.user.roles"
               class="form-check-input"
               type="checkbox"
               :value="role"
-              :id="`create-user-role-${role}`"
-              v-model="formState.user.roles"
             />
             <label class="form-check-label" :for="`create-user-role-${role}`">
               {{ role.toUpperCase() }}
diff --git a/src/components/admin/UpdateBucketLimitsModal.vue b/src/components/admin/UpdateBucketLimitsModal.vue
index dda7de30ade92fd705e962ac9b1b6f8dda973b21..142671bf114c08ba40344d3c67968461a7e07556 100644
--- a/src/components/admin/UpdateBucketLimitsModal.vue
+++ b/src/components/admin/UpdateBucketLimitsModal.vue
@@ -1,6 +1,6 @@
 <script setup lang="ts">
 import { computed, onMounted, reactive, ref, watch } from "vue";
-import type { BucketOut, BucketSizeLimits } from "@/client";
+import type { BucketOut, BucketSizeLimits } from "@/client/types.gen";
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
 import { filesize } from "filesize";
 import { useBucketStore } from "@/stores/buckets";
@@ -113,7 +113,7 @@ onMounted(() => {
     Updated limits for bucket {{ bucket.name }}
   </bootstrap-toast>
   <bootstrap-modal
-    :modalId="props.modalId"
+    :modal-id="props.modalId"
     :static-backdrop="true"
     modal-label="Update bucket quotas"
     size-modifier-modal="lg"
@@ -122,7 +122,7 @@ onMounted(() => {
       >Update quotas for bucket <i>{{ bucket.name }}</i></template
     >
     <template #body>
-      <form :id="formId" @submit.prevent="updateLimits()" ref="sizeForm">
+      <form :id="formId" ref="sizeForm" @submit.prevent="updateLimits()">
         <div class="row mb-2">
           <div class="col-5">
             <label :for="`#size-limit-${randomIDSuffix}`" class="form-label"
@@ -136,9 +136,9 @@ onMounted(() => {
             <div class="d-flex align-content-center">
               <input
                 :id="`size-limit-${randomIDSuffix}`"
+                v-model="sizeState.limits.size_limit"
                 style="text-align: right"
                 type="number"
-                v-model="sizeState.limits.size_limit"
                 placeholder="No quota"
                 min="1"
                 max="4294967295"
@@ -155,9 +155,9 @@ onMounted(() => {
             </label>
             <input
               :id="`object-limit-${randomIDSuffix}`"
+              v-model="sizeState.limits.object_limit"
               type="number"
               class="form-control"
-              v-model="sizeState.limits.object_limit"
               placeholder="No quota"
               min="1"
               max="4294967295"
@@ -171,13 +171,13 @@ onMounted(() => {
       <div class="d-flex justify-content-center align-content-center">
         <div class="input-group w-fit">
           <input
+            v-model="unitCalculatorState.input"
             class="form-control"
             style="text-align: right"
             type="number"
             min="1"
             max="1000"
             step="0.01"
-            v-model="unitCalculatorState.input"
           />
           <select
             v-model="unitCalculatorState.selectedUnit"
diff --git a/src/components/modals/BootstrapModal.vue b/src/components/modals/BootstrapModal.vue
index 7757d10c35bcae608badb2ce8f321d2c1957d206..3ddc22f8942e9eec1e149ea69a7e0c40c90868ff 100644
--- a/src/components/modals/BootstrapModal.vue
+++ b/src/components/modals/BootstrapModal.vue
@@ -31,8 +31,8 @@ function trackModalShow() {
 
 <template>
   <div
-    class="modal"
     :id="modalId"
+    class="modal"
     tabindex="-1"
     :aria-labelledby="modalLabel"
     aria-hidden="true"
@@ -45,7 +45,7 @@ function trackModalShow() {
     >
       <div class="modal-content">
         <div class="modal-header justify-content-between">
-          <div class="modal-title fs-5" :id="modalLabel">
+          <div :id="modalLabel" class="modal-title fs-5">
             <slot name="header" />
           </div>
           <div class="d-flex align-items-center">
diff --git a/src/components/modals/CreateOtrModal.vue b/src/components/modals/CreateOtrModal.vue
index 29fe24aa3771b88aedc86a65acfcc2b458b3ca8d..ff839fb7b2ba828319e5b480956a39d9c6461e22 100644
--- a/src/components/modals/CreateOtrModal.vue
+++ b/src/components/modals/CreateOtrModal.vue
@@ -1,12 +1,12 @@
 <script setup lang="ts">
-import {
-  OwnershipTypeEnum,
-  type OwnershipTransferRequestIn,
-  type ResourceOut,
-  type UserOut,
-  type WorkflowOut,
-  type BucketOut,
-} from "@/client";
+import type {
+  OwnershipTransferRequestIn,
+  ResourceOut,
+  UserOut,
+  WorkflowOut,
+  BucketOut,
+} from "@/client/types.gen";
+import { OwnershipTypeEnum } from "@/client/types.gen";
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
 import { computed, onMounted, reactive, ref, watch } from "vue";
 import SearchUserModal from "@/components/modals/SearchUserModal.vue";
@@ -123,7 +123,7 @@ onMounted(() => {
     @user-found="updateUser"
   />
   <bootstrap-modal
-    :modalId="props.modalId"
+    :modal-id="props.modalId"
     :static-backdrop="true"
     size-modifier-modal="lg"
     :modal-label="`Create ${targetType} OTR`"
@@ -134,10 +134,10 @@ onMounted(() => {
     >
     <template #body>
       <form
-        @submit.prevent="saveOtr"
-        :class="{ 'was-validated': formState.validated }"
         id="create-otr-form"
         ref="otrCreateForm"
+        :class="{ 'was-validated': formState.validated }"
+        @submit.prevent="saveOtr"
       >
         <div class="m-1">
           <label for="create-otr-user-search" class="form-label"
@@ -163,11 +163,11 @@ onMounted(() => {
           <label for="create-otr-comment" class="form-label"> Comment </label>
           <div class="input-group">
             <textarea
-              class="form-control"
               id="create-otr-comment"
+              v-model="formState.requestIn.comment"
+              class="form-control"
               rows="2"
               maxlength="265"
-              v-model="formState.requestIn.comment"
               placeholder="Optional comment for this request"
             ></textarea>
           </div>
diff --git a/src/components/modals/DeleteModal.vue b/src/components/modals/DeleteModal.vue
index a08260ee59f021ba7799d313e801db97704c245b..a87f103719c047c97dc44dec2a430f679a5bb346 100644
--- a/src/components/modals/DeleteModal.vue
+++ b/src/components/modals/DeleteModal.vue
@@ -34,13 +34,13 @@ onMounted(() => {
 
 <template>
   <bootstrap-modal
-    :modalId="props.modalId"
+    :modal-id="props.modalId"
     :static-backdrop="true"
     modal-label="Confirm Delete Modal"
     v-on="{ 'hidden.bs.modal': modalClosed }"
   >
-    <template v-slot:header> Delete {{ props.objectNameDelete }}</template>
-    <template v-slot:body>
+    <template #header> Delete {{ props.objectNameDelete }}</template>
+    <template #body>
       <p>
         Are you sure you want to delete
         <strong v-if="props.objectNameDelete">{{
@@ -49,10 +49,10 @@ onMounted(() => {
       </p>
       <div class="form-check">
         <input
+          :id="'checkConfirmDelete' + randomIDSuffix"
+          v-model="confirmDelete"
           class="form-check-input"
           type="checkbox"
-          v-model="confirmDelete"
-          :id="'checkConfirmDelete' + randomIDSuffix"
         />
         <label
           class="form-check-label"
@@ -62,7 +62,7 @@ onMounted(() => {
         </label>
       </div>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button
         v-if="backModalId"
         type="button"
diff --git a/src/components/modals/ListOtrsModal.vue b/src/components/modals/ListOtrsModal.vue
index ff479b00ba14d7b6f1f54b196222bd9c447d0302..fcafba7cfb6b002e3c2f140055491eb80f12e05b 100644
--- a/src/components/modals/ListOtrsModal.vue
+++ b/src/components/modals/ListOtrsModal.vue
@@ -1,6 +1,9 @@
 <script setup lang="ts">
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
-import { type OwnershipTransferRequestOut, OwnershipTypeEnum } from "@/client";
+import {
+  type OwnershipTransferRequestOut,
+  OwnershipTypeEnum,
+} from "@/client/types.gen";
 import OtrModal from "@/components/modals/ShowOtrModal.vue";
 import { ref } from "vue";
 import dayjs from "dayjs";
@@ -22,11 +25,11 @@ const randomIDSuffix = Math.random().toString(16).substring(2, 8);
 <template>
   <otr-modal
     :otr-target-id="otrTargetId"
-    :modalId="`view-bucket-otr-modal-${randomIDSuffix}`"
+    :modal-id="`view-bucket-otr-modal-${randomIDSuffix}`"
     :back-modal-id="modalId"
   />
   <bootstrap-modal
-    :modalId="props.modalId"
+    :modal-id="props.modalId"
     :static-backdrop="true"
     size-modifier-modal="lg"
     :modal-label="`List ${props.otrType} OTRs`"
diff --git a/src/components/modals/ReasonModal.vue b/src/components/modals/ReasonModal.vue
index d3ab5e0e0b49ea1e54b36b365682ff2af5c3813c..fd4e098c08bbeb647879f67b5d8ea0b7d2f3e3d9 100644
--- a/src/components/modals/ReasonModal.vue
+++ b/src/components/modals/ReasonModal.vue
@@ -54,13 +54,13 @@ function sendSaveEvent() {
           >Reason for {{ props.purpose }}</label
         >
         <textarea
-          class="form-control"
           :id="'reason-modal-input-' + randomIDSuffix"
+          v-model="formState.reason"
+          class="form-control"
           rows="3"
           minlength="16"
           maxlength="512"
           :placeholder="'State your reason for the ' + props.purpose"
-          v-model="formState.reason"
         ></textarea>
       </form>
     </template>
diff --git a/src/components/modals/SearchUserModal.vue b/src/components/modals/SearchUserModal.vue
index 9bb99400ff390b85e0901f33039ac3514e2e46f4..3ea3621f10a17f6001ae4a9afa122d56939b52f9 100644
--- a/src/components/modals/SearchUserModal.vue
+++ b/src/components/modals/SearchUserModal.vue
@@ -2,7 +2,7 @@
 import { reactive, ref, watch } from "vue";
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
-import type { UserOut } from "@/client";
+import type { UserOut } from "@/client/types.gen";
 import { useUserStore } from "@/stores/users";
 
 const props = defineProps<{
@@ -83,7 +83,7 @@ function searchUser(name: string) {
 
 <template>
   <bootstrap-modal
-    :modalId="props.modalId"
+    :modal-id="props.modalId"
     :static-backdrop="true"
     modal-label="Search User Modal"
     v-on="{ 'hidden.bs.modal': modalClosed, 'shown.bs.modal': modalShown }"
@@ -91,15 +91,15 @@ function searchUser(name: string) {
     <template #header>Search User</template>
     <template #body>
       <div class="input-group mt-2 mb-4">
-        <span class="input-group-text" id="objects-search-wrapping"
+        <span id="objects-search-wrapping" class="input-group-text"
           ><font-awesome-icon icon="fa-solid fa-magnifying-glass"
         /></span>
         <input
-          class="form-control"
           :id="'searchUserInput' + randomIDSuffix"
-          placeholder="Search for a user"
-          v-model.trim="formState.searchString"
           ref="textInputElement"
+          v-model.trim="formState.searchString"
+          class="form-control"
+          placeholder="Search for a user"
         />
       </div>
       <div v-if="formState.loading" class="text-center">
@@ -118,7 +118,7 @@ function searchUser(name: string) {
           >There seems to be an error<br />Try again later</span
         >
       </div>
-      <div class="list-group" v-else-if="formState.potentialUsers.length > 0">
+      <div v-else-if="formState.potentialUsers.length > 0" class="list-group">
         <button
           v-for="user in formState.potentialUsers"
           :key="user.uid"
@@ -145,7 +145,7 @@ function searchUser(name: string) {
         <span v-else>Search for a user</span>
       </div>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button
         v-if="backModalId"
         type="button"
diff --git a/src/components/modals/SearchWorkflowVersionModal.vue b/src/components/modals/SearchWorkflowVersionModal.vue
index e16f31d4fbe40a3bbd15d2beb6f31776c43c9e65..99de6910744e613a04680afa111057c71fbb8d11 100644
--- a/src/components/modals/SearchWorkflowVersionModal.vue
+++ b/src/components/modals/SearchWorkflowVersionModal.vue
@@ -1,7 +1,7 @@
 <script setup lang="ts">
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
 import { computed, onMounted, reactive } from "vue";
-import type { UserOut, WorkflowOut, WorkflowVersion } from "@/client";
+import type { UserOut, WorkflowOut, WorkflowVersion } from "@/client/types.gen";
 import { useWorkflowStore } from "@/stores/workflows";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 
@@ -61,7 +61,7 @@ onMounted(() => {
 
 <template>
   <bootstrap-modal
-    :modalId="props.modalId"
+    :modal-id="props.modalId"
     :static-backdrop="true"
     modal-label="Search User Modal"
     v-on="{ 'hidden.bs.modal': modalClosed }"
@@ -73,26 +73,29 @@ onMounted(() => {
           ><font-awesome-icon icon="fa-solid fa-magnifying-glass"
         /></span>
         <input
+          v-model.trim="formState.searchString"
           class="form-control"
           placeholder="Search for a workflow"
-          v-model.trim="formState.searchString"
           maxlength="10"
         />
       </div>
       <div
-        class="accordion"
-        :id="`accordion-${randomIDSuffix}`"
         v-if="workflows.length > 0"
+        :id="`accordion-${randomIDSuffix}`"
+        class="accordion"
       >
         <div
-          class="accordion-item"
           v-for="workflow of workflows"
           :key="workflow.workflow_id"
+          class="accordion-item"
         >
           <h2 class="accordion-header">
             <button
               class="accordion-button collapsed"
               type="button"
+              data-bs-toggle="collapse"
+              :data-bs-target="`#collapse-workflow-${workflow.workflow_id}-${randomIDSuffix}`"
+              :aria-controls="`collapse-workflow-${workflow.workflow_id}-${randomIDSuffix}`"
               @click="
                 formState.selectedWorkflow =
                   formState.selectedWorkflow?.workflow_id ===
@@ -100,9 +103,6 @@ onMounted(() => {
                     ? undefined
                     : workflow
               "
-              data-bs-toggle="collapse"
-              :data-bs-target="`#collapse-workflow-${workflow.workflow_id}-${randomIDSuffix}`"
-              :aria-controls="`collapse-workflow-${workflow.workflow_id}-${randomIDSuffix}`"
             >
               {{ workflow.name }}
             </button>
@@ -123,8 +123,8 @@ onMounted(() => {
                   "
                   :data-bs-toggle="props.backModalId ? 'modal' : null"
                   :data-bs-dismiss="props.backModalId ? null : 'modal'"
-                  @click="emit('workflow-found', workflow, version)"
                   class="list-group-item list-group-item-action"
+                  @click="emit('workflow-found', workflow, version)"
                 >
                   {{ version.version }}
                   <img
@@ -166,7 +166,7 @@ onMounted(() => {
         <span>There are no workflows in the system</span>
       </div>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button
         v-if="backModalId"
         type="button"
@@ -185,14 +185,14 @@ onMounted(() => {
         Close
       </button>
       <button
+        v-if="allowSelectWorkflow"
         type="button"
         class="btn btn-success"
-        v-if="allowSelectWorkflow"
         :disabled="formState.selectedWorkflow == undefined"
-        @click="emit('workflow-found', formState.selectedWorkflow!, undefined)"
         :data-bs-target="props.backModalId ? '#' + props.backModalId : null"
         :data-bs-toggle="props.backModalId ? 'modal' : null"
         :data-bs-dismiss="props.backModalId ? null : 'modal'"
+        @click="emit('workflow-found', formState.selectedWorkflow!, undefined)"
       >
         Select
       </button>
diff --git a/src/components/modals/ShowOtrModal.vue b/src/components/modals/ShowOtrModal.vue
index 478a51d7e3c26f5a2ea17ce1aa8158575de2f030..a4ab386153af375da42b0a4a9c8b114be31a66fe 100644
--- a/src/components/modals/ShowOtrModal.vue
+++ b/src/components/modals/ShowOtrModal.vue
@@ -2,7 +2,7 @@
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
 import { useOTRStore } from "@/stores/otrs";
 import { computed, onMounted, ref } from "vue";
-import type { OwnershipTransferRequestOut } from "@/client";
+import type { OwnershipTransferRequestOut } from "@/client/types.gen";
 import { useNameStore } from "@/stores/names";
 import dayjs from "dayjs";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
@@ -64,10 +64,10 @@ onMounted(() => {
     :toast-id="`success-handle-otr-${randomIDSuffix}`"
     color-class="success"
   >
-    <template #default v-if="accepted">
+    <template v-if="accepted" #default>
       Successfully accepted request
     </template>
-    <template #default v-else> Successfully deleted request </template>
+    <template v-else #default> Successfully deleted request </template>
   </bootstrap-toast>
   <delete-modal
     :modal-id="`delete-otr-modal-${randomIDSuffix}`"
@@ -76,7 +76,7 @@ onMounted(() => {
     @confirm-delete="deleteOtr(otr)"
   />
   <bootstrap-modal
-    :modalId="props.modalId"
+    :modal-id="props.modalId"
     :static-backdrop="true"
     size-modifier-modal="lg"
     :modal-label="`Show ${otr?.target_type} OTR`"
@@ -103,17 +103,17 @@ onMounted(() => {
           <div class="col-md-6">
             <label for="otr-to-user" class="form-label">To</label>
             <input
+              id="otr-to-user"
               readonly
               class="form-control"
-              id="otr-to-user"
               :value="nameRepository.getName(otr.new_owner_uid)"
             />
           </div>
-          <div class="col-md-6" v-if="otr.current_owner_uid">
+          <div v-if="otr.current_owner_uid" class="col-md-6">
             <label for="otr-from-user" class="form-label">From</label>
             <input
-              class="form-control"
               id="otr-from-user"
+              class="form-control"
               :value="nameRepository.getName(otr.current_owner_uid)"
             />
           </div>
@@ -122,19 +122,19 @@ onMounted(() => {
               >{{ otr?.target_type }} name</label
             >
             <input
-              class="form-control"
               id="otr-target-name"
+              class="form-control"
               :value="otr.target_name"
             />
           </div>
-          <div class="col-md-6" v-if="otr.current_owner_uid">
+          <div v-if="otr.current_owner_uid" class="col-md-6">
             <label for="otr-timestamp" class="form-label"
               >Request created at</label
             >
             <input
+              id="otr-timestamp"
               type="datetime-local"
               class="form-control"
-              id="otr-timestamp"
               readonly
               :value="
                 dayjs.unix(otr.created_at ?? 0).format('YYYY-MM-DDTHH:mm')
@@ -146,8 +146,8 @@ onMounted(() => {
               >{{ otr?.target_type }} description</label
             >
             <textarea
-              class="form-control"
               id="otr-description"
+              class="form-control"
               readonly
               rows="2"
               :value="otr.target_description"
@@ -156,8 +156,8 @@ onMounted(() => {
           <div v-if="otr.comment?.trim().length !== 0" class="col-12">
             <label for="otr-comment" class="form-label">Request comment</label>
             <textarea
-              class="form-control"
               id="otr-comment"
+              class="form-control"
               readonly
               rows="2"
               :value="otr.comment"
@@ -174,16 +174,16 @@ onMounted(() => {
           <button
             type="button"
             class="btn btn-danger btn-lg col-5 mx-2"
-            @click="deleteOtr(otr)"
             data-bs-dismiss="modal"
+            @click="deleteOtr(otr)"
           >
             Reject
           </button>
           <button
             type="button"
             class="btn btn-success btn-lg col-5 mx-2"
-            @click="acceptOtr(otr)"
             data-bs-dismiss="modal"
+            @click="acceptOtr(otr)"
           >
             Accept
           </button>
diff --git a/src/components/object-storage/BucketListItem.vue b/src/components/object-storage/BucketListItem.vue
index e1950f9464b447e09a36a74ce4b35103780d7a15..5600517a50fe2fa338f1878fb49138d6e4599edb 100644
--- a/src/components/object-storage/BucketListItem.vue
+++ b/src/components/object-storage/BucketListItem.vue
@@ -1,5 +1,5 @@
 <script setup lang="ts">
-import type { BucketOut, BucketPermissionOut } from "@/client";
+import type { BucketOut, BucketPermissionOut } from "@/client/types.gen";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import PermissionModal from "@/components/object-storage/modals/PermissionModal.vue";
 import dayjs from "dayjs";
@@ -100,15 +100,15 @@ onMounted(() => {
 
 <template>
   <bootstrap-toast
-    :toast-id="`success-public-bucket-${randomIDSuffix}`"
     v-if="!loading"
+    :toast-id="`success-public-bucket-${randomIDSuffix}`"
   >
     Bucket {{ bucket.name }} is now {{ bucket.public ? "public" : "private" }}
   </bootstrap-toast>
   <bootstrap-toast
+    v-if="!loading"
     :toast-id="`error-public-bucket-${randomIDSuffix}`"
     color-class="danger"
-    v-if="!loading"
   >
     Error making the bucket {{ bucket.name }}
     {{ !bucket.public ? "public" : "private" }}:<br />
@@ -116,7 +116,7 @@ onMounted(() => {
   </bootstrap-toast>
   <permission-modal
     v-if="permission != undefined && props.active"
-    :modalId="'view-permission-modal' + randomIDSuffix"
+    :modal-id="'view-permission-modal' + randomIDSuffix"
     :bucket-name="props.bucket.name"
     :sub-folders="subFolder"
     :edit-user-permission="permission"
@@ -194,14 +194,14 @@ onMounted(() => {
             v-if="!permission && props.deletable"
             icon="fa-solid fa-trash"
             class="delete-icon me-2 cursor-pointer"
-            @click="emit('click-delete-bucket', bucket.name)"
             tooltip="Delete bucket"
+            @click="emit('click-delete-bucket', bucket.name)"
           />
           <font-awesome-icon
             class="info-icon cursor-pointer"
-            @click="emit('click-bucket-detail', bucket)"
             icon="fa-solid fa-circle-info"
             tooltip="Bucket info"
+            @click="emit('click-bucket-detail', bucket)"
           />
         </div>
       </router-link>
@@ -294,12 +294,12 @@ onMounted(() => {
                 >
                   <input
                     v-if="!loading && permission == undefined"
+                    :id="'public-checkbox-' + randomIDSuffix"
                     ref="publicCheckbox"
                     class="form-check-input"
                     type="checkbox"
                     :disabled="requestState.loading"
                     :checked="bucket.public"
-                    :id="'public-checkbox-' + randomIDSuffix"
                     @change="toggleBucketPublicState"
                   />
                   <label
diff --git a/src/components/object-storage/modals/BucketDetailModal.vue b/src/components/object-storage/modals/BucketDetailModal.vue
index 6eb62896cf3e2fd2637302354bcb9a57b4beefdb..cb799ae6712bd934ca75f65998b2f60722b2c3c6 100644
--- a/src/components/object-storage/modals/BucketDetailModal.vue
+++ b/src/components/object-storage/modals/BucketDetailModal.vue
@@ -1,6 +1,6 @@
 <script setup lang="ts">
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
-import type { BucketOut } from "@/client";
+import type { BucketOut } from "@/client/types.gen";
 import dayjs from "dayjs";
 import { filesize } from "filesize";
 import { useS3ObjectStore } from "@/stores/s3objects";
@@ -43,7 +43,7 @@ const s3Link = computed<string>(() => "s3://" + props.bucket.name);
     :back-modal-id="props.modalId"
   />
   <bootstrap-modal
-    :modalId="modalId"
+    :modal-id="modalId"
     :static-backdrop="false"
     modal-label="Bucket Detail Modal"
     size-modifier-modal="lg"
diff --git a/src/components/object-storage/modals/CopyObjectModal.vue b/src/components/object-storage/modals/CopyObjectModal.vue
index 4270be2ce352de422ecdb1562a40cd63e1c8d6f0..f784c5001c1877163aaecd16acfc5720ecf2c628 100644
--- a/src/components/object-storage/modals/CopyObjectModal.vue
+++ b/src/components/object-storage/modals/CopyObjectModal.vue
@@ -115,21 +115,21 @@ onMounted(() => {
     Code: {{ formState.err }}
   </bootstrap-toast>
   <bootstrap-modal
-    :modalId="modalId"
+    :modal-id="modalId"
     :static-backdrop="true"
     modal-label="Copy Object Modal"
-    v-on="{ 'hidden.bs.modal': modalClosed }"
     :track-modal-value="srcBucket + '/' + srcObject.Key"
+    v-on="{ 'hidden.bs.modal': modalClosed }"
   >
-    <template v-slot:header>
+    <template #header>
       <h4>Copy file {{ getFileName(props.srcObject.Key) }}</h4>
     </template>
-    <template v-slot:body>
+    <template #body>
       <div class="container-fluid">
         <div class="row">
           <form
-            class="col-7"
             :id="'copyObjectForm' + randomIDSuffix"
+            class="col-7"
             @submit.prevent="copyObject"
           >
             <div class="mb-3">
@@ -140,10 +140,10 @@ onMounted(() => {
                 Destination Bucket *
               </label>
               <select
-                class="form-select text-lowercase"
                 :id="'destinationBucket' + randomIDSuffix"
-                required
                 v-model="formState.destBucket"
+                class="form-select text-lowercase"
+                required
               >
                 <option disabled selected>Select one...</option>
                 <option
@@ -162,29 +162,29 @@ onMounted(() => {
                 >Destination Filename *</label
               >
               <input
+                :id="'objectKey' + randomIDSuffix"
+                v-model="formState.destKey"
                 type="text"
                 class="form-control"
-                :id="'objectKey' + randomIDSuffix"
                 required
-                v-model="formState.destKey"
               />
             </div>
             <div
-              class="mb-3 form-check"
               v-if="bucketRepository.writableBucket(srcBucket)"
+              class="mb-3 form-check"
             >
               <input
+                id="flexCheckDefault"
+                v-model="formState.moveObject"
                 class="form-check-input"
                 type="checkbox"
-                v-model="formState.moveObject"
-                id="flexCheckDefault"
                 :disabled="formState.uploading"
               />
               <label class="form-check-label" for="flexCheckDefault">
                 Delete object after copy
               </label>
             </div>
-            <div class="text-danger" v-if="(srcObject.Size ?? 0) > 5000000000">
+            <div v-if="(srcObject.Size ?? 0) > 5000000000" class="text-danger">
               Only objects smaller than 5GB can be copied.
             </div>
           </form>
@@ -199,7 +199,7 @@ onMounted(() => {
         </div>
       </div>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
         Close
       </button>
diff --git a/src/components/object-storage/modals/CreateBucketModal.vue b/src/components/object-storage/modals/CreateBucketModal.vue
index ec625129b8b904bfa0b1166e37b5e34d0e16f29f..09bd3c5153a44453227d047a36e8301b8a35a323 100644
--- a/src/components/object-storage/modals/CreateBucketModal.vue
+++ b/src/components/object-storage/modals/CreateBucketModal.vue
@@ -1,5 +1,5 @@
 <script setup lang="ts">
-import type { BucketIn } from "@/client";
+import type { BucketIn } from "@/client/types.gen";
 import { reactive, onMounted, ref } from "vue";
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
 import { useRouter } from "vue-router";
@@ -36,7 +36,7 @@ onMounted(() => {
 
 function createBucket() {
   formState.validated = true;
-  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+
   formState.bucketNameTaken = false;
   bucket.description = bucket.description.trim();
   bucket.name = bucket.name.trim();
@@ -82,31 +82,31 @@ function modalClosed() {
 
 <template>
   <bootstrap-modal
-    :modalId="modalId"
+    :modal-id="modalId"
     :static-backdrop="true"
     modal-label="Create Bucket Modal"
     v-on="{ 'hidden.bs.modal': modalClosed }"
   >
-    <template v-slot:header> Create new S3 Bucket</template>
-    <template v-slot:body>
+    <template #header> Create new S3 Bucket</template>
+    <template #body>
       <form
         id="bucketCreateForm"
-        :class="{ 'was-validated': formState.validated }"
         ref="bucketCreateForm"
+        :class="{ 'was-validated': formState.validated }"
       >
         <div class="mb-3">
           <label for="bucketNameInput" class="form-label">Bucket Name</label>
           <div class="input-group">
             <input
+              id="bucketNameInput"
+              ref="bucketNameElement"
+              v-model="bucket.name"
               type="text"
               class="form-control"
-              id="bucketNameInput"
               required
               minlength="3"
               maxlength="63"
               pattern="(?!(^(\d+\.){3}\d+$))^([a-z0-9](?:[a-z0-9\-]*[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?$"
-              v-model="bucket.name"
-              ref="bucketNameElement"
             />
             <div class="invalid-feedback">
               <div v-if="formState.bucketNameTaken">
@@ -136,13 +136,13 @@ function modalClosed() {
           </label>
           <div class="input-group">
             <textarea
-              class="form-control"
               id="bucketDescriptionInput"
+              v-model="bucket.description"
+              class="form-control"
               required
               rows="3"
               minlength="16"
               maxlength="65536"
-              v-model="bucket.description"
               placeholder="Describe the purpose of the bucket"
             ></textarea>
             <div class="invalid-feedback">
@@ -155,7 +155,7 @@ function modalClosed() {
         </div>
       </form>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
         Close
       </button>
diff --git a/src/components/object-storage/modals/CreateFolderModal.vue b/src/components/object-storage/modals/CreateFolderModal.vue
index b7c5b48ebbfbad5fa42d1fd04a0cdc62bd21b851..17472061dce75b7ca885cb837986793027361a2b 100644
--- a/src/components/object-storage/modals/CreateFolderModal.vue
+++ b/src/components/object-storage/modals/CreateFolderModal.vue
@@ -81,32 +81,32 @@ onMounted(() => {
     Code: {{ formState.err }}
   </bootstrap-toast>
   <bootstrap-modal
-    :modalId="modalId"
+    :modal-id="modalId"
     :static-backdrop="true"
     modal-label="Create Folder Modal"
     :track-modal-value="
       bucketName + (keyPrefix.length > 0 ? '/' + keyPrefix : '')
     "
   >
-    <template v-slot:header>
+    <template #header>
       <h4>Create folder in</h4>
       <ol class="breadcrumb">
         <li class="breadcrumb-item">{{ props.bucketName }}</li>
         <li
-          class="breadcrumb-item"
           v-for="folder in currentFolders"
           :key="folder"
+          class="breadcrumb-item"
         >
           {{ folder }}
         </li>
       </ol>
     </template>
-    <template v-slot:body>
+    <template #body>
       <div class="container-fluid">
         <div class="row">
           <form
-            class="col-7"
             :id="'uploadFolderForm' + randomIDSuffix"
+            class="col-7"
             @submit.prevent="uploadFolder"
           >
             <div class="mb-3">
@@ -114,11 +114,11 @@ onMounted(() => {
                 >Folder Name</label
               >
               <input
+                :id="'folderName' + randomIDSuffix"
+                v-model="formState.folderName"
                 type="text"
                 class="form-control"
-                :id="'folderName' + randomIDSuffix"
                 required
-                v-model="formState.folderName"
               />
             </div>
           </form>
@@ -130,7 +130,7 @@ onMounted(() => {
         </div>
       </div>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
         Close
       </button>
diff --git a/src/components/object-storage/modals/ObjectDetailModal.vue b/src/components/object-storage/modals/ObjectDetailModal.vue
index f980229223b5f7c28871716e7e2e24c46673b0cf..6a1a018b0f2deb88087fef111ef9ac65d6016f6d 100644
--- a/src/components/object-storage/modals/ObjectDetailModal.vue
+++ b/src/components/object-storage/modals/ObjectDetailModal.vue
@@ -53,15 +53,15 @@ onMounted(() => {
 
 <template>
   <bootstrap-modal
-    :modalId="modalId"
+    :modal-id="modalId"
     :static-backdrop="false"
     modal-label="Object Detail Modal"
     :track-modal-value="bucket + '/' + objectKey"
   >
-    <template v-slot:header>
+    <template #header>
       <h4>File Details</h4>
     </template>
-    <template v-slot:body>
+    <template #body>
       <div class="container-fluid">
         <table class="table table-hover table-sm table-borderless">
           <tbody>
@@ -133,7 +133,7 @@ onMounted(() => {
         </table>
       </div>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
         Close
       </button>
diff --git a/src/components/object-storage/modals/PermissionListModal.vue b/src/components/object-storage/modals/PermissionListModal.vue
index 8566788e2acd55f48c6bf9334aab24e07dc40c64..7cd75ae35722ce621e93482be8a64b6d6ee602b6 100644
--- a/src/components/object-storage/modals/PermissionListModal.vue
+++ b/src/components/object-storage/modals/PermissionListModal.vue
@@ -1,5 +1,5 @@
 <script setup lang="ts">
-import type { BucketPermissionOut } from "@/client";
+import type { BucketPermissionOut } from "@/client/types.gen";
 import type { FolderTree } from "@/types/PseudoFolder";
 import { reactive } from "vue";
 import { onBeforeMount, watch } from "vue";
@@ -71,35 +71,35 @@ onBeforeMount(() => {
     :bucket-name="state.currentPermission.bucket_name"
     :sub-folders="props.subFolders"
     :back-modal-id="props.modalId"
-    :modalId="'permission-list-edit-modal' + randomIDSuffix"
+    :modal-id="'permission-list-edit-modal' + randomIDSuffix"
   />
   <bootstrap-modal
-    :modalId="props.modalId"
+    :modal-id="props.modalId"
     :static-backdrop="true"
     modal-label="Permission List Modal"
     :track-modal-value="bucketName"
   >
-    <template v-slot:header>
+    <template #header>
       Bucket Permissions for Bucket <i>{{ props.bucketName }}</i>
     </template>
-    <template v-slot:body>
+    <template #body>
       <div>
         <div
-          class="list-group"
           v-if="
             bucketRepository.getBucketPermissions(props.bucketName).length > 0
           "
+          class="list-group"
         >
           <button
-            type="button"
-            class="list-group-item list-group-item-action text-truncate"
             v-for="permission in bucketRepository.getBucketPermissions(
               props.bucketName,
             )"
             :key="permission.uid"
-            @click="state.currentPermission = permission"
+            type="button"
+            class="list-group-item list-group-item-action text-truncate"
             data-bs-toggle="modal"
             :data-bs-target="'#permission-list-edit-modal' + randomIDSuffix"
+            @click="state.currentPermission = permission"
           >
             <div class="row">
               <span class="text-info col-2 text-start">{{
@@ -116,7 +116,7 @@ onBeforeMount(() => {
         </div>
       </div>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
         Close
       </button>
diff --git a/src/components/object-storage/modals/PermissionModal.vue b/src/components/object-storage/modals/PermissionModal.vue
index 37b50a6f412254a3ca6aa42f21b85e83085e4b82..25fd80a034e0baf9834360d38587c9904dd9cb00 100644
--- a/src/components/object-storage/modals/PermissionModal.vue
+++ b/src/components/object-storage/modals/PermissionModal.vue
@@ -10,7 +10,7 @@ import type {
   BucketPermissionIn,
   BucketPermissionParameters,
   UserOut,
-} from "@/client";
+} from "@/client/types.gen";
 import type { FolderTree } from "@/types/PseudoFolder";
 import { Permission } from "@/client";
 import { Toast } from "bootstrap";
@@ -44,7 +44,7 @@ let successToast: Toast | null = null;
 
 // Reactive State
 // -----------------------------------------------------------------------------
-// eslint-disable-next-line vue/no-setup-props-destructure
+
 const formState = reactive<{
   loading: boolean;
   error: boolean;
@@ -55,7 +55,6 @@ const formState = reactive<{
   readonly: props.readonly,
 });
 
-// eslint-disable-next-line vue/no-setup-props-destructure
 const permission = reactive<BucketPermissionIn>({
   from_timestamp: undefined,
   to_timestamp: undefined,
@@ -268,8 +267,8 @@ function toTimestampChanged(target?: HTMLInputElement | null) {
     :modal-id="'search-user-modal' + randomIDSuffix"
     :back-modal-id="modalId"
     filter-user-self
-    @user-found="updateUser"
     :track-modal-value="bucketName"
+    @user-found="updateUser"
   />
   <bootstrap-toast
     :toast-id="'toast-' + randomIDSuffix"
@@ -282,19 +281,17 @@ function toTimestampChanged(target?: HTMLInputElement | null) {
     Permission
   </bootstrap-toast>
   <bootstrap-modal
-    :modalId="modalId"
+    :modal-id="modalId"
     :static-backdrop="true"
     modal-label="Permission Modal"
     v-on="{ 'hidden.bs.modal': modalClosed }"
   >
-    <template v-slot:header v-if="formState.readonly"
-      >View Permission
-    </template>
-    <template v-slot:header v-else-if="props.editUserPermission !== undefined"
+    <template v-if="formState.readonly" #header>View Permission </template>
+    <template v-else-if="props.editUserPermission !== undefined" #header
       >Edit Permission
     </template>
-    <template v-slot:header v-else>Create new Bucket Permission</template>
-    <template v-slot:extra-button>
+    <template v-else #header>Create new Bucket Permission</template>
+    <template #extra-button>
       <font-awesome-icon
         v-if="props.deletable"
         icon="fa-solid fa-trash"
@@ -310,11 +307,11 @@ function toTimestampChanged(target?: HTMLInputElement | null) {
         @click="formState.readonly = false"
       />
     </template>
-    <template v-slot:body>
+    <template #body>
       <form
-        @submit.prevent="formSubmit"
         :id="'permissionCreateEditForm' + randomIDSuffix"
         ref="permissionForm"
+        @submit.prevent="formSubmit"
       >
         <div class="mb-3 row">
           <label for="bucketNameInput" class="col-2 col-form-label"
@@ -322,10 +319,10 @@ function toTimestampChanged(target?: HTMLInputElement | null) {
           >
           <div class="col-10">
             <input
+              id="bucketNameInput"
               type="text"
               readonly
               class="form-control-plaintext"
-              id="bucketNameInput"
               required
               :value="permission.bucket_name"
             />
@@ -337,9 +334,9 @@ function toTimestampChanged(target?: HTMLInputElement | null) {
           </label>
           <div class="col-10">
             <input
+              id="permissionGranteeInput"
               type="text"
               class="form-control"
-              id="permissionGranteeInput"
               required
               placeholder="Search for a user"
               :value="nameRepository.getName(permission.uid)"
@@ -359,11 +356,11 @@ function toTimestampChanged(target?: HTMLInputElement | null) {
           </label>
           <div class="col-9">
             <select
-              class="form-select text-lowercase"
               id="permissionTypeInput"
+              v-model="permission.permission"
+              class="form-select text-lowercase"
               required
               :disabled="formState.readonly"
-              v-model="permission.permission"
             >
               <option disabled selected>Select one...</option>
               <option v-for="perm in Permission" :key="perm" :value="perm">
@@ -374,17 +371,17 @@ function toTimestampChanged(target?: HTMLInputElement | null) {
         </div>
         <div class="mb-3 row">
           <label
+            v-if="inputVisible(permission.from_timestamp)"
             for="permissionDateFromInput"
             class="col-2 col-form-label"
-            v-if="inputVisible(permission.from_timestamp)"
           >
             From
           </label>
-          <div class="col-4" v-if="inputVisible(permission.from_timestamp)">
+          <div v-if="inputVisible(permission.from_timestamp)" class="col-4">
             <input
+              id="permissionDateFromInput"
               type="date"
               class="form-control"
-              id="permissionDateFromInput"
               :readonly="formState.readonly"
               :min="dayjs().format('YYYY-MM-DD')"
               :value="
@@ -399,17 +396,17 @@ function toTimestampChanged(target?: HTMLInputElement | null) {
             />
           </div>
           <label
+            v-if="inputVisible(permission.to_timestamp)"
             for="permissionDateToInput"
             class="col-2 col-form-label"
-            v-if="inputVisible(permission.to_timestamp)"
           >
             To
           </label>
-          <div class="col-4" v-if="inputVisible(permission.to_timestamp)">
+          <div v-if="inputVisible(permission.to_timestamp)" class="col-4">
             <input
+              id="permissionDateToInput"
               type="date"
               class="form-control"
-              id="permissionDateToInput"
               :readonly="formState.readonly"
               :min="
                 permission.from_timestamp != null
@@ -431,11 +428,11 @@ function toTimestampChanged(target?: HTMLInputElement | null) {
           </div>
         </div>
         <div
-          class="mb-3 row align-items-center d-flex"
           v-if="
             inputVisible(permission.file_prefix) &&
             possibleSubFolders.length > 0
           "
+          class="mb-3 row align-items-center d-flex"
         >
           <label for="permissionSubFolderInput" class="col-2 col-form-label">
             Subfolder
@@ -447,10 +444,10 @@ function toTimestampChanged(target?: HTMLInputElement | null) {
             }"
           >
             <select
-              class="form-select"
               id="permissionSubFolderInput"
-              :disabled="formState.readonly"
               v-model="permission.file_prefix"
+              class="form-select"
+              :disabled="formState.readonly"
             >
               <option disabled selected>Select one folder...</option>
               <option
@@ -462,23 +459,23 @@ function toTimestampChanged(target?: HTMLInputElement | null) {
               </option>
             </select>
           </div>
-          <div class="col-1" v-if="!formState.readonly">
+          <div v-if="!formState.readonly" class="col-1">
             <button
               type="button"
               class="btn btn-outline-danger btn-sm float-end"
-              @click="permission.file_prefix = undefined"
               :hidden="permission.file_prefix == undefined"
+              @click="permission.file_prefix = undefined"
             >
               <font-awesome-icon icon="fa-solid fa-x" />
             </button>
           </div>
         </div>
       </form>
-      <span class="text-danger" v-if="formState.error"
+      <span v-if="formState.error" class="text-danger"
         >There was some kind of error<br />Try again later</span
       >
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button
         v-if="backModalId !== undefined"
         type="button"
@@ -497,11 +494,11 @@ function toTimestampChanged(target?: HTMLInputElement | null) {
         Close
       </button>
       <button
+        v-if="!formState.readonly"
         type="submit"
         :form="'permissionCreateEditForm' + randomIDSuffix"
         class="btn btn-primary"
         :disabled="formState.loading || permission.uid.length === 0"
-        v-if="!formState.readonly"
       >
         <span
           v-if="formState.loading"
diff --git a/src/components/object-storage/modals/UploadObjectModal.vue b/src/components/object-storage/modals/UploadObjectModal.vue
index c23951006b0aa115b2509c31ba7af98fd522ae36..3b916cc348afd7535ce2c7259dd8fa0003d373c6 100644
--- a/src/components/object-storage/modals/UploadObjectModal.vue
+++ b/src/components/object-storage/modals/UploadObjectModal.vue
@@ -105,7 +105,6 @@ function uploadObject() {
 
 function fileChange() {
   if (objectFileInput.value != undefined) {
-    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
     formState.file = objectFileInput.value.files![0];
     if (!editObject.value) {
       formState.key = formState.file.name;
@@ -144,9 +143,9 @@ onMounted(() => {
       <ol class="breadcrumb">
         <li class="breadcrumb-item">{{ props.bucketName }}</li>
         <li
-          class="breadcrumb-item"
           v-for="folder in currentFolders"
           :key="folder"
+          class="breadcrumb-item"
         >
           {{ folder }}
         </li>
@@ -157,30 +156,30 @@ onMounted(() => {
         <p>{{ formState.err }}</p>
         <div class="row">
           <form
-            class="col-7"
             :id="'uploadObjectForm' + randomIDSuffix"
+            class="col-7"
             @submit.prevent="uploadObject"
           >
             <div class="mb-3">
               <label
+                v-if="editObject"
                 :for="'objectFile' + randomIDSuffix"
                 class="form-label"
-                v-if="editObject"
               >
                 New File Content *
               </label>
               <label
+                v-else
                 :for="'objectFile' + randomIDSuffix"
                 class="form-label"
-                v-else
               >
                 File *
               </label>
               <input
-                class="form-control"
-                type="file"
                 :id="'objectFile' + randomIDSuffix"
                 ref="objectFileInput"
+                class="form-control"
+                type="file"
                 required
                 @change="fileChange"
               />
@@ -190,15 +189,15 @@ onMounted(() => {
                 >Filename</label
               >
               <input
+                :id="'objectKey' + randomIDSuffix"
+                v-model="formState.key"
                 type="text"
                 :class="{
                   'form-control-plaintext': editObject,
                   'form-control': !editObject,
                 }"
-                :id="'objectKey' + randomIDSuffix"
                 required
                 :disabled="editObject"
-                v-model="formState.key"
               />
             </div>
           </form>
@@ -210,8 +209,8 @@ onMounted(() => {
         </div>
       </div>
     </template>
-    <template v-slot:footer>
-      <div class="w-50 me-auto" v-if="formState.uploading">
+    <template #footer>
+      <div v-if="formState.uploading" class="w-50 me-auto">
         <div
           class="progress"
           aria-valuemin="0"
diff --git a/src/components/parameter-schema/ParameterSchemaDescriptionComponent.vue b/src/components/parameter-schema/ParameterSchemaDescriptionComponent.vue
index 7c70fd7ebd44b24ef4647e488658e42cc1a12aeb..c1517193021a794f021b68df27680975374a3ca4 100644
--- a/src/components/parameter-schema/ParameterSchemaDescriptionComponent.vue
+++ b/src/components/parameter-schema/ParameterSchemaDescriptionComponent.vue
@@ -80,14 +80,14 @@ const parameterGroups = computed<Record<string, never>>(() => {
         <nav class="nav">
           <ul class="ps-0">
             <li
-              class="nav-link"
               v-for="group in navParameterGroups"
               :key="group.group"
+              class="nav-link"
             >
               <a :href="'#' + group.group">
                 <font-awesome-icon
-                  :icon="group.icon"
                   v-if="group.icon"
+                  :icon="group.icon"
                   class="me-2"
                 />
                 {{ group.title }}</a
@@ -96,10 +96,10 @@ const parameterGroups = computed<Record<string, never>>(() => {
           </ul>
           <div class="mx-auto mb-3">
             <input
-              type="checkbox"
-              class="btn-check ms-1"
               id="btn-check-outlined"
               v-model="showHidden"
+              type="checkbox"
+              class="btn-check ms-1"
               autocomplete="off"
             />
             <label class="btn btn-outline-primary" for="btn-check-outlined">
diff --git a/src/components/parameter-schema/ParameterSchemaFormComponent.vue b/src/components/parameter-schema/ParameterSchemaFormComponent.vue
index b995b20af8d6da79f88098422529e5906797eab2..cac3540d96b9128f7337232f52c0f8a12f0ce53e 100644
--- a/src/components/parameter-schema/ParameterSchemaFormComponent.vue
+++ b/src/components/parameter-schema/ParameterSchemaFormComponent.vue
@@ -177,7 +177,7 @@ watch(
 
 // Functions
 // =============================================================================
-/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/ban-ts-comment, @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/ban-ts-comment */
 function updateSchema(schema: Record<string, any>) {
   validateSchema = schemaCompiler.compile(schema);
   const groupedParameters = Object.keys(parameterGroups.value).map(
@@ -306,27 +306,27 @@ onMounted(() => {
   <div class="row align-items-start">
     <form
       v-if="props.schema"
-      class="col-9"
       id="launchWorkflowForm"
       ref="launchForm"
+      class="col-9"
       :class="{ 'was-validated': formState.validated }"
-      @submit.prevent="startWorkflow"
       novalidate
+      @submit.prevent="startWorkflow"
     >
       <template v-for="(group, groupName) in parameterGroups" :key="groupName">
         <parameter-group-form
-          v-model="formState.formInput"
           v-if="formState.formInput"
+          v-model="formState.formInput"
           :parameter-group-name="groupName"
           :parameter-group="group"
-          :showHidden="showHidden"
+          :show-hidden="showHidden"
           :show-optional="showOptional"
           :resource-parameters="props.clowmInfo?.resourceParameters"
           :mapping="parameterExtension?.mapping"
         />
       </template>
       <div class="card mb-3">
-        <h3 class="card-header" id="pipelineGeneralOptions">
+        <h3 id="pipelineGeneralOptions" class="card-header">
           <font-awesome-icon icon="fa-solid fa-gear" class="me-2" />
           Pipeline Options
         </h3>
@@ -341,15 +341,15 @@ onMounted(() => {
             >
             <div class="input-group">
               <span
-                class="input-group-text border border-secondary"
                 id="pipelineNotes"
+                class="input-group-text border border-secondary"
               >
                 <font-awesome-icon icon="fa-solid fa-sticky-note" />
               </span>
               <textarea
+                v-model="formState.metaParameters.notes"
                 class="form-control border border-secondary"
                 rows="2"
-                v-model="formState.metaParameters.notes"
               />
             </div>
             <label class="mb-3" for="pipelineNotes"
@@ -460,10 +460,10 @@ onMounted(() => {
           aria-label="Basic radio toggle button group"
         >
           <input
+            id="view-mode-simple"
             type="radio"
             class="btn-check"
             name="view-mode"
-            id="view-mode-simple"
             autocomplete="off"
             :checked="props.viewMode === 'simple'"
             @click="
@@ -477,10 +477,10 @@ onMounted(() => {
             >Simple</label
           >
           <input
+            id="view-mode-advanced"
             type="radio"
             class="btn-check"
             name="view-mode"
-            id="view-mode-advanced"
             autocomplete="off"
             :checked="props.viewMode === 'advanced'"
             @click="
@@ -494,10 +494,10 @@ onMounted(() => {
             >Advanced</label
           >
           <input
+            id="view-mode-expert"
             type="radio"
             class="btn-check"
             name="view-mode"
-            id="view-mode-expert"
             autocomplete="off"
             :checked="props.viewMode === 'expert'"
             @click="
@@ -516,9 +516,9 @@ onMounted(() => {
         <nav v-if="props.schema" class="nav">
           <ul class="ps-0">
             <li
-              class="nav-link"
               v-for="group in navParameterGroups"
               :key="group.group"
+              class="nav-link"
             >
               <router-link
                 :to="{ hash: '#' + group.group, query: route.query }"
@@ -526,8 +526,8 @@ onMounted(() => {
                 @click="scroll('#' + group.group)"
               >
                 <font-awesome-icon
-                  :icon="group.icon"
                   v-if="group.icon"
+                  :icon="group.icon"
                   class="me-2"
                 />
                 {{ group.title }}
@@ -556,11 +556,11 @@ onMounted(() => {
       </nav>
       <div class="d-grid gap-2 mb-2 px-2">
         <button
+          v-if="props.clowmInfo?.exampleParameters"
+          id="exampleDataButton"
           type="button"
           class="btn btn-primary"
-          v-if="props.clowmInfo?.exampleParameters"
           data-bs-toggle="tooltip"
-          id="exampleDataButton"
           data-bs-title="Load example parameters/data for this workflow"
           @click="
             loadParameters({
diff --git a/src/components/parameter-schema/UploadParameterFileModal.vue b/src/components/parameter-schema/UploadParameterFileModal.vue
index b2584c629248d0bc5ccf9be9e97fe04347c946f3..7aabd414311dd21f9678ac2a1f1f90b9ede1fdac 100644
--- a/src/components/parameter-schema/UploadParameterFileModal.vue
+++ b/src/components/parameter-schema/UploadParameterFileModal.vue
@@ -68,7 +68,7 @@ function fileChange() {
 
 <template>
   <bootstrap-modal
-    :modalId="props.modalId"
+    :modal-id="props.modalId"
     :static-backdrop="true"
     modal-label="Confirm Delete Modal"
     size-modifier-modal="lg"
@@ -79,12 +79,12 @@ function fileChange() {
         >Parameter File</label
       >
       <input
+        :id="'parameter-upload-input' + randomIDSuffix"
+        ref="parameterFileInput"
         class="form-control mb-3"
         type="file"
-        :id="'parameter-upload-input' + randomIDSuffix"
         accept="application/json"
         @change="fileChange"
-        ref="parameterFileInput"
       />
       <template v-if="parameterState.error">
         <h5 class="text-danger">Error parsing JSON</h5>
diff --git a/src/components/parameter-schema/description-mode/ParameterDescription.vue b/src/components/parameter-schema/description-mode/ParameterDescription.vue
index cf07dd5e43d414f8bcb15e0b738730d466c12808..33f35f1a8efd775ef256b8a2c1d4749017571530 100644
--- a/src/components/parameter-schema/description-mode/ParameterDescription.vue
+++ b/src/components/parameter-schema/description-mode/ParameterDescription.vue
@@ -54,13 +54,13 @@ const showRightColum = computed<boolean>(
 </script>
 
 <template>
-  <div class="border-top" v-if="showHidden || !hidden">
+  <div v-if="showHidden || !hidden" class="border-top">
     <div class="d-flex pt-2 justify-content-between">
       <div class="flex-fill ps-2">
         <div class="row">
           <div class="fs-6">
-            <font-awesome-icon :icon="icon" v-if="icon" class="me-2" />
-            <code class="border rounded p-1" :id="props.parameterName"
+            <font-awesome-icon v-if="icon" :icon="icon" class="me-2" />
+            <code :id="props.parameterName" class="border rounded p-1"
               >--{{ props.parameterName }}</code
             >
           </div>
@@ -80,7 +80,7 @@ const showRightColum = computed<boolean>(
             <markdown-renderer :markdown="description" />
           </div>
         </div>
-        <div class="row" v-if="enumValues || defaultValue">
+        <div v-if="enumValues || defaultValue" class="row">
           <div v-if="enumValues" class="dropdown w-fit mb-2">
             <button
               class="rounded-1 dropdown-toggle text-reset text-decoration-none border"
@@ -93,7 +93,7 @@ const showRightColum = computed<boolean>(
                 ><code>{{ defaultValue }}</code> (default)</span
               >
             </button>
-            <ul class="dropdown-menu shadow" v-if="enumValues">
+            <ul v-if="enumValues" class="dropdown-menu shadow">
               <li v-for="val in enumValues" :key="val" class="px-2">
                 {{ val }} <span v-if="val === defaultValue">(default)</span>
               </li>
@@ -105,17 +105,17 @@ const showRightColum = computed<boolean>(
         </div>
       </div>
       <div
-        class="col-auto d-flex flex-column align-items-end flex-fill"
         v-if="showRightColum"
+        class="col-auto d-flex flex-column align-items-end flex-fill"
       >
         <button
+          v-if="helpText"
           class="btn btn-info btn-sm my-1"
           type="button"
           data-bs-toggle="collapse"
           :data-bs-target="'#helpCollapse' + randomIDSuffix"
           aria-expanded="false"
           :aria-controls="'helpCollapse' + randomIDSuffix"
-          v-if="helpText"
         >
           <font-awesome-icon icon="fa-solid fa-circle-info" />
           Help
@@ -128,7 +128,7 @@ const showRightColum = computed<boolean>(
         >
       </div>
     </div>
-    <div class="collapse" :id="'helpCollapse' + randomIDSuffix" v-if="helpText">
+    <div v-if="helpText" :id="'helpCollapse' + randomIDSuffix" class="collapse">
       <div class="p-2 pb-0 border rounded m-2 flex-shrink-1">
         <markdown-renderer class="helpTextCode" :markdown="helpText" />
         <span v-if="parameterPattern" class="mb-2"
diff --git a/src/components/parameter-schema/description-mode/ParameterGroupDescription.vue b/src/components/parameter-schema/description-mode/ParameterGroupDescription.vue
index 125e29245ee98bf56a08c9b37239f254b1fe5190..acd145139016082edfbba47cc5f3df6780e2d26d 100644
--- a/src/components/parameter-schema/description-mode/ParameterGroupDescription.vue
+++ b/src/components/parameter-schema/description-mode/ParameterGroupDescription.vue
@@ -42,10 +42,10 @@ const parameters = computed<Record<string, never>>(
 </script>
 
 <template>
-  <div class="mb-5" v-if="props.showHidden || !groupHidden">
+  <div v-if="props.showHidden || !groupHidden" class="mb-5">
     <div class="row">
       <h2 :id="props.parameterGroupName">
-        <font-awesome-icon :icon="icon" class="me-3" v-if="icon" />{{ title }}
+        <font-awesome-icon v-if="icon" :icon="icon" class="me-3" />{{ title }}
       </h2>
       <h4>{{ description }}</h4>
     </div>
diff --git a/src/components/parameter-schema/form-mode/ParameterBooleanInput.vue b/src/components/parameter-schema/form-mode/ParameterBooleanInput.vue
index 74faa96ef47b7248ba19bb155420012c287ac1be..75529fc9efbdf31699b0aa024728cc8c03ceec64 100644
--- a/src/components/parameter-schema/form-mode/ParameterBooleanInput.vue
+++ b/src/components/parameter-schema/form-mode/ParameterBooleanInput.vue
@@ -59,22 +59,22 @@ onMounted(() => {
         >True</label
       >
       <input
+        :id="'trueOption' + randomIDSuffix"
+        v-model="model"
         class="form-check-input"
         type="radio"
         :name="'inlineRadioOptions' + randomIDSuffix"
-        :id="'trueOption' + randomIDSuffix"
         :value="true"
-        v-model="model"
       />
     </div>
     <div class="form-check form-check-inline mb-0">
       <input
+        :id="'falseOption' + randomIDSuffix"
+        v-model="model"
         class="form-check-input"
         type="radio"
         :name="'inlineRadioOptions' + randomIDSuffix"
-        :id="'falseOption' + randomIDSuffix"
         :value="false"
-        v-model="model"
       />
       <label class="form-check-label" :for="'falseOption' + randomIDSuffix"
         >False</label
diff --git a/src/components/parameter-schema/form-mode/ParameterFileInput.vue b/src/components/parameter-schema/form-mode/ParameterFileInput.vue
index ea53eba4fd99860c067d1b44ed966b2a5d8a2355..ac590d8e57b346fb788b29073302c1415a629b7a 100644
--- a/src/components/parameter-schema/form-mode/ParameterFileInput.vue
+++ b/src/components/parameter-schema/form-mode/ParameterFileInput.vue
@@ -101,7 +101,6 @@ const foldersInBucket = computed<string[]>(() =>
   (s3ObjectRepository.objectMapping[s3Path.bucket ?? ""] ?? [])
     .filter((obj) => obj.Key != undefined)
     .map((obj) => {
-      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
       const parts = obj.Key!.split("/");
       return parts
         .slice(0, parts.length - 1)
@@ -116,7 +115,7 @@ const foldersInBucket = computed<string[]>(() =>
 const filesInBucket = computed<string[]>(() =>
   (s3ObjectRepository.objectMapping[s3Path.bucket ?? ""] ?? [])
     .filter((obj) => !obj.Key?.endsWith("/"))
-    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+
     .map((obj) => obj.Key!),
 );
 
@@ -192,16 +191,16 @@ onMounted(() => {
     </option>
   </select>
   <input
+    v-model="s3Path.key"
     class="form-control"
     :list="'keys-options-' + randomIDSuffix"
     :class="inputDynamicClass"
     placeholder="Type to search in bucket..."
     :required="props.required && props.parameter['format'] === 'file-path'"
-    v-model="s3Path.key"
     :pattern="props.parameter['pattern']"
   />
   <datalist :id="'keys-options-' + randomIDSuffix">
-    <option v-for="obj in keyDataList" :value="obj" :key="obj" />
+    <option v-for="obj in keyDataList" :key="obj" :value="obj" />
   </datalist>
   <button
     v-if="props.allowRaw"
diff --git a/src/components/parameter-schema/form-mode/ParameterGroupForm.vue b/src/components/parameter-schema/form-mode/ParameterGroupForm.vue
index 7683a99675e69b9c0a19923a00faf7aa12fa1b5b..6d3235eae10864efb5758eeac2b5dd0e6ce3eddf 100644
--- a/src/components/parameter-schema/form-mode/ParameterGroupForm.vue
+++ b/src/components/parameter-schema/form-mode/ParameterGroupForm.vue
@@ -75,12 +75,12 @@ function parameterId(parameterName: string): string {
       (!props.showOptional && !groupRequired)
     "
   >
-    <h3 class="card-header" :id="props.parameterGroupName">
-      <font-awesome-icon :icon="icon" class="me-2" v-if="icon" />
+    <h3 :id="props.parameterGroupName" class="card-header">
+      <font-awesome-icon v-if="icon" :icon="icon" class="me-2" />
       {{ title }}
     </h3>
     <div class="card-body">
-      <h5 class="card-title" v-if="description">{{ description }}</h5>
+      <h5 v-if="description" class="card-title">{{ description }}</h5>
       <template
         v-for="(parameter, parameterName) in parameters"
         :key="parameterName"
@@ -102,14 +102,14 @@ function parameterId(parameterName: string): string {
           >
           <div class="input-group">
             <span
-              class="input-group-text border-end-0 border border-secondary"
               v-if="parameter['fa_icon']"
+              class="input-group-text border-end-0 border border-secondary"
             >
               <font-awesome-icon :icon="parameter['fa_icon']" />
             </span>
             <parameter-input
-              :parameter="parameter"
               v-model="model[parameterName]"
+              :parameter="parameter"
               :required="parameterRequired(props.parameterGroup, parameterName)"
               border="secondary"
               :resource-parameter="
@@ -119,8 +119,8 @@ function parameterId(parameterName: string): string {
               :mapping="props.mapping?.[parameterName]"
             />
             <span
-              class="input-group-text cursor-pointer px-2 border border-secondary"
               v-if="parameter['help_text']"
+              class="input-group-text cursor-pointer px-2 border border-secondary"
               data-bs-toggle="collapse"
               :data-bs-target="'#help-collapse-' + parameterId(parameterName)"
               aria-expanded="false"
@@ -136,9 +136,9 @@ function parameterId(parameterName: string): string {
             <markdown-renderer :markdown="parameter['description']" />
           </label>
           <div
-            class="collapse"
-            :id="'help-collapse-' + parameterId(parameterName)"
             v-if="parameter['help_text']"
+            :id="'help-collapse-' + parameterId(parameterName)"
+            class="collapse"
           >
             <div class="p-2 pb-0 mx-2 mb-3 flex-shrink-1 border rounded">
               <markdown-renderer
diff --git a/src/components/parameter-schema/form-mode/ParameterInput.vue b/src/components/parameter-schema/form-mode/ParameterInput.vue
index a13241fb5785e4b42599909d9c7b5bbd54dc38a1..3e4a76f8125ce654c0a3a13f27e6c8521ad4579c 100644
--- a/src/components/parameter-schema/form-mode/ParameterInput.vue
+++ b/src/components/parameter-schema/form-mode/ParameterInput.vue
@@ -45,52 +45,52 @@ const parameterType = computed<string>(
   />
   <parameter-number-input
     v-else-if="parameterType === 'number' || parameterType === 'integer'"
-    :parameter="parameter"
     v-model="model"
+    :parameter="parameter"
     :required="required"
     :size-modifier="sizeModifier"
     :border="border"
   />
   <parameter-boolean-input
     v-else-if="parameterType === 'boolean'"
-    :parameter="parameter"
     v-model="model"
+    :parameter="parameter"
     :border="border"
   />
   <parameter-enum-input
     v-else-if="parameter['enum']"
+    v-model="model"
     :required="required"
     :parameter="parameter"
-    v-model="model"
     :size-modifier="sizeModifier"
     :border="border"
   />
   <template v-else>
     <parameter-resource-input
       v-if="resourceParameter && !rawInput"
+      v-model="model"
       :parameter="parameter"
       :required="required"
-      v-model="model"
       :size-modifier="sizeModifier"
       :border="border"
-      @switch-to-raw="rawInput = true"
       :allow-raw="allowRaw"
+      @switch-to-raw="rawInput = true"
     />
     <parameter-file-input
       v-else-if="parameter['format'] && !rawInput && !forceRawFile"
+      v-model="model"
       :required="required"
       :parameter="parameter"
-      v-model="model"
       :size-modifier="sizeModifier"
       :border="border"
-      @switch-to-raw="rawInput = true"
       :allow-raw="allowRaw"
+      @switch-to-raw="rawInput = true"
     />
     <parameter-string-input
       v-else
+      v-model="model"
       :parameter="parameter"
       :required="required"
-      v-model="model"
       :size-modifier="sizeModifier"
       :border="border"
       :resource-parameter="resourceParameter"
diff --git a/src/components/parameter-schema/form-mode/ParameterNumberInput.vue b/src/components/parameter-schema/form-mode/ParameterNumberInput.vue
index 11fdfe9e49bf0d4789ba94d3dc6ecea0844f76a7..1a37ea7f2db40cbf3e11460bc82676a9c586f1f4 100644
--- a/src/components/parameter-schema/form-mode/ParameterNumberInput.vue
+++ b/src/components/parameter-schema/form-mode/ParameterNumberInput.vue
@@ -36,13 +36,13 @@ const dynamicCssClasses = computed<string[]>(() => {
 
 <template>
   <input
+    v-model="model"
     class="form-control flex-fill"
     :class="dynamicCssClasses"
     type="number"
     :max="props.parameter['maximum']"
     :min="props.parameter['minimum']"
     :step="props.parameter['type'] === 'integer' ? 1 : 0.0001"
-    v-model="model"
     :required="props.required"
     :aria-describedby="props.helpId"
   />
diff --git a/src/components/parameter-schema/form-mode/ParameterResourceInput.vue b/src/components/parameter-schema/form-mode/ParameterResourceInput.vue
index 0a4a3efacc7bb824ec479487c7d66b02b657e232..d9dd92e0eab7f5e00f628f5944c2274e1679ddf9 100644
--- a/src/components/parameter-schema/form-mode/ParameterResourceInput.vue
+++ b/src/components/parameter-schema/form-mode/ParameterResourceInput.vue
@@ -169,11 +169,11 @@ onMounted(() => {
     >
     <option selected disabled value="">Please select a resource</option>
     <option
-      v-for="resource in resourceRepository.resources"
-      :key="resource.resource_id"
-      :value="resource.resource_id"
+      v-for="availableResource in resourceRepository.resources"
+      :key="availableResource.resource_id"
+      :value="availableResource.resource_id"
     >
-      {{ resource.name }}
+      {{ availableResource.name }}
     </option>
   </select>
   <select
@@ -181,11 +181,11 @@ onMounted(() => {
     :class="selectDynamicClass"
     :required="resource.resource_id.length > 0"
     :value="resource.resource_version_id"
+    :disabled="resource.resource_id.length === 0"
     @change="
       (event) =>
         updateResourceVersionId((event.target as HTMLSelectElement)?.value)
     "
-    :disabled="resource.resource_id.length === 0"
   >
     <option disabled selected value="">Please select a version</option>
     <option
@@ -199,6 +199,7 @@ onMounted(() => {
     </option>
   </select>
   <input
+    v-model="resource.suffix"
     type="text"
     class="form-control"
     :class="inputDynamicClass"
@@ -206,7 +207,6 @@ onMounted(() => {
     minlength="2"
     maxlength="256"
     pattern="\/\S*"
-    v-model="resource.suffix"
     :list="'resource-tree-options-' + randomIDSuffix"
   />
   <datalist :id="'resource-tree-options-' + randomIDSuffix">
@@ -214,8 +214,8 @@ onMounted(() => {
       v-for="file in resourceRepository.resourceTreeList[
         resource.resource_version_id
       ] ?? []"
-      :value="file"
       :key="file"
+      :value="file"
     />
   </datalist>
   <button
diff --git a/src/components/parameter-schema/form-mode/ParameterStringInput.vue b/src/components/parameter-schema/form-mode/ParameterStringInput.vue
index ef92f2ec9b8e2de62dd19fd32a66180419ac6f54..95bab5216a091f18204e4af7f20c736349f841af 100644
--- a/src/components/parameter-schema/form-mode/ParameterStringInput.vue
+++ b/src/components/parameter-schema/form-mode/ParameterStringInput.vue
@@ -55,10 +55,10 @@ const helpTextPresent = computed<boolean>(() => props.parameter["help_text"]);
 <template>
   <input
     ref="stringInput"
+    v-model="model"
     class="form-control"
     :class="dynamicCssClass"
     type="text"
-    v-model="model"
     :required="props.required"
     :aria-describedby="props.helpId"
     :pattern="pattern"
diff --git a/src/components/resources/RequestReviewButton.vue b/src/components/resources/RequestReviewButton.vue
index fa7599d20ede04a076c7dad79c4cce5d112e62d6..da25a44f25ddf1c2623b08ca59d3ea00e9c702b9 100644
--- a/src/components/resources/RequestReviewButton.vue
+++ b/src/components/resources/RequestReviewButton.vue
@@ -32,9 +32,9 @@ onMounted(() => {
       :id="'refresh-s3-' + randomIDSuffix"
       type="button"
       class="btn btn-primary"
-      @click="emit('click-refresh')"
       data-bs-toggle="tooltip"
       data-bs-title="Check if uploaded resource is ready"
+      @click="emit('click-refresh')"
     >
       <font-awesome-icon icon="fa-solid fa-arrow-rotate-right" />
     </button>
diff --git a/src/components/resources/ResourceCard.vue b/src/components/resources/ResourceCard.vue
index ccc4736d4465af9bfc519ad6e920b936173913e7..1ed4c71574d300dd9dfbfe7c339519c326bbe8ab 100644
--- a/src/components/resources/ResourceCard.vue
+++ b/src/components/resources/ResourceCard.vue
@@ -1,10 +1,10 @@
 <script setup lang="ts">
-import {
-  type FileTree,
-  type ResourceOut,
-  type ResourceVersionOut,
-  ResourceVersionStatus,
-} from "@/client";
+import type {
+  FileTree,
+  ResourceOut,
+  ResourceVersionOut,
+} from "@/client/types.gen";
+import { ResourceVersionStatus } from "@/client/types.gen";
 import { computed, onMounted, ref } from "vue";
 import dayjs from "dayjs";
 import CopyToClipboardIcon from "@/components/CopyToClipboardIcon.vue";
@@ -188,14 +188,14 @@ onMounted(() => {
             @click="emit('click-show-otr', resource.resource_id)"
           />
         </div>
-        <div class="btn-group" v-if="props.extended">
+        <div v-if="props.extended" class="btn-group">
           <button
             type="button"
             class="btn btn-outline-success"
             :disabled="props.loading"
-            @click="emit('click-update', props.resource)"
             data-bs-toggle="modal"
             data-bs-target="#updateResourceModal"
+            @click="emit('click-update', props.resource)"
           >
             Update
           </button>
@@ -235,7 +235,7 @@ onMounted(() => {
         <span v-else>{{ props.resource.source }}</span>
       </p>
       <div v-if="!props.loading">
-        <div class="accordion" :id="'accordion-' + props.resource.resource_id">
+        <div :id="'accordion-' + props.resource.resource_id" class="accordion">
           <div
             v-for="(resourceVersion, index) in resourceVersions"
             :key="resourceVersion.resource_version_id"
@@ -283,9 +283,9 @@ onMounted(() => {
                   <button
                     type="button"
                     class="btn btn-primary"
-                    @click="emit('click-request-sync', resourceVersion)"
                     data-bs-toggle="modal"
                     data-bs-target="#request-synchronization-modal"
+                    @click="emit('click-request-sync', resourceVersion)"
                   >
                     Request synchronization
                   </button>
@@ -334,11 +334,11 @@ onMounted(() => {
                   >
                   <div class="input-group fs-4">
                     <div
-                      class="input-group-text hover-info"
                       :id="
                         'tooltip-cluster-path-' +
                         resourceVersion.resource_version_id
                       "
+                      class="input-group-text hover-info"
                       data-bs-toggle="tooltip"
                       data-bs-title="Physical path to access the resource from your workflow"
                     >
@@ -377,10 +377,10 @@ onMounted(() => {
                   >
                   <div class="input-group fs-4 mb-3">
                     <div
-                      class="input-group-text hover-info"
                       :id="
                         'tooltip-s3-path-' + resourceVersion.resource_version_id
                       "
+                      class="input-group-text hover-info"
                       data-bs-toggle="tooltip"
                       data-bs-title="S3 Path under which the resource should be uploaded"
                     >
diff --git a/src/components/resources/modals/CreateResourceModal.vue b/src/components/resources/modals/CreateResourceModal.vue
index dace8d1944c2b84119063799a037691576016839..1a573377b94ed2d00f221d4ace2e887b6a699474 100644
--- a/src/components/resources/modals/CreateResourceModal.vue
+++ b/src/components/resources/modals/CreateResourceModal.vue
@@ -3,7 +3,7 @@ import { reactive, onMounted, ref } from "vue";
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
 import { Modal } from "bootstrap";
 import { useResourceStore } from "@/stores/resources";
-import type { ResourceIn } from "@/client";
+import type { ResourceIn } from "@/client/types.gen";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import { Tooltip } from "bootstrap";
 
@@ -90,7 +90,7 @@ onMounted(() => {
 
 <template>
   <bootstrap-modal
-    :modalId="modalId"
+    :modal-id="modalId"
     static-backdrop
     modal-label="Create Resource Modal"
     v-on="{ 'hidden.bs.modal': modalClosed }"
@@ -99,8 +99,8 @@ onMounted(() => {
     <template #body>
       <form
         id="resourceCreateForm"
-        :class="{ 'was-validated': formState.validated }"
         ref="resourceCreateForm"
+        :class="{ 'was-validated': formState.validated }"
       >
         <div class="mb-3">
           <label for="resourceNameInput" class="form-label"
@@ -108,14 +108,14 @@ onMounted(() => {
           >
           <div class="input-group">
             <input
+              id="resourceNameInput"
+              ref="resourceNameElement"
+              v-model="resource.name"
               type="text"
               class="form-control"
-              id="resourceNameInput"
               required
               minlength="3"
               maxlength="32"
-              v-model="resource.name"
-              ref="resourceNameElement"
             />
             <div class="invalid-feedback">
               <div v-if="formState.resourceNameTaken">
@@ -137,13 +137,13 @@ onMounted(() => {
           </label>
           <div class="input-group">
             <textarea
-              class="form-control"
               id="resourceDescriptionInput"
+              v-model="resource.description"
+              class="form-control"
               required
               rows="3"
               minlength="16"
               maxlength="256"
-              v-model="resource.description"
               placeholder="Describe the purpose of the resource"
             ></textarea>
             <div class="invalid-feedback">
@@ -161,17 +161,17 @@ onMounted(() => {
               <font-awesome-icon icon="fa-solid fa-link" />
             </div>
             <input
-              class="form-control"
               id="resourceSourceInput"
+              v-model="resource.source"
+              class="form-control"
               required
               minlength="8"
               maxlength="264"
-              v-model="resource.source"
               placeholder="The source of the resource (e.g. a link)"
             />
             <div
-              class="input-group-text hover-info"
               id="tooltip-new-resource-source"
+              class="input-group-text hover-info"
               data-bs-toggle="tooltip"
               data-bs-title="The source from where the resource comes"
             >
@@ -186,17 +186,17 @@ onMounted(() => {
               <font-awesome-icon icon="fa-solid fa-tag" />
             </div>
             <input
-              class="form-control"
               id="resourceReleaseInput"
+              v-model="resource.release"
+              class="form-control"
               required
               minlength="3"
               maxlength="32"
-              v-model="resource.release"
               placeholder="Initial release name"
             />
             <div
-              class="input-group-text hover-info"
               id="tooltip-new-resource-release"
+              class="input-group-text hover-info"
               data-bs-toggle="tooltip"
               data-bs-title="The name of the first resource version"
             >
@@ -207,17 +207,17 @@ onMounted(() => {
         <div class="mb-3">
           <div class="form-check fs-5">
             <input
+              id="resourcePrivateInput"
+              v-model="resource.private"
               class="form-check-input"
               type="checkbox"
-              v-model="resource.private"
-              id="resourcePrivateInput"
               :true-value="false"
               :false-value="true"
             />
             <label
+              id="tooltip-new-resource-private"
               class="form-check-label"
               for="resourcePrivateInput"
-              id="tooltip-new-resource-private"
               data-bs-toggle="tooltip"
               data-bs-placement="bottom"
               data-bs-title="Flag if the resource should should be used by other workflow developer"
@@ -228,7 +228,7 @@ onMounted(() => {
         </div>
       </form>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
         Close
       </button>
diff --git a/src/components/resources/modals/ResourceVersionInfoModal.vue b/src/components/resources/modals/ResourceVersionInfoModal.vue
index 62eebb63464088d4d2757c5ae4c8834c6869ff37..3f3395b1a445e419d2b69a2a4b66e7342869eb9c 100644
--- a/src/components/resources/modals/ResourceVersionInfoModal.vue
+++ b/src/components/resources/modals/ResourceVersionInfoModal.vue
@@ -1,6 +1,6 @@
 <script setup lang="ts">
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
-import type { ResourceVersionOut, ResourceOut } from "@/client";
+import type { ResourceVersionOut, ResourceOut } from "@/client/types.gen";
 import CopyToClipboardIcon from "@/components/CopyToClipboardIcon.vue";
 import dayjs from "dayjs";
 import { computed } from "vue";
@@ -43,9 +43,9 @@ const resourceVersion = computed<ResourceVersionOut | undefined>(
           >
           <div class="input-group">
             <input
+              id="resource-version-info-modal-resource-id"
               type="text"
               class="form-control"
-              id="resource-version-info-modal-resource-id"
               readonly
               :value="props.resource?.resource_id"
             />
@@ -63,9 +63,9 @@ const resourceVersion = computed<ResourceVersionOut | undefined>(
           >
           <div class="input-group">
             <input
+              id="resource-version-info-modal-resource-name"
               type="text"
               class="form-control"
-              id="resource-version-info-modal-resource-name"
               readonly
               :value="props.resource?.name"
             />
@@ -81,9 +81,9 @@ const resourceVersion = computed<ResourceVersionOut | undefined>(
           >
           <div class="input-group">
             <input
+              id="resource-version-info-modal-maintainer-id"
               type="text"
               class="form-control"
-              id="resource-version-info-modal-maintainer-id"
               readonly
               :value="props.resource?.maintainer_id"
             />
@@ -101,9 +101,9 @@ const resourceVersion = computed<ResourceVersionOut | undefined>(
           >
           <div class="input-group">
             <input
+              id="resource-version-info-modal-maintainer-name"
               type="text"
               class="form-control"
-              id="resource-version-info-modal-maintainer-name"
               readonly
               :value="nameRepository.getName(props.resource?.maintainer_id)"
             />
@@ -118,8 +118,8 @@ const resourceVersion = computed<ResourceVersionOut | undefined>(
         >
         <div class="input-group">
           <textarea
-            class="form-control"
             id="resource-version-info-modal-resource-description"
+            class="form-control"
             readonly
             rows="2"
             :value="props.resource?.description"
@@ -134,9 +134,9 @@ const resourceVersion = computed<ResourceVersionOut | undefined>(
         >
         <div class="input-group">
           <input
+            id="resource-version-info-modal-resource-source"
             type="text"
             class="form-control"
-            id="resource-version-info-modal-resource-source"
             readonly
             :value="props.resource?.source"
           />
@@ -152,9 +152,9 @@ const resourceVersion = computed<ResourceVersionOut | undefined>(
           >
           <div class="input-group">
             <input
+              id="resource-version-info-modal-resource-version-id"
               type="text"
               class="form-control"
-              id="resource-version-info-modal-resource-version-id"
               readonly
               :value="resourceVersion?.resource_version_id"
             />
@@ -172,9 +172,9 @@ const resourceVersion = computed<ResourceVersionOut | undefined>(
           >
           <div class="input-group">
             <input
+              id="resource-version-info-modal-resource-version-release"
               type="text"
               class="form-control"
-              id="resource-version-info-modal-resource-version-release"
               readonly
               :value="resourceVersion?.release"
             />
@@ -190,9 +190,9 @@ const resourceVersion = computed<ResourceVersionOut | undefined>(
           >
           <div class="input-group">
             <input
+              id="resource-version-info-modal-resource-version-status"
               type="text"
               class="form-control"
-              id="resource-version-info-modal-resource-version-status"
               readonly
               :value="resourceVersion?.status"
             />
@@ -206,9 +206,9 @@ const resourceVersion = computed<ResourceVersionOut | undefined>(
           >
           <div class="input-group">
             <input
+              id="resource-version-info-modal-resource-version-timestamp"
               type="datetime-local"
               class="form-control"
-              id="resource-version-info-modal-resource-version-timestamp"
               readonly
               :value="
                 dayjs
@@ -226,8 +226,8 @@ const resourceVersion = computed<ResourceVersionOut | undefined>(
           >
           <div class="input-group">
             <input
-              class="form-control"
               id="resource-version-info-modal-resource-version-size"
+              class="form-control"
               readonly
               :value="filesize(resourceVersion?.compressed_size ?? 0)"
             />
@@ -242,9 +242,9 @@ const resourceVersion = computed<ResourceVersionOut | undefined>(
         >
         <div class="input-group">
           <input
+            id="resource-version-info-modal-resource-version-s3-path"
             type="text"
             class="form-control"
-            id="resource-version-info-modal-resource-version-s3-path"
             readonly
             :value="resourceVersion?.s3_path"
           />
@@ -253,7 +253,7 @@ const resourceVersion = computed<ResourceVersionOut | undefined>(
           /></span>
         </div>
       </div>
-      <div class="mb-3" v-if="resourceVersion?.cluster_path">
+      <div v-if="resourceVersion?.cluster_path" class="mb-3">
         <label
           for="resource-version-info-modal-resource-version-cluster-path"
           class="form-label"
@@ -261,9 +261,9 @@ const resourceVersion = computed<ResourceVersionOut | undefined>(
         >
         <div class="input-group">
           <input
+            id="resource-version-info-modal-resource-version-cluster-path"
             type="text"
             class="form-control"
-            id="resource-version-info-modal-resource-version-cluster-path"
             readonly
             :value="resourceVersion?.cluster_path"
           />
diff --git a/src/components/resources/modals/UpdateResourceModal.vue b/src/components/resources/modals/UpdateResourceModal.vue
index 3ca43a5edfce1ce4ea809d5ad7e14b2818622678..05e379b25eb2e123d8a1759270a0af3c8dda2e5e 100644
--- a/src/components/resources/modals/UpdateResourceModal.vue
+++ b/src/components/resources/modals/UpdateResourceModal.vue
@@ -3,7 +3,7 @@ import { reactive, onMounted, ref } from "vue";
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
 import { Modal } from "bootstrap";
 import { useResourceStore } from "@/stores/resources";
-import type { ResourceVersionIn, ResourceOut } from "@/client";
+import type { ResourceVersionIn, ResourceOut } from "@/client/types.gen";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import { Tooltip } from "bootstrap";
 
@@ -60,11 +60,11 @@ onMounted(() => {
 
 <template>
   <bootstrap-modal
-    :modalId="modalId"
+    :modal-id="modalId"
     static-backdrop
     modal-label="Update Resource Modal"
-    v-on="{ 'hidden.bs.modal': modalClosed }"
     :track-modal-value="resource.resource_id"
+    v-on="{ 'hidden.bs.modal': modalClosed }"
   >
     <template #header>
       Update Resource <b>{{ props.resource.name }}</b></template
@@ -72,8 +72,8 @@ onMounted(() => {
     <template #body>
       <form
         id="resourceUpdateForm"
-        :class="{ 'was-validated': formState.validated }"
         ref="resourceUpdateForm"
+        :class="{ 'was-validated': formState.validated }"
       >
         <div class="mb-3">
           <label for="resourceUpdateReleaseInput" class="form-label">
@@ -84,17 +84,17 @@ onMounted(() => {
               <font-awesome-icon icon="fa-solid fa-tag" />
             </div>
             <input
-              class="form-control"
               id="resourceUpdateReleaseInput"
+              v-model="resourceUpdate.release"
+              class="form-control"
               required
               minlength="3"
               maxlength="32"
-              v-model="resourceUpdate.release"
               placeholder="Next release name"
             />
             <div
-              class="input-group-text hover-info"
               id="tooltip-update-resource-release"
+              class="input-group-text hover-info"
               data-bs-toggle="tooltip"
               data-bs-title="The name of the next resource version"
             >
@@ -104,7 +104,7 @@ onMounted(() => {
         </div>
       </form>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
         Close
       </button>
diff --git a/src/components/resources/modals/UploadResourceInfoModal.vue b/src/components/resources/modals/UploadResourceInfoModal.vue
index 6da7a2e8c29fd997434e6bd868624fa94bc9dd88..f73c456532f0563d68068bfc49726dc8e04ed635 100644
--- a/src/components/resources/modals/UploadResourceInfoModal.vue
+++ b/src/components/resources/modals/UploadResourceInfoModal.vue
@@ -4,7 +4,7 @@ import {
   type ResourceVersionOut,
   ResourceVersionStatus,
   type S3Key,
-} from "@/client";
+} from "@/client/types.gen";
 import { computed, onMounted, ref, watch } from "vue";
 import { environment } from "@/environment";
 import CopyToClipboardIcon from "@/components/CopyToClipboardIcon.vue";
@@ -138,9 +138,9 @@ onMounted(() => {
 
 <template>
   <bootstrap-modal
-    :modalId="props.modalId"
+    :modal-id="props.modalId"
     modal-label="Upload Resource Info Modal"
-    sizeModifierModal="lg"
+    size-modifier-modal="lg"
     :track-modal-value="resourceVersion?.resource_version_id"
   >
     <template #header>How to upload a resource to the cluster</template>
diff --git a/src/components/transitions/CardTransitionGroup.vue b/src/components/transitions/CardTransitionGroup.vue
index 677b5fac67f0363950f3774b8162db4e42f261d1..5c581ecc6d13e4395bc7b6cc2f1e2fac799cdb1e 100644
--- a/src/components/transitions/CardTransitionGroup.vue
+++ b/src/components/transitions/CardTransitionGroup.vue
@@ -6,7 +6,7 @@ defineProps({
 
 <template>
   <transition-group name="card" :tag="tag">
-    <slot></slot>
+    <slot />
   </transition-group>
 </template>
 
diff --git a/src/components/transitions/ListTransitionGroup.vue b/src/components/transitions/ListTransitionGroup.vue
index 59f342d62396e5ad6f15e1adeb0cca58299d1f56..39f268a4f42010fc59075726e67fdfeb5f4dd77d 100644
--- a/src/components/transitions/ListTransitionGroup.vue
+++ b/src/components/transitions/ListTransitionGroup.vue
@@ -6,7 +6,7 @@ defineProps({
 
 <template>
   <transition-group name="list" :tag="tag">
-    <slot></slot>
+    <slot />
   </transition-group>
 </template>
 
diff --git a/src/components/transitions/WorkflowModeTransitionGroup.vue b/src/components/transitions/WorkflowModeTransitionGroup.vue
index 13d5944c31065e17b099cae95787750e4d284ccb..b2ca9cd8b054bb4f60fd478c6e8a98a3676f2be0 100644
--- a/src/components/transitions/WorkflowModeTransitionGroup.vue
+++ b/src/components/transitions/WorkflowModeTransitionGroup.vue
@@ -2,7 +2,7 @@
 
 <template>
   <transition-group name="modelist" tag="div">
-    <slot></slot>
+    <slot />
   </transition-group>
 </template>
 
diff --git a/src/components/user/CreateApiTokenModal.vue b/src/components/user/CreateApiTokenModal.vue
index 4304fdcfea040beafe05474ff491755f76c21ccb..ce4100db257acba9755dd0c5475ad31aa896116f 100644
--- a/src/components/user/CreateApiTokenModal.vue
+++ b/src/components/user/CreateApiTokenModal.vue
@@ -1,6 +1,10 @@
 <script setup lang="ts">
 import { onMounted, reactive, ref } from "vue";
-import { type ApiTokenIn, type ApiTokenPrivateOut, ScopeEnum } from "@/client";
+import {
+  type ApiTokenIn,
+  type ApiTokenPrivateOut,
+  ScopeEnum,
+} from "@/client/types.gen";
 import { Modal } from "bootstrap";
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
 import dayjs from "dayjs";
@@ -73,31 +77,31 @@ onMounted(() => {
 
 <template>
   <bootstrap-modal
-    :modalId="modalId"
+    :modal-id="modalId"
     static-backdrop
     modal-label="Create API Token Modal"
-    v-on="{ 'hidden.bs.modal': modalClosed }"
     size-modifier-modal="lg"
+    v-on="{ 'hidden.bs.modal': modalClosed }"
   >
     <template #header> Create personal API token</template>
     <template #body>
       <form
         id="api-token-create-form"
-        :class="{ 'was-validated': formState.validated }"
         ref="tokenCreateForm"
+        :class="{ 'was-validated': formState.validated }"
         @submit.prevent="createToken"
       >
         <div class="mb-3">
           <label for="token-name-input" class="form-label">Token name</label>
           <input
+            id="token-name-input"
+            v-model="tokenIn.name"
             type="text"
             class="form-control"
-            id="token-name-input"
             required
             minlength="3"
             maxlength="63"
             pattern="^[a-z\d\-]+$"
-            v-model="tokenIn.name"
           />
           <div class="invalid-feedback">
             <div>
@@ -115,8 +119,8 @@ onMounted(() => {
           >
           <div :class="{ 'input-group': tokenIn.expires_at != undefined }">
             <input
-              class="form-control"
               id="expires-at-input"
+              class="form-control"
               type="date"
               :min="dayjs().add(1, 'day').format('YYYY-MM-DD')"
               :value="
@@ -146,11 +150,11 @@ onMounted(() => {
             class="form-check mb-2"
           >
             <input
+              :id="`scope-input-${scope}`"
+              v-model="tokenIn.scopes"
               class="form-check-input"
               type="checkbox"
               :value="scope"
-              :id="`scope-input-${scope}`"
-              v-model="tokenIn.scopes"
             />
             <label
               class="form-check-label pt-1"
@@ -167,7 +171,7 @@ onMounted(() => {
         </div>
       </form>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
         Close
       </button>
diff --git a/src/components/workflows/WorkflowCard.vue b/src/components/workflows/WorkflowCard.vue
index 451a29b3c1f517014bb77c37a476df62a72c83c1..f5496bb92b75c1279acd55d7cad1d738834088fe 100644
--- a/src/components/workflows/WorkflowCard.vue
+++ b/src/components/workflows/WorkflowCard.vue
@@ -1,5 +1,5 @@
 <script setup lang="ts">
-import type { WorkflowOut, WorkflowVersion } from "@/client";
+import type { WorkflowOut, WorkflowVersion } from "@/client/types.gen";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import dayjs from "dayjs";
 import { onMounted, computed } from "vue";
diff --git a/src/components/workflows/WorkflowStatisticsChart.vue b/src/components/workflows/WorkflowStatisticsChart.vue
index ea9fa1a70c4b94068a4c220b8de44199d62515e7..7888fe12959630c82b553877f879e94b9d4d77a6 100644
--- a/src/components/workflows/WorkflowStatisticsChart.vue
+++ b/src/components/workflows/WorkflowStatisticsChart.vue
@@ -13,7 +13,7 @@ import {
 import "@/utils/DayjsAdapter";
 import type { Element as ChartElement, Point, ChartItem } from "chart.js";
 import { onMounted, ref, watch, computed } from "vue";
-import type { WorkflowStatistic } from "@/client";
+import type { WorkflowStatistic } from "@/client/types.gen";
 import dayjs from "dayjs";
 
 const canvas = ref<ChartItem | undefined>(undefined);
@@ -285,8 +285,8 @@ onMounted(() => {
       <button
         type="button"
         class="btn btn-outline-secondary me-2"
-        @click="resetZoom"
         :disabled="disableZoomReset"
+        @click="resetZoom"
       >
         Reset Zoom
       </button>
diff --git a/src/components/workflows/WorkflowWithVersionsCard.vue b/src/components/workflows/WorkflowWithVersionsCard.vue
index 4c5366ce6f8d97ab0f691aa35c545caff53ab855..ce8f13ffdc81e7d8b86216a8956695cea9fdc3d5 100644
--- a/src/components/workflows/WorkflowWithVersionsCard.vue
+++ b/src/components/workflows/WorkflowWithVersionsCard.vue
@@ -1,10 +1,13 @@
 <script setup lang="ts">
+import {
+  WorkflowVersionStatus,
+  WorkflowExecutionStatus,
+} from "@/client/types.gen";
 import type {
   AnonymizedWorkflowExecution,
   WorkflowOut,
   WorkflowVersion,
-} from "@/client";
-import { WorkflowVersionStatus, WorkflowExecutionStatus } from "@/client";
+} from "@/client/types.gen";
 import { computed, onMounted, ref } from "vue";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import dayjs from "dayjs";
@@ -128,9 +131,9 @@ onMounted(() => {
             type="button"
             class="btn btn-outline-success"
             :class="{ disabled: props.loading }"
-            @click="emit('workflow-update-click', workflow)"
             data-bs-toggle="modal"
             data-bs-target="#updateWorkflowModal"
+            @click="emit('workflow-update-click', workflow)"
           >
             Update
           </button>
@@ -158,12 +161,12 @@ onMounted(() => {
               <a
                 class="dropdown-item"
                 href="#"
-                @click.prevent="
-                  emit('workflow-update-credentials-click', props.workflow)
-                "
                 :class="{ disabled: props.loading }"
                 data-bs-toggle="modal"
                 data-bs-target="#updateWorkflowCredentialsModal"
+                @click.prevent="
+                  emit('workflow-update-credentials-click', props.workflow)
+                "
                 >Update Credentials</a
               >
             </li>
@@ -186,10 +189,10 @@ onMounted(() => {
               <a
                 class="dropdown-item text-danger"
                 href="#"
-                @click.prevent="emit('workflow-delete-click', props.workflow)"
                 :class="{ disabled: props.loading }"
                 data-bs-toggle="modal"
                 data-bs-target="#deleteWorkflowModal"
+                @click.prevent="emit('workflow-delete-click', props.workflow)"
                 >Delete
                 <font-awesome-icon icon="fa-solid fa-trash" class="ms-2" />
               </a>
@@ -203,10 +206,10 @@ onMounted(() => {
         ></span>
         <span
           v-else
-          @click="truncateDescription = false"
           :class="{
             'cursor-pointer': truncateDescription,
           }"
+          @click="truncateDescription = false"
           >{{ props.workflow.short_description }}</span
         >
       </p>
@@ -298,10 +301,10 @@ onMounted(() => {
                     v-if="version.icon_url != null"
                     :src="version.icon_url"
                     alt="Workflow Version Icon"
-                    @click="emit('workflow-update-icon-click', version)"
                     class="cursor-pointer"
                     data-bs-toggle="modal"
                     data-bs-target="#updateWorkflowVersionIconModal"
+                    @click="emit('workflow-update-icon-click', version)"
                   />
                 </td>
                 <td class="text-end">
diff --git a/src/components/workflows/modals/ArbitraryWorkflowModal.vue b/src/components/workflows/modals/ArbitraryWorkflowModal.vue
index ad34a85766671009ab99060e01bc4ff4a27934b4..d207745dda843330d1a749dc46f2eb3289d4c3c6 100644
--- a/src/components/workflows/modals/ArbitraryWorkflowModal.vue
+++ b/src/components/workflows/modals/ArbitraryWorkflowModal.vue
@@ -6,11 +6,8 @@ import { useRouter } from "vue-router";
 import { GitRepository, determineGitIcon } from "@/utils/GitRepository";
 import { Collapse, Modal } from "bootstrap";
 import { type DocLocations, useWorkflowStore } from "@/stores/workflows";
-import {
-  DocumentationEnum,
-  NextflowVersion,
-  type WorkflowModeOut,
-} from "@/client";
+import { DocumentationEnum, NextflowVersion } from "@/client/types.gen";
+import type { WorkflowModeOut } from "@/client/types.gen";
 import { environment } from "@/environment";
 import { useS3KeyStore } from "@/stores/s3keys";
 import { useResourceStore } from "@/stores/resources";
@@ -397,7 +394,7 @@ function checkRepository() {
             }
           }
         });
-    } catch (e) {
+    } catch {
       formState.unsupportedRepository = true;
       workflowRepositoryElement.value?.setCustomValidity(
         "Repository is not supported",
@@ -426,24 +423,24 @@ onMounted(() => {
 
 <template>
   <bootstrap-modal
-    :modalId="modalId"
+    :modal-id="modalId"
     :static-backdrop="false"
     modal-label="Test My Workflow Modal"
-    v-on="{ 'hidden.bs.modal': modalClosed }"
     size-modifier-modal="lg"
+    v-on="{ 'hidden.bs.modal': modalClosed }"
   >
-    <template v-slot:header>Test workflow prior registration</template>
-    <template v-slot:body>
+    <template #header>Test workflow prior registration</template>
+    <template #body>
       <h5>Choose the environment for workflow execution</h5>
       <div class="btn-group justify-content-center w-100 mb-2" role="group">
         <input
+          id="clowm-outlined"
+          v-model="activeTab"
           type="radio"
           class="btn-check"
           name="execution-environment-choice"
-          id="clowm-outlined"
           autocomplete="off"
           checked
-          v-model="activeTab"
           value="clowm"
         />
         <label class="btn btn-outline-primary" for="clowm-outlined">
@@ -451,12 +448,12 @@ onMounted(() => {
           CloWM native execution</label
         >
         <input
+          id="cluster-outlined"
+          v-model="activeTab"
           type="radio"
           class="btn-check"
           name="execution-environment-choice"
-          id="cluster-outlined"
           autocomplete="off"
-          v-model="activeTab"
           value="cluster"
         />
         <label class="btn btn-outline-primary" for="cluster-outlined">
@@ -464,12 +461,12 @@ onMounted(() => {
           Emulated CloWM environment
         </label>
         <input
+          id="cli-outlined"
+          v-model="activeTab"
           type="radio"
           class="btn-check"
           name="execution-environment-choice"
-          id="cli-outlined"
           autocomplete="off"
-          v-model="activeTab"
           value="local"
         />
         <label class="btn btn-outline-primary" for="cli-outlined">
@@ -498,10 +495,10 @@ onMounted(() => {
         <pre class="w-100 rounded-1"><code>{{ nextflowConfig }}</code></pre>
       </div>
       <form
-        :hidden="activeTab !== 'clowm'"
         id="arbitraryWorkflowForm"
-        :class="{ 'was-validated': formState.validated }"
         ref="arbitraryWorkflowForm"
+        :hidden="activeTab !== 'clowm'"
+        :class="{ 'was-validated': formState.validated }"
       >
         <p>
           Fill out the form to run an execution of your workflow on the CloWM
@@ -516,15 +513,15 @@ onMounted(() => {
               <font-awesome-icon :icon="gitIcon" />
             </div>
             <input
+              id="arbitraryWorkflowRepositoryInput"
+              ref="workflowRepositoryElement"
+              v-model="workflow.repository_url"
               type="url"
               class="form-control"
-              id="arbitraryWorkflowRepositoryInput"
               placeholder="https://..."
               required
-              ref="workflowRepositoryElement"
-              v-model="workflow.repository_url"
-              @change="formState.allowUpload = false"
               aria-describedby="gitRepoProviderHelp"
+              @change="formState.allowUpload = false"
             />
           </div>
           <div id="gitRepoProviderHelp" class="form-text">
@@ -545,16 +542,16 @@ onMounted(() => {
               <font-awesome-icon icon="fa-solid fa-code-commit" />
             </div>
             <input
+              id="workflowGitCommitInput"
+              ref="workflowGitCommitHashElement"
+              v-model="workflow.git_commit_hash"
               type="text"
               class="form-control text-lowercase"
-              id="workflowGitCommitInput"
               placeholder="ba8bcd9..."
               required
-              ref="workflowGitCommitHashElement"
               maxlength="40"
               minlength="40"
               pattern="^[0-9a-f]+$"
-              v-model="workflow.git_commit_hash"
               @change="formState.allowUpload = false"
             />
           </div>
@@ -584,10 +581,10 @@ onMounted(() => {
             >Nextflow version</label
           >
           <select
-            class="form-select"
             id="workflowNextflowVersionInput"
-            required
             v-model="workflow.nextflow_version"
+            class="form-select"
+            required
           >
             <option
               v-for="version in Object.values(NextflowVersion).reverse()"
@@ -601,18 +598,18 @@ onMounted(() => {
         <div class="mb-3">
           <div class="form-check fs-5">
             <input
+              id="privateRepositoryCheckbox"
+              v-model="repositoryCredentials.privateRepo"
               class="form-check-input"
               type="checkbox"
-              v-model="repositoryCredentials.privateRepo"
-              id="privateRepositoryCheckbox"
-              @change="formState.allowUpload = false"
               aria-controls="#privateRepositoryCollapse"
+              @change="formState.allowUpload = false"
             />
             <label class="form-check-label" for="privateRepositoryCheckbox">
               Enable Private Git Repository
             </label>
           </div>
-          <div class="collapse" id="privateRepositoryCollapse">
+          <div id="privateRepositoryCollapse" class="collapse">
             <label for="arbitraryRepositoryTokenInput" class="form-label"
               >Token</label
             >
@@ -621,13 +618,13 @@ onMounted(() => {
                 <font-awesome-icon icon="fa-solid fa-key" />
               </div>
               <input
-                type="password"
-                class="form-control"
                 id="arbitraryRepositoryTokenInput"
                 v-model="repositoryCredentials.token"
-                @change="formState.allowUpload = false"
+                type="password"
+                class="form-control"
                 :required="repositoryCredentials.privateRepo"
                 aria-controls="#tokenHelpCollapse"
+                @change="formState.allowUpload = false"
               />
               <div
                 class="input-group-text cursor-pointer hover-info"
@@ -636,7 +633,7 @@ onMounted(() => {
                 <font-awesome-icon icon="fa-solid fa-circle-question" />
               </div>
             </div>
-            <div class="collapse" id="tokenHelpCollapse">
+            <div id="tokenHelpCollapse" class="collapse">
               <div class="card card-body mt-3">
                 <h5>GitHub</h5>
                 <p>
@@ -670,18 +667,18 @@ onMounted(() => {
         <div class="mb-3">
           <div class="form-check fs-5">
             <input
+              id="workflowModeCheckbox"
+              v-model="workflowMode.modeEnabled"
               class="form-check-input"
               type="checkbox"
-              v-model="workflowMode.modeEnabled"
-              id="workflowModeCheckbox"
-              @change="formState.allowUpload = false"
               aria-controls="#workflowModeCollapse"
+              @change="formState.allowUpload = false"
             />
             <label class="form-check-label" for="workflowModeCheckbox">
               Enable Workflow Mode
             </label>
           </div>
-          <div class="collapse" id="workflowModeCollapse">
+          <div id="workflowModeCollapse" class="collapse">
             <div class="row">
               <div class="col-6 mb-2">
                 <label for="arbitraryModeEntryInput" class="form-label"
@@ -692,11 +689,11 @@ onMounted(() => {
                     <font-awesome-icon icon="fa-solid fa-tag" />
                   </div>
                   <input
+                    id="arbitraryModeEntryInput"
+                    v-model="workflowMode.mode.entrypoint"
                     type="text"
                     class="form-control"
-                    id="arbitraryModeEntryInput"
                     maxlength="128"
-                    v-model="workflowMode.mode.entrypoint"
                     :required="workflowMode.modeEnabled"
                     @change="formState.allowUpload = false"
                   />
@@ -711,12 +708,12 @@ onMounted(() => {
                     <font-awesome-icon icon="fa-solid fa-file-code" />
                   </div>
                   <input
+                    id="modeSchemaInput-"
+                    v-model="workflowMode.mode.schema_path"
                     type="text"
                     class="form-control"
-                    id="modeSchemaInput-"
                     maxlength="128"
                     pattern=".*\.json$"
-                    v-model="workflowMode.mode.schema_path"
                     :required="workflowMode.modeEnabled"
                     @change="formState.allowUpload = false"
                   />
@@ -727,13 +724,13 @@ onMounted(() => {
         </div>
       </form>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button
         v-if="activeTab === 'clowm'"
         type="button"
         class="btn btn-info me-auto"
-        @click="checkRepository"
         :disabled="formState.allowUpload"
+        @click="checkRepository"
       >
         <span
           v-if="formState.checkRepoLoading"
diff --git a/src/components/workflows/modals/CreateWorkflowModal.vue b/src/components/workflows/modals/CreateWorkflowModal.vue
index ee8b9412c5cba5b58d3f1333669b6b0be0cc548c..3bd4a52778246142a65cc8fec02703b51cfc4c32 100644
--- a/src/components/workflows/modals/CreateWorkflowModal.vue
+++ b/src/components/workflows/modals/CreateWorkflowModal.vue
@@ -1,16 +1,14 @@
 <script setup lang="ts">
 import { computed, onMounted, reactive, ref, watch } from "vue";
 import { Modal, Toast, Collapse, Tooltip } from "bootstrap";
-import {
-  type WorkflowIn,
-  type WorkflowOut,
-  type WorkflowModeOut,
-  NextflowVersion,
-  DocumentationEnum,
-} from "@/client";
+import type {
+  WorkflowIn,
+  WorkflowOut,
+  WorkflowModeOut,
+} from "@/client/types.gen";
+import { NextflowVersion, DocumentationEnum } from "@/client/types.gen";
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
-import { ApiError } from "@/client";
 import { GitRepository, determineGitIcon } from "@/utils/GitRepository";
 import { valid } from "semver";
 import WorkflowModeTransitionGroup from "@/components/transitions/WorkflowModeTransitionGroup.vue";
@@ -186,7 +184,7 @@ function createWorkflow() {
         createWorkflowModal?.hide();
         resetForm();
       })
-      .catch((error: ApiError) => {
+      .catch((error) => {
         const errorText = error.body["detail"];
         if (errorText.startsWith("Workflow with name")) {
           workflowNameElement.value?.setCustomValidity("Name is already taken");
@@ -287,7 +285,7 @@ function checkRepository() {
             }
           }
         });
-    } catch (e) {
+    } catch {
       formState.unsupportedRepository = true;
       workflowRepositoryElement.value?.setCustomValidity(
         "Repository is not supported",
@@ -358,33 +356,33 @@ onMounted(() => {
     Successfully created Workflow
   </bootstrap-toast>
   <bootstrap-modal
-    :modalId="modalId"
+    :modal-id="modalId"
     :static-backdrop="true"
     modal-label="Create Workflow Modal"
-    v-on="{ 'hidden.bs.modal': modalClosed }"
     size-modifier-modal="lg"
+    v-on="{ 'hidden.bs.modal': modalClosed }"
   >
     <template #header> Create new Workflow</template>
     <template #body>
       <form
         id="workflowCreateForm"
-        :class="{ 'was-validated': formState.validated }"
         ref="workflowCreateForm"
+        :class="{ 'was-validated': formState.validated }"
       >
         <div class="mb-3">
           <label for="workflowNameInput" class="form-label"
             >Workflow Name</label
           >
           <input
+            id="workflowNameInput"
+            ref="workflowNameElement"
+            v-model="workflow.name"
             type="text"
             class="form-control"
-            id="workflowNameInput"
             placeholder="Short descriptive name"
             required
-            ref="workflowNameElement"
             minlength="3"
             maxlength="64"
-            v-model="workflow.name"
           />
         </div>
         <div class="mb-3">
@@ -393,13 +391,13 @@ onMounted(() => {
           </label>
           <div class="input-group">
             <textarea
-              class="form-control"
               id="workflowDescriptionInput"
+              v-model="workflow.short_description"
+              class="form-control"
               required
               rows="3"
               minlength="64"
               maxlength="256"
-              v-model="workflow.short_description"
               placeholder="Describe the purpose of the workflow in a few words."
             ></textarea>
             <div class="invalid-feedback">
@@ -416,19 +414,19 @@ onMounted(() => {
               <font-awesome-icon :icon="gitIcon" />
             </div>
             <input
+              id="createWorkflowRepositoryInput"
+              ref="workflowRepositoryElement"
+              v-model="workflow.repository_url"
               type="url"
               class="form-control"
-              id="createWorkflowRepositoryInput"
               placeholder="https://..."
               required
-              ref="workflowRepositoryElement"
-              v-model="workflow.repository_url"
-              @change="formState.allowUpload = false"
               aria-describedby="gitRepoProviderHelp"
+              @change="formState.allowUpload = false"
             />
             <div
-              class="input-group-text hover-info"
               :id="'tooltip-url-' + randomIDSuffix"
+              class="input-group-text hover-info"
               data-bs-toggle="tooltip"
               data-bs-title="The URL of the git repository containing the workflow"
             >
@@ -454,21 +452,21 @@ onMounted(() => {
                 <font-awesome-icon icon="fa-solid fa-code-commit" />
               </div>
               <input
+                id="createWorkflowGitCommitInput"
+                ref="workflowGitCommitHashElement"
+                v-model="workflow.git_commit_hash"
                 type="text"
                 class="form-control text-lowercase"
-                id="createWorkflowGitCommitInput"
                 placeholder="ba8bcd9..."
                 required
-                ref="workflowGitCommitHashElement"
                 maxlength="40"
                 minlength="40"
                 pattern="^[0-9a-f]+$"
-                v-model="workflow.git_commit_hash"
                 @change="formState.allowUpload = false"
               />
               <div
-                class="input-group-text hover-info"
                 :id="'tooltip-commit-' + randomIDSuffix"
+                class="input-group-text hover-info"
                 data-bs-toggle="tooltip"
                 data-bs-title="Hash of the Git commit used for the initial version"
               >
@@ -507,18 +505,18 @@ onMounted(() => {
                 <font-awesome-icon icon="fa-solid fa-tag" />
               </div>
               <input
+                id="createWorkflowVersionInput"
+                ref="workflowVersionElement"
+                v-model="workflow.initial_version"
                 type="text"
                 class="form-control"
-                id="createWorkflowVersionInput"
                 placeholder="v1.0.0"
                 maxlength="10"
-                ref="workflowVersionElement"
                 @change="checkVersionValidity"
-                v-model="workflow.initial_version"
               />
               <div
-                class="input-group-text hover-info"
                 :id="'tooltip-version-' + randomIDSuffix"
+                class="input-group-text hover-info"
                 data-bs-toggle="tooltip"
                 data-bs-title="Should follow semantic versioning"
               >
@@ -532,10 +530,10 @@ onMounted(() => {
             >Nextflow version</label
           >
           <select
-            class="form-select"
             id="createWorkflowNextflowVersionInput"
-            required
             v-model="workflow.nextflow_version"
+            class="form-select"
+            required
           >
             <option
               v-for="version in Object.values(NextflowVersion).reverse()"
@@ -549,18 +547,18 @@ onMounted(() => {
         <div class="mb-3">
           <div class="form-check fs-5">
             <input
+              id="privateRepositoryCheckbox"
+              v-model="repositoryCredentials.privateRepo"
               class="form-check-input"
               type="checkbox"
-              v-model="repositoryCredentials.privateRepo"
-              id="privateRepositoryCheckbox"
-              @change="formState.allowUpload = false"
               aria-controls="#createWorkflowPrivateRepositoryCheckbox"
+              @change="formState.allowUpload = false"
             />
             <label class="form-check-label" for="privateRepositoryCheckbox">
               Enable private Git Repository
             </label>
           </div>
-          <div class="collapse" id="createWorkflowPrivateRepositoryCheckbox">
+          <div id="createWorkflowPrivateRepositoryCheckbox" class="collapse">
             <label for="createRepositoryTokenInput" class="form-label"
               >Token</label
             >
@@ -569,13 +567,13 @@ onMounted(() => {
                 <font-awesome-icon icon="fa-solid fa-key" />
               </div>
               <input
-                type="password"
-                class="form-control"
                 id="createRepositoryTokenInput"
                 v-model="repositoryCredentials.token"
-                @change="formState.allowUpload = false"
+                type="password"
+                class="form-control"
                 :required="repositoryCredentials.privateRepo"
                 aria-controls="#tokenHelpCollapse"
+                @change="formState.allowUpload = false"
               />
               <div
                 class="input-group-text cursor-pointer hover-info"
@@ -584,7 +582,7 @@ onMounted(() => {
                 <font-awesome-icon icon="fa-solid fa-circle-question" />
               </div>
             </div>
-            <div class="collapse" id="tokenHelpCollapse">
+            <div id="tokenHelpCollapse" class="collapse">
               <div class="card card-body mt-3">
                 <h5>GitHub</h5>
                 <p>
@@ -622,12 +620,12 @@ onMounted(() => {
         <div class="mb-3">
           <div class="form-check fs-5">
             <input
+              id="workflowModesCheckbox"
+              v-model="workflowModes.hasModes"
               class="form-check-input"
               type="checkbox"
-              v-model="workflowModes.hasModes"
-              id="workflowModesCheckbox"
-              @change="formState.allowUpload = false"
               aria-controls="#workflowModesCollapse"
+              @change="formState.allowUpload = false"
             />
             <label class="form-check-label" for="workflowModesCheckbox">
               Enable Workflow Modes
@@ -635,14 +633,14 @@ onMounted(() => {
             <button
               v-if="workflowModes.hasModes"
               class="btn btn-primary float-end"
-              @click="addMode"
               :disabled="workflow.modes!.length >= 10"
+              @click="addMode"
             >
               Add Mode
             </button>
           </div>
         </div>
-        <div class="collapse" id="workflowModesCollapse">
+        <div id="workflowModesCollapse" class="collapse">
           <WorkflowModeTransitionGroup>
             <div
               v-for="(mode, index) in workflowModes.modes"
@@ -666,11 +664,11 @@ onMounted(() => {
                     <font-awesome-icon icon="fa-solid fa-tag" />
                   </div>
                   <input
+                    :id="'modeNameInput-' + index"
+                    v-model="mode.name"
                     type="text"
                     class="form-control"
-                    :id="'modeNameInput-' + index"
                     maxlength="128"
-                    v-model="mode.name"
                     :required="workflowModes.hasModes"
                   />
                 </div>
@@ -684,11 +682,11 @@ onMounted(() => {
                     <font-awesome-icon icon="fa-solid fa-turn-down" />
                   </div>
                   <input
+                    :id="'modeEntryInput-' + index"
+                    v-model="mode.entrypoint"
                     type="text"
                     class="form-control"
-                    :id="'modeEntryInput-' + index"
                     maxlength="128"
-                    v-model="mode.entrypoint"
                     :required="workflowModes.hasModes"
                   />
                 </div>
@@ -701,14 +699,14 @@ onMounted(() => {
                   <font-awesome-icon icon="fa-solid fa-file-code" />
                 </div>
                 <input
+                  :id="'modeSchemaInput-' + index"
+                  v-model="mode.schema_path"
                   type="text"
                   class="form-control"
-                  :id="'modeSchemaInput-' + index"
                   maxlength="128"
                   pattern=".*\.json$"
-                  v-model="mode.schema_path"
-                  @change="formState.allowUpload = false"
                   :required="workflowModes.hasModes"
+                  @change="formState.allowUpload = false"
                 />
               </div>
             </div>
@@ -716,12 +714,12 @@ onMounted(() => {
         </div>
       </form>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button
         type="button"
         class="btn btn-info me-auto"
-        @click="checkRepository"
         :disabled="formState.allowUpload"
+        @click="checkRepository"
       >
         <span
           v-if="formState.checkRepoLoading"
diff --git a/src/components/workflows/modals/ParameterModal.vue b/src/components/workflows/modals/ParameterModal.vue
index ef981fc20d011fdeec86d5decd5568d49b5992de..23c3f6c174b5aa51fd05914e54e41a3c7bb58070 100644
--- a/src/components/workflows/modals/ParameterModal.vue
+++ b/src/components/workflows/modals/ParameterModal.vue
@@ -6,7 +6,7 @@ import type { RouteLocationRaw, RouteParamsRaw } from "vue-router";
 import { Modal } from "bootstrap";
 import { useRouter } from "vue-router";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
-import type { WorkflowExecutionOut, WorkflowVersion } from "@/client";
+import type { WorkflowExecutionOut, WorkflowVersion } from "@/client/types.gen";
 import { useNameStore } from "@/stores/names";
 import { useWorkflowStore } from "@/stores/workflows";
 import { createDownloadUrl } from "@/utils/DownloadJson";
@@ -186,19 +186,19 @@ onMounted(() => {
 
 <template>
   <bootstrap-modal
-    :modalId="modalId"
+    :modal-id="modalId"
     :static-backdrop="false"
     modal-label="Workflow Execution Parameters Modal"
     size-modifier-modal="lg"
     :track-modal-value="executionId"
   >
-    <template v-slot:header
+    <template #header
       >Workflow Execution Parameters
       <b>
         {{ workflowName }}
       </b>
     </template>
-    <template v-slot:body>
+    <template #body>
       <div v-if="parameterState.error" class="text-center fs-4 mt-5">
         <font-awesome-icon
           icon="fa-solid fa-magnifying-glass"
@@ -343,13 +343,23 @@ onMounted(() => {
         </tbody>
       </table>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <router-link
         v-if="workflowVersion"
         class="btn btn-primary"
         :class="{
           disabled: parameterState.loading || parameterState.error,
         }"
+        :to="{
+          name: 'workflow-start',
+          params: {
+            versionId: workflowVersion.workflow_version_id,
+            workflowId: workflowVersion.workflow_id,
+          },
+          query: {
+            workflowModeId: execution?.mode_id,
+          },
+        }"
         @click.prevent="
           saveParameters();
           handleLinkClick({
@@ -363,16 +373,6 @@ onMounted(() => {
             },
           });
         "
-        :to="{
-          name: 'workflow-start',
-          params: {
-            versionId: workflowVersion.workflow_version_id,
-            workflowId: workflowVersion.workflow_id,
-          },
-          query: {
-            workflowModeId: execution?.mode_id,
-          },
-        }"
       >
         Rerun Execution
         <font-awesome-icon icon="fa-solid fa-arrow-rotate-right" class="me2" />
diff --git a/src/components/workflows/modals/UpdateWorkflowCredentialsModal.vue b/src/components/workflows/modals/UpdateWorkflowCredentialsModal.vue
index 3aed90940da35b65d51004a38c5c8b6294713437..2f744a3ea57950a0752299524c6c3f29b08f1375 100644
--- a/src/components/workflows/modals/UpdateWorkflowCredentialsModal.vue
+++ b/src/components/workflows/modals/UpdateWorkflowCredentialsModal.vue
@@ -1,6 +1,6 @@
 <script setup lang="ts">
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
-import type { WorkflowCredentialsIn, WorkflowOut } from "@/client";
+import type { WorkflowCredentialsIn, WorkflowOut } from "@/client/types.gen";
 import { onMounted, ref, reactive } from "vue";
 import { Modal, Toast } from "bootstrap";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
@@ -128,7 +128,7 @@ onMounted(() => {
 <template>
   <DeleteModal
     v-if="props.workflow.private"
-    :modalId="'delete-credentials-modal' + randomIDSuffix"
+    :modal-id="'delete-credentials-modal' + randomIDSuffix"
     :object-name-delete="'credentials for workflow ' + props.workflow.name"
     :back-modal-id="modalId"
     @confirm-delete="deleteCredentials()"
@@ -137,18 +137,18 @@ onMounted(() => {
     Successfully updated credentials
   </bootstrap-toast>
   <bootstrap-modal
-    :modalId="modalId"
+    :modal-id="modalId"
     :static-backdrop="true"
     modal-label="Update Workflow Version Icon Modal"
     size-modifier-modal="lg"
-    v-on="{ 'hidden.bs.modal': modalClosed }"
     :track-modal-value="workflow.workflow_id"
+    v-on="{ 'hidden.bs.modal': modalClosed }"
   >
     <template #header>
       Update git repository credentials for Workflow
       <span class="fw-bold">{{ props.workflow.name }}</span>
     </template>
-    <template #extra-button v-if="props.workflow.private">
+    <template v-if="props.workflow.private" #extra-button>
       <button
         class="btn delete-icon px-1"
         data-bs-toggle="modal"
@@ -159,8 +159,8 @@ onMounted(() => {
     </template>
     <template #body>
       <form
-        ref="credentialsUpdateForm"
         id="credentialsUpdateForm"
+        ref="credentialsUpdateForm"
         :class="{ 'was-validated': formState.validated }"
       >
         <label for="workflowCredentialsInput" class="form-label"
@@ -171,13 +171,13 @@ onMounted(() => {
             <font-awesome-icon icon="fa-solid fa-key" />
           </div>
           <input
-            type="password"
+            id="workflowCredentialsInput"
             ref="credentialsInputElement"
+            v-model="credentials.token"
+            type="password"
             class="form-control"
-            id="workflowCredentialsInput"
             aria-describedby="iconHelp"
             required
-            v-model="credentials.token"
           />
         </div>
         <div v-if="formState.error" class="text-danger">
@@ -216,7 +216,7 @@ onMounted(() => {
         </div>
       </form>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
         Close
       </button>
diff --git a/src/components/workflows/modals/UpdateWorkflowModal.vue b/src/components/workflows/modals/UpdateWorkflowModal.vue
index 402ce37501f6b57d4f3782b337ce5a702c6e0955..10de393b4f9d31d1615787882641bbdd8f382cc5 100644
--- a/src/components/workflows/modals/UpdateWorkflowModal.vue
+++ b/src/components/workflows/modals/UpdateWorkflowModal.vue
@@ -1,16 +1,14 @@
 <script setup lang="ts">
 import { computed, onMounted, reactive, ref, watch } from "vue";
 import { Collapse, Modal, Toast } from "bootstrap";
-import {
-  type WorkflowUpdate,
-  type WorkflowOut,
-  type WorkflowModeIn,
-  type WorkflowModeOut,
-  type WorkflowVersion,
-  type ApiError,
-  NextflowVersion,
-  DocumentationEnum,
-} from "@/client";
+import type {
+  WorkflowUpdate,
+  WorkflowOut,
+  WorkflowModeIn,
+  WorkflowModeOut,
+  WorkflowVersion,
+} from "@/client/types.gen";
+import { NextflowVersion, DocumentationEnum } from "@/client/types.gen";
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import { WorkflowCredentialsService } from "@/client";
@@ -100,9 +98,10 @@ watch(
     workflowUpdate.nextflow_version = latestVersion.value.nextflow_version;
     if (props.workflow.private) {
       formState.loadCredentials = true;
-      WorkflowCredentialsService.workflowCredentialsGetWorkflowCredentials(
-        props.workflow.workflow_id,
-      )
+      WorkflowCredentialsService.workflowCredentialsGetWorkflowCredentials({
+        path: { wid: props.workflow.workflow_id },
+      })
+        .then((response) => response.data!)
         .then((credentials) => {
           formState.workflowToken = credentials.token ?? undefined;
         })
@@ -139,7 +138,6 @@ watch(
 // Computed Properties
 // =============================================================================
 const latestVersion = computed<WorkflowVersion>(() => {
-  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
   return calculateLatestVersion(props.workflow.versions)!;
 });
 const gitIcon = computed<string>(() =>
@@ -231,7 +229,7 @@ function checkRepository() {
 
 function resetForm() {
   modalClosed();
-  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+
   workflowIconElement.value!.src = latestVersion.value.icon_url ?? "";
   workflowUpdate.version = "";
   workflowUpdate.git_commit_hash = "";
@@ -267,7 +265,7 @@ function updateWorkflow() {
         updateWorkflowModal?.hide();
         resetForm();
       })
-      .catch((error: ApiError) => {
+      .catch((error) => {
         const errorText = error.body["detail"];
         if (errorText.startsWith("Workflow with git_commit_hash")) {
           workflowGitCommitHashElement.value?.setCustomValidity(
@@ -340,12 +338,12 @@ onMounted(() => {
     Successfully updated Workflow
   </bootstrap-toast>
   <bootstrap-modal
-    :modalId="modalId"
+    :modal-id="modalId"
     :static-backdrop="true"
     modal-label="Update Workflow Modal"
-    v-on="{ 'hidden.bs.modal': modalClosed }"
     size-modifier-modal="lg"
     :track-modal-value="workflow.workflow_id"
+    v-on="{ 'hidden.bs.modal': modalClosed }"
   >
     <template #header>
       Update Workflow
@@ -354,8 +352,8 @@ onMounted(() => {
     <template #body>
       <form
         id="workflowUpdateForm"
-        :class="{ 'was-validated': formState.validated }"
         ref="workflowUpdateForm"
+        :class="{ 'was-validated': formState.validated }"
       >
         <div class="mb-3">
           <span class="me-3">Git Repository URL:</span>
@@ -372,8 +370,8 @@ onMounted(() => {
             icon="fa-solid fa-lock"
           />
           <img
-            :src="latestVersion.icon_url ?? undefined"
             ref="workflowIconElement"
+            :src="latestVersion.icon_url ?? undefined"
             class="float-end"
             :hidden="!showIcon"
             alt="Workflow Icon"
@@ -389,16 +387,16 @@ onMounted(() => {
                 <font-awesome-icon icon="fa-solid fa-code-commit" />
               </div>
               <input
+                id="updateWorkflowGitCommitInput"
+                ref="workflowGitCommitHashElement"
+                v-model="workflowUpdate.git_commit_hash"
                 type="text"
                 class="form-control text-lowercase"
-                id="updateWorkflowGitCommitInput"
                 placeholder="ba8bcd9..."
                 required
-                ref="workflowGitCommitHashElement"
                 maxlength="40"
                 minlength="40"
                 pattern="^[0-9a-f]+$"
-                v-model="workflowUpdate.git_commit_hash"
                 @change="formState.allowUpload = false"
               />
             </div>
@@ -434,16 +432,16 @@ onMounted(() => {
                 <font-awesome-icon icon="fa-solid fa-tag" />
               </div>
               <input
+                id="updateWorkflowVersionInput"
+                ref="workflowVersionElement"
+                v-model="workflowUpdate.version"
                 type="text"
                 class="form-control"
-                id="updateWorkflowVersionInput"
                 :placeholder="inc(latestVersion.version, 'patch') ?? undefined"
                 maxlength="10"
                 required
-                ref="workflowVersionElement"
-                @change="checkVersionValidity"
-                v-model="workflowUpdate.version"
                 aria-describedby="updateVersionHelp"
+                @change="checkVersionValidity"
               />
             </div>
             <div id="updateVersionHelp" class="form-text">
@@ -456,10 +454,10 @@ onMounted(() => {
             >Nextflow version</label
           >
           <select
-            class="form-select"
             id="updateWorkflowNextflowVersionInput"
-            required
             v-model="workflowUpdate.nextflow_version"
+            class="form-select"
+            required
           >
             <option
               v-for="version in Object.values(NextflowVersion).reverse()"
@@ -473,13 +471,13 @@ onMounted(() => {
         <div class="mb-3">
           <div class="form-check fs-5">
             <input
+              id="updateWorkflowModesCheckbox"
+              v-model="formState.modesEnabled"
               class="form-check-input"
               type="checkbox"
-              v-model="formState.modesEnabled"
-              id="updateWorkflowModesCheckbox"
-              @change="formState.allowUpload = false"
               aria-controls="#updateWorkflowModesCollapse"
               :disabled="latestVersion.modes && latestVersion.modes.length > 0"
+              @change="formState.allowUpload = false"
             />
             <label class="form-check-label" for="updateWorkflowModesCheckbox">
               Enable Workflow Modes
@@ -487,19 +485,19 @@ onMounted(() => {
             <button
               v-if="formState.modesEnabled"
               class="btn btn-primary float-end"
-              @click="addMode"
               :disabled="
                 (latestVersion.modes?.length ?? 0) +
                   workflowModes.addModes.length -
                   workflowModes.deleteModes.length >=
                 10
               "
+              @click="addMode"
             >
               Add Mode
             </button>
           </div>
         </div>
-        <div class="collapse" id="updateWorkflowModesCollapse">
+        <div id="updateWorkflowModesCollapse" class="collapse">
           <WorkflowModeTransitionGroup>
             <div
               v-for="(mode_id, index) in latestVersion.modes"
@@ -541,9 +539,9 @@ onMounted(() => {
                       <font-awesome-icon icon="fa-solid fa-tag" />
                     </div>
                     <input
+                      :id="'modeNameInput-' + mode_id"
                       type="text"
                       class="form-control"
-                      :id="'modeNameInput-' + mode_id"
                       maxlength="128"
                       readonly
                       :disabled="workflowModes.deleteModes.includes(mode_id)"
@@ -569,9 +567,9 @@ onMounted(() => {
                       <font-awesome-icon icon="fa-solid fa-turn-down" />
                     </div>
                     <input
+                      :id="'modeEntryInput-' + mode_id"
                       type="text"
                       class="form-control"
-                      :id="'modeEntryInput-' + mode_id"
                       readonly
                       :disabled="workflowModes.deleteModes.includes(mode_id)"
                       :value="
@@ -597,9 +595,9 @@ onMounted(() => {
                     <font-awesome-icon icon="fa-solid fa-file-code" />
                   </div>
                   <input
+                    :id="'modeSchemaInput-' + mode_id"
                     type="text"
                     class="form-control"
-                    :id="'modeSchemaInput-' + mode_id"
                     readonly
                     :disabled="workflowModes.deleteModes.includes(mode_id)"
                     :value="workflowRepository.modeMapping[mode_id].schema_path"
@@ -634,11 +632,11 @@ onMounted(() => {
                     <font-awesome-icon icon="fa-solid fa-tag" />
                   </div>
                   <input
+                    :id="'modeNameInput-' + index"
+                    v-model="mode.name"
                     type="text"
                     class="form-control"
-                    :id="'modeNameInput-' + index"
                     maxlength="128"
-                    v-model="mode.name"
                     :required="formState.modesEnabled"
                   />
                 </div>
@@ -652,11 +650,11 @@ onMounted(() => {
                     <font-awesome-icon icon="fa-solid fa-turn-down" />
                   </div>
                   <input
+                    :id="'modeEntryInput-' + index"
+                    v-model="mode.entrypoint"
                     type="text"
                     class="form-control"
-                    :id="'modeEntryInput-' + index"
                     maxlength="128"
-                    v-model="mode.entrypoint"
                     :required="formState.modesEnabled"
                   />
                 </div>
@@ -669,14 +667,14 @@ onMounted(() => {
                   <font-awesome-icon icon="fa-solid fa-file-code" />
                 </div>
                 <input
+                  :id="'modeSchemaInput-' + index"
+                  v-model="mode.schema_path"
                   type="text"
                   class="form-control"
-                  :id="'modeSchemaInput-' + index"
                   maxlength="128"
                   pattern=".*\.json$"
-                  v-model="mode.schema_path"
-                  @change="formState.allowUpload = false"
                   :required="formState.modesEnabled"
+                  @change="formState.allowUpload = false"
                 />
               </div>
             </div>
@@ -684,12 +682,12 @@ onMounted(() => {
         </div>
       </form>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button
         type="button"
         class="btn btn-info me-auto"
-        @click="checkRepository"
         :disabled="formState.allowUpload || formState.loadCredentials"
+        @click="checkRepository"
       >
         <span
           v-if="formState.checkRepoLoading"
diff --git a/src/components/workflows/modals/UpdateWorkflowVersionIconModal.vue b/src/components/workflows/modals/UpdateWorkflowVersionIconModal.vue
index 7df21357b9ed00a329fecf69260a22336662989d..ff8f41b073c0a86baff7e6493883acb996bf8b84 100644
--- a/src/components/workflows/modals/UpdateWorkflowVersionIconModal.vue
+++ b/src/components/workflows/modals/UpdateWorkflowVersionIconModal.vue
@@ -1,6 +1,6 @@
 <script setup lang="ts">
 import BootstrapModal from "@/components/modals/BootstrapModal.vue";
-import type { WorkflowVersion } from "@/client";
+import type { WorkflowVersion } from "@/client/types.gen";
 import { onMounted, ref, reactive, computed } from "vue";
 import { Modal, Toast } from "bootstrap";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
@@ -59,7 +59,6 @@ const showIcon = computed<boolean>(
 // Functions
 // =============================================================================
 function resetForm() {
-  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
   iconElement.value!.src = props.version.icon_url ?? "";
   if (iconInputElement.value != undefined) {
     iconInputElement.value.value = "";
@@ -74,10 +73,8 @@ function modalClosed() {
 function iconChanged() {
   iconUpdate.icon = iconInputElement.value?.files?.[0].slice() ?? null;
   if (iconUpdate.icon != null) {
-    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
     iconElement.value!.src = URL.createObjectURL(iconUpdate.icon.slice());
   } else {
-    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
     iconElement.value!.src = props.version.icon_url ?? "";
   }
 }
@@ -139,7 +136,7 @@ onMounted(() => {
 <template>
   <DeleteModal
     v-if="props.version.icon_url"
-    :modalId="'delete-icon-modal' + randomIDSuffix"
+    :modal-id="'delete-icon-modal' + randomIDSuffix"
     :object-name-delete="'icon for workflow ' + props.workflowName"
     :back-modal-id="modalId"
     @confirm-delete="deleteIcon()"
@@ -149,11 +146,11 @@ onMounted(() => {
     <template v-else>Successfully deleted icon</template>
   </bootstrap-toast>
   <bootstrap-modal
-    :modalId="modalId"
+    :modal-id="modalId"
     :static-backdrop="true"
     modal-label="Update Workflow Version Icon Modal"
-    v-on="{ 'hidden.bs.modal': modalClosed }"
     :track-modal-value="version.workflow_version_id"
+    v-on="{ 'hidden.bs.modal': modalClosed }"
   >
     <template #header>
       Update Icon Workflow
@@ -161,7 +158,7 @@ onMounted(() => {
         >{{ props.workflowName }}@{{ props.version.version }}</span
       >
     </template>
-    <template #extra-button v-if="props.version.icon_url">
+    <template v-if="props.version.icon_url" #extra-button>
       <button
         class="btn delete-icon"
         data-bs-toggle="modal"
@@ -172,35 +169,35 @@ onMounted(() => {
     </template>
     <template #body>
       <form
-        ref="iconUpdateForm"
         id="iconUpdateForm"
+        ref="iconUpdateForm"
         :class="{ 'was-validated': formState.validated }"
       >
         <div class="row">
           <div class="col-10">
             <label for="workflowIconInput" class="form-label">New Icon</label>
             <input
-              type="file"
+              id="workflowIconInput"
               ref="iconInputElement"
+              type="file"
               accept="image/*"
               class="form-control"
-              id="workflowIconInput"
-              @change="iconChanged"
               aria-describedby="iconHelp"
               required
+              @change="iconChanged"
             />
           </div>
           <div class="col-2">
             <img
-              :src="props.version.icon_url ?? undefined"
               ref="iconElement"
+              :src="props.version.icon_url ?? undefined"
               :hidden="!showIcon"
             />
           </div>
         </div>
       </form>
     </template>
-    <template v-slot:footer>
+    <template #footer>
       <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
         Close
       </button>
diff --git a/src/stores/buckets.ts b/src/stores/buckets.ts
index 5204e17a9f816b49ba934152fad7a185d805a136..05765ab4cc5d4907f10d74e390c7f33fc69ab5e0 100644
--- a/src/stores/buckets.ts
+++ b/src/stores/buckets.ts
@@ -1,17 +1,14 @@
 import { defineStore } from "pinia";
-import {
-  BucketPermissionService,
-  BucketService,
-  BucketType,
-  type OwnershipTransferRequestOut,
-} from "@/client";
+import { BucketPermissionService, BucketService } from "@/client/services.gen";
 import type {
   BucketOut,
   BucketIn,
+  OwnershipTransferRequestOut,
   BucketPermissionOut,
   BucketPermissionIn,
   BucketPermissionParameters,
-} from "@/client";
+  BucketType,
+} from "@/client/types.gen";
 import { useUserStore } from "@/stores/users";
 
 export const useBucketStore = defineStore({
@@ -80,8 +77,11 @@ export const useBucketStore = defineStore({
       ownerId?: string,
       bucketType?: BucketType,
     ): Promise<BucketOut[]> {
-      return BucketService.bucketListBuckets(ownerId, bucketType).then(
-        (buckets) => {
+      return BucketService.bucketListBuckets({
+        query: { owner_id: ownerId, bucket_type: bucketType },
+      })
+        .then((response) => response.data!)
+        .then((buckets) => {
           const userRepository = useUserStore();
           userRepository.fetchUsernames(
             buckets
@@ -89,8 +89,7 @@ export const useBucketStore = defineStore({
               .filter((owner) => owner != userRepository.currentUID),
           );
           return buckets;
-        },
-      );
+        });
     },
     fetchOwnPermissions(
       onFinally?: () => void,
@@ -99,9 +98,10 @@ export const useBucketStore = defineStore({
       if (Object.keys(this.ownPermissions).length > 0) {
         onFinally?.();
       }
-      return BucketPermissionService.bucketPermissionListPermissionsPerUser(
-        authStore.currentUID,
-      )
+      return BucketPermissionService.bucketPermissionListPermissionsPerUser({
+        path: { uid: authStore.currentUID },
+      })
+        .then((response) => response.data!)
         .then((permissions) => {
           const new_permissions: Record<string, BucketPermissionOut> = {};
           for (const perm of permissions) {
@@ -144,7 +144,10 @@ export const useBucketStore = defineStore({
       if (this.bucketMapping[bucketName] != undefined) {
         onFinally?.();
       }
-      return BucketService.bucketGetBucket(bucketName)
+      return BucketService.bucketGetBucket({
+        path: { bucket_name: bucketName },
+      })
+        .then((response) => response.data!)
         .then((bucket) => {
           this.bucketMapping[bucket.name] = bucket;
           return bucket;
@@ -152,15 +155,22 @@ export const useBucketStore = defineStore({
         .finally(onFinally);
     },
     deleteBucket(bucketName: string): Promise<void> {
-      return BucketService.bucketDeleteBucket(bucketName, true).then(() => {
-        delete this.bucketMapping[bucketName];
-      });
+      return BucketService.bucketDeleteBucket({
+        path: { bucket_name: bucketName },
+        query: { force_delete: true },
+      })
+        .then((response) => response.data!)
+        .then(() => {
+          delete this.bucketMapping[bucketName];
+        });
     },
     createBucket(bucket: BucketIn): Promise<BucketOut> {
-      return BucketService.bucketCreateBucket(bucket).then((createdBucket) => {
-        this.bucketMapping[createdBucket.name] = createdBucket;
-        return createdBucket;
-      });
+      return BucketService.bucketCreateBucket({ body: bucket })
+        .then((response) => response.data!)
+        .then((createdBucket) => {
+          this.bucketMapping[createdBucket.name] = createdBucket;
+          return createdBucket;
+        });
     },
     fetchBucketPermissions(
       bucketName: string,
@@ -173,9 +183,10 @@ export const useBucketStore = defineStore({
       if (this.bucketPermissionsMapping[bucketName] != undefined) {
         onFinally?.();
       }
-      return BucketPermissionService.bucketPermissionListPermissionsPerBucket(
-        bucketName,
-      )
+      return BucketPermissionService.bucketPermissionListPermissionsPerBucket({
+        path: { bucket_name: bucketName },
+      })
+        .then((response) => response.data!)
         .then((permissions) => {
           this.bucketPermissionsMapping[bucketName] = permissions;
           return permissions;
@@ -183,77 +194,89 @@ export const useBucketStore = defineStore({
         .finally(onFinally);
     },
     deleteBucketPermission(bucketName: string, uid: string): Promise<void> {
-      return BucketPermissionService.bucketPermissionDeletePermission(
-        bucketName,
-        uid,
-      ).then(() => {
-        const userRepository = useUserStore();
-        if (uid == userRepository.currentUID) {
-          this.deleteOwnPermission(bucketName);
-        }
-        if (this.bucketPermissionsMapping[bucketName] == undefined) {
-          this.fetchBucketPermissions(bucketName);
-        } else {
-          this.bucketPermissionsMapping[bucketName] =
-            this.bucketPermissionsMapping[bucketName].filter(
-              (permission) => permission.uid != uid,
-            );
-        }
-      });
+      return BucketPermissionService.bucketPermissionDeletePermission({
+        path: {
+          bucket_name: bucketName,
+          uid: uid,
+        },
+      })
+        .then((response) => response.data!)
+        .then(() => {
+          const userRepository = useUserStore();
+          if (uid == userRepository.currentUID) {
+            this.deleteOwnPermission(bucketName);
+          }
+          if (this.bucketPermissionsMapping[bucketName] == undefined) {
+            this.fetchBucketPermissions(bucketName);
+          } else {
+            this.bucketPermissionsMapping[bucketName] =
+              this.bucketPermissionsMapping[bucketName].filter(
+                (permission) => permission.uid != uid,
+              );
+          }
+        });
     },
     createBucketPermission(
       permissionIn: BucketPermissionIn,
     ): Promise<BucketPermissionOut> {
-      return BucketPermissionService.bucketPermissionCreatePermission(
-        permissionIn,
-      ).then((permission) => {
-        if (
-          this.bucketPermissionsMapping[permission.bucket_name] == undefined
-        ) {
-          this.fetchBucketPermissions(permission.bucket_name);
-        } else {
-          this.bucketPermissionsMapping[permission.bucket_name].push(
-            permission,
-          );
-        }
-        return permission;
-      });
+      return BucketPermissionService.bucketPermissionCreatePermission({
+        body: permissionIn,
+      })
+        .then((response) => response.data!)
+        .then((permission) => {
+          if (
+            this.bucketPermissionsMapping[permission.bucket_name] == undefined
+          ) {
+            this.fetchBucketPermissions(permission.bucket_name);
+          } else {
+            this.bucketPermissionsMapping[permission.bucket_name].push(
+              permission,
+            );
+          }
+          return permission;
+        });
     },
     updateBucketPermission(
       bucketName: string,
       uid: string,
       permissionParams: BucketPermissionParameters,
     ): Promise<BucketPermissionOut> {
-      return BucketPermissionService.bucketPermissionUpdatePermission(
-        bucketName,
-        uid,
-        permissionParams,
-      ).then((permissionOut) => {
-        if (this.bucketPermissionsMapping[bucketName] == undefined) {
-          this.fetchBucketPermissions(bucketName);
-        } else {
-          const index = this.bucketPermissionsMapping[bucketName].findIndex(
-            (permission) => (permission.uid = uid),
-          );
-          if (index > -1) {
-            this.bucketPermissionsMapping[bucketName][index] = permissionOut;
+      return BucketPermissionService.bucketPermissionUpdatePermission({
+        path: {
+          bucket_name: bucketName,
+          uid: uid,
+        },
+        body: permissionParams,
+      })
+        .then((response) => response.data!)
+        .then((permissionOut) => {
+          if (this.bucketPermissionsMapping[bucketName] == undefined) {
+            this.fetchBucketPermissions(bucketName);
           } else {
-            this.bucketPermissionsMapping[bucketName].push(permissionOut);
+            const index = this.bucketPermissionsMapping[bucketName].findIndex(
+              (permission) => (permission.uid = uid),
+            );
+            if (index > -1) {
+              this.bucketPermissionsMapping[bucketName][index] = permissionOut;
+            } else {
+              this.bucketPermissionsMapping[bucketName].push(permissionOut);
+            }
           }
-        }
-        return permissionOut;
-      });
+          return permissionOut;
+        });
     },
     async updatePublicState(
       bucketName: string,
       public_: boolean,
     ): Promise<BucketOut> {
-      const bucket = await BucketService.bucketUpdateBucketPublicState(
-        bucketName,
-        {
-          public: public_,
-        },
-      );
+      const bucket = (
+        await BucketService.bucketUpdateBucketPublicState({
+          path: { bucket_name: bucketName },
+          body: {
+            public: public_,
+          },
+        })
+      ).data!;
       this.bucketMapping[bucketName] = bucket;
       return bucket;
     },
@@ -262,22 +285,27 @@ export const useBucketStore = defineStore({
       size_limit?: number | null,
       object_limit?: number | null,
     ): Promise<BucketOut> {
-      return BucketService.bucketUpdateBucketLimits(bucketName, {
-        size_limit: size_limit,
-        object_limit: object_limit,
-      });
+      return BucketService.bucketUpdateBucketLimits({
+        path: { bucket_name: bucketName },
+        body: {
+          size_limit: size_limit,
+          object_limit: object_limit,
+        },
+      }).then((response) => response.data!);
     },
     acceptBucketOtr(otr: OwnershipTransferRequestOut): Promise<BucketOut> {
-      return BucketService.bucketAcceptBucketOtr(otr.target_id).then(
-        (bucket) => {
+      return BucketService.bucketAcceptBucketOtr({
+        path: { bucket_name: otr.target_id },
+      })
+        .then((response) => response.data!)
+        .then((bucket) => {
           this.bucketMapping[bucket.name] = bucket;
           this.bucketPermissionsMapping[bucket.name] =
             this.bucketPermissionsMapping[bucket.name]?.filter(
               (permission) => permission.uid != otr.new_owner_uid,
             );
           return bucket;
-        },
-      );
+        });
     },
   },
 });
diff --git a/src/stores/otrs.ts b/src/stores/otrs.ts
index 06487b9714679156cddd31ba0d9b828712b004f9..c68b09704aa2783a04c5aeaa347d44dd72baf67e 100644
--- a/src/stores/otrs.ts
+++ b/src/stores/otrs.ts
@@ -1,12 +1,14 @@
 import { defineStore } from "pinia";
+import type {
+  OwnershipTransferRequestIn,
+  OwnershipTransferRequestOut,
+} from "@/client/types.gen";
+import { OwnershipTypeEnum } from "@/client/types.gen";
 import {
   BucketService,
-  type OwnershipTransferRequestIn,
-  type OwnershipTransferRequestOut,
-  OwnershipTypeEnum,
   ResourceService,
   WorkflowService,
-} from "@/client";
+} from "@/client/services.gen";
 import { useUserStore } from "@/stores/users";
 import { useBucketStore } from "@/stores/buckets";
 import { useWorkflowStore } from "@/stores/workflows";
@@ -58,17 +60,26 @@ export const useOTRStore = defineStore({
     ): Promise<OwnershipTransferRequestOut[]> {
       switch (targetType) {
         case OwnershipTypeEnum.BUCKET:
-          return BucketService.bucketListBucketOtrs(currentOwnerId, newOwnerId);
+          return BucketService.bucketListBucketOtrs({
+            query: {
+              current_owner_id: currentOwnerId,
+              new_owner_id: newOwnerId,
+            },
+          }).then((response) => response.data!);
         case OwnershipTypeEnum.WORKFLOW:
-          return WorkflowService.workflowListWorkflowOtrs(
-            currentOwnerId,
-            newOwnerId,
-          );
+          return WorkflowService.workflowListWorkflowOtrs({
+            query: {
+              current_owner_id: currentOwnerId,
+              new_owner_id: newOwnerId,
+            },
+          }).then((response) => response.data!);
         case OwnershipTypeEnum.RESOURCE:
-          return ResourceService.resourceListResourceOtrs(
-            currentOwnerId,
-            newOwnerId,
-          );
+          return ResourceService.resourceListResourceOtrs({
+            query: {
+              current_owner_id: currentOwnerId,
+              new_owner_id: newOwnerId,
+            },
+          }).then((response) => response.data!);
       }
     },
     fetchOwnOtrs(
@@ -134,17 +145,25 @@ export const useOTRStore = defineStore({
       const promise = (function () {
         switch (otr.target_type) {
           case OwnershipTypeEnum.BUCKET:
-            return BucketService.bucketDeleteBucketOtr(otr.target_id);
+            return BucketService.bucketDeleteBucketOtr({
+              path: { bucket_name: otr.target_id },
+            });
           case OwnershipTypeEnum.WORKFLOW:
-            return WorkflowService.workflowDeleteWorkflowOtr(otr.target_id);
+            return WorkflowService.workflowDeleteWorkflowOtr({
+              path: { wid: otr.target_id },
+            });
           case OwnershipTypeEnum.RESOURCE:
-            return ResourceService.resourceDeleteResourceOtr(otr.target_id);
+            return ResourceService.resourceDeleteResourceOtr({
+              path: { rid: otr.target_id },
+            });
         }
       })();
-      return promise.then((target_id) => {
-        delete this.otrMapping[otr.target_id];
-        return target_id;
-      });
+      return promise
+        .then((response) => response.data!)
+        .then((target_id) => {
+          delete this.otrMapping[otr.target_id];
+          return target_id;
+        });
     },
     createOtr(
       targetId: string,
@@ -154,17 +173,28 @@ export const useOTRStore = defineStore({
       const promise = (function () {
         switch (targetType) {
           case OwnershipTypeEnum.BUCKET:
-            return BucketService.bucketCreateBucketOtr(targetId, otr);
+            return BucketService.bucketCreateBucketOtr({
+              path: { bucket_name: targetId },
+              body: otr,
+            });
           case OwnershipTypeEnum.WORKFLOW:
-            return WorkflowService.workflowCreateWorkflowOtr(targetId, otr);
+            return WorkflowService.workflowCreateWorkflowOtr({
+              path: { wid: targetId },
+              body: otr,
+            });
           case OwnershipTypeEnum.RESOURCE:
-            return ResourceService.resourceCreateResourceOtr(targetId, otr);
+            return ResourceService.resourceCreateResourceOtr({
+              path: { rid: targetId },
+              body: otr,
+            });
         }
       })();
-      return promise.then((newOtr) => {
-        this.otrMapping[newOtr.target_id] = newOtr;
-        return newOtr;
-      });
+      return promise
+        .then((response) => response.data!)
+        .then((newOtr) => {
+          this.otrMapping[newOtr.target_id] = newOtr;
+          return newOtr;
+        });
     },
   },
 });
diff --git a/src/stores/resources.ts b/src/stores/resources.ts
index 877c6d9199f22726ee2c0d4c7113b003da06be4c..89ebe2499e9e248aaac8be3268ac0db366a52a25 100644
--- a/src/stores/resources.ts
+++ b/src/stores/resources.ts
@@ -9,12 +9,9 @@ import type {
   UserRequestAnswer,
   UserSynchronizationRequestIn,
   UserSynchronizationRequestOut,
-} from "@/client";
-import {
-  ResourceService,
-  ResourceVersionService,
-  ResourceVersionStatus,
-} from "@/client";
+} from "@/client/types.gen";
+import { ResourceVersionStatus } from "@/client/types.gen";
+import { ResourceService, ResourceVersionService } from "@/client/services.gen";
 import { useUserStore } from "@/stores/users";
 import { useNameStore } from "@/stores/names";
 
@@ -92,20 +89,22 @@ export const useResourceStore = defineStore({
       resource_id: string,
       versionStatus?: ResourceVersionStatus[],
     ): Promise<ResourceOut> {
-      return ResourceService.resourceGetResource(
-        resource_id,
-        versionStatus,
-      ).then((resource) => {
-        const nameStore = useNameStore();
-        nameStore.addNameToMapping(resource.resource_id, resource.name);
-        for (const version of resource.versions) {
-          nameStore.addNameToMapping(
-            version.resource_version_id,
-            version.release,
-          );
-        }
-        return resource;
-      });
+      return ResourceService.resourceGetResource({
+        path: { rid: resource_id },
+        query: { version_status: versionStatus },
+      })
+        .then((response) => response.data!)
+        .then((resource) => {
+          const nameStore = useNameStore();
+          nameStore.addNameToMapping(resource.resource_id, resource.name);
+          for (const version of resource.versions) {
+            nameStore.addNameToMapping(
+              version.resource_version_id,
+              version.release,
+            );
+          }
+          return resource;
+        });
     },
     fetchSyncRequests(
       onFinally?: () => void,
@@ -114,6 +113,7 @@ export const useResourceStore = defineStore({
         onFinally?.();
       }
       return ResourceService.resourceListSyncRequests()
+        .then((response) => response.data!)
         .then((requests) => {
           this.__syncRequestsFetched = true;
           const userStore = useUserStore();
@@ -135,30 +135,34 @@ export const useResourceStore = defineStore({
       searchString?: string,
       _public?: boolean,
     ): Promise<ResourceOut[]> {
-      return ResourceService.resourceListResources(
-        maintainerId,
-        versionStatus,
-        searchString,
-        _public,
-      ).then((resources) => {
-        const userStore = useUserStore();
-        userStore.fetchUsernames(
-          resources
-            .map((resource) => resource.maintainer_id ?? "")
-            .filter((mid) => mid.length > 0),
-        );
-        const nameStore = useNameStore();
-        for (const resource of resources) {
-          nameStore.addNameToMapping(resource.resource_id, resource.name);
-          for (const version of resource.versions) {
-            nameStore.addNameToMapping(
-              version.resource_version_id,
-              version.release,
-            );
+      return ResourceService.resourceListResources({
+        query: {
+          maintainer_id: maintainerId,
+          version_status: versionStatus,
+          name_substring: searchString,
+          public: _public,
+        },
+      })
+        .then((response) => response.data!)
+        .then((resources) => {
+          const userStore = useUserStore();
+          userStore.fetchUsernames(
+            resources
+              .map((resource) => resource.maintainer_id ?? "")
+              .filter((mid) => mid.length > 0),
+          );
+          const nameStore = useNameStore();
+          for (const resource of resources) {
+            nameStore.addNameToMapping(resource.resource_id, resource.name);
+            for (const version of resource.versions) {
+              nameStore.addNameToMapping(
+                version.resource_version_id,
+                version.release,
+              );
+            }
           }
-        }
-        return resources;
-      });
+          return resources;
+        });
     },
     fetchResourceTree(
       resource_id: string,
@@ -168,10 +172,13 @@ export const useResourceStore = defineStore({
       if (this.resourceTree[resource_version_id] === null) {
         onFinally?.();
       }
-      return ResourceVersionService.resourceVersionResourceFileTree(
-        resource_version_id,
-        resource_id,
-      )
+      return ResourceVersionService.resourceVersionResourceFileTree({
+        path: {
+          rvid: resource_version_id,
+          rid: resource_id,
+        },
+      })
+        .then((response) => response.data!)
         .then((tree) => {
           this.resourceTree[resource_version_id] = tree[0];
           this.resourceTreeList[resource_version_id] = parseFileTree(
@@ -258,8 +265,9 @@ export const useResourceStore = defineStore({
         .finally(onFinally);
     },
     async createResource(resource: ResourceIn): Promise<ResourceOut> {
-      const createdResource =
-        await ResourceService.resourceCreateResource(resource);
+      const createdResource = (
+        await ResourceService.resourceCreateResource({ body: resource })
+      ).data!;
       this.ownResourceMapping[createdResource.resource_id] = createdResource;
       const nameStore = useNameStore();
       nameStore.addNameToMapping(
@@ -277,11 +285,14 @@ export const useResourceStore = defineStore({
       resourceVersion: ResourceVersionOut,
       request: UserSynchronizationRequestIn,
     ): Promise<ResourceVersionOut> {
-      return ResourceVersionService.resourceVersionRequestResourceVersionSync(
-        resourceVersion.resource_id,
-        resourceVersion.resource_version_id,
-        request,
-      )
+      return ResourceVersionService.resourceVersionRequestResourceVersionSync({
+        path: {
+          rid: resourceVersion.resource_id,
+          rvid: resourceVersion.resource_version_id,
+        },
+        body: request,
+      })
+        .then((response) => response.data!)
         .then((changedResourceVersion) => {
           const versionIndex = this.resourceMapping[
             changedResourceVersion.resource_id
@@ -317,79 +328,97 @@ export const useResourceStore = defineStore({
       resourceVersion: ResourceVersionOut,
     ): Promise<ResourceVersionOut> {
       return ResourceVersionService.resourceVersionRequestResourceVersionReview(
-        resourceVersion.resource_id,
-        resourceVersion.resource_version_id,
-      ).then((changedResourceVersion) => {
-        if (
-          this.ownResourceMapping[changedResourceVersion.resource_id] ==
-          undefined
-        ) {
-          this.fetchOwnResource(resourceVersion.resource_id);
-          return changedResourceVersion;
-        }
-        const versionIndex = this.ownResourceMapping[
-          changedResourceVersion.resource_id
-        ].versions.findIndex(
-          (version) =>
-            version.resource_version_id ==
-            changedResourceVersion.resource_version_id,
-        );
-        if (versionIndex > -1) {
-          this.ownResourceMapping[changedResourceVersion.resource_id].versions[
-            versionIndex
-          ] = changedResourceVersion;
-        } else {
-          this.ownResourceMapping[
+        {
+          path: {
+            rid: resourceVersion.resource_id,
+            rvid: resourceVersion.resource_version_id,
+          },
+        },
+      )
+        .then((response) => response.data!)
+        .then((changedResourceVersion) => {
+          if (
+            this.ownResourceMapping[changedResourceVersion.resource_id] ==
+            undefined
+          ) {
+            this.fetchOwnResource(resourceVersion.resource_id);
+            return changedResourceVersion;
+          }
+          const versionIndex = this.ownResourceMapping[
             changedResourceVersion.resource_id
-          ].versions.push(changedResourceVersion);
-        }
-        return changedResourceVersion;
-      });
+          ].versions.findIndex(
+            (version) =>
+              version.resource_version_id ==
+              changedResourceVersion.resource_version_id,
+          );
+          if (versionIndex > -1) {
+            this.ownResourceMapping[
+              changedResourceVersion.resource_id
+            ].versions[versionIndex] = changedResourceVersion;
+          } else {
+            this.ownResourceMapping[
+              changedResourceVersion.resource_id
+            ].versions.push(changedResourceVersion);
+          }
+          return changedResourceVersion;
+        });
     },
     updateResource(
       resource_id: string,
       version: ResourceVersionIn,
     ): Promise<ResourceVersionOut> {
-      return ResourceVersionService.resourceVersionRequestResourceVersion(
-        resource_id,
-        version,
-      ).then((versionOut) => {
-        if (this.ownResourceMapping[versionOut.resource_id] == undefined) {
-          this.fetchOwnResource(versionOut.resource_id);
+      return ResourceVersionService.resourceVersionRequestResourceVersion({
+        path: {
+          rid: resource_id,
+        },
+        body: version,
+      })
+        .then((response) => response.data!)
+        .then((versionOut) => {
+          if (this.ownResourceMapping[versionOut.resource_id] == undefined) {
+            this.fetchOwnResource(versionOut.resource_id);
+            return versionOut;
+          }
+          useNameStore().addNameToMapping(
+            versionOut.resource_version_id,
+            versionOut.release,
+          );
+          this.ownResourceMapping[versionOut.resource_id].versions.push(
+            versionOut,
+          );
           return versionOut;
-        }
-        useNameStore().addNameToMapping(
-          versionOut.resource_version_id,
-          versionOut.release,
-        );
-        this.ownResourceMapping[versionOut.resource_id].versions.push(
-          versionOut,
-        );
-        return versionOut;
-      });
+        });
     },
     reviewResource(
       resourceVersion: ResourceVersionOut,
       requestAnswer: UserRequestAnswer,
     ): Promise<ResourceVersionOut> {
-      return ResourceVersionService.resourceVersionResourceVersionReview(
-        resourceVersion.resource_id,
-        resourceVersion.resource_version_id,
-        requestAnswer,
-      ).then(this._updateReviewableResourceVersion);
+      return ResourceVersionService.resourceVersionResourceVersionReview({
+        path: {
+          rid: resourceVersion.resource_id,
+          rvid: resourceVersion.resource_version_id,
+        },
+        body: requestAnswer,
+      })
+        .then((response) => response.data!)
+        .then(this._updateReviewableResourceVersion);
     },
     syncResource(
       resourceVersion: ResourceVersionOut,
       requestAnswer: UserRequestAnswer,
     ): Promise<ResourceVersionOut> {
-      return ResourceVersionService.resourceVersionResourceVersionSync(
-        resourceVersion.resource_id,
-        resourceVersion.resource_version_id,
-        requestAnswer,
-      ).then((version) => {
-        delete this.syncRequestMapping[version.resource_version_id];
-        return version;
-      });
+      return ResourceVersionService.resourceVersionResourceVersionSync({
+        path: {
+          rid: resourceVersion.resource_id,
+          rvid: resourceVersion.resource_version_id,
+        },
+        body: requestAnswer,
+      })
+        .then((response) => response.data!)
+        .then((version) => {
+          delete this.syncRequestMapping[version.resource_version_id];
+          return version;
+        });
     },
     _updateReviewableResourceVersion(
       version: ResourceVersionOut,
@@ -416,34 +445,44 @@ export const useResourceStore = defineStore({
     setLatestResource(
       resourceVersion: ResourceVersionOut,
     ): Promise<ResourceVersionOut> {
-      return ResourceVersionService.resourceVersionResourceVersionLatest(
-        resourceVersion.resource_id,
-        resourceVersion.resource_version_id,
-      );
+      return ResourceVersionService.resourceVersionResourceVersionLatest({
+        path: {
+          rid: resourceVersion.resource_id,
+          rvid: resourceVersion.resource_version_id,
+        },
+      }).then((response) => response.data!);
     },
     deleteOnCluster(
       resourceVersion: ResourceVersionOut,
     ): Promise<ResourceVersionOut> {
       return ResourceVersionService.resourceVersionDeleteResourceVersionCluster(
-        resourceVersion.resource_id,
-        resourceVersion.resource_version_id,
-      );
+        {
+          path: {
+            rid: resourceVersion.resource_id,
+            rvid: resourceVersion.resource_version_id,
+          },
+        },
+      ).then((response) => response.data!);
     },
     deleteInS3(
       resourceVersion: ResourceVersionOut,
     ): Promise<ResourceVersionOut> {
-      return ResourceVersionService.resourceVersionDeleteResourceVersionS3(
-        resourceVersion.resource_id,
-        resourceVersion.resource_version_id,
-      );
+      return ResourceVersionService.resourceVersionDeleteResourceVersionS3({
+        path: {
+          rid: resourceVersion.resource_id,
+          rvid: resourceVersion.resource_version_id,
+        },
+      }).then((response) => response.data!);
     },
     acceptResourceOtr(otr: OwnershipTransferRequestOut): Promise<ResourceOut> {
-      return ResourceService.resourceAcceptResourceOtr(otr.target_id).then(
-        (resource) => {
+      return ResourceService.resourceAcceptResourceOtr({
+        path: { rid: otr.target_id },
+      })
+        .then((response) => response.data!)
+        .then((resource) => {
           this.fetchOwnResource(resource.resource_id);
           return resource;
-        },
-      );
+        });
     },
   },
 });
diff --git a/src/stores/s3keys.ts b/src/stores/s3keys.ts
index 22f3c2b1f898f97fc6e5c47f5426e58cd9ab0c4e..cf8054a4b186991392c02f7e4cd20dabd45a474b 100644
--- a/src/stores/s3keys.ts
+++ b/src/stores/s3keys.ts
@@ -1,7 +1,7 @@
 import { defineStore } from "pinia";
 import { useUserStore } from "@/stores/users";
-import type { S3Key } from "@/client";
-import { S3KeyService } from "@/client";
+import type { S3Key } from "@/client/types.gen";
+import { S3KeyService } from "@/client/services.gen";
 import { useS3ObjectStore } from "@/stores/s3objects";
 
 export const useS3KeyStore = defineStore({
@@ -26,7 +26,10 @@ export const useS3KeyStore = defineStore({
       if (this.keys.length > 0) {
         onFinally?.();
       }
-      return S3KeyService.s3KeyGetUserKeys(useUserStore().currentUID)
+      return S3KeyService.s3KeyGetUserKeys({
+        path: { uid: useUserStore().currentUID },
+      })
+        .then((response) => response.data!)
         .then((keys) => {
           const s3ObjectRepository = useS3ObjectStore();
           s3ObjectRepository.updateS3Client(keys[0]);
@@ -41,23 +44,29 @@ export const useS3KeyStore = defineStore({
     },
     deleteS3Key(access_id: string): Promise<void> {
       const userRepository = useUserStore();
-      return S3KeyService.s3KeyDeleteUserKey(
-        access_id,
-        userRepository.currentUID,
-      ).then(() => {
-        const s3ObjectRepository = useS3ObjectStore();
-        delete this.keyMapping[access_id];
-        s3ObjectRepository.updateS3Client(this.keys[0]);
-      });
+      return S3KeyService.s3KeyDeleteUserKey({
+        path: {
+          access_id: access_id,
+          uid: userRepository.currentUID,
+        },
+      })
+        .then((response) => response.data!)
+        .then(() => {
+          const s3ObjectRepository = useS3ObjectStore();
+          delete this.keyMapping[access_id];
+          s3ObjectRepository.updateS3Client(this.keys[0]);
+        });
     },
     createS3Key(): Promise<S3Key> {
       const userRepository = useUserStore();
-      return S3KeyService.s3KeyCreateUserKey(userRepository.currentUID).then(
-        (key) => {
+      return S3KeyService.s3KeyCreateUserKey({
+        path: { uid: userRepository.currentUID },
+      })
+        .then((response) => response.data!)
+        .then((key) => {
           this.keyMapping[key.access_key] = key;
           return key;
-        },
-      );
+        });
     },
   },
 });
diff --git a/src/stores/users.ts b/src/stores/users.ts
index 918cb43cf492246c4e6933a3be6d4fe3dcd7e186..f247111729d79ddf7fe8257e475bdea5bfabd902 100644
--- a/src/stores/users.ts
+++ b/src/stores/users.ts
@@ -6,8 +6,9 @@ import type {
   ApiTokenOut,
   ApiTokenIn,
   ApiTokenPrivateOut,
-} from "@/client";
-import { UserService, RoleEnum, ApiTokenService } from "@/client";
+} from "@/client/types.gen";
+import { RoleEnum } from "@/client/types.gen";
+import { UserService, ApiTokenService } from "@/client/services.gen";
 import { useWorkflowExecutionStore } from "@/stores/workflowExecutions";
 import { useBucketStore } from "@/stores/buckets";
 import { useWorkflowStore } from "@/stores/workflows";
@@ -87,10 +88,12 @@ export const useUserStore = defineStore({
   },
   actions: {
     getCurrentUser(): Promise<UserOutExtended> {
-      return UserService.userGetLoggedInUser().then((user) => {
-        this.updateUser(user);
-        return user;
-      });
+      return UserService.userGetLoggedInUser()
+        .then((response) => response.data!)
+        .then((user) => {
+          this.updateUser(user);
+          return user;
+        });
     },
     updateJWT(jwt: string | null) {
       this.jwt = jwt != null ? parseJwt(jwt) : null;
@@ -120,15 +123,20 @@ export const useUserStore = defineStore({
       searchString?: string,
       filterRoles?: RoleEnum[],
     ): Promise<UserOutExtended[]> {
-      return UserService.userListUsers(searchString, filterRoles).then(
-        (users) => {
+      return UserService.userListUsers({
+        query: {
+          name_substring: searchString,
+          filter_roles: filterRoles,
+        },
+      })
+        .then((response) => response.data!)
+        .then((users) => {
           const nameStore = useNameStore();
           for (const user of users) {
             nameStore.addNameToMapping(user.uid, user.display_name);
           }
           return users;
-        },
-      );
+        });
     },
     fetchApiTokens(
       uid?: string,
@@ -137,7 +145,8 @@ export const useUserStore = defineStore({
       if (this.apiTokens.length > 0) {
         onFinally?.();
       }
-      return ApiTokenService.apiTokenListToken(uid)
+      return ApiTokenService.apiTokenListToken({ path: { uid: uid } })
+        .then((response) => response.data!)
         .then((tokens) => {
           for (const token of tokens) {
             this.apiTokensMapping[token.token_id] = token;
@@ -147,41 +156,56 @@ export const useUserStore = defineStore({
         .finally(onFinally);
     },
     createApiToken(tokenIn: ApiTokenIn): Promise<ApiTokenPrivateOut> {
-      return ApiTokenService.apiTokenCreateToken(tokenIn).then((token) => {
-        this.apiTokensMapping[token.token_id] = token as ApiTokenOut;
-        return token;
-      });
+      return ApiTokenService.apiTokenCreateToken({ body: tokenIn })
+        .then((response) => response.data!)
+        .then((token) => {
+          this.apiTokensMapping[token.token_id] = token as ApiTokenOut;
+          return token;
+        });
     },
     deleteApiToken(tokenId: string): Promise<void> {
-      return ApiTokenService.apiTokenDeleteToken(tokenId).then(() => {
-        delete this.apiTokensMapping[tokenId];
-      });
+      return ApiTokenService.apiTokenDeleteToken({ path: { tid: tokenId } })
+        .then((response) => response.data!)
+        .then(() => {
+          delete this.apiTokensMapping[tokenId];
+        });
     },
     updateUserRoles(uid: string, roles: RoleEnum[]): Promise<UserOutExtended> {
-      return UserService.userUpdateRoles(uid, {
-        roles: roles,
-      });
+      return UserService.userUpdateRoles({
+        path: { uid: uid },
+        body: {
+          roles: roles,
+        },
+      }).then((response) => response.data!);
     },
     inviteUser(userIn: UserIn): Promise<UserOutExtended> {
-      return UserService.userCreateUser(userIn).then((user) => {
-        useNameStore().addNameToMapping(user.uid, user.display_name);
-        return user;
-      });
+      return UserService.userCreateUser({ body: userIn })
+        .then((response) => response.data!)
+        .then((user) => {
+          useNameStore().addNameToMapping(user.uid, user.display_name);
+          return user;
+        });
     },
     resendInvitationEmail(uid: string): Promise<UserOutExtended> {
-      return UserService.userResendInvitation(uid).then((user) => {
-        useNameStore().addNameToMapping(user.uid, user.display_name);
-        return user;
-      });
+      return UserService.userResendInvitation({ path: { uid: uid } })
+        .then((response) => response.data!)
+        .then((user) => {
+          useNameStore().addNameToMapping(user.uid, user.display_name);
+          return user;
+        });
     },
     searchUser(searchString: string): Promise<UserOut[]> {
-      return UserService.userSearchUsers(searchString).then((users) => {
-        const nameStore = useNameStore();
-        for (const user of users) {
-          nameStore.addNameToMapping(user.uid, user.display_name);
-        }
-        return users;
-      });
+      return UserService.userSearchUsers({
+        query: { name_substring: searchString },
+      })
+        .then((response) => response.data!)
+        .then((users) => {
+          const nameStore = useNameStore();
+          for (const user of users) {
+            nameStore.addNameToMapping(user.uid, user.display_name);
+          }
+          return users;
+        });
     },
     async fetchUsernames(uids: string[]): Promise<string[]> {
       const nameStore = useNameStore();
@@ -194,7 +218,6 @@ export const useUserStore = defineStore({
         );
       // If all uids are already in the store, then return them
       if (filteredIds.length === 0) {
-        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
         return uids.map((uid) => nameStore.getName(uid)!);
       }
       const missingIds: string[] = [];
@@ -205,19 +228,22 @@ export const useUserStore = defineStore({
         if (storedNames[index] == null) {
           missingIds.push(filteredIds[index]);
         } else {
-          // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
           nameStore.addNameToMapping(filteredIds[index], storedNames[index]!);
         }
       }
       // fetch missing users from backend
       const fetchedUsers = await Promise.all(
-        missingIds.map((uid) => UserService.userGetUser(uid)),
+        missingIds.map((uid) =>
+          UserService.userGetUser({ path: { uid: uid } }).then(
+            (response) => response.data!,
+          ),
+        ),
       );
       // Put users in store
       for (const user of fetchedUsers) {
         nameStore.addNameToMapping(user.uid, user.display_name);
       }
-      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+
       return uids.map((uid) => nameStore.getName(uid)!);
     },
   },
diff --git a/src/stores/workflowExecutions.ts b/src/stores/workflowExecutions.ts
index b1505948834e1f440a8bb7bcc5fd1536d013ca76..3f377ec9e721c7118692dfd82f611a89368c3af0 100644
--- a/src/stores/workflowExecutions.ts
+++ b/src/stores/workflowExecutions.ts
@@ -1,16 +1,15 @@
 import { defineStore } from "pinia";
-import {
-  type AnonymizedWorkflowExecution,
-  type DevWorkflowExecutionIn,
-  OpenAPI,
-  type WorkflowExecutionIn,
-  type WorkflowExecutionOut,
-} from "@/client";
+import type {
+  AnonymizedWorkflowExecution,
+  DevWorkflowExecutionIn,
+  WorkflowExecutionIn,
+  WorkflowExecutionOut,
+} from "@/client/types.gen";
+import { WorkflowExecutionStatus } from "@/client/types.gen";
 import {
   WorkflowExecutionService,
-  WorkflowExecutionStatus,
   WorkflowService,
-} from "@/client";
+} from "@/client/services.gen";
 import { useUserStore } from "@/stores/users";
 import dayjs from "dayjs";
 import { set, get } from "idb-keyval";
@@ -19,17 +18,16 @@ import type {
   WorkflowMetaParameters,
   TemporaryParams,
 } from "@/types/WorkflowParameters";
-import axios from "axios";
-import { getQueryString } from "@/client/core/request";
+import { parse as query_parse } from "qs";
 
-function extractNextPage(linkHeader?: string): string | undefined {
+function extractNextPageQuery(linkHeader?: string): string | undefined {
   if (linkHeader == undefined) {
     return undefined;
   }
   for (const link of linkHeader.split(",")) {
     const linkParts = link.split(";");
     if (linkParts[1]?.trim()?.split("=")?.[1]?.slice(1, -1) === "next") {
-      return linkParts[0].slice(1, -1);
+      return linkParts[0].slice(1, -1).split("?")[1];
     }
   }
   return undefined;
@@ -68,37 +66,43 @@ export const useWorkflowExecutionStore = defineStore({
       sort: "asc" | "desc" = "desc",
     ): AsyncGenerator<WorkflowExecutionOut[], void, unknown> {
       const userRepository = useUserStore();
-      let response = await axios.get<WorkflowExecutionOut[]>(
-        `/workflow_executions${getQueryString({
-          executor_id: executorId,
-          execution_status: executionStatus,
-          workflow_version_id: workflowVersionId,
-          workflow_id: workflowId,
-          start_after: startAfter,
-          start_before: startBefore,
-          per_page: perPage,
-          sort: sort,
-        })}`,
-        {
-          baseURL: OpenAPI.BASE,
-        },
-      );
+
+      let response =
+        await WorkflowExecutionService.workflowExecutionListWorkflowExecutions({
+          query: {
+            executor_id: executorId,
+            execution_status: executionStatus,
+            workflow_version_id: workflowVersionId,
+            workflow_id: workflowId,
+            start_after: startAfter,
+            start_before: startBefore,
+            per_page: perPage,
+            sort: sort,
+          },
+        });
       userRepository.fetchUsernames(
-        response.data
-          .map((execution) => execution.executor_id ?? "")
+        response
+          .data!.map((execution) => execution.executor_id ?? "")
           .filter((eid) => eid.length > 0),
       );
-      yield response.data;
-      let nextUrl = extractNextPage(response.headers["link"]);
-      while (nextUrl != undefined) {
-        response = await axios.get(nextUrl);
+      yield response.data!;
+      // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+      // @ts-ignore
+      let nextUrlQuery = extractNextPageQuery(response.headers["link"]);
+      while (nextUrlQuery != undefined) {
+        response =
+          await WorkflowExecutionService.workflowExecutionListWorkflowExecutions(
+            { query: query_parse(nextUrlQuery) },
+          );
         userRepository.fetchUsernames(
-          response.data
-            .map((execution) => execution.executor_id ?? "")
+          response
+            .data!.map((execution) => execution.executor_id ?? "")
             .filter((eid) => eid.length > 0),
         );
-        yield response.data;
-        nextUrl = extractNextPage(response.headers["link"]);
+        yield response.data!;
+        // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+        // @ts-ignore
+        nextUrlQuery = extractNextPageQuery(response.headers["link"]);
       }
     },
     pushTemporaryParameters(
@@ -125,9 +129,10 @@ export const useWorkflowExecutionStore = defineStore({
         onFinally?.();
       }
       const userStore = useUserStore();
-      return WorkflowService.workflowGetDeveloperWorkflowStatistics(
-        userStore.currentUID,
-      )
+      return WorkflowService.workflowGetDeveloperWorkflowStatistics({
+        query: { developer_id: userStore.currentUID },
+      })
+        .then((response) => response.data!)
         .then((executions) => {
           this.anonymizedExecutions = executions;
           return executions;
@@ -172,9 +177,10 @@ export const useWorkflowExecutionStore = defineStore({
       if (this.executionMapping[executionId] != undefined) {
         onFinally?.();
       }
-      return WorkflowExecutionService.workflowExecutionGetWorkflowExecution(
-        executionId,
-      )
+      return WorkflowExecutionService.workflowExecutionGetWorkflowExecution({
+        path: { eid: executionId },
+      })
+        .then((response) => response.data!)
         .then((execution) => {
           this.executionMapping[execution.execution_id] = execution;
           return execution;
@@ -195,11 +201,13 @@ export const useWorkflowExecutionStore = defineStore({
             return parameters;
           }
           return WorkflowExecutionService.workflowExecutionGetWorkflowExecutionParams(
-            executionId,
-          ).then((parameters) => {
-            set(executionId, parameters);
-            return parameters;
-          });
+            { path: { eid: executionId } },
+          )
+            .then((response) => response.data!)
+            .then((parameters) => {
+              set(executionId, parameters);
+              return parameters;
+            });
         })
         .then((parameters) => {
           this.parameters[executionId] = parameters;
@@ -207,44 +215,52 @@ export const useWorkflowExecutionStore = defineStore({
         });
     },
     deleteExecution(executionId: string): Promise<void> {
-      return WorkflowExecutionService.workflowExecutionDeleteWorkflowExecution(
-        executionId,
-      ).then(() => {
-        delete this.executionMapping[executionId];
-      });
+      return WorkflowExecutionService.workflowExecutionDeleteWorkflowExecution({
+        path: { eid: executionId },
+      })
+        .then((response) => response.data!)
+        .then(() => {
+          delete this.executionMapping[executionId];
+        });
     },
     cancelExecution(executionId: string): Promise<void> {
-      return WorkflowExecutionService.workflowExecutionCancelWorkflowExecution(
-        executionId,
-      ).then(() => {
-        if (this.executionMapping[executionId] == undefined) {
-          this.fetchExecution(executionId);
-        } else {
-          this.executionMapping[executionId].status =
-            WorkflowExecutionStatus.CANCELED;
-          this.executionMapping[executionId].end_time = dayjs().unix();
-        }
-      });
+      return WorkflowExecutionService.workflowExecutionCancelWorkflowExecution({
+        path: { eid: executionId },
+      })
+        .then((response) => response.data!)
+        .then(() => {
+          if (this.executionMapping[executionId] == undefined) {
+            this.fetchExecution(executionId);
+          } else {
+            this.executionMapping[executionId].status =
+              WorkflowExecutionStatus.CANCELED;
+            this.executionMapping[executionId].end_time = dayjs().unix();
+          }
+        });
     },
     startExecution(
       executionIn: WorkflowExecutionIn,
     ): Promise<WorkflowExecutionOut> {
-      return WorkflowExecutionService.workflowExecutionStartWorkflow(
-        executionIn,
-      ).then((execution) => {
-        this.executionMapping[execution.execution_id] = execution;
-        return execution;
-      });
+      return WorkflowExecutionService.workflowExecutionStartWorkflow({
+        body: executionIn,
+      })
+        .then((response) => response.data!)
+        .then((execution) => {
+          this.executionMapping[execution.execution_id] = execution;
+          return execution;
+        });
     },
     startDevExecution(
       executionIn: DevWorkflowExecutionIn,
     ): Promise<WorkflowExecutionOut> {
-      return WorkflowExecutionService.workflowExecutionStartArbitraryWorkflow(
-        executionIn,
-      ).then((execution) => {
-        this.executionMapping[execution.execution_id] = execution;
-        return execution;
-      });
+      return WorkflowExecutionService.workflowExecutionStartArbitraryWorkflow({
+        body: executionIn,
+      })
+        .then((response) => response.data!)
+        .then((execution) => {
+          this.executionMapping[execution.execution_id] = execution;
+          return execution;
+        });
     },
   },
 });
diff --git a/src/stores/workflows.ts b/src/stores/workflows.ts
index aee87d87f073cf0e25c31e3266daaf7418ebba90..3615316bc0d7af9b23c2a5c0a93d3fc4ebb32837 100644
--- a/src/stores/workflows.ts
+++ b/src/stores/workflows.ts
@@ -10,15 +10,14 @@ import type {
   WorkflowOut,
   WorkflowUpdate,
   WorkflowVersion,
-} from "@/client";
+} from "@/client/types.gen";
+import { DocumentationEnum, WorkflowVersionStatus } from "@/client/types.gen";
 import {
-  WorkflowVersionStatus,
-  DocumentationEnum,
   WorkflowCredentialsService,
   WorkflowModeService,
   WorkflowService,
   WorkflowVersionService,
-} from "@/client";
+} from "@/client/services.gen";
 import { useUserStore } from "@/stores/users";
 import { get, set } from "idb-keyval";
 import { useNameStore } from "@/stores/names";
@@ -96,6 +95,7 @@ export const useWorkflowStore = defineStore({
         onFinally?.();
       }
       return WorkflowService.workflowListWorkflows()
+        .then((response) => response.data!)
         .then((workflows) => {
           for (const workflow of workflows) {
             this.workflowMapping[workflow.workflow_id] = workflow;
@@ -123,11 +123,13 @@ export const useWorkflowStore = defineStore({
       if (this.ownWorkflows.length > 0) {
         onFinally?.();
       }
-      return WorkflowService.workflowListWorkflows(
-        undefined,
-        Object.values(WorkflowVersionStatus),
-        authStore.currentUID,
-      )
+      return WorkflowService.workflowListWorkflows({
+        query: {
+          version_status: Object.values(WorkflowVersionStatus),
+          developer_id: authStore.currentUID,
+        },
+      })
+        .then((response) => response.data!)
         .then((workflows) => {
           for (const workflow of workflows) {
             this.comprehensiveWorkflowMapping[workflow.workflow_id] = workflow;
@@ -176,11 +178,18 @@ export const useWorkflowStore = defineStore({
         );
       }
       return WorkflowVersionService.workflowVersionDownloadWorkflowDocumentation(
-        workflow_id,
-        workflow_version_id,
-        document,
-        mode_id,
+        {
+          path: {
+            wid: workflow_id,
+            git_commit_hash: workflow_version_id,
+          },
+          query: {
+            document: document,
+            mode_id: mode_id,
+          },
+        },
       )
+        .then((response) => response.data!)
         .then((response) => {
           this.documentationFiles[workflow_version_id][document] = response;
           return response;
@@ -198,9 +207,12 @@ export const useWorkflowStore = defineStore({
       if (this.reviewableWorkflows.length > 0) {
         onFinally?.();
       }
-      return WorkflowService.workflowListWorkflows(undefined, [
-        WorkflowVersionStatus.CREATED,
-      ])
+      return WorkflowService.workflowListWorkflows({
+        query: {
+          version_status: [WorkflowVersionStatus.CREATED],
+        },
+      })
+        .then((response) => response.data!)
         .then((workflows) => {
           for (const workflow of workflows) {
             this.__addNameToMapping(workflow.workflow_id, workflow.name);
@@ -254,10 +266,17 @@ export const useWorkflowStore = defineStore({
       if (!comprehensive && this.workflowMapping[workflow_id] != undefined) {
         onFinally?.();
       }
-      return WorkflowService.workflowGetWorkflow(
-        workflow_id,
-        comprehensive ? Object.values(WorkflowVersionStatus) : undefined,
-      )
+      return WorkflowService.workflowGetWorkflow({
+        path: {
+          wid: workflow_id,
+        },
+        query: {
+          version_status: comprehensive
+            ? Object.values(WorkflowVersionStatus)
+            : undefined,
+        },
+      })
+        .then((response) => response.data!)
         .then((workflow) => {
           this.__addNameToMapping(workflow.workflow_id, workflow.name);
           for (const version of workflow.versions) {
@@ -291,7 +310,9 @@ export const useWorkflowStore = defineStore({
         );
       return Promise.all(
         filteredIds.map((modeId) =>
-          WorkflowModeService.workflowModeGetWorkflowMode(modeId),
+          WorkflowModeService.workflowModeGetWorkflowMode({
+            path: { mode_id: modeId },
+          }).then((response) => response.data!),
         ),
       ).then((modes) => {
         for (const mode of modes) {
@@ -316,54 +337,63 @@ export const useWorkflowStore = defineStore({
       workflow_id: string,
       version_id: string,
     ): Promise<WorkflowVersion> {
-      return WorkflowVersionService.workflowVersionDeprecateWorkflowVersion(
-        workflow_id,
-        version_id,
-      ).then((version) => {
-        // Update version in workflowMapping
-        if (this.workflowMapping[workflow_id] == undefined) {
-          this.fetchWorkflow(workflow_id, false);
-        } else {
-          const versionIndex1 = this.workflowMapping[
-            workflow_id
-          ].versions.findIndex(
-            (version) => version.workflow_version_id == version_id,
-          );
-          if (versionIndex1 > -1) {
-            this.workflowMapping[workflow_id].versions[versionIndex1] = version;
+      return WorkflowVersionService.workflowVersionDeprecateWorkflowVersion({
+        path: {
+          wid: workflow_id,
+          git_commit_hash: version_id,
+        },
+      })
+        .then((response) => response.data!)
+        .then((version) => {
+          // Update version in workflowMapping
+          if (this.workflowMapping[workflow_id] == undefined) {
+            this.fetchWorkflow(workflow_id, false);
           } else {
-            this.workflowMapping[workflow_id].versions.push(version);
+            const versionIndex1 = this.workflowMapping[
+              workflow_id
+            ].versions.findIndex(
+              (version) => version.workflow_version_id == version_id,
+            );
+            if (versionIndex1 > -1) {
+              this.workflowMapping[workflow_id].versions[versionIndex1] =
+                version;
+            } else {
+              this.workflowMapping[workflow_id].versions.push(version);
+            }
           }
-        }
 
-        // Update version in comprehensiveWorkflowMapping
-        if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) {
-          this.fetchWorkflow(workflow_id, true);
-        } else {
-          const versionIndex2 = this.comprehensiveWorkflowMapping[
-            workflow_id
-          ].versions.findIndex(
-            (version) => version.workflow_version_id == version_id,
-          );
-          if (versionIndex2 > -1) {
-            this.comprehensiveWorkflowMapping[workflow_id].versions[
-              versionIndex2
-            ] = version;
+          // Update version in comprehensiveWorkflowMapping
+          if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) {
+            this.fetchWorkflow(workflow_id, true);
           } else {
-            this.comprehensiveWorkflowMapping[workflow_id].versions.push(
-              version,
+            const versionIndex2 = this.comprehensiveWorkflowMapping[
+              workflow_id
+            ].versions.findIndex(
+              (version) => version.workflow_version_id == version_id,
             );
+            if (versionIndex2 > -1) {
+              this.comprehensiveWorkflowMapping[workflow_id].versions[
+                versionIndex2
+              ] = version;
+            } else {
+              this.comprehensiveWorkflowMapping[workflow_id].versions.push(
+                version,
+              );
+            }
           }
-        }
-        return version;
-      });
+          return version;
+        });
     },
     updateWorkflow(
       workflow_id: string,
       version: WorkflowUpdate,
     ): Promise<WorkflowVersion> {
-      return WorkflowService.workflowUpdateWorkflow(workflow_id, version).then(
-        (updatedVersion) => {
+      return WorkflowService.workflowUpdateWorkflow({
+        path: { wid: workflow_id },
+        body: version,
+      })
+        .then((response) => response.data!)
+        .then((updatedVersion) => {
           this.__addNameToMapping(
             updatedVersion.workflow_version_id,
             updatedVersion.version,
@@ -376,19 +406,23 @@ export const useWorkflowStore = defineStore({
             );
           }
           return updatedVersion;
-        },
-      );
+        });
     },
     deleteWorkflow(workflow_id: string): Promise<void> {
-      return WorkflowService.workflowDeleteWorkflow(workflow_id).then(() => {
-        useNameStore().deleteNameFromMapping(workflow_id);
-        delete this.workflowMapping[workflow_id];
-        delete this.comprehensiveWorkflowMapping[workflow_id];
-      });
+      return WorkflowService.workflowDeleteWorkflow({
+        path: { wid: workflow_id },
+      })
+        .then((response) => response.data!)
+        .then(() => {
+          useNameStore().deleteNameFromMapping(workflow_id);
+          delete this.workflowMapping[workflow_id];
+          delete this.comprehensiveWorkflowMapping[workflow_id];
+        });
     },
     createWorkflow(workflow: WorkflowIn): Promise<WorkflowOut> {
-      return WorkflowService.workflowCreateWorkflow(workflow).then(
-        (workflowOut) => {
+      return WorkflowService.workflowCreateWorkflow({ body: workflow })
+        .then((response) => response.data!)
+        .then((workflowOut) => {
           this.comprehensiveWorkflowMapping[workflowOut.workflow_id] =
             workflowOut;
           this.__addNameToMapping(workflowOut.workflow_id, workflowOut.name);
@@ -397,154 +431,171 @@ export const useWorkflowStore = defineStore({
             workflowOut.versions[0].version,
           );
           return workflowOut;
-        },
-      );
+        });
     },
     updateWorkflowCredentials(
       workflow_id: string,
       credentials: WorkflowCredentialsIn,
     ): Promise<void> {
       return WorkflowCredentialsService.workflowCredentialsUpdateWorkflowCredentials(
-        workflow_id,
-        credentials,
-      ).then(() => {
-        if (this.workflowMapping[workflow_id] == undefined) {
-          this.fetchWorkflow(workflow_id, false);
-        } else {
-          this.workflowMapping[workflow_id].private = true;
-        }
-        if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) {
-          this.fetchWorkflow(workflow_id, true);
-        } else {
-          this.comprehensiveWorkflowMapping[workflow_id].private = true;
-        }
-      });
+        {
+          path: { wid: workflow_id },
+          body: credentials,
+        },
+      )
+        .then((response) => response.data!)
+        .then(() => {
+          if (this.workflowMapping[workflow_id] == undefined) {
+            this.fetchWorkflow(workflow_id, false);
+          } else {
+            this.workflowMapping[workflow_id].private = true;
+          }
+          if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) {
+            this.fetchWorkflow(workflow_id, true);
+          } else {
+            this.comprehensiveWorkflowMapping[workflow_id].private = true;
+          }
+        });
     },
     deleteWorkflowCredentials(workflow_id: string): Promise<void> {
       return WorkflowCredentialsService.workflowCredentialsDeleteWorkflowCredentials(
-        workflow_id,
-      ).then(() => {
-        if (this.workflowMapping[workflow_id] == undefined) {
-          this.fetchWorkflow(workflow_id, false);
-        } else {
-          this.workflowMapping[workflow_id].private = false;
-        }
-        if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) {
-          this.fetchWorkflow(workflow_id, true);
-        } else {
-          this.comprehensiveWorkflowMapping[workflow_id].private = false;
-        }
-      });
+        { path: { wid: workflow_id } },
+      )
+        .then((response) => response.data!)
+        .then(() => {
+          if (this.workflowMapping[workflow_id] == undefined) {
+            this.fetchWorkflow(workflow_id, false);
+          } else {
+            this.workflowMapping[workflow_id].private = false;
+          }
+          if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) {
+            this.fetchWorkflow(workflow_id, true);
+          } else {
+            this.comprehensiveWorkflowMapping[workflow_id].private = false;
+          }
+        });
     },
     updateVersionIcon(
       workflow_id: string,
       version_id: string,
       icon: Body_Workflow_Version_upload_workflow_version_icon,
     ): Promise<IconUpdateOut> {
-      return WorkflowVersionService.workflowVersionUploadWorkflowVersionIcon(
-        workflow_id,
-        version_id,
-        icon,
-      ).then((response) => {
-        // Update version in workflowMapping
-        if (this.workflowMapping[workflow_id] == undefined) {
-          this.fetchWorkflow(workflow_id, false);
-        } else {
-          const versionIndex1 = this.workflowMapping[
-            workflow_id
-          ].versions.findIndex(
-            (version) => version.workflow_version_id == version_id,
-          );
-          if (versionIndex1 > -1) {
-            this.workflowMapping[workflow_id].versions[versionIndex1].icon_url =
-              response.icon_url;
+      return WorkflowVersionService.workflowVersionUploadWorkflowVersionIcon({
+        path: {
+          wid: workflow_id,
+          git_commit_hash: version_id,
+        },
+        body: icon,
+      })
+        .then((response) => response.data!)
+        .then((response) => {
+          // Update version in workflowMapping
+          if (this.workflowMapping[workflow_id] == undefined) {
+            this.fetchWorkflow(workflow_id, false);
+          } else {
+            const versionIndex1 = this.workflowMapping[
+              workflow_id
+            ].versions.findIndex(
+              (version) => version.workflow_version_id == version_id,
+            );
+            if (versionIndex1 > -1) {
+              this.workflowMapping[workflow_id].versions[
+                versionIndex1
+              ].icon_url = response.icon_url;
+            }
           }
-        }
 
-        // Update version in comprehensiveWorkflowMapping
-        if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) {
-          this.fetchWorkflow(workflow_id, true);
-        } else {
-          const versionIndex2 = this.comprehensiveWorkflowMapping[
-            workflow_id
-          ].versions.findIndex(
-            (version) => version.workflow_version_id == version_id,
-          );
-          if (versionIndex2 > -1) {
-            setTimeout(() => {
-              this.comprehensiveWorkflowMapping[workflow_id].versions[
-                versionIndex2
-              ].icon_url = response.icon_url;
-            }, 500);
+          // Update version in comprehensiveWorkflowMapping
+          if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) {
+            this.fetchWorkflow(workflow_id, true);
+          } else {
+            const versionIndex2 = this.comprehensiveWorkflowMapping[
+              workflow_id
+            ].versions.findIndex(
+              (version) => version.workflow_version_id == version_id,
+            );
+            if (versionIndex2 > -1) {
+              setTimeout(() => {
+                this.comprehensiveWorkflowMapping[workflow_id].versions[
+                  versionIndex2
+                ].icon_url = response.icon_url;
+              }, 500);
+            }
           }
-        }
-        return response;
-      });
+          return response;
+        });
     },
     deleteVersionIcon(workflow_id: string, version_id: string): Promise<void> {
-      return WorkflowVersionService.workflowVersionDeleteWorkflowVersionIcon(
-        workflow_id,
-        version_id,
-      ).then(() => {
-        // Update version in workflowMapping
-        if (this.workflowMapping[workflow_id] == undefined) {
-          this.fetchWorkflow(workflow_id, false);
-        } else {
-          const versionIndex1 = this.workflowMapping[
-            workflow_id
-          ].versions.findIndex(
-            (version) => version.workflow_version_id == version_id,
-          );
-          if (versionIndex1 > -1) {
-            this.workflowMapping[workflow_id].versions[versionIndex1].icon_url =
-              null;
+      return WorkflowVersionService.workflowVersionDeleteWorkflowVersionIcon({
+        path: {
+          wid: workflow_id,
+          git_commit_hash: version_id,
+        },
+      })
+        .then((response) => response.data!)
+        .then(() => {
+          // Update version in workflowMapping
+          if (this.workflowMapping[workflow_id] == undefined) {
+            this.fetchWorkflow(workflow_id, false);
+          } else {
+            const versionIndex1 = this.workflowMapping[
+              workflow_id
+            ].versions.findIndex(
+              (version) => version.workflow_version_id == version_id,
+            );
+            if (versionIndex1 > -1) {
+              this.workflowMapping[workflow_id].versions[
+                versionIndex1
+              ].icon_url = null;
+            }
           }
-        }
 
-        // Update version in comprehensiveWorkflowMapping
-        if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) {
-          this.fetchWorkflow(workflow_id, true);
-        } else {
-          const versionIndex2 = this.comprehensiveWorkflowMapping[
-            workflow_id
-          ].versions.findIndex(
-            (version) => version.workflow_version_id == version_id,
-          );
-          if (versionIndex2 > -1) {
-            this.comprehensiveWorkflowMapping[workflow_id].versions[
-              versionIndex2
-            ].icon_url = null;
+          // Update version in comprehensiveWorkflowMapping
+          if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) {
+            this.fetchWorkflow(workflow_id, true);
+          } else {
+            const versionIndex2 = this.comprehensiveWorkflowMapping[
+              workflow_id
+            ].versions.findIndex(
+              (version) => version.workflow_version_id == version_id,
+            );
+            if (versionIndex2 > -1) {
+              this.comprehensiveWorkflowMapping[workflow_id].versions[
+                versionIndex2
+              ].icon_url = null;
+            }
           }
-        }
-      });
+        });
     },
     updateVersionStatus(
       workflow_id: string,
       version_id: string,
       status: WorkflowVersionStatus,
     ): Promise<void> {
-      return WorkflowVersionService.workflowVersionUpdateWorkflowVersionStatus(
-        workflow_id,
-        version_id,
-        /* eslint-disable @typescript-eslint/ban-ts-comment */
-        // @ts-ignore
-        { status: status },
-      ).then(() => {
-        if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) {
-          this.fetchWorkflow(workflow_id, true);
-        } else {
-          const versionIndex = this.comprehensiveWorkflowMapping[
-            workflow_id
-          ].versions.findIndex(
-            (version) => version.workflow_version_id == version_id,
-          );
-          if (versionIndex > -1) {
-            this.comprehensiveWorkflowMapping[workflow_id].versions[
-              versionIndex
-            ].status = status;
+      return WorkflowVersionService.workflowVersionUpdateWorkflowVersionStatus({
+        path: {
+          wid: workflow_id,
+          git_commit_hash: version_id,
+        },
+        body: { status: status },
+      })
+        .then((response) => response.data!)
+        .then(() => {
+          if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) {
+            this.fetchWorkflow(workflow_id, true);
+          } else {
+            const versionIndex = this.comprehensiveWorkflowMapping[
+              workflow_id
+            ].versions.findIndex(
+              (version) => version.workflow_version_id == version_id,
+            );
+            if (versionIndex > -1) {
+              this.comprehensiveWorkflowMapping[workflow_id].versions[
+                versionIndex
+              ].status = status;
+            }
           }
-        }
-      });
+        });
     },
     updateWorkflowExtension(
       workflow_id: string,
@@ -552,90 +603,105 @@ export const useWorkflowStore = defineStore({
       extension: ParameterExtension,
     ): Promise<WorkflowVersion> {
       return WorkflowVersionService.workflowVersionUpdateWorkflowVersionParameterExtension(
-        workflow_id,
-        version_id,
-        extension,
-      ).then((version) => {
-        // Update version in workflowMapping
-        if (this.workflowMapping[workflow_id] == undefined) {
-          this.fetchWorkflow(workflow_id, false);
-        } else {
-          const versionIndex1 = this.workflowMapping[
-            workflow_id
-          ].versions.findIndex(
-            (version) => version.workflow_version_id == version_id,
-          );
-          if (versionIndex1 > -1) {
-            this.workflowMapping[workflow_id].versions[versionIndex1] = version;
+        {
+          path: {
+            wid: workflow_id,
+            git_commit_hash: version_id,
+          },
+          body: extension,
+        },
+      )
+        .then((response) => response.data!)
+        .then((version) => {
+          // Update version in workflowMapping
+          if (this.workflowMapping[workflow_id] == undefined) {
+            this.fetchWorkflow(workflow_id, false);
+          } else {
+            const versionIndex1 = this.workflowMapping[
+              workflow_id
+            ].versions.findIndex(
+              (version) => version.workflow_version_id == version_id,
+            );
+            if (versionIndex1 > -1) {
+              this.workflowMapping[workflow_id].versions[versionIndex1] =
+                version;
+            }
           }
-        }
 
-        // Update version in comprehensiveWorkflowMapping
-        if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) {
-          this.fetchWorkflow(workflow_id, true);
-        } else {
-          const versionIndex2 = this.comprehensiveWorkflowMapping[
-            workflow_id
-          ].versions.findIndex(
-            (version) => version.workflow_version_id == version_id,
-          );
-          if (versionIndex2 > -1) {
-            this.comprehensiveWorkflowMapping[workflow_id].versions[
-              versionIndex2
-            ] = version;
+          // Update version in comprehensiveWorkflowMapping
+          if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) {
+            this.fetchWorkflow(workflow_id, true);
+          } else {
+            const versionIndex2 = this.comprehensiveWorkflowMapping[
+              workflow_id
+            ].versions.findIndex(
+              (version) => version.workflow_version_id == version_id,
+            );
+            if (versionIndex2 > -1) {
+              this.comprehensiveWorkflowMapping[workflow_id].versions[
+                versionIndex2
+              ] = version;
+            }
           }
-        }
-        return version;
-      });
+          return version;
+        });
     },
     deleteWorkflowExtension(
       workflow_id: string,
       version_id: string,
     ): Promise<void> {
       return WorkflowVersionService.workflowVersionDeleteWorkflowVersionParameterExtension(
-        workflow_id,
-        version_id,
-      ).then(() => {
-        // Update version in workflowMapping
-        if (this.workflowMapping[workflow_id] == undefined) {
-          this.fetchWorkflow(workflow_id, false);
-        } else {
-          const versionIndex1 = this.workflowMapping[
-            workflow_id
-          ].versions.findIndex(
-            (version) => version.workflow_version_id == version_id,
-          );
-          if (versionIndex1 > -1) {
-            this.workflowMapping[workflow_id].versions[
-              versionIndex1
-            ].parameter_extension = undefined;
+        {
+          path: {
+            wid: workflow_id,
+            git_commit_hash: version_id,
+          },
+        },
+      )
+        .then((response) => response.data!)
+        .then(() => {
+          // Update version in workflowMapping
+          if (this.workflowMapping[workflow_id] == undefined) {
+            this.fetchWorkflow(workflow_id, false);
+          } else {
+            const versionIndex1 = this.workflowMapping[
+              workflow_id
+            ].versions.findIndex(
+              (version) => version.workflow_version_id == version_id,
+            );
+            if (versionIndex1 > -1) {
+              this.workflowMapping[workflow_id].versions[
+                versionIndex1
+              ].parameter_extension = undefined;
+            }
           }
-        }
 
-        // Update version in comprehensiveWorkflowMapping
-        if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) {
-          this.fetchWorkflow(workflow_id, true);
-        } else {
-          const versionIndex2 = this.comprehensiveWorkflowMapping[
-            workflow_id
-          ].versions.findIndex(
-            (version) => version.workflow_version_id == version_id,
-          );
-          if (versionIndex2 > -1) {
-            this.comprehensiveWorkflowMapping[workflow_id].versions[
-              versionIndex2
-            ].parameter_extension = undefined;
+          // Update version in comprehensiveWorkflowMapping
+          if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) {
+            this.fetchWorkflow(workflow_id, true);
+          } else {
+            const versionIndex2 = this.comprehensiveWorkflowMapping[
+              workflow_id
+            ].versions.findIndex(
+              (version) => version.workflow_version_id == version_id,
+            );
+            if (versionIndex2 > -1) {
+              this.comprehensiveWorkflowMapping[workflow_id].versions[
+                versionIndex2
+              ].parameter_extension = undefined;
+            }
           }
-        }
-      });
+        });
     },
     acceptWorkflowOtr(otr: OwnershipTransferRequestOut): Promise<WorkflowOut> {
-      return WorkflowService.workflowAcceptWorkflowOtr(otr.target_id).then(
-        (workflow) => {
+      return WorkflowService.workflowAcceptWorkflowOtr({
+        path: { wid: otr.target_id },
+      })
+        .then((response) => response.data!)
+        .then((workflow) => {
           this.fetchWorkflow(workflow.workflow_id, true);
           return workflow;
-        },
-      );
+        });
     },
   },
 });
diff --git a/src/utils/GitRepository.ts b/src/utils/GitRepository.ts
index 2a6bb7295cc38eb922310e05d6f148a5947f43a3..cd215787f3aa4b9981758b740f471cd4eef1ce45 100644
--- a/src/utils/GitRepository.ts
+++ b/src/utils/GitRepository.ts
@@ -1,7 +1,7 @@
 import axios from "axios";
 import type { AxiosInstance, AxiosBasicCredentials } from "axios";
-import type { WorkflowModeOut, WorkflowModeIn } from "@/client";
-import { DocumentationEnum } from "@/client";
+import type { WorkflowModeOut, WorkflowModeIn } from "@/client/types.gen";
+import { DocumentationEnum } from "@/client/types.gen";
 
 interface CheckDocResult {
   found?: string;
@@ -78,7 +78,7 @@ export abstract class GitRepository {
     try {
       await this.httpClient.get(this.repoAvailabilityUrl);
       return true;
-    } catch (e) {
+    } catch {
       return false;
     }
   }
@@ -117,7 +117,7 @@ export abstract class GitRepository {
         } else if (files.findIndex((file) => file === entryScriptName) === -1) {
           checkRepoResult.mainScriptMissing = entryScriptName;
         }
-      } catch (e) {
+      } catch {
         checkRepoResult.mainScriptMissing = "main.nf";
       }
     }
diff --git a/src/views/LoginView.vue b/src/views/LoginView.vue
index 2ab602744effc866f84f264f4b97f6391f6d4b35..de5ac12002e7f9aa32a271362710e1612bc11a7a 100644
--- a/src/views/LoginView.vue
+++ b/src/views/LoginView.vue
@@ -2,9 +2,9 @@
 import { onBeforeMount, onMounted, computed } from "vue";
 import { useUserStore } from "@/stores/users";
 import { useRouter } from "vue-router";
-import { OpenAPI } from "@/client";
 import { Toast } from "bootstrap";
 import BootstrapToast from "@/components/BootstrapToast.vue";
+import { environment } from "@/environment";
 
 const router = useRouter();
 
@@ -26,7 +26,9 @@ onBeforeMount(() => {
 });
 
 const loginPath = computed<string>(() => {
-  const loginUrl = new URL(`${OpenAPI.BASE}/auth/login?provider=lifescience`);
+  const loginUrl = new URL(
+    `${environment.API_BASE_URL}/auth/login?provider=lifescience`,
+  );
   if (props.returnPath) {
     loginUrl.searchParams.append("next", encodeURI(props.returnPath));
   }
@@ -97,17 +99,18 @@ onMounted(() => {
               style="max-height: 70px"
             />
           </a>
-          <div class="mt-2" v-if="invitationToken == undefined">
+          <div v-if="invitationToken == undefined" class="mt-2">
             Don't have an account?
             <router-link :to="{ name: 'signup' }">
-              Create an account</router-link
-            >.
+              Create an account
+            </router-link>
+            .
           </div>
           <div class="mt-2">
             By using this service you agree to our
             <router-link :to="{ name: 'terms' }">terms of usage</router-link>
             and
-            <router-link :to="{ name: 'privacy' }">privacy policy </router-link>
+            <router-link :to="{ name: 'privacy' }">privacy policy</router-link>
             .
           </div>
         </div>
diff --git a/src/views/NotFoundView.vue b/src/views/NotFoundView.vue
index 73393efccd69109bfc8e8619fe799737d26ddc05..ee710274fc9cb6134c8db667986e812a98f15339 100644
--- a/src/views/NotFoundView.vue
+++ b/src/views/NotFoundView.vue
@@ -8,7 +8,7 @@
     <div class="card-body p-5">
       <h1 class="card-title mb-5">Page Not Found</h1>
       <p class="card-text text-secondary fs-4">
-        Back to the <router-link to="/">HomePage</router-link>
+        Back to the <router-link to="/"> HomePage </router-link>
       </p>
     </div>
   </div>
diff --git a/src/views/PrivacyPolicyView.vue b/src/views/PrivacyPolicyView.vue
index 509ef1800bc49d8d369ff572a41cceeaee77c120..14e0042160bbf1883756394b49413362ffe0ccd9 100644
--- a/src/views/PrivacyPolicyView.vue
+++ b/src/views/PrivacyPolicyView.vue
@@ -193,7 +193,7 @@ onMounted(() => {
       again. Furthermore, data will not be collected by Matomo if you use the
       browser in so-called anonymous mode.
     </p>
-    <div id="matomo-opt-out" class="mb-2"></div>
+    <div id="matomo-opt-out" class="mb-2" />
     <h5>5.3.7 Contact for the technical provision of the Matomo service</h5>
     <p>
       Bioinformatics Resource Facility<br />
diff --git a/src/views/SignupView.vue b/src/views/SignupView.vue
index 3b2f8291fd4414234826d8766cb29f619ff793c8..eb31f46d513b54c9a872372e002860b122fc2d96 100644
--- a/src/views/SignupView.vue
+++ b/src/views/SignupView.vue
@@ -1,5 +1,5 @@
 <script setup lang="ts">
-import { OpenAPI } from "@/client";
+import { environment } from "@/environment";
 </script>
 
 <template>
@@ -25,7 +25,7 @@ import { OpenAPI } from "@/client";
     account will be created automatically for you.
   </p>
   <div class="d-flex flex-column mx-auto w-fit align-items-center mt-5">
-    <a :href="`${OpenAPI.BASE}/auth/login?provider=lifescience`">
+    <a :href="`${environment.API_BASE_URL}/auth/login?provider=lifescience`">
       <img
         src="/src/assets/images/ls-login.png"
         alt="[LS Login]"
@@ -35,9 +35,9 @@ import { OpenAPI } from "@/client";
     </a>
     <div class="mt-2">
       By using this service you agree to our
-      <router-link :to="{ name: 'terms' }">terms of usage</router-link>
+      <router-link :to="{ name: 'terms' }"> terms of usage </router-link>
       and
-      <router-link :to="{ name: 'privacy' }">privacy policy</router-link>
+      <router-link :to="{ name: 'privacy' }"> privacy policy </router-link>
       .
     </div>
   </div>
diff --git a/src/views/TermsOfUsageView.vue b/src/views/TermsOfUsageView.vue
index 1ffb282dd553503be591eba2702b180c0c3431c3..7f827db7090936b18d4086c043625fb07f988fde 100644
--- a/src/views/TermsOfUsageView.vue
+++ b/src/views/TermsOfUsageView.vue
@@ -95,7 +95,7 @@
   <h3>Privacy</h3>
   <p>
     Our
-    <router-link :to="{ name: 'privacy' }">Privacy Policy</router-link>
+    <router-link :to="{ name: 'privacy' }"> Privacy Policy </router-link>
     governs our collection and use of your personal information. Please review
     those provisions, too.
   </p>
diff --git a/src/views/admin/AdminBucketsView.vue b/src/views/admin/AdminBucketsView.vue
index 2d471e9897509eec7901f5ca18c28797eb94b088..4674fd967e2624de6d1de6765daafd1d7bdfc3dd 100644
--- a/src/views/admin/AdminBucketsView.vue
+++ b/src/views/admin/AdminBucketsView.vue
@@ -1,8 +1,8 @@
 <script setup lang="ts">
 import { computed, reactive } from "vue";
-import { type BucketOut, BucketType } from "@/client";
+import { BucketType } from "@/client/types.gen";
+import type { BucketOut, UserOut } from "@/client/types.gen";
 import SearchUserModal from "@/components/modals/SearchUserModal.vue";
-import type { UserOut } from "@/client";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import { useBucketStore } from "@/stores/buckets";
 import { useNameStore } from "@/stores/names";
@@ -93,7 +93,7 @@ function limitsUpdated(bucket: BucketOut) {
   <div class="border-bottom mb-4">
     <h2>Manage Buckets</h2>
   </div>
-  <form @submit.prevent="searchBuckets" id="admin-bucket-search-form">
+  <form id="admin-bucket-search-form" @submit.prevent="searchBuckets">
     <div class="d-flex justify-content-evenly align-content-center mb-4">
       <div class="flex-fill mx-2">
         <label for="admin-bucket-name-search" class="form-label"
@@ -105,11 +105,11 @@ function limitsUpdated(bucket: BucketOut) {
           </div>
           <input
             id="admin-bucket-name-search"
+            v-model.trim="bucketState.filterString"
             type="text"
             class="form-control"
             placeholder="Search Buckets"
             maxlength="32"
-            v-model.trim="bucketState.filterString"
           />
         </div>
       </div>
@@ -150,7 +150,7 @@ function limitsUpdated(bucket: BucketOut) {
       Reset
     </button>
   </form>
-  <table class="table table-striped align-middle" v-if="bucketState.buckets">
+  <table v-if="bucketState.buckets" class="table table-striped align-middle">
     <thead>
       <tr>
         <th scope="col"><b>Name</b></th>
@@ -196,9 +196,9 @@ function limitsUpdated(bucket: BucketOut) {
           <button
             type="button"
             class="btn btn-secondary btn-sm"
-            @click="bucketState.updateLimitsBucket = bucket"
             data-bs-toggle="modal"
             :data-bs-target="'#' + updateLimitsModalId"
+            @click="bucketState.updateLimitsBucket = bucket"
           >
             Edit quotas
           </button>
diff --git a/src/views/admin/AdminResourcesView.vue b/src/views/admin/AdminResourcesView.vue
index fc8fb5a5c63124b351b93b7ff6d86d2a26cf6850..bbcbfbe8461cf66067b16fef548d2f19a6104b89 100644
--- a/src/views/admin/AdminResourcesView.vue
+++ b/src/views/admin/AdminResourcesView.vue
@@ -1,12 +1,12 @@
 <script setup lang="ts">
 import { useResourceStore } from "@/stores/resources";
 import { reactive } from "vue";
-import type { UserOut } from "@/client";
-import {
-  type ResourceOut,
-  type ResourceVersionOut,
-  ResourceVersionStatus,
-} from "@/client";
+import { ResourceVersionStatus } from "@/client/types.gen";
+import type {
+  ResourceOut,
+  ResourceVersionOut,
+  UserOut,
+} from "@/client/types.gen";
 import SearchUserModal from "@/components/modals/SearchUserModal.vue";
 import { useNameStore } from "@/stores/names";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
@@ -141,17 +141,17 @@ function resetForm() {
   >
     <h2>Manage Resources</h2>
   </div>
-  <form @submit.prevent="searchResources" id="admin-resource-search-form">
+  <form id="admin-resource-search-form" @submit.prevent="searchResources">
     <div class="d-flex justify-content-evenly align-content-center">
       <div class="mx-2">
         <label for="admin-resource-state-select" class="form-label"
           >Status of Resource Versions</label
         >
         <select
+          id="admin-resource-state-select"
           v-model="resourceState.resourceStatus"
           multiple
           class="form-select mb-4 w-fit"
-          id="admin-resource-state-select"
         >
           <option
             v-for="state in Object.values(ResourceVersionStatus)"
@@ -171,10 +171,10 @@ function resetForm() {
           </div>
           <input
             id="admin-resource-name-search"
+            v-model="resourceState.searchString"
             type="text"
             class="form-control"
             maxlength="32"
-            v-model="resourceState.searchString"
             placeholder="Search for resource name"
           />
         </div>
@@ -216,7 +216,7 @@ function resetForm() {
       Reset
     </button>
   </form>
-  <table class="table table-striped" v-if="resourceState.resources">
+  <table v-if="resourceState.resources" class="table table-striped">
     <thead>
       <tr>
         <th scope="col"><b>Name</b></th>
diff --git a/src/views/admin/AdminSyncRequestsView.vue b/src/views/admin/AdminSyncRequestsView.vue
index 4f1be648735faad41e03c547b59a8d4195d3473a..f879dc9aaf24c32af1ba56d69e84198687a7df48 100644
--- a/src/views/admin/AdminSyncRequestsView.vue
+++ b/src/views/admin/AdminSyncRequestsView.vue
@@ -3,12 +3,12 @@ import BootstrapToast from "@/components/BootstrapToast.vue";
 import ReasonModal from "@/components/modals/ReasonModal.vue";
 import ResourceVersionInfoModal from "@/components/resources/modals/ResourceVersionInfoModal.vue";
 import { onMounted, reactive } from "vue";
-import {
-  type ResourceOut,
-  type ResourceVersionOut,
-  ResourceVersionStatus,
-  type UserSynchronizationRequestOut,
-} from "@/client";
+import type {
+  ResourceOut,
+  ResourceVersionOut,
+  UserSynchronizationRequestOut,
+} from "@/client/types.gen";
+import { ResourceVersionStatus } from "@/client/types.gen";
 import { useResourceStore } from "@/stores/resources";
 import { useNameStore } from "@/stores/names";
 import { useUserStore } from "@/stores/users";
@@ -168,11 +168,11 @@ onMounted(() => {
   >
     <h2 class="w-fit">Review resource synchronization requests</h2>
     <span
+      id="refreshReviewableResourcesButton"
       class="w-fit"
       tabindex="0"
       data-bs-title="Refresh Reviewable Resources"
       data-bs-toggle="tooltip"
-      id="refreshReviewableResourcesButton"
     >
       <button
         type="button"
@@ -202,9 +202,9 @@ onMounted(() => {
   </div>
   <div v-else class="d-flex flex-column">
     <div
-      class="border p-2 pb-0 rounded mb-2 d-flex hover-card"
       v-for="request in resourceRepository.syncRequests"
       :key="request.resource_version_id"
+      class="border p-2 pb-0 rounded mb-2 d-flex hover-card"
     >
       <div class="flex-grow-1">
         <h6>
@@ -251,6 +251,9 @@ onMounted(() => {
           <button
             type="button"
             class="btn btn-danger btn-sm"
+            data-bs-toggle="modal"
+            data-bs-target="#sync-request-reject-modal"
+            :disabled="resourceState.sendingRequest"
             @click="
               resourceState.rejectResource = resourceState.resources[
                 request.resource_id
@@ -259,9 +262,6 @@ onMounted(() => {
                   version.resource_version_id === request.resource_version_id,
               )
             "
-            data-bs-toggle="modal"
-            data-bs-target="#sync-request-reject-modal"
-            :disabled="resourceState.sendingRequest"
           >
             Reject
           </button>
diff --git a/src/views/admin/AdminUsersView.vue b/src/views/admin/AdminUsersView.vue
index 498e36f1147b9ed057639ee9a7050264c5e4eb92..03725538734caf26cb25924d551eaec25e7ff925 100644
--- a/src/views/admin/AdminUsersView.vue
+++ b/src/views/admin/AdminUsersView.vue
@@ -1,7 +1,7 @@
 <script setup lang="ts">
 import { useUserStore } from "@/stores/users";
 import { onMounted, reactive } from "vue";
-import { RoleEnum, type UserOutExtended } from "@/client";
+import { RoleEnum, type UserOutExtended } from "@/client/types.gen";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import BootstrapToast from "@/components/BootstrapToast.vue";
 import { Toast } from "bootstrap";
@@ -128,17 +128,17 @@ onMounted(() => {
       Invite User
     </button>
   </div>
-  <form @submit.prevent="searchUsers" id="admin-user-search-form">
+  <form id="admin-user-search-form" @submit.prevent="searchUsers">
     <div class="d-flex justify-content-evenly align-content-center">
       <div class="mx-2">
         <label for="admin-user-state-select" class="form-label"
           >User Roles</label
         >
         <select
+          id="admin-user-state-select"
           v-model="userState.userRoles"
           multiple
           class="form-select mb-4 w-fit"
-          id="admin-user-state-select"
         >
           <option v-for="role in Object.values(RoleEnum)" :key="role">
             {{ role }}
@@ -155,11 +155,11 @@ onMounted(() => {
           </div>
           <input
             id="admin-user-name-search"
+            v-model="userState.searchString"
             type="text"
             class="form-control"
             maxlength="32"
             minlength="3"
-            v-model="userState.searchString"
             placeholder="Search for user name"
           />
         </div>
@@ -174,8 +174,8 @@ onMounted(() => {
     </button>
   </form>
   <table
-    class="table table-striped align-middle caption-top"
     v-if="userState.users"
+    class="table table-striped align-middle caption-top"
   >
     <caption>
       Displaying
@@ -228,14 +228,14 @@ onMounted(() => {
           class="text-center"
         >
           <input
+            v-model="userState.newUserRoles[index]"
             type="checkbox"
             class="form-check-input"
             :value="role"
             :disabled="!userState.editUserRoles[index]"
-            v-model="userState.newUserRoles[index]"
           />
         </td>
-        <td class="text-end" v-if="userState.editUserRoles[index]">
+        <td v-if="userState.editUserRoles[index]" class="text-end">
           <div
             class="btn-group btn-group-sm"
             role="group"
@@ -259,7 +259,7 @@ onMounted(() => {
             </button>
           </div>
         </td>
-        <td class="text-end" v-else>
+        <td v-else class="text-end">
           <div class="btn-group">
             <button
               type="button"
diff --git a/src/views/admin/AdminWorkflowExecutionView.vue b/src/views/admin/AdminWorkflowExecutionView.vue
index ac014a6f14c4692f2d4004470a3010a93e6b006b..4ab87a939816b692a7bfb57a43e0348ad96af27e 100644
--- a/src/views/admin/AdminWorkflowExecutionView.vue
+++ b/src/views/admin/AdminWorkflowExecutionView.vue
@@ -1,12 +1,12 @@
 <script setup lang="ts">
 import { computed, nextTick, onMounted, reactive, ref } from "vue";
-import {
-  type UserOut,
-  type WorkflowExecutionOut,
-  WorkflowExecutionStatus,
-  type WorkflowOut,
-  type WorkflowVersion,
-} from "@/client";
+import type {
+  UserOut,
+  WorkflowExecutionOut,
+  WorkflowOut,
+  WorkflowVersion,
+} from "@/client/types.gen";
+import { WorkflowExecutionStatus } from "@/client/types.gen";
 import SearchUserModal from "@/components/modals/SearchUserModal.vue";
 import SearchWorkflowModal from "@/components/modals/SearchWorkflowVersionModal.vue";
 import { useWorkflowExecutionStore } from "@/stores/workflowExecutions";
@@ -33,7 +33,7 @@ const endOfTableElement = ref<HTMLTableCaptionElement | undefined>(undefined);
 
 const filters = reactive<{
   executorId?: string;
-  executionStatus?: WorkflowExecutionStatus[];
+  executionStatus: WorkflowExecutionStatus[];
   workflowVersionId?: string;
   startAfter?: number;
   startBefore?: number;
@@ -41,7 +41,7 @@ const filters = reactive<{
   workflowId?: string;
 }>({
   executorId: undefined,
-  executionStatus: undefined,
+  executionStatus: [],
   workflowVersionId: undefined,
   startAfter: undefined,
   startBefore: undefined,
@@ -92,7 +92,7 @@ function searchExecution() {
   formState.executions = [];
   executionIterator.value = executionRepository.fetchExecutionsRaw(
     filters.executorId,
-    filters.executionStatus,
+    filters.executionStatus.length > 0 ? filters.executionStatus : undefined,
     filters.workflowVersionId,
     filters.workflowVersionId == undefined ? filters.workflowId : undefined,
     filters.startAfter,
@@ -184,8 +184,8 @@ onMounted(() => {
   />
   <search-workflow-modal
     modal-id="admin-execution-search-workflow-modal"
-    @workflow-found="updateWorkflow"
     allow-select-workflow
+    @workflow-found="updateWorkflow"
   />
   <parameter-modal
     modal-id="workflowExecutionParameterModal"
@@ -194,17 +194,17 @@ onMounted(() => {
   <div class="border-bottom mb-4">
     <h2>Search Workflow Execution</h2>
   </div>
-  <form @submit.prevent="searchExecution" id="admin-execution-search-form">
+  <form id="admin-execution-search-form" @submit.prevent="searchExecution">
     <div class="d-flex justify-content-evenly align-content-center mb-4">
       <div class="mx-2">
         <label for="admin-execution-state-select" class="form-label"
           >Status of Workflow Execution</label
         >
         <select
+          id="admin-execution-state-select"
           v-model="filters.executionStatus"
           multiple
           class="form-select"
-          id="admin-execution-state-select"
         >
           <option
             v-for="state in Object.values(WorkflowExecutionStatus)"
@@ -216,23 +216,23 @@ onMounted(() => {
         <div class="form-label mb-0 mt-1">Sort:</div>
         <div class="form-check form-check-inline">
           <input
+            id="sort-radio-asc"
+            v-model="filters.sort"
             class="form-check-input"
             type="radio"
             name="sort-radio"
-            id="sort-radio-asc"
             value="asc"
-            v-model="filters.sort"
           />
           <label class="form-check-label" for="sort-radio-asc"> Asc </label>
         </div>
         <div class="form-check form-check-inline">
           <input
+            id="sort-radio-desc"
+            v-model="filters.sort"
             class="form-check-input"
             type="radio"
             name="sort-radio"
-            id="sort-radio-desc"
             value="desc"
-            v-model="filters.sort"
           />
           <label class="form-check-label" for="sort-radio-desc"> Desc </label>
         </div>
@@ -246,8 +246,8 @@ onMounted(() => {
             <font-awesome-icon icon="fa-solid fa-hourglass-start" />
           </div>
           <input
-            class="form-control"
             id="admin-execution-start-after-search"
+            class="form-control"
             type="datetime-local"
             :max="dayjs().format('YYYY-MM-DDTHH:mm')"
             :value="
@@ -269,8 +269,8 @@ onMounted(() => {
             <font-awesome-icon icon="fa-solid fa-hourglass-end" />
           </div>
           <input
-            class="form-control"
             id="admin-execution-start-before-search"
+            class="form-control"
             type="datetime-local"
             :max="dayjs().format('YYYY-MM-DDTHH:mm')"
             :value="
@@ -341,7 +341,7 @@ onMounted(() => {
     </button>
   </form>
   <div class="overflow-x-auto" style="max-width: 100vw">
-    <table class="table table-hover align-middle" ref="executionTable">
+    <table ref="executionTable" class="table table-hover align-middle">
       <caption ref="endOfTableElement">
         Displaying
         {{
@@ -366,8 +366,8 @@ onMounted(() => {
         <template v-if="formState.executions.length > 0">
           <tr
             v-for="execution in formState.executions"
-            :key="execution.execution_id"
             :id="`admin-execution-${execution.execution_id}`"
+            :key="execution.execution_id"
           >
             <td>
               <router-link
@@ -385,8 +385,8 @@ onMounted(() => {
                 }}
               </router-link>
               <markdown-renderer
-                class="execution-notes"
                 v-else-if="execution.notes"
+                class="execution-notes"
                 :markdown="execution.notes"
               />
               <span v-else>Deleted Workflow</span>
diff --git a/src/views/object-storage/BucketView.vue b/src/views/object-storage/BucketView.vue
index dfac7e1e1d96c43731f6b4533e16bffab644b24e..c46cf18a675bd0f5c529d0b07ce6a6df5e178257 100644
--- a/src/views/object-storage/BucketView.vue
+++ b/src/views/object-storage/BucketView.vue
@@ -428,7 +428,7 @@ function getObjectFileName(key: string): string {
     Successfully deleted {{ deleteObjectsState.deletedItem }}
   </bootstrap-toast>
   <DeleteModal
-    modalId="delete-object-modal"
+    modal-id="delete-object-modal"
     :object-name-delete="deleteObjectsState.potentialObjectToDelete"
     :back-modal-id="undefined"
     @confirm-delete="
@@ -452,9 +452,9 @@ function getObjectFileName(key: string): string {
         <span v-else class="text-secondary">{{ props.bucketName }}</span>
       </li>
       <li
-        class="breadcrumb-item"
         v-for="(folder, index) in currentSubFolders"
         :key="folder"
+        class="breadcrumb-item"
         :class="{ active: index === currentSubFolders.length }"
       >
         <router-link
@@ -477,18 +477,18 @@ function getObjectFileName(key: string): string {
   <div class="d-flex justify-content-between align-items-center">
     <div class="flex-grow-1 me-2">
       <div class="input-group rounded shadow-sm">
-        <span class="input-group-text" id="objects-search-wrapping"
+        <span id="objects-search-wrapping" class="input-group-text"
           ><font-awesome-icon icon="fa-solid fa-magnifying-glass"
         /></span>
         <input
           id="filterObjectNameInput"
+          v-model.trim="objectState.filterString"
           type="text"
           class="form-control"
           placeholder="Search Files"
           aria-label="Search Files"
           aria-describedby="objects-search-wrapping"
           :disabled="errorLoadingObjects"
-          v-model.trim="objectState.filterString"
         />
       </div>
     </div>
@@ -526,7 +526,7 @@ function getObjectFileName(key: string): string {
       </button>
       <upload-object-modal
         :bucket-name="props.bucketName"
-        modalId="upload-object-modal"
+        modal-id="upload-object-modal"
         :key-prefix="currentSubFolders.join('/')"
         :edit-object-file-name="undefined"
       />
@@ -549,7 +549,7 @@ function getObjectFileName(key: string): string {
       </button>
       <create-folder-modal
         :bucket-name="props.bucketName"
-        modalId="create-folder-modal"
+        modal-id="create-folder-modal"
         :key-prefix="currentSubFolders.join('/')"
       />
       <!-- Add bucket permission button -->
@@ -572,7 +572,7 @@ function getObjectFileName(key: string): string {
       </button>
       <permission-modal
         v-if="!authStore.foreignUser"
-        modalId="create-permission-modal"
+        modal-id="create-permission-modal"
         :bucket-name="props.bucketName"
         :sub-folders="folderStructure"
         :edit-user-permission="undefined"
@@ -606,7 +606,7 @@ function getObjectFileName(key: string): string {
         "
         :bucket-name="props.bucketName"
         :sub-folders="folderStructure"
-        modalId="permission-list-modal"
+        modal-id="permission-list-modal"
       />
     </div>
   </div>
@@ -717,8 +717,8 @@ function getObjectFileName(key: string): string {
                 <button
                   type="button"
                   class="btn btn-secondary"
-                  @click="downloadObject(props.bucketName, obj.Key)"
                   :disabled="!readableBucket"
+                  @click="downloadObject(props.bucketName, obj.Key)"
                 >
                   Download
                 </button>
@@ -771,10 +771,10 @@ function getObjectFileName(key: string): string {
                     <button
                       class="dropdown-item text-danger align-middle"
                       type="button"
-                      @click="deleteObject(obj.Key)"
                       data-bs-toggle="modal"
                       data-bs-target="#delete-object-modal"
                       :disabled="!writableBucket"
+                      @click="deleteObject(obj.Key)"
                     >
                       <font-awesome-icon icon="fa-solid fa-trash" />
                       <span class="ms-1">Delete</span>
@@ -806,19 +806,19 @@ function getObjectFileName(key: string): string {
       </table>
       <upload-object-modal
         :bucket-name="props.bucketName"
-        modalId="edit-object-modal"
+        modal-id="edit-object-modal"
         :key-prefix="currentSubFolders.join('/')"
         :edit-object-file-name="getObjectFileName(objectState.editObjectKey)"
       />
       <copy-object-modal
         :src-object="objectState.copyObject"
         :src-bucket="bucketName"
-        modalId="copy-object-modal"
+        modal-id="copy-object-modal"
       />
       <object-detail-modal
         :bucket="bucketName"
         :object-key="objectState.viewDetailKey"
-        modalId="detail-object-modal"
+        modal-id="detail-object-modal"
       />
     </div>
   </div>
diff --git a/src/views/object-storage/BucketsView.vue b/src/views/object-storage/BucketsView.vue
index 3ddb70192c7095dd1f3c97808b0316aac7d1b606..0eea808c5f62d67cab07b0f33a03a796bc40795b 100644
--- a/src/views/object-storage/BucketsView.vue
+++ b/src/views/object-storage/BucketsView.vue
@@ -1,10 +1,10 @@
 <script setup lang="ts">
 import { computed, onMounted, reactive } from "vue";
-import {
-  type BucketOut,
-  type OwnershipTransferRequestOut,
-  OwnershipTypeEnum,
-} from "@/client";
+import type {
+  BucketOut,
+  OwnershipTransferRequestOut,
+} from "@/client/types.gen";
+import { OwnershipTypeEnum } from "@/client/types.gen";
 import { useRouter } from "vue-router";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import CreateBucketModal from "@/components/object-storage/modals/CreateBucketModal.vue";
@@ -124,7 +124,7 @@ onMounted(() => {
 
 <template>
   <DeleteModal
-    modalId="delete-bucket-modal"
+    modal-id="delete-bucket-modal"
     :object-name-delete="bucketsState.potentialDeleteBucketName"
     :back-modal-id="undefined"
     @confirm-delete="
@@ -132,12 +132,12 @@ onMounted(() => {
     "
   />
   <CreateBucketModal
-    modalId="create-bucket-modal"
     v-if="!authStore.foreignUser"
+    modal-id="create-bucket-modal"
   />
   <otr-modal
     :otr-target-id="bucketsState.bucketOtrTarget"
-    modalId="view-bucket-otr-modal"
+    modal-id="view-bucket-otr-modal"
   />
   <list-otrs-modal
     :otrs="otrForNewBuckets"
@@ -145,7 +145,7 @@ onMounted(() => {
     modal-id="list-bucket-otrs-modal"
   />
   <bucket-detail-modal
-    modalId="view-bucket-details-modal"
+    modal-id="view-bucket-details-modal"
     :bucket="bucketsState.bucketDetails"
   />
   <div class="row border-bottom">
@@ -155,8 +155,8 @@ onMounted(() => {
     <div class="col-3">
       <div class="d-flex justify-content-between">
         <button
-          type="button"
           id="refreshBucketButton"
+          type="button"
           class="btn border shadow-sm"
           :class="{
             'btn-light': settingsStore.lightThemeActive,
@@ -213,17 +213,17 @@ onMounted(() => {
         </button>
       </div>
       <div class="input-group mt-2 rounded shadow-sm">
-        <span class="input-group-text" id="buckets-search-wrapping"
+        <span id="buckets-search-wrapping" class="input-group-text"
           ><font-awesome-icon icon="fa-solid fa-magnifying-glass"
         /></span>
         <input
           id="filterBucketNameInput"
+          v-model.trim="bucketsState.filterString"
           type="text"
           class="form-control"
           placeholder="Search Buckets"
           aria-label="Search Buckets"
           aria-describedby="buckets-search-wrapping"
-          v-model.trim="bucketsState.filterString"
         />
       </div>
 
diff --git a/src/views/object-storage/MultiPartUploadsView.vue b/src/views/object-storage/MultiPartUploadsView.vue
index 42c8ee6d3c48f5eabbb1474cd94c38cf0f153660..1d52318225ebe5874b4db6b7934a19ffa307a034 100644
--- a/src/views/object-storage/MultiPartUploadsView.vue
+++ b/src/views/object-storage/MultiPartUploadsView.vue
@@ -98,15 +98,15 @@ onMounted(() => {
     <h2 class="w-fit mb-0">Multipart Uploads</h2>
     <div class="w-fit">
       <button
+        id="refreshUploadsButton"
         class="btn me-2 shadow-sm border"
         :class="{
           'btn-light': settingsStore.lightThemeActive,
           'btn-secondary': settingsStore.darkThemeActive,
         }"
-        @click="refreshMultipartUploads"
-        id="refreshUploadsButton"
         data-bs-title="Refresh Multipart Uploads"
         data-bs-toggle="tooltip"
+        @click="refreshMultipartUploads"
       >
         <font-awesome-icon icon="fa-solid fa-arrow-rotate-right" />
         <span class="visually-hidden">Refresh Data Buckets</span>
@@ -127,14 +127,14 @@ onMounted(() => {
       <span class="visually-hidden">Loading...</span>
     </div>
   </div>
-  <div class="accordion mt-2" v-else-if="uploadsInOwnBucketsPresent">
+  <div v-else-if="uploadsInOwnBucketsPresent" class="accordion mt-2">
     <template v-for="bucket in bucketRepository.ownBuckets" :key="bucket">
       <div
-        class="accordion-item"
         v-if="
           objectRepository.multiPartUploadsMapping[bucket.name] &&
           objectRepository.multiPartUploadsMapping[bucket.name].length > 0
         "
+        class="accordion-item"
       >
         <h2 class="accordion-header">
           <button
diff --git a/src/views/object-storage/S3KeyView.vue b/src/views/object-storage/S3KeyView.vue
index 033d41ceca7ae18b6a495d4517be3f1ea6324675..39e08fca9fa93e057f6231e17f05ca47ed3a06e6 100644
--- a/src/views/object-storage/S3KeyView.vue
+++ b/src/views/object-storage/S3KeyView.vue
@@ -39,7 +39,7 @@ function deleteKeyTrigger() {
 
 <template>
   <delete-modal
-    modalId="delete-key-modal"
+    modal-id="delete-key-modal"
     :object-name-delete="'S3 Key ' + props.s3key.access_key"
     @confirm-delete="deleteKeyTrigger"
   />
@@ -66,7 +66,7 @@ function deleteKeyTrigger() {
       aria-label="S3 Access Key"
       readonly
     />
-    <span class="input-group-text" id="s3-secret-key-copy"
+    <span id="s3-secret-key-copy" class="input-group-text"
       ><copy-to-clipboard-icon :text="props.s3key.access_key"
     /></span>
   </div>
@@ -91,7 +91,7 @@ function deleteKeyTrigger() {
       aria-label="S3 Access Key"
       readonly
     />
-    <span class="input-group-text" id="s3-secret-key-copy"
+    <span id="s3-secret-key-copy" class="input-group-text"
       ><copy-to-clipboard-icon :text="props.s3key.secret_key"
     /></span>
   </div>
diff --git a/src/views/object-storage/S3KeysView.vue b/src/views/object-storage/S3KeysView.vue
index 76ff629fe588a9c4896943bbf284d8a29bae3437..d7b01911f27509ed91a436ab58a295f85b2b379c 100644
--- a/src/views/object-storage/S3KeysView.vue
+++ b/src/views/object-storage/S3KeysView.vue
@@ -90,13 +90,13 @@ onMounted(() => {
     <div class="col-4">
       <div class="d-flex justify-content-between mb-4">
         <button
+          id="refreshS3KeysButton"
           type="button"
           class="btn border shadow-sm"
           :class="{
             'btn-light': settingsStore.lightThemeActive,
             'btn-secondary': settingsStore.darkThemeActive,
           }"
-          id="refreshS3KeysButton"
           data-bs-title="Refresh S3 Keys"
           data-bs-toggle="tooltip"
           @click="refreshKeys()"
@@ -108,13 +108,13 @@ onMounted(() => {
           <span class="visually-hidden">Refresh S3 Keys</span>
         </button>
         <button
+          id="createS3KeyButton"
           type="button"
           class="btn border shadow-sm"
           :class="{
             'btn-light': settingsStore.lightThemeActive,
             'btn-secondary': settingsStore.darkThemeActive,
           }"
-          id="createS3KeyButton"
           data-bs-title="Create S3 Key"
           data-bs-toggle="tooltip"
           @click="createKey"
@@ -138,12 +138,12 @@ onMounted(() => {
           :key="s3key.access_key"
           class="btn fs-5 text-truncate border hover-shadow"
           type="button"
-          @click="keyState.activeKey = index"
           :class="{
             'btn-light': keyState.activeKey !== index,
             'btn-primary': keyState.activeKey === index,
             shadow: keyState.activeKey === index,
           }"
+          @click="keyState.activeKey = index"
         >
           {{ s3key.access_key.slice(0, 8) }}...
         </button>
diff --git a/src/views/resources/ListResourcesView.vue b/src/views/resources/ListResourcesView.vue
index 036bf1c41166ec8e6420b2e2fc681fadac152e58..fbe7a7869dd0a101a22ddb406c45d9ba2883a049 100644
--- a/src/views/resources/ListResourcesView.vue
+++ b/src/views/resources/ListResourcesView.vue
@@ -5,7 +5,7 @@ import ResourceCard from "@/components/resources/ResourceCard.vue";
 import CardTransitionGroup from "@/components/transitions/CardTransitionGroup.vue";
 import { useUserStore } from "@/stores/users";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
-import type { ResourceOut, ResourceVersionOut } from "@/client";
+import type { ResourceOut, ResourceVersionOut } from "@/client/types.gen";
 import ReasonModal from "@/components/modals/ReasonModal.vue";
 import { Modal, Toast } from "bootstrap";
 import BootstrapToast from "@/components/BootstrapToast.vue";
@@ -106,28 +106,28 @@ onMounted(() => {
   <div class="d-flex m-2 mb-3 align-items-center justify-content-start">
     <div class="col-5">
       <div class="input-group rounded shadow-sm">
-        <span class="input-group-text" id="resources-search-wrapping"
+        <span id="resources-search-wrapping" class="input-group-text"
           ><font-awesome-icon icon="fa-solid fa-magnifying-glass"
         /></span>
         <input
-          type="text"
           id="filterResourcesInput"
+          v-model.trim="resourceState.filterString"
+          type="text"
           class="form-control"
           placeholder="Filter Resources"
           aria-label="Filter Resources"
           aria-describedby="resources-search-wrapping"
           :disabled="resourceState.loading"
-          v-model.trim="resourceState.filterString"
           maxlength="20"
         />
       </div>
     </div>
     <div class="form-check form-check-reverse form-check-inline fs-6 ms-auto">
       <input
+        id="public-resources-checkbox"
+        v-model="resourceState.showPrivate"
         class="form-check-input"
         type="checkbox"
-        v-model="resourceState.showPrivate"
-        id="public-resources-checkbox"
       />
       <label class="form-check-label" for="public-resources-checkbox">
         Show private resources
@@ -139,8 +139,8 @@ onMounted(() => {
           ? 'fa-solid fa-arrow-down-wide-short'
           : 'fa-solid fa-arrow-up-wide-short'
       "
-      @click="resourceState.sortDesc = !resourceState.sortDesc"
       class="fs-5 cursor-pointer ms-2"
+      @click="resourceState.sortDesc = !resourceState.sortDesc"
     />
   </div>
   <div v-if="!resourceState.loading">
diff --git a/src/views/resources/MyResourcesView.vue b/src/views/resources/MyResourcesView.vue
index ce123c5048c31da18b72add9701f69c196d3cd5e..02436e49b5e9e36dc6519347eb1076c845f85ec7 100644
--- a/src/views/resources/MyResourcesView.vue
+++ b/src/views/resources/MyResourcesView.vue
@@ -6,12 +6,12 @@ import ResourceCard from "@/components/resources/ResourceCard.vue";
 import CreateResourceModal from "@/components/resources/modals/CreateResourceModal.vue";
 import UploadResourceInfoModal from "@/components/resources/modals/UploadResourceInfoModal.vue";
 import { useS3KeyStore } from "@/stores/s3keys";
-import {
-  type OwnershipTransferRequestOut,
-  OwnershipTypeEnum,
-  type ResourceOut,
-  type ResourceVersionOut,
-} from "@/client";
+import type {
+  OwnershipTransferRequestOut,
+  ResourceOut,
+  ResourceVersionOut,
+} from "@/client/types.gen";
+import { OwnershipTypeEnum } from "@/client/types.gen";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import UpdateResourceModal from "@/components/resources/modals/UpdateResourceModal.vue";
 import ReasonModal from "@/components/modals/ReasonModal.vue";
@@ -133,7 +133,7 @@ onMounted(() => {
 <template>
   <otr-modal
     :otr-target-id="resourceState.showOtrTarget"
-    modalId="view-resource-otr-modal"
+    modal-id="view-resource-otr-modal"
   />
   <list-otrs-modal
     :otrs="otrForNewResources"
diff --git a/src/views/resources/ReviewResourceView.vue b/src/views/resources/ReviewResourceView.vue
index 78cbb60d31d60c62abb3178ece2caf1c1398729d..c660a08b616f866bdb244989f4c1fd73a2c043bb 100644
--- a/src/views/resources/ReviewResourceView.vue
+++ b/src/views/resources/ReviewResourceView.vue
@@ -1,11 +1,8 @@
 <script setup lang="ts">
 import { useResourceStore } from "@/stores/resources";
 import { computed, onMounted, reactive } from "vue";
-import {
-  type ResourceOut,
-  type ResourceVersionOut,
-  ResourceVersionStatus,
-} from "@/client";
+import type { ResourceOut, ResourceVersionOut } from "@/client/types.gen";
+import { ResourceVersionStatus } from "@/client/types.gen";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import { Modal, Toast, Tooltip } from "bootstrap";
 import ResourceVersionInfoModal from "@/components/resources/modals/ResourceVersionInfoModal.vue";
@@ -125,11 +122,11 @@ onMounted(() => {
   >
     <h2 class="w-fit">Resource requests</h2>
     <span
+      id="refreshReviewableResourcesButton"
       class="w-fit"
       tabindex="0"
       data-bs-title="Refresh Reviewable Resources"
       data-bs-toggle="tooltip"
-      id="refreshReviewableResourcesButton"
     >
       <button
         type="button"
@@ -152,8 +149,8 @@ onMounted(() => {
     </div>
   </div>
   <table
-    class="table caption-top table-striped table-hover align-middle"
     v-else-if="resourceRepository.reviewableResources.length > 0"
+    class="table caption-top table-striped table-hover align-middle"
   >
     <caption>
       Display
@@ -215,10 +212,10 @@ onMounted(() => {
               <button
                 type="button"
                 class="btn btn-danger btn-sm"
-                @click="resourceState.rejectResource = version"
                 data-bs-toggle="modal"
                 data-bs-target="#review-reject-modal"
                 :disabled="resourceState.sendingRequest"
+                @click="resourceState.rejectResource = version"
               >
                 Reject
               </button>
diff --git a/src/views/user/ListApiTokenView.vue b/src/views/user/ListApiTokenView.vue
index b2a773f01243c758a0852fac630ddf7d00a9b093..1a8225cc474237dbd7c3aa3792b5fae3b9205880 100644
--- a/src/views/user/ListApiTokenView.vue
+++ b/src/views/user/ListApiTokenView.vue
@@ -4,10 +4,10 @@ import { useUserStore } from "@/stores/users";
 import dayjs from "dayjs";
 import DeleteModal from "@/components/modals/DeleteModal.vue";
 import CreateApiTokenModal from "@/components/user/CreateApiTokenModal.vue";
-import type { ApiTokenPrivateOut } from "@/client";
+import type { ApiTokenPrivateOut } from "@/client/types.gen";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import CopyToClipboardIcon from "@/components/CopyToClipboardIcon.vue";
-import { environment } from "../../environment";
+import { environment } from "@/environment";
 
 const userRepository = useUserStore();
 
@@ -61,10 +61,10 @@ onMounted(() => {
   />
   <delete-modal
     modal-id="delete-personal-api-token-modal"
-    @confirm-delete="confirmedDeleteApiToken"
     :object-name-delete="
       userRepository.apiTokensMapping[state.deleteTokenId]?.name ?? ''
     "
+    @confirm-delete="confirmedDeleteApiToken"
   />
   <div
     class="row border-bottom mb-4 justify-content-between align-items-center"
diff --git a/src/views/workflows/ArbitraryWorkflowView.vue b/src/views/workflows/ArbitraryWorkflowView.vue
index f16e4d5da6d77167cbb621ce162d1811627bca13..dab17257e6512b774a0e880709c0671e8b20a925 100644
--- a/src/views/workflows/ArbitraryWorkflowView.vue
+++ b/src/views/workflows/ArbitraryWorkflowView.vue
@@ -7,7 +7,7 @@ import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import { useRouter } from "vue-router";
 import { Toast } from "bootstrap";
 import { type DocLocations, useWorkflowStore } from "@/stores/workflows";
-import { DocumentationEnum, type WorkflowIn } from "@/client";
+import { DocumentationEnum, type WorkflowIn } from "@/client/types.gen";
 import { useWorkflowExecutionStore } from "@/stores/workflowExecutions";
 import ParameterSchemaFormComponent from "@/components/parameter-schema/ParameterSchemaFormComponent.vue";
 import BootstrapToast from "@/components/BootstrapToast.vue";
@@ -153,9 +153,9 @@ function startWorkflow(
           (workflowState.workflow.modes ?? []).length > 0
             ? {
                 name: "",
-                // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+
                 entrypoint: workflowState.workflow.modes![0].entrypoint,
-                // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+
                 schema_path: workflowState.workflow.modes![0].schema_path,
               }
             : undefined,
@@ -224,7 +224,7 @@ onMounted(() => {
         {{ workflowState.workflow?.modes?.[0].schema_path }}
       </h5>
     </template>
-    <div class="d-flex justify-content-center mb-5" v-if="showDocumentation">
+    <div v-if="showDocumentation" class="d-flex justify-content-center mb-5">
       <a
         role="button"
         href="#"
@@ -254,8 +254,8 @@ onMounted(() => {
       :loading="workflowExecutionState.loading"
       :schema="workflowState.parameterSchema"
       :view-mode="props.viewMode"
-      @start-workflow="startWorkflow"
       :nextflow-version="workflowState.workflow.nextflow_version"
+      @start-workflow="startWorkflow"
     />
   </template>
   <template v-else>
diff --git a/src/views/workflows/CreateClowmInfoView.vue b/src/views/workflows/CreateClowmInfoView.vue
index e34e19c6c07e7114e78c4145c0b5f4791590bcd2..0f3ba2ff68e85f5662a1c3391ae26597d16c87de 100644
--- a/src/views/workflows/CreateClowmInfoView.vue
+++ b/src/views/workflows/CreateClowmInfoView.vue
@@ -5,13 +5,13 @@ import { createDownloadUrl } from "@/utils/DownloadJson";
 import type { ClowmInfo } from "@/types/ClowmInfo";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import { useWorkflowStore } from "@/stores/workflows";
-import { DocumentationEnum } from "@/client";
+import { DocumentationEnum } from "@/client/types.gen";
 import DraggableLists from "@/components/DraggableLists.vue";
 import ParameterInput from "@/components/parameter-schema/form-mode/ParameterInput.vue";
 
 const props = defineProps<{
-  workflow_id?: string;
-  workflow_version_id?: string;
+  workflowId?: string;
+  workflowVersionId?: string;
 }>();
 
 const workflowRepository = useWorkflowStore();
@@ -39,7 +39,7 @@ const parameterPools = reactive<{
 // eslint-disable-next-line @typescript-eslint/no-explicit-any
 const parameterSchema = computed<Record<string, Record<string, any>>>(() => {
   const schema =
-    workflowRepository.documentationFiles[props.workflow_version_id ?? ""]?.[
+    workflowRepository.documentationFiles[props.workflowVersionId ?? ""]?.[
       "parameter_schema.json"
     ];
   const a = schema?.["properties"] ?? {};
@@ -64,7 +64,7 @@ const downloadUrl = computed<string>(() =>
 );
 
 watch(
-  () => workflowRepository.documentationFiles[props.workflow_version_id ?? ""],
+  () => workflowRepository.documentationFiles[props.workflowVersionId ?? ""],
   (newVal, old) => {
     if (newVal != old && newVal?.["parameter_schema.json"] != undefined) {
       updateParameterPools(newVal);
@@ -179,22 +179,21 @@ function deleteExampleParameter(param: string) {
 }
 
 onMounted(() => {
-  if (props.workflow_id && props.workflow_version_id) {
+  if (props.workflowId && props.workflowVersionId) {
     Promise.all([
       workflowRepository.fetchWorkflowDocumentation(
-        props.workflow_id,
-        props.workflow_version_id,
+        props.workflowId,
+        props.workflowVersionId,
         DocumentationEnum.PARAMETER_SCHEMA_JSON,
       ),
       workflowRepository.fetchWorkflowDocumentation(
-        props.workflow_id,
-        props.workflow_version_id,
+        props.workflowId,
+        props.workflowVersionId,
         DocumentationEnum.CLOWM_INFO_JSON,
       ),
     ]).finally(() => {
       updateParameterPools(
-        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-        workflowRepository.documentationFiles[props.workflow_version_id!],
+        workflowRepository.documentationFiles[props.workflowVersionId!],
       );
     });
   }
@@ -205,9 +204,9 @@ onMounted(() => {
   <div class="row border-bottom mb-4">
     <h2 class="mb-2">
       Add parameter metadata
-      <template v-if="props.workflow_id"
+      <template v-if="props.workflowId"
         >to
-        {{ workflowRepository.workflowMapping[props.workflow_id]?.name }}
+        {{ workflowRepository.workflowMapping[props.workflowId]?.name }}
       </template>
     </h2>
   </div>
@@ -226,7 +225,7 @@ onMounted(() => {
     For guidance on creating file <code>clowm_info.json</code> please explore
     tabs below.
   </div>
-  <div class="accordion my-4" id="clowmInfoAccordion">
+  <div id="clowmInfoAccordion" class="accordion my-4">
     <div class="accordion-item">
       <h2 class="accordion-header">
         <button
@@ -329,9 +328,9 @@ onMounted(() => {
             This workflow needs resources
           </button>
           <draggable-lists
+            v-else
             :left-list="parameterPools.resources"
             :right-list="infoState.resourceParameters"
-            v-else
           >
             <template #leftHeader>Workflow parameters</template>
             <template #rightHeader>Selected resources parameters</template>
@@ -376,9 +375,9 @@ onMounted(() => {
             <b class="ms-1 w-100">Workflow parameters:</b>
             <template v-if="parameterPools.examples.length > 0">
               <div
-                class="w-fit border px-2 rounded cursor-pointer m-1 parameter-container"
                 v-for="(param, index) in parameterPools.examples"
                 :key="param"
+                class="w-fit border px-2 rounded cursor-pointer m-1 parameter-container"
                 @click="addExampleParameter(param, index)"
               >
                 {{ param }}
@@ -404,8 +403,8 @@ onMounted(() => {
                 <td class="d-flex justify-content-between align-items-center">
                   <div class="flex-fill input-group">
                     <parameter-input
-                      :parameter="parameterSchema[param]"
                       v-model="infoState.exampleParameters[param]"
+                      :parameter="parameterSchema[param]"
                       size-modifier="sm"
                       force-raw-file
                     />
@@ -452,9 +451,9 @@ onMounted(() => {
           </button>
           <div v-if="infoState.dois">
             <div
-              class="d-flex my-2"
               v-for="(doi, index) in infoState.dois"
               :key="index"
+              class="d-flex my-2"
             >
               <button
                 type="button"
@@ -464,9 +463,9 @@ onMounted(() => {
                 Remove
               </button>
               <input
+                v-model="infoState.dois[index]"
                 type="text"
                 class="form-control mx-2"
-                v-model="infoState.dois[index]"
                 maxlength="48"
                 style="max-width: 400px"
               />
diff --git a/src/views/workflows/CreateParameterTranslationView.vue b/src/views/workflows/CreateParameterTranslationView.vue
index 984bda0e4082523d5a4b881f2fddccf117bd9377..cc365341fa648717b735905aa136f627874b2d61 100644
--- a/src/views/workflows/CreateParameterTranslationView.vue
+++ b/src/views/workflows/CreateParameterTranslationView.vue
@@ -2,7 +2,7 @@
 import { useNameStore } from "@/stores/names";
 import { useWorkflowStore } from "@/stores/workflows";
 import { computed, onMounted, reactive, ref, watch } from "vue";
-import { DocumentationEnum, type ParameterExtension } from "@/client";
+import { DocumentationEnum, type ParameterExtension } from "@/client/types.gen";
 import type { ClowmInfo } from "@/types/ClowmInfo";
 import ParameterInput from "@/components/parameter-schema/form-mode/ParameterInput.vue";
 import BootstrapToast from "@/components/BootstrapToast.vue";
@@ -99,7 +99,7 @@ const parameterSchema = computed<Record<string, Record<string, any>>>(() => {
 
 // Functions
 // =============================================================================
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
+
 function updateParameterPools(newVal?: object) {
   if (newVal) {
     const parameters = extractParameterList(newVal);
@@ -439,8 +439,8 @@ onMounted(() => {
   </div>
   <form
     v-else
-    ref="parameterExtensionForm"
     id="parameter-extension-form"
+    ref="parameterExtensionForm"
     class="mb-2"
     :class="{ 'was-validated': parameterState.formValidated }"
     novalidate
@@ -454,9 +454,9 @@ onMounted(() => {
       <b class="ms-1 w-100">Workflow parameters:</b>
       <template v-if="parameterPools.defaults.length > 0">
         <div
-          class="w-fit border px-2 rounded cursor-pointer m-1 parameter-container"
           v-for="(param, index) in parameterPools.defaults"
           :key="param"
+          class="w-fit border px-2 rounded cursor-pointer m-1 parameter-container"
           @click="addDefaultParameter(param, index)"
         >
           {{ param }}
@@ -482,8 +482,8 @@ onMounted(() => {
           <td class="d-flex justify-content-between align-items-center">
             <div class="flex-fill input-group">
               <parameter-input
-                :parameter="parameterSchema[param]"
                 v-model="parameterState.extension.defaults[param]"
+                :parameter="parameterSchema[param]"
                 size-modifier="sm"
                 :resource-parameter="
                   parameterState.resourceParametersDefault.has(param)
@@ -521,9 +521,9 @@ onMounted(() => {
       <b class="ms-1 w-100">Eligible workflow parameters:</b>
       <template v-if="parameterPools.mapping.length > 0">
         <div
-          class="w-fit border px-2 rounded cursor-pointer m-1 parameter-container"
           v-for="(param, index) in parameterPools.mapping"
           :key="param"
+          class="w-fit border px-2 rounded cursor-pointer m-1 parameter-container"
           @click="addMappingParameter(param, index)"
         >
           {{ param }}
@@ -570,9 +570,9 @@ onMounted(() => {
             </button>
           </div>
           <input
+            v-model="parameterState.mappingParameterValues[param]"
             type="text"
             class="form-control flex-fill w-fit"
-            v-model="parameterState.mappingParameterValues[param]"
           />
         </div>
         <template v-if="parameterState.extension.mapping[param]">
@@ -600,12 +600,12 @@ onMounted(() => {
             </div>
             <div class="input-group">
               <parameter-input
+                v-model="parameterState.extension.mapping[param][key]"
                 :parameter="parameterSchema[param]"
                 force-raw-file
                 required
                 size-modifier="sm"
                 border="secondary-subtle"
-                v-model="parameterState.extension.mapping[param][key]"
                 :resource-parameter="
                   parameterState.resourceParametersMapping.has(param)
                 "
diff --git a/src/views/workflows/ListWorkflowExecutionsView.vue b/src/views/workflows/ListWorkflowExecutionsView.vue
index d2ac6b311cf0c6eb4cdf470077b76893255b6bf1..a8e61085b3081aa314f8ed43ff7b887a5ddf6f73 100644
--- a/src/views/workflows/ListWorkflowExecutionsView.vue
+++ b/src/views/workflows/ListWorkflowExecutionsView.vue
@@ -1,7 +1,7 @@
 <script setup lang="ts">
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import { onMounted, reactive, computed, onUnmounted } from "vue";
-import type { WorkflowExecutionOut } from "@/client";
+import type { WorkflowExecutionOut } from "@/client/types.gen";
 import dayjs from "dayjs";
 import { Tooltip } from "bootstrap";
 import DeleteModal from "@/components/modals/DeleteModal.vue";
@@ -173,15 +173,15 @@ onUnmounted(() => {
     <h2 class="mb-2 w-fit">My Workflow Executions</h2>
     <div class="w-fit">
       <button
+        id="refreshExecutionsButton"
         class="btn me-2 shadow-sm border"
         :class="{
           'btn-light': settingsStore.lightThemeActive,
           'btn-secondary': settingsStore.darkThemeActive,
         }"
-        @click="refreshExecutions"
-        id="refreshExecutionsButton"
         data-bs-title="Refresh Workflow Executions"
         data-bs-toggle="tooltip"
+        @click="refreshExecutions"
       >
         <font-awesome-icon icon="fa-solid fa-arrow-rotate-right" />
         <span class="visually-hidden">Refresh Data Buckets</span>
@@ -266,8 +266,8 @@ onUnmounted(() => {
                 }}
               </router-link>
               <markdown-renderer
-                class="execution-notes"
                 v-else-if="execution.notes"
+                class="execution-notes"
                 :markdown="execution.notes"
               />
               <span v-else>Deleted Workflow</span>
diff --git a/src/views/workflows/ListWorkflowsView.vue b/src/views/workflows/ListWorkflowsView.vue
index 9ee51bded4b9037152defb23bd4f65611b73fe54..99634f79e8aeef1b3b8f3b49ec71d411b39a3e0e 100644
--- a/src/views/workflows/ListWorkflowsView.vue
+++ b/src/views/workflows/ListWorkflowsView.vue
@@ -1,6 +1,6 @@
 <script setup lang="ts">
 import { computed, onMounted, reactive } from "vue";
-import type { WorkflowOut } from "@/client";
+import type { WorkflowOut } from "@/client/types.gen";
 import WorkflowCard from "@/components/workflows/WorkflowCard.vue";
 import CardTransitionGroup from "@/components/transitions/CardTransitionGroup.vue";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
@@ -85,18 +85,18 @@ onMounted(() => {
   <div class="d-flex m-2 mb-3 align-items-center justify-content-between">
     <div class="col-5 me-auto">
       <div class="input-group rounded shadow-sm">
-        <span class="input-group-text" id="workflows-search-wrapping"
+        <span id="workflows-search-wrapping" class="input-group-text"
           ><font-awesome-icon icon="fa-solid fa-magnifying-glass"
         /></span>
         <input
-          type="text"
           id="filterWorkflowInput"
+          v-model.trim="workflowsState.filterString"
+          type="text"
           class="form-control"
           placeholder="Filter Workflows"
           aria-label="Filter Workflows"
           aria-describedby="workflows-search-wrapping"
           :disabled="workflowsState.loading"
-          v-model.trim="workflowsState.filterString"
           maxlength="20"
         />
       </div>
@@ -108,13 +108,13 @@ onMounted(() => {
       aria-label="Basic radio toggle button group"
     >
       <input
+        id="sortName"
+        v-model="workflowsState.sortByAttribute"
         type="radio"
         class="btn-check"
         name="btnradio"
-        id="sortName"
         autocomplete="off"
         checked
-        v-model="workflowsState.sortByAttribute"
         value="name"
       />
       <label class="btn btn-outline-secondary" for="sortName"
@@ -122,12 +122,12 @@ onMounted(() => {
       >
 
       <input
+        id="sortLatestRelease"
+        v-model="workflowsState.sortByAttribute"
         type="radio"
         class="btn-check"
         name="btnradio"
-        id="sortLatestRelease"
         autocomplete="off"
-        v-model="workflowsState.sortByAttribute"
         value="release"
       />
       <label class="btn btn-outline-secondary" for="sortLatestRelease"
@@ -140,8 +140,8 @@ onMounted(() => {
           ? 'fa-solid fa-arrow-down-wide-short'
           : 'fa-solid fa-arrow-up-wide-short'
       "
-      @click="workflowsState.sortDesc = !workflowsState.sortDesc"
       class="fs-5 ms-3 cursor-pointer"
+      @click="workflowsState.sortDesc = !workflowsState.sortDesc"
     />
   </div>
   <div v-if="environment.DEV_SYSTEM" class="d-grid gap-2 col-4 mx-auto">
diff --git a/src/views/workflows/MyWorkflowsView.vue b/src/views/workflows/MyWorkflowsView.vue
index 09ddb601643a1b6fffbd13d249c42741146e54b1..9673e8d2ac9b550961c6895f4acf668ecf9985a4 100644
--- a/src/views/workflows/MyWorkflowsView.vue
+++ b/src/views/workflows/MyWorkflowsView.vue
@@ -1,13 +1,15 @@
 <script setup lang="ts">
 import { computed, onMounted, reactive } from "vue";
+import type {
+  OwnershipTransferRequestOut,
+  WorkflowOut,
+  WorkflowVersion,
+} from "@/client/types.gen";
 import {
   NextflowVersion,
-  type OwnershipTransferRequestOut,
   OwnershipTypeEnum,
-  type WorkflowOut,
-  type WorkflowVersion,
   WorkflowVersionStatus,
-} from "@/client";
+} from "@/client/types.gen";
 import WorkflowWithVersionsCard from "@/components/workflows/WorkflowWithVersionsCard.vue";
 import CreateWorkflowModal from "@/components/workflows/modals/CreateWorkflowModal.vue";
 import CardTransitionGroup from "@/components/transitions/CardTransitionGroup.vue";
@@ -151,7 +153,7 @@ onMounted(() => {
 <template>
   <otr-modal
     :otr-target-id="workflowsState.showOtrTarget"
-    modalId="view-workflow-otr-modal"
+    modal-id="view-workflow-otr-modal"
   />
   <list-otrs-modal
     :otrs="otrForNewWorkflows"
diff --git a/src/views/workflows/ReviewWorkflowsView.vue b/src/views/workflows/ReviewWorkflowsView.vue
index 6ef699efd046ab502de711bf15e6c8a1b2cbf0f9..28e5a51d43ddf679df3d60bb42d32264c2d9e9b7 100644
--- a/src/views/workflows/ReviewWorkflowsView.vue
+++ b/src/views/workflows/ReviewWorkflowsView.vue
@@ -1,6 +1,6 @@
 <script setup lang="ts">
 import { onMounted, reactive } from "vue";
-import { WorkflowVersionStatus } from "@/client";
+import { WorkflowVersionStatus } from "@/client/types.gen";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import { determineGitIcon } from "@/utils/GitRepository";
 import { sortedVersions } from "@/utils/Workflow";
@@ -69,9 +69,9 @@ onMounted(() => {
     </div>
   </div>
   <table
-    class="table table-striped mx-auto"
-    id="reviewTable"
     v-else-if="workflowRepository.reviewableWorkflows.length > 0"
+    id="reviewTable"
+    class="table table-striped mx-auto"
   >
     <thead class="fs-5">
       <tr>
diff --git a/src/views/workflows/StartWorkflowView.vue b/src/views/workflows/StartWorkflowView.vue
index ee228ff981d9d0db6833b2f427bd8f5e73f31f86..e6930937f2f1025a642fc5498cdd2682f54ba766 100644
--- a/src/views/workflows/StartWorkflowView.vue
+++ b/src/views/workflows/StartWorkflowView.vue
@@ -1,6 +1,6 @@
 <script setup lang="ts">
 import ParameterSchemaFormComponent from "@/components/parameter-schema/ParameterSchemaFormComponent.vue";
-import { ApiError, DocumentationEnum, NextflowVersion } from "@/client";
+import { DocumentationEnum, NextflowVersion } from "@/client/types.gen";
 import { onMounted, reactive, watch } from "vue";
 import { useRouter } from "vue-router";
 import { Toast } from "bootstrap";
@@ -91,7 +91,7 @@ function startWorkflow(
           name: "workflow-executions",
         });
       })
-      .catch((err: ApiError) => {
+      .catch((err) => {
         console.error(err);
         versionState.errorText = err.body["detail"] ?? "";
         errorToast?.show();
@@ -123,7 +123,6 @@ onMounted(() => {
     :schema="versionState.parameterSchema"
     :loading="versionState.loading"
     allow-notes
-    @start-workflow="startWorkflow"
     :view-mode="viewMode"
     :nextflow-version="
       workflowRepository.versionMapping[versionId]?.nextflow_version ??
@@ -138,6 +137,7 @@ onMounted(() => {
       workflowRepository.versionMapping[versionId]?.parameter_extension ??
       undefined
     "
+    @start-workflow="startWorkflow"
   />
 </template>
 
diff --git a/src/views/workflows/WorkflowVersionView.vue b/src/views/workflows/WorkflowVersionView.vue
index a4a7deb6661e2cee9ab5e4cadc75c62e187b51de..14e85c52dee100a9fa36b7e7f8f27abc2f0050bc 100644
--- a/src/views/workflows/WorkflowVersionView.vue
+++ b/src/views/workflows/WorkflowVersionView.vue
@@ -1,6 +1,6 @@
 <script setup lang="ts">
 import { onMounted, reactive, watch } from "vue";
-import { DocumentationEnum } from "@/client";
+import { DocumentationEnum } from "@/client/types.gen";
 import WorkflowDocumentationTabs from "@/components/workflows/WorkflowDocumentationTabs.vue";
 import { useWorkflowStore } from "@/stores/workflows";
 
diff --git a/src/views/workflows/WorkflowView.vue b/src/views/workflows/WorkflowView.vue
index 7607ae69cd77ebe27235eb8790c3ebd80b52dfd3..fc1be2afce2e558e621ef34a975dab39702150b0 100644
--- a/src/views/workflows/WorkflowView.vue
+++ b/src/views/workflows/WorkflowView.vue
@@ -1,7 +1,12 @@
 <script setup lang="ts">
 import { computed, onMounted, reactive, watch } from "vue";
-import type { WorkflowOut, WorkflowStatistic, WorkflowVersion } from "@/client";
-import { WorkflowVersionStatus, WorkflowService } from "@/client";
+import { WorkflowVersionStatus } from "@/client/types.gen";
+import type {
+  WorkflowOut,
+  WorkflowStatistic,
+  WorkflowVersion,
+} from "@/client/types.gen";
+import { WorkflowService } from "@/client/services.gen";
 import WorkflowStatisticsChart from "@/components/workflows/WorkflowStatisticsChart.vue";
 import { useRoute, useRouter } from "vue-router";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
@@ -143,8 +148,10 @@ function updateWorkflow(workflowId: string) {
       }
     });
 
-  WorkflowService.workflowGetWorkflowStatistics(workflowId).then((stats) => {
-    workflowState.stats = stats;
+  WorkflowService.workflowGetWorkflowStatistics({
+    path: { wid: workflowId },
+  }).then((response) => {
+    workflowState.stats = response.data!;
   });
 }
 
@@ -324,7 +331,7 @@ onMounted(() => {
           v-if="latestVersion"
           class="input-group w-fit position-absolute end-0"
         >
-          <span class="input-group-text px-2" id="workflow-version-wrapping"
+          <span id="workflow-version-wrapping" class="input-group-text px-2"
             ><font-awesome-icon icon="fa-solid fa-tags" class="text-secondary"
           /></span>
           <select
@@ -363,8 +370,8 @@ onMounted(() => {
         </a>
       </div>
       <workflow-statistics-chart
-        :stats="workflowState.stats"
         v-if="workflowState.stats"
+        :stats="workflowState.stats"
       />
     </template>
   </div>