diff --git a/handler/account/account.go b/handler/account/account.go index 248d699..9e4d07e 100644 --- a/handler/account/account.go +++ b/handler/account/account.go @@ -559,7 +559,6 @@ const ( MemberTypeDeveloper MemberType = "developer" MemberTypeOperator MemberType = "operator" MemberTypeOrganizationAppUsersWrite MemberType = "organization:app_users:write" - MemberTypeOrganizationAuditLogsRead MemberType = "organization:audit_logs:read" MemberTypeOrganizationBillingRead MemberType = "organization:billing:read" MemberTypeOrganizationBillingWrite MemberType = "organization:billing:write" MemberTypeOrganizationDomainsWrite MemberType = "organization:domains:write" @@ -594,7 +593,7 @@ const ( ) func MemberTypeChoices() []string { - return []string{"admin", "developer", "operator", "organization:app_users:write", "organization:audit_logs:read", "organization:billing:read", "organization:billing:write", "organization:domains:write", "organization:event_logs:read", "organization:groups:write", "organization:networking:read", "organization:networking:write", "organization:projects:write", "organization:sustainability:read", "organization:users:write", "project:ai_gateway_keys:read", "project:ai_gateway_keys:write", "project:audit_logs:read", "project:integrations:read", "project:integrations:write", "project:networking:read", "project:networking:write", "project:permissions:read", "project:services:read", "project:services:write", "read_only", "role:organization:admin", "role:project:admin", "role:services:maintenance", "role:services:recover", "service:configuration:write", "service:data:write", "service:logs:read", "service:metrics:read", "service:secrets:read", "service:users:write"} + return []string{"admin", "developer", "operator", "organization:app_users:write", "organization:billing:read", "organization:billing:write", "organization:domains:write", "organization:event_logs:read", "organization:groups:write", "organization:networking:read", "organization:networking:write", "organization:projects:write", "organization:sustainability:read", "organization:users:write", "project:ai_gateway_keys:read", "project:ai_gateway_keys:write", "project:audit_logs:read", "project:integrations:read", "project:integrations:write", "project:networking:read", "project:networking:write", "project:permissions:read", "project:services:read", "project:services:write", "read_only", "role:organization:admin", "role:project:admin", "role:services:maintenance", "role:services:recover", "service:configuration:write", "service:data:write", "service:logs:read", "service:metrics:read", "service:secrets:read", "service:users:write"} } type OrderByType string @@ -674,7 +673,6 @@ const ( TeamTypeDeveloper TeamType = "developer" TeamTypeOperator TeamType = "operator" TeamTypeOrganizationAppUsersWrite TeamType = "organization:app_users:write" - TeamTypeOrganizationAuditLogsRead TeamType = "organization:audit_logs:read" TeamTypeOrganizationBillingRead TeamType = "organization:billing:read" TeamTypeOrganizationBillingWrite TeamType = "organization:billing:write" TeamTypeOrganizationDomainsWrite TeamType = "organization:domains:write" @@ -709,7 +707,7 @@ const ( ) func TeamTypeChoices() []string { - return []string{"admin", "developer", "operator", "organization:app_users:write", "organization:audit_logs:read", "organization:billing:read", "organization:billing:write", "organization:domains:write", "organization:event_logs:read", "organization:groups:write", "organization:networking:read", "organization:networking:write", "organization:projects:write", "organization:sustainability:read", "organization:users:write", "project:ai_gateway_keys:read", "project:ai_gateway_keys:write", "project:audit_logs:read", "project:integrations:read", "project:integrations:write", "project:networking:read", "project:networking:write", "project:permissions:read", "project:services:read", "project:services:write", "read_only", "role:organization:admin", "role:project:admin", "role:services:maintenance", "role:services:recover", "service:configuration:write", "service:data:write", "service:logs:read", "service:metrics:read", "service:secrets:read", "service:users:write"} + return []string{"admin", "developer", "operator", "organization:app_users:write", "organization:billing:read", "organization:billing:write", "organization:domains:write", "organization:event_logs:read", "organization:groups:write", "organization:networking:read", "organization:networking:write", "organization:projects:write", "organization:sustainability:read", "organization:users:write", "project:ai_gateway_keys:read", "project:ai_gateway_keys:write", "project:audit_logs:read", "project:integrations:read", "project:integrations:write", "project:networking:read", "project:networking:write", "project:permissions:read", "project:services:read", "project:services:write", "read_only", "role:organization:admin", "role:project:admin", "role:services:maintenance", "role:services:recover", "service:configuration:write", "service:data:write", "service:logs:read", "service:metrics:read", "service:secrets:read", "service:users:write"} } type TechEmailOut struct { diff --git a/handler/accountteam/accountteam.go b/handler/accountteam/accountteam.go index 719cf09..06f9f26 100644 --- a/handler/accountteam/accountteam.go +++ b/handler/accountteam/accountteam.go @@ -243,7 +243,6 @@ const ( TeamTypeDeveloper TeamType = "developer" TeamTypeOperator TeamType = "operator" TeamTypeOrganizationAppUsersWrite TeamType = "organization:app_users:write" - TeamTypeOrganizationAuditLogsRead TeamType = "organization:audit_logs:read" TeamTypeOrganizationBillingRead TeamType = "organization:billing:read" TeamTypeOrganizationBillingWrite TeamType = "organization:billing:write" TeamTypeOrganizationDomainsWrite TeamType = "organization:domains:write" @@ -278,7 +277,7 @@ const ( ) func TeamTypeChoices() []string { - return []string{"admin", "developer", "operator", "organization:app_users:write", "organization:audit_logs:read", "organization:billing:read", "organization:billing:write", "organization:domains:write", "organization:event_logs:read", "organization:groups:write", "organization:networking:read", "organization:networking:write", "organization:projects:write", "organization:sustainability:read", "organization:users:write", "project:ai_gateway_keys:read", "project:ai_gateway_keys:write", "project:audit_logs:read", "project:integrations:read", "project:integrations:write", "project:networking:read", "project:networking:write", "project:permissions:read", "project:services:read", "project:services:write", "read_only", "role:organization:admin", "role:project:admin", "role:services:maintenance", "role:services:recover", "service:configuration:write", "service:data:write", "service:logs:read", "service:metrics:read", "service:secrets:read", "service:users:write"} + return []string{"admin", "developer", "operator", "organization:app_users:write", "organization:billing:read", "organization:billing:write", "organization:domains:write", "organization:event_logs:read", "organization:groups:write", "organization:networking:read", "organization:networking:write", "organization:projects:write", "organization:sustainability:read", "organization:users:write", "project:ai_gateway_keys:read", "project:ai_gateway_keys:write", "project:audit_logs:read", "project:integrations:read", "project:integrations:write", "project:networking:read", "project:networking:write", "project:permissions:read", "project:services:read", "project:services:write", "read_only", "role:organization:admin", "role:project:admin", "role:services:maintenance", "role:services:recover", "service:configuration:write", "service:data:write", "service:logs:read", "service:metrics:read", "service:secrets:read", "service:users:write"} } // accountTeamCreateOut AccountTeamCreateResponse diff --git a/handler/byoc/byoc.go b/handler/byoc/byoc.go index e47eb88..7b73a5e 100644 --- a/handler/byoc/byoc.go +++ b/handler/byoc/byoc.go @@ -270,10 +270,8 @@ type CustomCloudEnvironmentPermissionsSetIn struct { // CustomCloudEnvironmentProvisionIn CustomCloudEnvironmentProvisionRequestBody type CustomCloudEnvironmentProvisionIn struct { AWSIamRoleArn *string `json:"aws_iam_role_arn,omitempty"` // Amazon Resource Name - AzureClientId *string `json:"azure_client_id,omitempty"` // Application (client) ID of the operator service principal created by Terraform. - AzureClientSecret *string `json:"azure_client_secret,omitempty"` // Client secret of the operator service principal created by Terraform. AzureSubscriptionId *string `json:"azure_subscription_id,omitempty"` // UUID identifying the customer's Azure subscription where BYOC infrastructure is deployed. - AzureTenantId *string `json:"azure_tenant_id,omitempty"` // Azure tenant id in UUID4 form + AzureTenantId *string `json:"azure_tenant_id,omitempty"` // Entra ID tenant ID of the customer's directory where the Aiven CCE enterprise application is installed. GooglePrivilegeBearingServiceAccountId *string `json:"google_privilege_bearing_service_account_id,omitempty"` // Google account identifier OracleCompartmentId *string `json:"oracle_compartment_id,omitempty"` // Used to uniquely identify an asset in Oracle's cloud. May refer to a range of object types including instance, tenancy, subnet and more. } diff --git a/handler/project/project.go b/handler/project/project.go index a1b23a9..3a66828 100644 --- a/handler/project/project.go +++ b/handler/project/project.go @@ -590,7 +590,6 @@ const ( MemberTypeDeveloper MemberType = "developer" MemberTypeOperator MemberType = "operator" MemberTypeOrganizationAppUsersWrite MemberType = "organization:app_users:write" - MemberTypeOrganizationAuditLogsRead MemberType = "organization:audit_logs:read" MemberTypeOrganizationBillingRead MemberType = "organization:billing:read" MemberTypeOrganizationBillingWrite MemberType = "organization:billing:write" MemberTypeOrganizationDomainsWrite MemberType = "organization:domains:write" @@ -625,7 +624,7 @@ const ( ) func MemberTypeChoices() []string { - return []string{"admin", "developer", "operator", "organization:app_users:write", "organization:audit_logs:read", "organization:billing:read", "organization:billing:write", "organization:domains:write", "organization:event_logs:read", "organization:groups:write", "organization:networking:read", "organization:networking:write", "organization:projects:write", "organization:sustainability:read", "organization:users:write", "project:ai_gateway_keys:read", "project:ai_gateway_keys:write", "project:audit_logs:read", "project:integrations:read", "project:integrations:write", "project:networking:read", "project:networking:write", "project:permissions:read", "project:services:read", "project:services:write", "read_only", "role:organization:admin", "role:project:admin", "role:services:maintenance", "role:services:recover", "service:configuration:write", "service:data:write", "service:logs:read", "service:metrics:read", "service:secrets:read", "service:users:write"} + return []string{"admin", "developer", "operator", "organization:app_users:write", "organization:billing:read", "organization:billing:write", "organization:domains:write", "organization:event_logs:read", "organization:groups:write", "organization:networking:read", "organization:networking:write", "organization:projects:write", "organization:sustainability:read", "organization:users:write", "project:ai_gateway_keys:read", "project:ai_gateway_keys:write", "project:audit_logs:read", "project:integrations:read", "project:integrations:write", "project:networking:read", "project:networking:write", "project:permissions:read", "project:services:read", "project:services:write", "read_only", "role:organization:admin", "role:project:admin", "role:services:maintenance", "role:services:recover", "service:configuration:write", "service:data:write", "service:logs:read", "service:metrics:read", "service:secrets:read", "service:users:write"} } // MysqlOut Service type information @@ -775,7 +774,6 @@ const ( ProjectMembershipTypeDeveloper ProjectMembershipType = "developer" ProjectMembershipTypeOperator ProjectMembershipType = "operator" ProjectMembershipTypeOrganizationAppUsersWrite ProjectMembershipType = "organization:app_users:write" - ProjectMembershipTypeOrganizationAuditLogsRead ProjectMembershipType = "organization:audit_logs:read" ProjectMembershipTypeOrganizationBillingRead ProjectMembershipType = "organization:billing:read" ProjectMembershipTypeOrganizationBillingWrite ProjectMembershipType = "organization:billing:write" ProjectMembershipTypeOrganizationDomainsWrite ProjectMembershipType = "organization:domains:write" @@ -810,7 +808,7 @@ const ( ) func ProjectMembershipTypeChoices() []string { - return []string{"admin", "developer", "operator", "organization:app_users:write", "organization:audit_logs:read", "organization:billing:read", "organization:billing:write", "organization:domains:write", "organization:event_logs:read", "organization:groups:write", "organization:networking:read", "organization:networking:write", "organization:projects:write", "organization:sustainability:read", "organization:users:write", "project:ai_gateway_keys:read", "project:ai_gateway_keys:write", "project:audit_logs:read", "project:integrations:read", "project:integrations:write", "project:networking:read", "project:networking:write", "project:permissions:read", "project:services:read", "project:services:write", "read_only", "role:organization:admin", "role:project:admin", "role:services:maintenance", "role:services:recover", "service:configuration:write", "service:data:write", "service:logs:read", "service:metrics:read", "service:secrets:read", "service:users:write"} + return []string{"admin", "developer", "operator", "organization:app_users:write", "organization:billing:read", "organization:billing:write", "organization:domains:write", "organization:event_logs:read", "organization:groups:write", "organization:networking:read", "organization:networking:write", "organization:projects:write", "organization:sustainability:read", "organization:users:write", "project:ai_gateway_keys:read", "project:ai_gateway_keys:write", "project:audit_logs:read", "project:integrations:read", "project:integrations:write", "project:networking:read", "project:networking:write", "project:permissions:read", "project:services:read", "project:services:write", "read_only", "role:organization:admin", "role:project:admin", "role:services:maintenance", "role:services:recover", "service:configuration:write", "service:data:write", "service:logs:read", "service:metrics:read", "service:secrets:read", "service:users:write"} } type ProjectOut struct { diff --git a/handler/service/service.go b/handler/service/service.go index 12b64bd..7f46c49 100644 --- a/handler/service/service.go +++ b/handler/service/service.go @@ -1586,6 +1586,18 @@ type PGParamOut struct { Sslmode string `json:"sslmode"` User string `json:"user"` } +type PasswordEncryptionType string + +const ( + PasswordEncryptionTypeMd5 PasswordEncryptionType = "md5" + PasswordEncryptionTypeScramSha256 PasswordEncryptionType = "scram-sha-256" + PasswordEncryptionTypeUnknown PasswordEncryptionType = "unknown" +) + +func PasswordEncryptionTypeChoices() []string { + return []string{"md5", "scram-sha-256", "unknown"} +} + type PatternType string const ( @@ -2341,16 +2353,17 @@ type ServiceUserCreateIn struct { // ServiceUserCreateOut Service user account type ServiceUserCreateOut struct { - AccessCert *string `json:"access_cert,omitempty"` // Access certificate for TLS client authentication - AccessCertNotValidAfterTime *time.Time `json:"access_cert_not_valid_after_time,omitempty"` // Validity end time (ISO8601) for the current access certificate - AccessControl *AccessControlOut `json:"access_control,omitempty"` // Service type specific access control rules for user. Currently only used for configuring user ACLs for Redis version 6 and above. - AccessKey *string `json:"access_key,omitempty"` // Access key for TLS client authentication - Authentication AuthenticationType `json:"authentication,omitempty"` // Service specific authentication details. Currently only used for MySQL where accepted options are 'mysql_native_password' and 'caching_sha2_password', latter being default when this is not explicitly set. - ExpiringCertNotValidAfterTime *time.Time `json:"expiring_cert_not_valid_after_time,omitempty"` // When the existing certificate is nearing expiration and a new certificate has been generated, the validity end time (ISO8601) for the expiring certificate - Password string `json:"password"` // Account password. A null value indicates a user overridden password. - PasswordUpdatedTime *time.Time `json:"password_updated_time,omitempty"` // Timestamp (ISO8601) of the last time this password was set. - Type string `json:"type"` // Account type - Username string `json:"username"` // Account username + AccessCert *string `json:"access_cert,omitempty"` // Access certificate for TLS client authentication + AccessCertNotValidAfterTime *time.Time `json:"access_cert_not_valid_after_time,omitempty"` // Validity end time (ISO8601) for the current access certificate + AccessControl *AccessControlOut `json:"access_control,omitempty"` // Service type specific access control rules for user. Currently only used for configuring user ACLs for Redis version 6 and above. + AccessKey *string `json:"access_key,omitempty"` // Access key for TLS client authentication + Authentication AuthenticationType `json:"authentication,omitempty"` // Service specific authentication details. Currently only used for MySQL where accepted options are 'mysql_native_password' and 'caching_sha2_password', latter being default when this is not explicitly set. + ExpiringCertNotValidAfterTime *time.Time `json:"expiring_cert_not_valid_after_time,omitempty"` // When the existing certificate is nearing expiration and a new certificate has been generated, the validity end time (ISO8601) for the expiring certificate + Password string `json:"password"` // Account password. A null value indicates a user overridden password. + PasswordEncryptionType PasswordEncryptionType `json:"password_encryption_type,omitempty"` // The password hashing algorithm used for this PostgreSQL user, derived from the stored password hash. 'unknown' is reported when the hash is missing or uses an unrecognised format. + PasswordUpdatedTime *time.Time `json:"password_updated_time,omitempty"` // Timestamp (ISO8601) of the last time this password was set. + Type string `json:"type"` // Account type + Username string `json:"username"` // Account username } // ServiceUserCredentialsModifyIn ServiceUserCredentialsModifyRequestBody @@ -2462,16 +2475,17 @@ type ServiceUserCredentialsResetOut struct { // ServiceUserGetOut Service user account type ServiceUserGetOut struct { - AccessCert *string `json:"access_cert,omitempty"` // Access certificate for TLS client authentication - AccessCertNotValidAfterTime *time.Time `json:"access_cert_not_valid_after_time,omitempty"` // Validity end time (ISO8601) for the current access certificate - AccessControl *AccessControlOut `json:"access_control,omitempty"` // Service type specific access control rules for user. Currently only used for configuring user ACLs for Redis version 6 and above. - AccessKey *string `json:"access_key,omitempty"` // Access key for TLS client authentication - Authentication AuthenticationType `json:"authentication,omitempty"` // Service specific authentication details. Currently only used for MySQL where accepted options are 'mysql_native_password' and 'caching_sha2_password', latter being default when this is not explicitly set. - ExpiringCertNotValidAfterTime *time.Time `json:"expiring_cert_not_valid_after_time,omitempty"` // When the existing certificate is nearing expiration and a new certificate has been generated, the validity end time (ISO8601) for the expiring certificate - Password string `json:"password"` // Account password. A null value indicates a user overridden password. - PasswordUpdatedTime *time.Time `json:"password_updated_time,omitempty"` // Timestamp (ISO8601) of the last time this password was set. - Type string `json:"type"` // Account type - Username string `json:"username"` // Account username + AccessCert *string `json:"access_cert,omitempty"` // Access certificate for TLS client authentication + AccessCertNotValidAfterTime *time.Time `json:"access_cert_not_valid_after_time,omitempty"` // Validity end time (ISO8601) for the current access certificate + AccessControl *AccessControlOut `json:"access_control,omitempty"` // Service type specific access control rules for user. Currently only used for configuring user ACLs for Redis version 6 and above. + AccessKey *string `json:"access_key,omitempty"` // Access key for TLS client authentication + Authentication AuthenticationType `json:"authentication,omitempty"` // Service specific authentication details. Currently only used for MySQL where accepted options are 'mysql_native_password' and 'caching_sha2_password', latter being default when this is not explicitly set. + ExpiringCertNotValidAfterTime *time.Time `json:"expiring_cert_not_valid_after_time,omitempty"` // When the existing certificate is nearing expiration and a new certificate has been generated, the validity end time (ISO8601) for the expiring certificate + Password string `json:"password"` // Account password. A null value indicates a user overridden password. + PasswordEncryptionType PasswordEncryptionType `json:"password_encryption_type,omitempty"` // The password hashing algorithm used for this PostgreSQL user, derived from the stored password hash. 'unknown' is reported when the hash is missing or uses an unrecognised format. + PasswordUpdatedTime *time.Time `json:"password_updated_time,omitempty"` // Timestamp (ISO8601) of the last time this password was set. + Type string `json:"type"` // Account type + Username string `json:"username"` // Account username } type ServiceVersionOut struct { AivenEndOfLifeTime *time.Time `json:"aiven_end_of_life_time,omitempty"` // Aiven end-of-life timestamp (ISO 8601) @@ -2634,16 +2648,17 @@ func UsageTypeChoices() []string { } type UserOut struct { - AccessCert *string `json:"access_cert,omitempty"` // Access certificate for TLS client authentication - AccessCertNotValidAfterTime *time.Time `json:"access_cert_not_valid_after_time,omitempty"` // Validity end time (ISO8601) for the current access certificate - AccessControl *AccessControlOut `json:"access_control,omitempty"` // Service type specific access control rules for user. Currently only used for configuring user ACLs for Redis version 6 and above. - AccessKey *string `json:"access_key,omitempty"` // Access key for TLS client authentication - Authentication AuthenticationType `json:"authentication,omitempty"` // Service specific authentication details. Currently only used for MySQL where accepted options are 'mysql_native_password' and 'caching_sha2_password', latter being default when this is not explicitly set. - ExpiringCertNotValidAfterTime *time.Time `json:"expiring_cert_not_valid_after_time,omitempty"` // When the existing certificate is nearing expiration and a new certificate has been generated, the validity end time (ISO8601) for the expiring certificate - Password string `json:"password"` // Account password. A null value indicates a user overridden password. - PasswordUpdatedTime *time.Time `json:"password_updated_time,omitempty"` // Timestamp (ISO8601) of the last time this password was set. - Type string `json:"type"` // Account type - Username string `json:"username"` // Account username + AccessCert *string `json:"access_cert,omitempty"` // Access certificate for TLS client authentication + AccessCertNotValidAfterTime *time.Time `json:"access_cert_not_valid_after_time,omitempty"` // Validity end time (ISO8601) for the current access certificate + AccessControl *AccessControlOut `json:"access_control,omitempty"` // Service type specific access control rules for user. Currently only used for configuring user ACLs for Redis version 6 and above. + AccessKey *string `json:"access_key,omitempty"` // Access key for TLS client authentication + Authentication AuthenticationType `json:"authentication,omitempty"` // Service specific authentication details. Currently only used for MySQL where accepted options are 'mysql_native_password' and 'caching_sha2_password', latter being default when this is not explicitly set. + ExpiringCertNotValidAfterTime *time.Time `json:"expiring_cert_not_valid_after_time,omitempty"` // When the existing certificate is nearing expiration and a new certificate has been generated, the validity end time (ISO8601) for the expiring certificate + Password string `json:"password"` // Account password. A null value indicates a user overridden password. + PasswordEncryptionType PasswordEncryptionType `json:"password_encryption_type,omitempty"` // The password hashing algorithm used for this PostgreSQL user, derived from the stored password hash. 'unknown' is reported when the hash is missing or uses an unrecognised format. + PasswordUpdatedTime *time.Time `json:"password_updated_time,omitempty"` // Timestamp (ISO8601) of the last time this password was set. + Type string `json:"type"` // Account type + Username string `json:"username"` // Account username } // ValkeyOut Service type information diff --git a/handler/user/user.go b/handler/user/user.go index ad174a5..55eaa5d 100644 --- a/handler/user/user.go +++ b/handler/user/user.go @@ -603,7 +603,6 @@ const ( ProjectMembershipTypeDeveloper ProjectMembershipType = "developer" ProjectMembershipTypeOperator ProjectMembershipType = "operator" ProjectMembershipTypeOrganizationAppUsersWrite ProjectMembershipType = "organization:app_users:write" - ProjectMembershipTypeOrganizationAuditLogsRead ProjectMembershipType = "organization:audit_logs:read" ProjectMembershipTypeOrganizationBillingRead ProjectMembershipType = "organization:billing:read" ProjectMembershipTypeOrganizationBillingWrite ProjectMembershipType = "organization:billing:write" ProjectMembershipTypeOrganizationDomainsWrite ProjectMembershipType = "organization:domains:write" @@ -638,7 +637,7 @@ const ( ) func ProjectMembershipTypeChoices() []string { - return []string{"admin", "developer", "operator", "organization:app_users:write", "organization:audit_logs:read", "organization:billing:read", "organization:billing:write", "organization:domains:write", "organization:event_logs:read", "organization:groups:write", "organization:networking:read", "organization:networking:write", "organization:projects:write", "organization:sustainability:read", "organization:users:write", "project:ai_gateway_keys:read", "project:ai_gateway_keys:write", "project:audit_logs:read", "project:integrations:read", "project:integrations:write", "project:networking:read", "project:networking:write", "project:permissions:read", "project:services:read", "project:services:write", "read_only", "role:organization:admin", "role:project:admin", "role:services:maintenance", "role:services:recover", "service:configuration:write", "service:data:write", "service:logs:read", "service:metrics:read", "service:secrets:read", "service:users:write"} + return []string{"admin", "developer", "operator", "organization:app_users:write", "organization:billing:read", "organization:billing:write", "organization:domains:write", "organization:event_logs:read", "organization:groups:write", "organization:networking:read", "organization:networking:write", "organization:projects:write", "organization:sustainability:read", "organization:users:write", "project:ai_gateway_keys:read", "project:ai_gateway_keys:write", "project:audit_logs:read", "project:integrations:read", "project:integrations:write", "project:networking:read", "project:networking:write", "project:permissions:read", "project:services:read", "project:services:write", "read_only", "role:organization:admin", "role:project:admin", "role:services:maintenance", "role:services:recover", "service:configuration:write", "service:data:write", "service:logs:read", "service:metrics:read", "service:secrets:read", "service:users:write"} } type TokenOut struct {