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>