diff --git a/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/ProjectActivityController.kt b/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/ProjectActivityController.kt index a51fe30e558..ee9c0300f77 100644 --- a/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/ProjectActivityController.kt +++ b/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/ProjectActivityController.kt @@ -9,9 +9,14 @@ import io.swagger.v3.oas.annotations.Parameter import io.swagger.v3.oas.annotations.media.ExampleObject import io.swagger.v3.oas.annotations.tags.Tag import io.tolgee.activity.ActivityService +import io.tolgee.activity.groups.ActivityGroupService import io.tolgee.configuration.tolgee.TolgeeProperties import io.tolgee.constants.Feature +import io.tolgee.dtos.queryResults.ActivityGroupView +import io.tolgee.dtos.request.ActivityGroupFilters import io.tolgee.exceptions.NotFoundException +import io.tolgee.hateoas.activity.ActivityGroupModel +import io.tolgee.hateoas.activity.ActivityGroupModelAssembler import io.tolgee.hateoas.activity.ModifiedEntityModel import io.tolgee.hateoas.activity.ModifiedEntityModelAssembler import io.tolgee.hateoas.activity.ProjectActivityModel @@ -28,6 +33,7 @@ import io.tolgee.service.project.ProjectFeatureGuard import org.springdoc.core.annotations.ParameterObject import org.springframework.data.domain.Pageable import org.springframework.data.web.PagedResourcesAssembler +import org.springframework.hateoas.MediaTypes import org.springframework.hateoas.PagedModel import org.springframework.web.bind.annotation.CrossOrigin import org.springframework.web.bind.annotation.GetMapping @@ -49,6 +55,9 @@ class ProjectActivityController( private val modificationResourcesAssembler: PagedResourcesAssembler, private val projectActivityModelAssembler: ProjectActivityModelAssembler, private val modifiedEntityModelAssembler: ModifiedEntityModelAssembler, + private val activityGroupService: ActivityGroupService, + private val groupPagedResourcesAssembler: PagedResourcesAssembler, + private val groupModelAssembler: ActivityGroupModelAssembler, private val branchService: BranchService, private val projectFeatureGuard: ProjectFeatureGuard, private val rateLimitService: RateLimitService, @@ -123,4 +132,31 @@ class ProjectActivityController( ) return modificationResourcesAssembler.toModel(page, modifiedEntityModelAssembler) } + + @Operation( + summary = "Get project activity groups", + description = "This endpoints returns the activity grouped by time windows so it's easier to read on the frontend.", + ) + @GetMapping("/groups", produces = [MediaTypes.HAL_JSON_VALUE]) + @RequiresProjectPermissions([Scope.ACTIVITY_VIEW]) + @AllowApiAccess + fun getActivityGroups( + @ParameterObject pageable: Pageable, + @ParameterObject activityGroupFilters: ActivityGroupFilters, + @RequestParam(required = false) branch: String? = null, + ): PagedModel { + projectFeatureGuard.checkIfUsed(Feature.BRANCHING, branch) + val activeBranch = branchService.getActiveNonDefaultBranch(projectHolder.project.id, branch) + val defaultBranchId = + if (activeBranch == null) branchService.getDefaultBranch(projectHolder.project.id)?.id else null + val views = + activityGroupService.getProjectActivityGroups( + projectId = projectHolder.project.id, + pageable, + activityGroupFilters, + branchId = activeBranch?.id, + defaultBranchId = defaultBranchId, + ) + return groupPagedResourcesAssembler.toModel(views, groupModelAssembler) + } } diff --git a/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/ProjectActivityGroupItemsController.kt b/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/ProjectActivityGroupItemsController.kt new file mode 100644 index 00000000000..d90ecf12705 --- /dev/null +++ b/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/ProjectActivityGroupItemsController.kt @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2020. Tolgee + */ + +package io.tolgee.api.v2.controllers + +import io.swagger.v3.oas.annotations.Operation +import io.swagger.v3.oas.annotations.tags.Tag +import io.tolgee.activity.groups.ActivityGroupService +import io.tolgee.activity.groups.viewProviders.createKey.CreateKeyGroupItemModel +import io.tolgee.activity.groups.viewProviders.createKey.CreateKeyGroupModelProvider +import io.tolgee.activity.groups.viewProviders.generic.GenericGroupItemModel +import io.tolgee.activity.groups.viewProviders.generic.GenericGroupModelProvider +import io.tolgee.model.enums.Scope +import io.tolgee.security.ProjectHolder +import io.tolgee.security.authentication.AllowApiAccess +import io.tolgee.security.authorization.RequiresProjectPermissions +import org.springdoc.core.annotations.ParameterObject +import org.springframework.data.domain.Pageable +import org.springframework.hateoas.MediaTypes +import org.springframework.hateoas.PagedModel +import org.springframework.hateoas.PagedModel.PageMetadata +import org.springframework.web.bind.annotation.CrossOrigin +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PathVariable +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@Suppress("MVCPathVariableInspection") +@RestController +@CrossOrigin(origins = ["*"]) +@RequestMapping(value = ["/v2/projects/{projectId}/activity/group-items", "/v2/projects/activity/group-items"]) +@Tag(name = "Activity Groups") +class ProjectActivityGroupItemsController( + private val createKeyGroupModelProvider: CreateKeyGroupModelProvider, + private val genericGroupModelProvider: GenericGroupModelProvider, + private val activityGroupService: ActivityGroupService, + private val projectHolder: ProjectHolder, +) { + @Operation( + summary = "Get CREATE_KEY group items", + ) + @GetMapping("/create-key/{groupId}", produces = [MediaTypes.HAL_JSON_VALUE]) + @RequiresProjectPermissions([Scope.ACTIVITY_VIEW]) + @AllowApiAccess + fun getCreateKeyItems( + @ParameterObject pageable: Pageable, + @PathVariable groupId: Long, + ): PagedModel { + val data = createKeyGroupModelProvider.provideItems(groupId, pageable) + return PagedModel.of( + data.content, + PageMetadata(data.pageable.pageSize.toLong(), data.pageable.pageNumber.toLong(), data.totalElements), + ) + } + + @Operation( + summary = "Get group items", + description = "Returns the modified entities of the group as generic items (any group type).", + ) + @GetMapping("/generic/{groupId}", produces = [MediaTypes.HAL_JSON_VALUE]) + @RequiresProjectPermissions([Scope.ACTIVITY_VIEW]) + @AllowApiAccess + fun getGenericItems( + @ParameterObject pageable: Pageable, + @PathVariable groupId: Long, + ): PagedModel { + val group = activityGroupService.getGroupInProject(groupId, projectHolder.project.id) + val data = genericGroupModelProvider.provideItems(group.type, groupId, pageable) + return PagedModel.of( + data.content, + PageMetadata(data.pageable.pageSize.toLong(), data.pageable.pageNumber.toLong(), data.totalElements), + ) + } +} diff --git a/backend/api/src/main/kotlin/io/tolgee/hateoas/activity/ActivityGroupModel.kt b/backend/api/src/main/kotlin/io/tolgee/hateoas/activity/ActivityGroupModel.kt new file mode 100644 index 00000000000..fff0e154348 --- /dev/null +++ b/backend/api/src/main/kotlin/io/tolgee/hateoas/activity/ActivityGroupModel.kt @@ -0,0 +1,23 @@ +package io.tolgee.hateoas.activity + +import io.tolgee.activity.data.ActivityOrigin +import io.tolgee.activity.data.ActivityType +import io.tolgee.activity.groups.ActivityGroupType +import io.tolgee.hateoas.userAccount.SimpleUserAccountModel +import org.springframework.hateoas.RepresentationModel +import org.springframework.hateoas.server.core.Relation +import java.io.Serializable + +@Suppress("unused") +@Relation(collectionRelation = "groups", itemRelation = "group") +class ActivityGroupModel( + val id: Long, + val timestamp: Long, + val type: ActivityGroupType, + val author: SimpleUserAccountModel?, + val data: Any?, + var mentionedLanguageIds: List, + val sourceActivityTypes: List, + val origins: List, +) : RepresentationModel(), + Serializable diff --git a/backend/api/src/main/kotlin/io/tolgee/hateoas/activity/ActivityGroupModelAssembler.kt b/backend/api/src/main/kotlin/io/tolgee/hateoas/activity/ActivityGroupModelAssembler.kt new file mode 100644 index 00000000000..0ea04eb4640 --- /dev/null +++ b/backend/api/src/main/kotlin/io/tolgee/hateoas/activity/ActivityGroupModelAssembler.kt @@ -0,0 +1,35 @@ +package io.tolgee.hateoas.activity + +import io.tolgee.activity.data.ActivityOrigin +import io.tolgee.activity.data.ActivityType +import io.tolgee.dtos.queryResults.ActivityGroupView +import io.tolgee.hateoas.userAccount.SimpleUserAccountModelAssembler +import org.springframework.hateoas.server.RepresentationModelAssembler +import org.springframework.stereotype.Component + +@Component +class ActivityGroupModelAssembler( + private val simpleUserAccountModelAssembler: SimpleUserAccountModelAssembler, +) : RepresentationModelAssembler { + override fun toModel(view: ActivityGroupView): ActivityGroupModel { + return ActivityGroupModel( + id = view.id, + timestamp = view.timestamp.time, + type = view.type, + author = + simpleUserAccountModelAssembler.toModel( + view.author, + ), + data = view.data, + mentionedLanguageIds = view.mentionedLanguageIds, + sourceActivityTypes = + view.sourceActivityTypes.mapNotNull { type -> + ActivityType.entries.find { it.name == type } + }, + origins = + view.origins.mapNotNull { origin -> + ActivityOrigin.entries.find { it.name == origin } + }, + ) + } +} diff --git a/backend/api/src/main/kotlin/io/tolgee/hateoas/key/KeyModel.kt b/backend/api/src/main/kotlin/io/tolgee/hateoas/key/KeyModel.kt index 124fb8553e3..848fb721530 100644 --- a/backend/api/src/main/kotlin/io/tolgee/hateoas/key/KeyModel.kt +++ b/backend/api/src/main/kotlin/io/tolgee/hateoas/key/KeyModel.kt @@ -1,6 +1,7 @@ package io.tolgee.hateoas.key import io.swagger.v3.oas.annotations.media.Schema +import io.tolgee.api.IKeyModel import org.springframework.hateoas.RepresentationModel import org.springframework.hateoas.server.core.Relation import java.io.Serializable @@ -9,21 +10,22 @@ import java.io.Serializable @Relation(collectionRelation = "keys", itemRelation = "key") open class KeyModel( @Schema(description = "Id of key record") - val id: Long, + override val id: Long, @Schema(description = "Name of key", example = "this_is_super_key") - val name: String, + override val name: String, @Schema(description = "Namespace of key", example = "homepage") - val namespace: String?, + override val namespace: String?, @Schema( description = "Description of key", example = "This key is used on homepage. It's a label of sign up button.", ) - val description: String?, + override val description: String?, @Schema(description = "Custom values of the key") - val custom: Map?, + override val custom: Map?, @Schema(description = "Maximum character limit for translations of this key") val maxCharLimit: Int?, @Schema(description = "Branch of key", example = "dev") val branch: String?, ) : RepresentationModel(), - Serializable + Serializable, + IKeyModel diff --git a/backend/api/src/main/kotlin/io/tolgee/hateoas/key/KeyWithDataModel.kt b/backend/api/src/main/kotlin/io/tolgee/hateoas/key/KeyWithDataModel.kt index e3f823a7ad7..32a6402229c 100644 --- a/backend/api/src/main/kotlin/io/tolgee/hateoas/key/KeyWithDataModel.kt +++ b/backend/api/src/main/kotlin/io/tolgee/hateoas/key/KeyWithDataModel.kt @@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema import io.tolgee.api.v2.hateoas.invitation.TagModel import io.tolgee.hateoas.screenshot.ScreenshotModel import io.tolgee.hateoas.translations.TranslationModel +import io.tolgee.sharedDocs.Key import org.springframework.hateoas.RepresentationModel import org.springframework.hateoas.server.core.Relation import java.io.Serializable @@ -31,9 +32,9 @@ open class KeyWithDataModel( val tags: Set, @Schema(description = "Screenshots of the key") val screenshots: List, - @Schema(description = "If key is pluralized. If it will be reflected in the editor") + @Schema(description = Key.IS_PLURAL_FIELD) val isPlural: Boolean, - @Schema(description = "The argument name for the plural") + @Schema(description = Key.PLURAL_ARG_NAME_FIELD) val pluralArgName: String?, @Schema(description = "Custom values of the key") val custom: Map, diff --git a/backend/api/src/main/kotlin/io/tolgee/hateoas/language/LanguageModel.kt b/backend/api/src/main/kotlin/io/tolgee/hateoas/language/LanguageModel.kt index cb7b7ebe4cb..ea2be036fb5 100644 --- a/backend/api/src/main/kotlin/io/tolgee/hateoas/language/LanguageModel.kt +++ b/backend/api/src/main/kotlin/io/tolgee/hateoas/language/LanguageModel.kt @@ -1,21 +1,23 @@ package io.tolgee.hateoas.language import io.swagger.v3.oas.annotations.media.Schema +import io.tolgee.api.ILanguageModel import org.springframework.hateoas.RepresentationModel import org.springframework.hateoas.server.core.Relation @Suppress("unused") @Relation(collectionRelation = "languages", itemRelation = "language") open class LanguageModel( - val id: Long, + override val id: Long, @Schema(example = "Czech", description = "Language name in english") - val name: String, + override val name: String, @Schema(example = "cs-CZ", description = "Language tag according to BCP 47 definition") - var tag: String, + override var tag: String, @Schema(example = "čeština", description = "Language name in this language") - var originalName: String? = null, + override var originalName: String?, @Schema(example = "\uD83C\uDDE8\uD83C\uDDFF", description = "Language flag emoji as UTF-8 emoji") - var flagEmoji: String? = null, + override var flagEmoji: String?, @Schema(example = "false", description = "Whether is base language of project") var base: Boolean, -) : RepresentationModel() +) : RepresentationModel(), + ILanguageModel diff --git a/backend/api/src/main/kotlin/io/tolgee/hateoas/userAccount/SimpleUserAccountModelAssembler.kt b/backend/api/src/main/kotlin/io/tolgee/hateoas/userAccount/SimpleUserAccountModelAssembler.kt index f7c10b3a566..b3dfe736780 100644 --- a/backend/api/src/main/kotlin/io/tolgee/hateoas/userAccount/SimpleUserAccountModelAssembler.kt +++ b/backend/api/src/main/kotlin/io/tolgee/hateoas/userAccount/SimpleUserAccountModelAssembler.kt @@ -1,5 +1,6 @@ package io.tolgee.hateoas.userAccount +import io.tolgee.api.SimpleUserAccount import io.tolgee.api.v2.controllers.V2UserController import io.tolgee.dtos.cacheable.UserAccountDto import io.tolgee.model.UserAccount @@ -26,6 +27,18 @@ class SimpleUserAccountModelAssembler( ) } + fun toModel(entity: SimpleUserAccount): SimpleUserAccountModel { + val avatar = avatarService.getAvatarLinks(entity.avatarHash) + + return SimpleUserAccountModel( + id = entity.id, + username = entity.username, + name = entity.name, + avatar = avatar, + deleted = entity.deleted, + ) + } + fun toModel(dto: UserAccountDto): SimpleUserAccountModel { val avatar = avatarService.getAvatarLinks(dto.avatarHash) diff --git a/backend/app/build.gradle b/backend/app/build.gradle index 27218542cf6..86539045d19 100644 --- a/backend/app/build.gradle +++ b/backend/app/build.gradle @@ -122,6 +122,7 @@ dependencies { testImplementation('io.netty:netty-codec-http:4.2.5.Final') testImplementation('io.netty:netty-codec-http2:4.2.5.Final') testImplementation('io.netty:netty-handler:4.2.5.Final') + testImplementation libs.springJooq ktlint(project(":ktlint")) @@ -129,6 +130,7 @@ dependencies { * MISC */ implementation libs.commonsCodec + implementation libs.commonsText implementation libs.commonsLang implementation libs.amazonS3 implementation libs.amazonSTS diff --git a/backend/app/src/main/kotlin/io/tolgee/configuration/openApi/OpenApiGroupBuilder.kt b/backend/app/src/main/kotlin/io/tolgee/configuration/openApi/OpenApiGroupBuilder.kt index 3bce4263755..ed38e7137ad 100644 --- a/backend/app/src/main/kotlin/io/tolgee/configuration/openApi/OpenApiGroupBuilder.kt +++ b/backend/app/src/main/kotlin/io/tolgee/configuration/openApi/OpenApiGroupBuilder.kt @@ -3,6 +3,8 @@ package io.tolgee.configuration.openApi import io.swagger.v3.oas.models.Operation import io.swagger.v3.oas.models.PathItem import io.swagger.v3.oas.models.Paths +import io.tolgee.configuration.openApi.activity.ActivityGroupModelEnhancer +import io.tolgee.configuration.openApi.activity.ProjectActivityModelEnhancer import io.tolgee.openApiDocs.OpenApiCloudExtension import io.tolgee.openApiDocs.OpenApiEeExtension import io.tolgee.openApiDocs.OpenApiOrderExtension @@ -39,6 +41,8 @@ class OpenApiGroupBuilder( addExtensions() + updateActivitySchema() + cleanUnusedModels() sortOutput() @@ -46,6 +50,13 @@ class OpenApiGroupBuilder( return@lazy builder.build() } + private fun updateActivitySchema() { + builder.addOpenApiCustomizer { + ProjectActivityModelEnhancer(it).enhance() + ActivityGroupModelEnhancer(it).enhance() + } + } + private fun sortOutput() { builder.addOpenApiCustomizer { openAPI -> openAPI.paths = diff --git a/backend/app/src/main/kotlin/io/tolgee/configuration/openApi/activity/ActivityGroupModelEnhancer.kt b/backend/app/src/main/kotlin/io/tolgee/configuration/openApi/activity/ActivityGroupModelEnhancer.kt new file mode 100644 index 00000000000..76e4bdd669c --- /dev/null +++ b/backend/app/src/main/kotlin/io/tolgee/configuration/openApi/activity/ActivityGroupModelEnhancer.kt @@ -0,0 +1,119 @@ +package io.tolgee.configuration.openApi.activity + +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import io.swagger.v3.oas.models.OpenAPI +import io.swagger.v3.oas.models.media.Schema +import io.tolgee.activity.groups.ActivityGroupType +import org.apache.commons.text.CaseUtils + +class ActivityGroupModelEnhancer( + private val openApi: OpenAPI, +) { + private val baseSchema = + openApi.components.schemas["ActivityGroupModel"] + ?: throw IllegalStateException("ProjectActivityModel schema not found") + + private val baseProperties = baseSchema.properties + + private val baseType = baseSchema.type + + private val newRequired = baseSchema.required.toMutableList() + + fun enhance() { + baseSchema.required = null + baseSchema.properties = null + baseSchema.type = null + baseSchema.oneOf = generateSchemas() + } + + private fun generateSchemas(): MutableList> { + return ActivityGroupType.entries + .map { + val schemaName = it.getSchemaName() + Schema().apply { + name = schemaName + properties = getPropertiesForActivitySchema(it) + type = baseType + required = newRequired + } + }.toMutableList() + .also { schemas -> + openApi.components.schemas.putAll(schemas.associateBy { it.name }) + } + } + + private fun getPropertiesForActivitySchema(type: ActivityGroupType): MutableMap> { + val newProperties = baseProperties.toMutableMap() + newProperties["type"] = getNewTypeProperty(newProperties, type) +// adjustCountsSchema(newProperties, type) + adjustDataSchema(type, newProperties) + return newProperties + } + +// private fun adjustCountsSchema( +// newProperties: MutableMap>, +// type: ActivityGroupType +// ) { +// val countPropertyType = +// newProperties["counts"]?.additionalProperties as? Schema<*> +// ?: throw IllegalStateException("Counts property not found") +// newProperties["counts"] = Schema().also { schema -> +// schema.type = "object" +// schema.properties = +// type.modifications.filter { it.countInView }.also { +// if (it.isNotEmpty()) { +// newRequired.add("counts") +// } +// }.associate { +// val className = it.entityClass.simpleName!! +// schema.addToRequired(className) +// className to countPropertyType +// } +// } +// } + + private fun Schema.addToRequired(className: String) { + if (required == null) { + required = mutableListOf(className) + return + } + required.add(className) + } + + private fun adjustDataSchema( + type: ActivityGroupType, + newProperties: MutableMap>, + ) { + val dataModel = getDataSchema(type) + if (dataModel != null) { + newProperties["data"] = dataModel + } else { + newProperties.remove("data") + } + } + + private fun getDataSchema(type: ActivityGroupType): Schema<*>? { + val modelType = type.getProvidingModelTypes()?.first + return modelType?.let { getEntitySchema(openApi, it) } + } + + private fun getNewTypeProperty( + properties: Map?>, + activityType: ActivityGroupType, + ): Schema<*> { + val oldTypeProperty = properties["type"] ?: throw IllegalStateException("Type property not found") + + @Suppress("UNCHECKED_CAST") + val newType = oldTypeProperty.clone() as Schema + newType.enum = newType.enum.filter { it == activityType.name } + return newType + } + + fun Schema<*>.clone(): Schema<*> { + val objectMapper = jacksonObjectMapper() + return objectMapper.readValue(objectMapper.writeValueAsString(this), Schema::class.java) + } + + private fun ActivityGroupType.getSchemaName() = + "ActivityGroup" + CaseUtils.toCamelCase(this.name, true, '_') + "Model" +} diff --git a/backend/app/src/main/kotlin/io/tolgee/configuration/openApi/activity/ModificationsSchemaGenerator.kt b/backend/app/src/main/kotlin/io/tolgee/configuration/openApi/activity/ModificationsSchemaGenerator.kt new file mode 100644 index 00000000000..d623368e0e0 --- /dev/null +++ b/backend/app/src/main/kotlin/io/tolgee/configuration/openApi/activity/ModificationsSchemaGenerator.kt @@ -0,0 +1,143 @@ +package io.tolgee.configuration.openApi.activity + +import io.swagger.v3.oas.models.OpenAPI +import io.swagger.v3.oas.models.media.Schema +import io.tolgee.activity.annotation.ActivityDescribingProp +import io.tolgee.activity.annotation.ActivityLoggedProp +import io.tolgee.activity.data.EntityDescription +import io.tolgee.activity.data.EntityModificationTypeDefinition +import kotlin.reflect.KClass +import kotlin.reflect.KClassifier +import kotlin.reflect.KProperty1 +import kotlin.reflect.full.findAnnotation +import kotlin.reflect.full.isSubclassOf +import kotlin.reflect.full.memberProperties + +class ModificationsSchemaGenerator( + private val openAPI: OpenAPI, +) { + fun getModificationSchema( + entityClass: KClass<*>, + definition: EntityModificationTypeDefinition<*>, + ): Schema<*> { + val schema = getEntitySchema(openAPI, entityClass) + schema.required = emptyList() + val properties = getProperties(entityClass, schema) + + if (definition.isOnlyCreation()) { + properties.forEach { (_, prop) -> + prop.properties["old"] = createNullSchema() + } + } + + schema.properties = properties + + return schema + } + + private fun createNullSchema(): Schema { + val schema = Schema() + schema.type = "null" + return schema + } + + private fun EntityModificationTypeDefinition<*>.isOnlyCreation(): Boolean { + return creation && !deletion && modificationProps.isNullOrEmpty() + } + + private fun getProperties( + entityClass: KClass<*>, + schema: Schema<*>, + ): Map> { + val loggedProps = getAllLoggedProps(entityClass) + val simplePropNames = loggedProps.getSimpleProps().map { it.name } + val schemaSimpleProps = schema.properties?.filterKeys { it in simplePropNames } ?: emptyMap() + + val singlePropChangeMap = + schemaSimpleProps + .map { (name, prop) -> + name to prop.toChangeSchema() + }.toMap() + + val complexProps = loggedProps.getComplexProps() + val complexPropChangeMap = + complexProps + .map { + it.name to getModificationSchemaForComplexProp(it.returnType.classifier as KClass<*>) + }.toMap() + + return singlePropChangeMap + complexPropChangeMap + } + + private fun getModificationSchemaForComplexProp(it: KClass<*>): Schema<*> { + val describingProps = it.getDescriptionProps().map { it.name } + val entitySchema = getEntitySchema(openAPI, it) + val schemaDescribingProps = + entitySchema.properties?.filterKeys { propertyName -> propertyName in describingProps } + descriptionSchema.properties?.get("data")?.let { dataProp -> + dataProp.properties = schemaDescribingProps + dataProp.additionalProperties = null + } + descriptionSchema.additionalProperties = null + return descriptionSchema.toChangeSchema() + } + + private fun Schema<*>.toChangeSchema(): Schema<*> { + val changeSchema = Schema() + changeSchema.addProperty("old", this) + changeSchema.addProperty("new", this) + return changeSchema + } + + private fun getAllLoggedProps(entityClass: KClass<*>): List> { + return entityClass.memberProperties + .filter { it.findAnnotation() != null } + .map { it } + } + + private fun KClass<*>.getDescriptionProps(): List> { + return memberProperties + .filter { it.findAnnotation() != null } + .map { it } + .filter { it.returnType.classifier.isSimpleType() } + } + + private fun List>.getSimpleProps(): List> { + return this + .filter { prop -> + prop.returnType.classifier.isSimpleType() + } + } + + private fun List>.getComplexProps(): List> { + return this + .filter { prop -> + !prop.returnType.classifier.isSimpleType() + } + } + + private val descriptionSchema by lazy { + getEntitySchema(openAPI, EntityDescription::class) + } + + private fun KClassifier?.isSimpleType(): Boolean { + return simpleTypes.any { (this as? KClass<*>)?.isSubclassOf(it) == true } + } + + companion object { + val simpleTypes = + setOf( + Int::class, + Long::class, + Double::class, + Float::class, + Boolean::class, + Char::class, + Byte::class, + Short::class, + String::class, + Enum::class, + Map::class, + ) + } +} diff --git a/backend/app/src/main/kotlin/io/tolgee/configuration/openApi/activity/ProjectActivityModelEnhancer.kt b/backend/app/src/main/kotlin/io/tolgee/configuration/openApi/activity/ProjectActivityModelEnhancer.kt new file mode 100644 index 00000000000..3a3f0e4e1fa --- /dev/null +++ b/backend/app/src/main/kotlin/io/tolgee/configuration/openApi/activity/ProjectActivityModelEnhancer.kt @@ -0,0 +1,116 @@ +package io.tolgee.configuration.openApi.activity + +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import io.swagger.v3.oas.models.OpenAPI +import io.swagger.v3.oas.models.media.Schema +import io.tolgee.activity.data.ActivityType +import org.apache.commons.text.CaseUtils +import kotlin.reflect.KClass + +class ProjectActivityModelEnhancer( + private val openApi: OpenAPI, +) { + private val baseSchema = + openApi.components.schemas["ProjectActivityModel"] + ?: throw IllegalStateException("ProjectActivityModel schema not found") + + private val modifiedEntityModel = + openApi.components.schemas["ModifiedEntityModel"] + ?: throw IllegalStateException("ModifiedEntityModel schema not found") + + private val baseRequired = baseSchema.required + + private val baseProperties = baseSchema.properties + + private val baseType = baseSchema.type + + fun enhance() { + // Registers per-activity-type schemas (ProjectActivityModel) as standalone + // named schemas. The base ProjectActivityModel stays generic — replacing it with a + // oneOf union breaks every consumer typing modifiedEntities as a plain map. + generateSchemas() + } + + private fun generateSchemas(): MutableList> { + return ActivityType.entries + .map { + val schemaName = it.getSchemaName() + Schema().apply { + name = schemaName + properties = getPropertiesForActivitySchema(it) + type = baseType + required = baseRequired + } + }.toMutableList() + .also { schemas -> + openApi.components.schemas.putAll(schemas.associateBy { it.name }) + } + } + + private fun getPropertiesForActivitySchema(activityType: ActivityType): MutableMap> { + val newProperties = baseProperties.toMutableMap() + newProperties["type"] = getNewTypeProperty(newProperties, activityType) + newProperties["modifiedEntities"] = getNewModifiedEntitiesProperty(activityType) + return newProperties + } + + @Suppress("UNCHECKED_CAST") + private fun getNewModifiedEntitiesProperty(activityType: ActivityType): Schema { + val typeDefinitions = + activityType.typeDefinitions + ?: return baseProperties["modifiedEntities"] as Schema + + val properties = + typeDefinitions + .map { (entityClass, definition) -> + val schema = activityType.createModifiedEntityModel(entityClass) + schema.properties["modifications"] = + ModificationsSchemaGenerator(openApi).getModificationSchema(entityClass, definition) + // one activity can modify many entities of the same class + val arraySchema = + Schema().apply { + type = "array" + items = schema + } + entityClass.simpleName to arraySchema + }.toMap() + + return Schema().apply { + name = activityType.getModifiedEntitiesSchemaName() + this.properties = properties + } + } + + private fun getNewTypeProperty( + properties: Map?>, + activityType: ActivityType, + ): Schema<*> { + val oldTypeProperty = properties["type"] ?: throw IllegalStateException("Type property not found") + + @Suppress("UNCHECKED_CAST") + val newType = oldTypeProperty.clone() as Schema + newType.enum = newType.enum.filter { it == activityType.name } + return newType + } + + fun Schema<*>.clone(): Schema<*> { + val objectMapper = jacksonObjectMapper() + return objectMapper.readValue(objectMapper.writeValueAsString(this), Schema::class.java) + } + + private fun ActivityType.createModifiedEntityModel(entityClass: KClass<*>): Schema<*> { + return Schema().apply { + name = this@createModifiedEntityModel.getModifiedEntitySchemaName(entityClass) + properties = modifiedEntityModel.properties.toMutableMap() + } + } + + private fun ActivityType.getModifiedEntitySchemaName(entityClass: KClass<*>): String { + return "ModifiedEntity" + CaseUtils.toCamelCase(this.name, true, '_') + entityClass.simpleName + "Model" + } + + private fun ActivityType.getSchemaName() = "ProjectActivity" + CaseUtils.toCamelCase(this.name, true, '_') + "Model" + + private fun ActivityType.getModifiedEntitiesSchemaName() = + "ModifiedEntities" + CaseUtils.toCamelCase(this.name, true, '_') + "Model" +} diff --git a/backend/app/src/main/kotlin/io/tolgee/configuration/openApi/activity/tools.kt b/backend/app/src/main/kotlin/io/tolgee/configuration/openApi/activity/tools.kt new file mode 100644 index 00000000000..4e4113255ac --- /dev/null +++ b/backend/app/src/main/kotlin/io/tolgee/configuration/openApi/activity/tools.kt @@ -0,0 +1,21 @@ +package io.tolgee.configuration.openApi.activity + +import io.swagger.v3.core.converter.AnnotatedType +import io.swagger.v3.core.converter.ModelConverters +import io.swagger.v3.oas.models.OpenAPI +import io.swagger.v3.oas.models.media.Schema +import kotlin.reflect.KClass + +fun getEntitySchema( + openApi: OpenAPI, + entityClass: KClass<*>, +): Schema<*> { + val resolved = + ModelConverters + .getInstance() + .readAllAsResolvedSchema(AnnotatedType(entityClass.java)) + + resolved.referencedSchemas.forEach(openApi.components.schemas::putIfAbsent) + + return resolved.schema ?: Schema() +} diff --git a/backend/app/src/main/resources/application.yaml b/backend/app/src/main/resources/application.yaml index fb6ceaf858e..42264c583ef 100644 --- a/backend/app/src/main/resources/application.yaml +++ b/backend/app/src/main/resources/application.yaml @@ -30,6 +30,10 @@ spring: enabled: false jdbc: initialize-schema: always + datasource: + auto-commit: false + jooq: + sql-dialect: postgres tolgee: authentication: enabled: false @@ -64,3 +68,6 @@ management: web: exposure: include: health,info,prometheus +logging: + level: + org.jooq.Constants: off diff --git a/backend/app/src/test/kotlin/io/tolgee/activity/RootActivityProviderTest.kt b/backend/app/src/test/kotlin/io/tolgee/activity/RootActivityProviderTest.kt new file mode 100644 index 00000000000..c67d8994ee7 --- /dev/null +++ b/backend/app/src/test/kotlin/io/tolgee/activity/RootActivityProviderTest.kt @@ -0,0 +1,49 @@ +package io.tolgee.activity + +import io.tolgee.ProjectAuthControllerTest +import io.tolgee.activity.rootActivity.KeyActivityTreeDefinitionItem +import io.tolgee.activity.rootActivity.RootActivityProvider +import io.tolgee.development.testDataBuilder.data.dataImport.ImportTestData +import io.tolgee.fixtures.andIsOk +import org.junit.jupiter.api.Test +import org.springframework.data.domain.Pageable + +class RootActivityProviderTest : ProjectAuthControllerTest("/v2/projects/") { + @Test + fun `returns rooted activity`() { + importData() + val latestRevisionId = getLatestRevisionId()!! + val items = + RootActivityProvider( + applicationContext, + listOf(latestRevisionId), + KeyActivityTreeDefinitionItem, + Pageable.ofSize(100), + ).provide() + items + } + + private fun getLatestRevisionId(): Long? { + return entityManager + .createQuery( + "select max(r.id) from ActivityRevision r", + Long::class.java, + ).singleResult + } + + private fun importData() { + val testData = ImportTestData() + testData.addFilesWithNamespaces().importFrenchInNs.existingLanguage = testData.french + testData.addKeyMetadata() + testData.setAllResolved() + testData.setAllOverride() + testDataService.saveTestData(testData.root) + val user = + testData.root.data.userAccounts[0] + .self + val projectId = testData.project.id + loginAsUser(user.username) + val path = "/v2/projects/$projectId/import/apply" + performAuthPut(path, null).andIsOk + } +} diff --git a/backend/app/src/test/kotlin/io/tolgee/activity/groups/ActivityGroupsCreationTest.kt b/backend/app/src/test/kotlin/io/tolgee/activity/groups/ActivityGroupsCreationTest.kt new file mode 100644 index 00000000000..a43a50c7906 --- /dev/null +++ b/backend/app/src/test/kotlin/io/tolgee/activity/groups/ActivityGroupsCreationTest.kt @@ -0,0 +1,232 @@ +package io.tolgee.activity.groups + +import com.posthog.server.PostHog +import io.tolgee.ProjectAuthControllerTest +import io.tolgee.batch.BatchJobService +import io.tolgee.development.testDataBuilder.data.BaseTestData +import io.tolgee.dtos.request.key.ComplexEditKeyDto +import io.tolgee.fixtures.andIsOk +import io.tolgee.model.activity.ActivityGroup +import io.tolgee.model.activity.ActivityModifiedEntity +import io.tolgee.model.activity.ActivityRevision +import io.tolgee.model.enums.AssignableTranslationState +import io.tolgee.model.key.Key +import io.tolgee.model.translation.Translation +import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod +import io.tolgee.testing.assert +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.mockito.Mockito +import org.springframework.beans.factory.annotation.Autowired +import java.time.Duration + +class ActivityGroupsCreationTest : ProjectAuthControllerTest("/v2/projects/") { + private lateinit var testData: BaseTestData + + @Autowired + lateinit var postHog: PostHog + + @Autowired + lateinit var batchJobService: BatchJobService + + @Autowired + lateinit var activityGroupService: ActivityGroupService + + @BeforeEach + fun setup() { + Mockito.reset(postHog) + } + + lateinit var key: Key + + private fun prepareTestData() { + testData = BaseTestData() + testData.user.name = "Franta" + testData.projectBuilder.apply { + addKey { + name = "key" + this@ActivityGroupsCreationTest.key = this + } + } + testDataService.saveTestData(testData.root) + projectSupplier = { testData.projectBuilder.self } + userAccount = testData.user + } + + @Test + @ProjectJWTAuthTestMethod + fun `it creates the groups in time windows`() { + prepareTestData() + assertItGroupsInTimeWindow() + assertItDoesNotGroupOutOfTimeWindow() + assertItStopsGroupingDueToAge() + } + + @Test + @ProjectJWTAuthTestMethod + fun `it creates correct groups per complex update`() { + prepareTestData() + performProjectAuthPut( + "keys/${key.id}/complex-update", + ComplexEditKeyDto( + name = "new name", + description = "Changed!", + tags = listOf("tag1", "tag2"), + translations = mapOf(testData.englishLanguage.tag to "Test"), + states = mapOf(testData.englishLanguage.tag to AssignableTranslationState.REVIEWED), + ), + ).andIsOk + + assertGroupsForActivity( + ActivityGroupType.EDIT_KEY_NAME, + ActivityGroupType.EDIT_KEY_TAGS, + ActivityGroupType.SET_BASE_TRANSLATION, + ActivityGroupType.REVIEW, + ) + } + + private fun assertItStopsGroupingDueToAge() { + currentDateProvider.move(Duration.ofHours(3)) + + (1..23).forEach { + executeTranslationUpdate("Test $it") + currentDateProvider.move(Duration.ofHours(1)) + } + + assertGroupRevisionsCount(23) + + currentDateProvider.move(Duration.ofHours(2)) + executeTranslationUpdate("Test final") + assertGroupRevisionsCount(1) + } + + private fun assertGroupsForActivity(vararg types: ActivityGroupType) { + val activityRevision = findLastActivityRevision() + val groups = getActivityGroupsForRevision(activityRevision) + groups.map { it.type }.assert.containsExactlyInAnyOrder(*types) + } + + private fun assertItDoesNotGroupOutOfTimeWindow() { + // it's not the same group anymore + currentDateProvider.move(Duration.ofMinutes(123)) + + executeTranslationUpdate("Test 4") + assertGroupRevisionsCount(1) + assertLastGroupType(ActivityGroupType.SET_BASE_TRANSLATION) + assertLastValue("Test 4") + } + + private fun assertItGroupsInTimeWindow() { + executeTranslationUpdate("Test") + executeTranslationUpdate("Test 2") + + currentDateProvider.move(Duration.ofMinutes(65)) + // still the same group + executeTranslationUpdate("Test 3") + + asserGroupCount(1) + assertGroupRevisionsCount(3) + assertLastGroupType(ActivityGroupType.SET_BASE_TRANSLATION) + assertLastValue("Test 3") + } + + private fun assertGroupRevisionsCount(count: Int) { + executeInNewTransaction { + val activityRevision = findLastActivityRevision() + val groups = getActivityGroupsForRevision(activityRevision) + val group = groups.single() + entityManager + .createQuery( + """ + select count(ar) from ActivityRevision ar + join ar.activityGroups ag + where ag.id = :groupId + """, + ).setParameter("groupId", group.id) + .singleResult + .assert + .isEqualTo(count.toLong()) + } + } + + private fun asserGroupCount(count: Int) { + executeInNewTransaction { + val activityRevision = findLastActivityRevision() + val groups = getActivityGroupsForRevision(activityRevision) + groups.size.assert.isEqualTo(count) + } + } + + private fun assertLastGroupType(activityGroupType: ActivityGroupType) { + executeInNewTransaction { + val activityRevision = findLastActivityRevision() + val groups = getActivityGroupsForRevision(activityRevision) + groups + .single() + .type.assert + .isEqualTo(activityGroupType) + } + } + + private fun assertLastValue(value: String) { + executeInNewTransaction { + val activityRevision = findLastActivityRevision() + val groups = getActivityGroupsForRevision(activityRevision) + val group = groups.single() + val modifiedEntities = getModifiedEntitiesForGroup(group) + modifiedEntities + .filter { it.entityClass == Translation::class.simpleName } + .last() + .modifications["text"]!! + .new.assert + .isEqualTo(value) + } + } + + private fun executeTranslationUpdate(value: String) { + performProjectAuthPut( + "translations", + mapOf("key" to "key", "translations" to mapOf(testData.englishLanguage.tag to value)), + ).andIsOk + } + + private fun findLastActivityRevision(): ActivityRevision { + return entityManager + .createQuery( + """ + select ar from ActivityRevision ar + order by ar.timestamp desc + limit 1 + """, + ActivityRevision::class.java, + ).singleResult + } + + private fun getActivityGroupsForRevision(activityRevision: ActivityRevision): MutableList { + return entityManager + .createQuery( + """ + select ag from ActivityGroup ag + join fetch ag.activityRevisions ar + where ar.id = :activityRevisionId + """, + ActivityGroup::class.java, + ).setParameter("activityRevisionId", activityRevision.id) + .resultList + } + + private fun getModifiedEntitiesForGroup(group: ActivityGroup): MutableList { + return entityManager + .createQuery( + """ + select ame from ActivityModifiedEntity ame + join fetch ame.activityRevision ar + join fetch ar.activityGroups ag + where ag.id = :groupId + order by ar.timestamp + """, + ActivityModifiedEntity::class.java, + ).setParameter("groupId", group.id) + .resultList + } +} diff --git a/backend/app/src/test/kotlin/io/tolgee/activity/groups/ProjectCreationGroupViewTest.kt b/backend/app/src/test/kotlin/io/tolgee/activity/groups/ProjectCreationGroupViewTest.kt new file mode 100644 index 00000000000..01f6f0097b5 --- /dev/null +++ b/backend/app/src/test/kotlin/io/tolgee/activity/groups/ProjectCreationGroupViewTest.kt @@ -0,0 +1,106 @@ +package io.tolgee.activity.groups + +import io.tolgee.batch.BatchJobService +import io.tolgee.development.testDataBuilder.data.BaseTestData +import io.tolgee.dtos.request.LanguageRequest +import io.tolgee.dtos.request.project.CreateProjectRequest +import io.tolgee.fixtures.andAssertThatJson +import io.tolgee.fixtures.andGetContentAsJsonMap +import io.tolgee.fixtures.andIsOk +import io.tolgee.fixtures.isValidId +import io.tolgee.fixtures.node +import io.tolgee.model.key.Key +import io.tolgee.testing.AuthorizedControllerTest +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import java.math.BigDecimal + +class ProjectCreationGroupViewTest : AuthorizedControllerTest() { + private lateinit var testData: BaseTestData + + @Autowired + lateinit var batchJobService: BatchJobService + + lateinit var key: Key + + private fun prepareTestData() { + testData = BaseTestData() + testDataService.saveTestData(testData.root) + } + + @Test + fun `shows correct project creation group`() { + prepareTestData() + userAccount = testData.user + val projectId = performProjectCreation() + performAuthGet("/v2/projects/$projectId/activity/groups") + .andIsOk + .andAssertThatJson { + node("_embedded.groups") { + isArray.hasSizeGreaterThan(0) + node("[0]") { + node("id").isNumber + node("timestamp").isNumber.isGreaterThan(BigDecimal("1722441564241")) + node("type").isEqualTo("CREATE_PROJECT") + + node("author") { + node("id").isNumber + node("username").isEqualTo("test_username") + node("name").isEqualTo("") + node("avatar").isNull() + node("deleted").isEqualTo(false) + } + + node("data") { + node("id").isNumber + node("name").isEqualTo("What a project") + node("languages") { + isArray.hasSize(2) + node("[0]") { + node("id").isValidId + node("name").isEqualTo("English") + node("originalName").isEqualTo("English") + node("tag").isEqualTo("en") + node("flagEmoji").isEqualTo("a") + } + node("[1]") { + node("id").isValidId + node("name").isEqualTo("Czech") + node("originalName").isEqualTo("česky") + node("tag").isEqualTo("cs") + node("flagEmoji").isEqualTo("b") + } + } + node("description").isNull() + } + } + } + } + } + + private fun performProjectCreation(): Int { + return performAuthPost( + "/v2/projects", + CreateProjectRequest( + name = "What a project", + organizationId = testData.project.organizationOwner.id, + languages = + listOf( + LanguageRequest( + name = "English", + originalName = "English", + tag = "en", + flagEmoji = "a", + ), + LanguageRequest( + name = "Czech", + originalName = "česky", + tag = "cs", + flagEmoji = "b", + ), + ), + baseLanguageTag = "cs", + ), + ).andIsOk.andGetContentAsJsonMap["id"] as Int + } +} diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/V2UserControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/V2UserControllerTest.kt index a3653fc7d8e..3a7f3b3ee06 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/V2UserControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/V2UserControllerTest.kt @@ -21,6 +21,7 @@ import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.NotificationTestUtil import io.tolgee.testing.assert import io.tolgee.testing.assertions.Assertions.assertThat +import io.tolgee.testing.satisfies import org.assertj.core.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/contentDelivery/ContentDeliveryConfigControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/contentDelivery/ContentDeliveryConfigControllerTest.kt index 6a1a52752d2..3afe24aa01e 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/contentDelivery/ContentDeliveryConfigControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/contentDelivery/ContentDeliveryConfigControllerTest.kt @@ -14,6 +14,7 @@ import io.tolgee.service.contentDelivery.ContentDeliveryConfigService import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod import io.tolgee.testing.assert +import io.tolgee.testing.satisfies import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerInvitingTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerInvitingTest.kt index 7283f2af212..c9d91441cd7 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerInvitingTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerInvitingTest.kt @@ -19,6 +19,7 @@ import io.tolgee.model.enums.OrganizationRoleType import io.tolgee.testing.AuthorizedControllerTest import io.tolgee.testing.assertions.Assertions.assertThat import io.tolgee.testing.assertions.Assertions.assertThatThrownBy +import io.tolgee.testing.satisfies import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerTest.kt index e105f852e42..644bb4286f7 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerTest.kt @@ -19,6 +19,7 @@ import io.tolgee.model.enums.OrganizationRoleType import io.tolgee.model.enums.ProjectPermissionType import io.tolgee.testing.assert import io.tolgee.testing.assertions.Assertions.assertThat +import io.tolgee.testing.satisfiesIf import org.junit.jupiter.api.Test import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc import org.springframework.boot.test.context.SpringBootTest @@ -189,7 +190,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { node("name").isEqualTo("Test org") node("slug").isEqualTo("test-org") node("_links.self.href").isEqualTo("http://localhost/v2/organizations/test-org") - node("id").isNumber.satisfies { + node("id").isNumber.satisfiesIf { organizationService.find(it.toLong()) is Organization } } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerCursorTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerCursorTest.kt index 7102498a576..4dedc0056f0 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerCursorTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerCursorTest.kt @@ -9,6 +9,7 @@ import io.tolgee.fixtures.andPrettyPrint import io.tolgee.fixtures.satisfies import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod import io.tolgee.testing.assertions.Assertions.assertThat +import io.tolgee.testing.satisfies import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerModificationTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerModificationTest.kt index cdb35f9dd9d..ad869c25e0e 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerModificationTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerModificationTest.kt @@ -19,6 +19,7 @@ import io.tolgee.testing.annotations.ProjectApiKeyAuthTestMethod import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod import io.tolgee.testing.assert import io.tolgee.testing.assertions.Assertions.assertThat +import io.tolgee.testing.satisfies import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImageUploadController/SecuredV2ImageUploadControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImageUploadController/SecuredV2ImageUploadControllerTest.kt index b277a5aaad9..da1c147da70 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImageUploadController/SecuredV2ImageUploadControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImageUploadController/SecuredV2ImageUploadControllerTest.kt @@ -15,6 +15,7 @@ import io.tolgee.security.authentication.JwtService import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod import io.tolgee.testing.assertions.Assertions.assertThat +import io.tolgee.testing.satisfies import org.assertj.core.data.Offset import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Test diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImageUploadController/V2ImageUploadControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImageUploadController/V2ImageUploadControllerTest.kt index 8199c9ce333..f2945701c00 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImageUploadController/V2ImageUploadControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImageUploadController/V2ImageUploadControllerTest.kt @@ -14,6 +14,7 @@ import io.tolgee.fixtures.andPrettyPrint import io.tolgee.fixtures.satisfies import io.tolgee.testing.assert import io.tolgee.testing.assertions.Assertions.assertThat +import io.tolgee.testing.satisfies import org.assertj.core.data.Offset import org.junit.jupiter.api.AfterAll import org.junit.jupiter.api.BeforeAll diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerCreationTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerCreationTest.kt index 307cfec0a6f..c959f7edac1 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerCreationTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerCreationTest.kt @@ -26,6 +26,7 @@ import io.tolgee.testing.annotations.ProjectApiKeyAuthTestMethod import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod import io.tolgee.testing.assert import io.tolgee.testing.assertions.Assertions.assertThat +import io.tolgee.testing.satisfies import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerCreateTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerCreateTest.kt index 7c9891c3b40..14c0b3f4b9e 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerCreateTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerCreateTest.kt @@ -20,6 +20,7 @@ import io.tolgee.model.enums.ProjectPermissionType import io.tolgee.testing.AuthorizedControllerTest import io.tolgee.testing.assert import io.tolgee.testing.assertions.Assertions.assertThat +import io.tolgee.testing.satisfies import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerTest.kt index 1e7a41db2cc..49262f0df71 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerTest.kt @@ -86,24 +86,26 @@ class ProjectsControllerTest : ProjectAuthControllerTest("/v2/projects/") { node("[0].organizationOwner.name").isEqualTo("test_username") node("[0].directPermission.scopes").isPermissionScopes(ProjectPermissionType.MANAGE) node("[0].computedPermission.scopes").isPermissionScopes(ProjectPermissionType.MANAGE) - node("[0].stats.translationStatePercentages").isEqualTo( - """ - { - "UNTRANSLATED": 100.0, - "TRANSLATED": 0, - "REVIEWED": 0 - } - """, - ) - node("[1].stats.translationStatePercentages").isEqualTo( - """ - { - "UNTRANSLATED": 25.0, - "TRANSLATED": 75.0, - "REVIEWED": 0.0 - } - """, - ) + node("[0].stats.translationStatePercentages") + .isEqualTo( + """ + { + "UNTRANSLATED": 100.0, + "TRANSLATED": 0, + "REVIEWED": 0 + } + """, + ) + node("[1].stats.translationStatePercentages") + .isEqualTo( + """ + { + "UNTRANSLATED": 25.0, + "TRANSLATED": 75.0, + "REVIEWED": 0.0 + } + """, + ) } } } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ScreenshotController/KeyScreenshotControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ScreenshotController/KeyScreenshotControllerTest.kt index f01ad41a7f9..3b1aead2113 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ScreenshotController/KeyScreenshotControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ScreenshotController/KeyScreenshotControllerTest.kt @@ -14,6 +14,7 @@ import io.tolgee.fixtures.satisfies import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod import io.tolgee.testing.assert import io.tolgee.testing.assertions.Assertions.assertThat +import io.tolgee.testing.satisfies import io.tolgee.util.InMemoryFileStorage import org.junit.jupiter.api.AfterAll import org.junit.jupiter.api.BeforeAll diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ScreenshotController/SecuredKeyScreenshotControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ScreenshotController/SecuredKeyScreenshotControllerTest.kt index 369ba8b39c0..1a4b66d2e1d 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ScreenshotController/SecuredKeyScreenshotControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ScreenshotController/SecuredKeyScreenshotControllerTest.kt @@ -10,6 +10,7 @@ import io.tolgee.fixtures.andIsCreated import io.tolgee.fixtures.andIsNotFound import io.tolgee.fixtures.andIsOk import io.tolgee.fixtures.andIsUnauthorized +import io.tolgee.fixtures.generateUniqueString import io.tolgee.fixtures.satisfies import io.tolgee.model.Permission import io.tolgee.model.enums.Scope @@ -17,6 +18,7 @@ import io.tolgee.security.authentication.JwtService import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod import io.tolgee.testing.assertions.Assertions.assertThat +import io.tolgee.testing.satisfies import org.assertj.core.data.Offset import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Test diff --git a/backend/app/src/test/kotlin/io/tolgee/initialUserCreation/LegacyMigrationTest.kt b/backend/app/src/test/kotlin/io/tolgee/initialUserCreation/LegacyMigrationTest.kt index a76809e48cd..df304ac7424 100644 --- a/backend/app/src/test/kotlin/io/tolgee/initialUserCreation/LegacyMigrationTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/initialUserCreation/LegacyMigrationTest.kt @@ -17,6 +17,7 @@ import io.tolgee.repository.UserAccountRepository import io.tolgee.service.security.SecurityService import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.assertions.Assertions.assertThat +import io.tolgee.testing.satisfies import org.junit.jupiter.api.Test import org.junit.jupiter.api.TestInstance import org.junit.jupiter.api.assertDoesNotThrow diff --git a/backend/app/src/test/resources/application.yaml b/backend/app/src/test/resources/application.yaml index 58555a474c6..a3b829384e8 100644 --- a/backend/app/src/test/resources/application.yaml +++ b/backend/app/src/test/resources/application.yaml @@ -39,6 +39,8 @@ spring: enabled: false datasource: maximum-pool-size: 100 + jooq: + sql-dialect: postgres tolgee: slack: token: fakeToken @@ -105,6 +107,7 @@ tolgee: scheduled-reporting-enabled: false logging: level: + org.jooq.Constants: off io.tolgee.websocket: DEBUG org.springframework.messaging.simp.stomp: DEBUG org.springframework.web.socket.messaging: DEBUG diff --git a/backend/data/build.gradle b/backend/data/build.gradle index 5e6de710a3a..7cd7a4a5576 100644 --- a/backend/data/build.gradle +++ b/backend/data/build.gradle @@ -93,6 +93,7 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation "org.springframework.boot:spring-boot-starter-validation" + implementation "org.springframework.boot:spring-boot-starter-hateoas" implementation("org.springframework.data:spring-data-envers") implementation("org.springframework.boot:spring-boot-starter-security") implementation('org.springframework.boot:spring-boot-starter-mail') { @@ -102,6 +103,7 @@ dependencies { testImplementation('org.springframework.boot:spring-boot-starter-test') implementation "org.springframework.boot:spring-boot-starter-batch" implementation "org.springframework.boot:spring-boot-starter-websocket" + implementation libs.springJooq implementation "org.springframework.boot:spring-boot-starter-thymeleaf" annotationProcessor("org.springframework.boot:spring-boot-configuration-processor") @@ -136,6 +138,7 @@ dependencies { liquibaseRuntime libs.kotlinReflect liquibaseRuntime sourceSets.main.output liquibaseRuntime 'org.springframework.boot:spring-boot-starter-data-jpa' + liquibaseRuntime libs.springJooq /** * Testing @@ -170,7 +173,7 @@ dependencies { * MISC */ implementation libs.commonsCodec - implementation group: 'org.apache.commons', name: 'commons-text', version: '1.10.0' + implementation libs.commonsText implementation libs.icu4j implementation libs.jjwtApi implementation libs.jjwtImpl diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/ActivityAdditionalDescriber.kt b/backend/data/src/main/kotlin/io/tolgee/activity/ActivityAdditionalDescriber.kt new file mode 100644 index 00000000000..6a128061bb1 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/ActivityAdditionalDescriber.kt @@ -0,0 +1,10 @@ +package io.tolgee.activity + +import io.tolgee.model.activity.ActivityRevision + +interface ActivityAdditionalDescriber { + fun describe( + activityRevision: ActivityRevision, + modifiedEntities: ModifiedEntitiesType, + ) +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/ActivityHolder.kt b/backend/data/src/main/kotlin/io/tolgee/activity/ActivityHolder.kt index 30c962fd019..4bc69231617 100644 --- a/backend/data/src/main/kotlin/io/tolgee/activity/ActivityHolder.kt +++ b/backend/data/src/main/kotlin/io/tolgee/activity/ActivityHolder.kt @@ -97,4 +97,35 @@ open class ActivityHolder( } } -typealias ModifiedEntitiesType = MutableMap, MutableMap> +/** + * Inner map key is the entity id when it's already allocated, otherwise an + * [EntityIdentity] of the instance (some ids are only assigned later in the + * transaction). Keying purely by instance would record the same row twice when + * Hibernate yields multiple instances of it in one transaction (e.g. after an + * entityManager.clear()). + */ +typealias ModifiedEntitiesType = + MutableMap, MutableMap> + +/** + * Identity-based key for entities whose id is not allocated yet. Entity hashCode + * is id-based and mutates when the id gets assigned, which would strand the map + * entry in a stale hash bucket. + */ +class EntityIdentity( + val entity: EntityWithId, +) { + override fun hashCode() = System.identityHashCode(entity) + + override fun equals(other: Any?) = other is EntityIdentity && other.entity === entity +} + +val Map.Entry.resolvedEntityId: Long + get() { + val key = key + return when { + key is Long -> key + key is EntityIdentity && key.entity.id != 0L -> key.entity.id + else -> value.entityId + } + } diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/ActivityService.kt b/backend/data/src/main/kotlin/io/tolgee/activity/ActivityService.kt index c6160706253..ca0432a123b 100644 --- a/backend/data/src/main/kotlin/io/tolgee/activity/ActivityService.kt +++ b/backend/data/src/main/kotlin/io/tolgee/activity/ActivityService.kt @@ -3,6 +3,7 @@ package io.tolgee.activity import com.fasterxml.jackson.databind.ObjectMapper import io.tolgee.activity.data.ActivityType import io.tolgee.activity.data.RevisionType +import io.tolgee.activity.groups.ActivityGroupService import io.tolgee.activity.projectActivity.ModificationsByRevisionsProvider import io.tolgee.activity.projectActivity.ProjectActivityViewByPageableProvider import io.tolgee.activity.projectActivity.ProjectActivityViewByRevisionProvider @@ -34,6 +35,8 @@ class ActivityService( private val activityModifiedEntityRepository: ActivityModifiedEntityRepository, private val objectMapper: ObjectMapper, private val jdbcTemplate: JdbcTemplate, + private val activityGroupService: ActivityGroupService, + private val describers: List, private val activityRevisionRepository: ActivityRevisionRepository, private val branchService: BranchService, ) : Logging { @@ -49,41 +52,58 @@ class ActivityService( // let's keep the persistent context small entityManager.flushAndClear() - val mergedActivityRevision = persistActivityRevision(activityRevision) + runAdditionalDescribers(activityRevision, modifiedEntities) + val mergedActivityRevision = persistActivityRevision(activityRevision) persistDescribingRelations(mergedActivityRevision) mergedActivityRevision.modifiedEntities = persistModifiedEntities(modifiedEntities) + + activityGroupService.addToGroup(activityRevision, modifiedEntities) + applicationContext.publishEvent(OnProjectActivityStoredEvent(this, mergedActivityRevision)) } + private fun runAdditionalDescribers( + activityRevision: ActivityRevision, + modifiedEntities: ModifiedEntitiesType, + ) { + describers.forEach { + it.describe(activityRevision, modifiedEntities) + } + } + private fun persistModifiedEntities(modifiedEntities: ModifiedEntitiesType): MutableList { - val list = modifiedEntities.values.flatMap { it.values }.toMutableList() + val list = modifiedEntities.values.flatMap { it.entries }.toMutableList() jdbcTemplate.batchUpdate( "INSERT INTO activity_modified_entity " + "(entity_class, entity_id, describing_data, " + - "describing_relations, modifications, revision_type, activity_revision_id, branch_id) " + - "VALUES (?, ?, ?, ?, ?, ?, ?, ?)", + "describing_relations, modifications, revision_type, activity_revision_id, branch_id, " + + "additional_description) " + + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", list, 1000, - ) { ps, entity -> - ps.setString(1, entity.entityClass) - ps.setLong(2, entity.entityId) - ps.setObject(3, getJsonbObject(entity.describingData)) - ps.setObject(4, getJsonbObject(entity.describingRelations)) - ps.setObject(5, getJsonbObject(entity.modifications)) - ps.setInt(6, RevisionType.entries.indexOf(entity.revisionType)) - ps.setLong(7, entity.activityRevision.id) - ps.setObject(8, entity.branchId) + ) { ps, entry -> + val modifiedEntity = entry.value + val entityId = entry.resolvedEntityId + ps.setString(1, modifiedEntity.entityClass) + ps.setLong(2, entityId) + ps.setObject(3, getJsonbObject(modifiedEntity.describingData)) + ps.setObject(4, getJsonbObject(modifiedEntity.describingRelations)) + ps.setObject(5, getJsonbObject(modifiedEntity.modifications)) + ps.setInt(6, RevisionType.entries.indexOf(modifiedEntity.revisionType)) + ps.setLong(7, modifiedEntity.activityRevision.id) + ps.setObject(8, modifiedEntity.branchId) + ps.setObject(9, getJsonbObject(modifiedEntity.additionalDescription)) } - return list + return list.map { it.value }.toMutableList() } private fun persistDescribingRelations(activityRevision: ActivityRevision) { jdbcTemplate.batchUpdate( "INSERT INTO activity_describing_entity " + - "(entity_class, entity_id, data, describing_relations, activity_revision_id) " + - "VALUES (?, ?, ?, ?, ?)", + "(entity_class, entity_id, data, describing_relations, activity_revision_id, additional_description) " + + "VALUES (?, ?, ?, ?, ?, ?)", activityRevision.describingRelations, 1000, ) { ps, entity -> @@ -92,6 +112,7 @@ class ActivityService( ps.setObject(3, getJsonbObject(entity.data)) ps.setObject(4, getJsonbObject(entity.describingRelations)) ps.setLong(5, activityRevision.id) + ps.setObject(6, getJsonbObject(entity.additionalDescription)) } } diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/additionalDescribers/KeyBaseTranslationDescriber.kt b/backend/data/src/main/kotlin/io/tolgee/activity/additionalDescribers/KeyBaseTranslationDescriber.kt new file mode 100644 index 00000000000..93ed5ef68e3 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/additionalDescribers/KeyBaseTranslationDescriber.kt @@ -0,0 +1,163 @@ +package io.tolgee.activity.additionalDescribers + +import io.tolgee.activity.ActivityAdditionalDescriber +import io.tolgee.activity.ModifiedEntitiesType +import io.tolgee.activity.data.RevisionType +import io.tolgee.activity.resolvedEntityId +import io.tolgee.model.activity.ActivityDescribingEntity +import io.tolgee.model.activity.ActivityEntityWithDescription +import io.tolgee.model.activity.ActivityModifiedEntity +import io.tolgee.model.activity.ActivityRevision +import io.tolgee.model.key.Key +import io.tolgee.model.translation.Translation +import jakarta.persistence.EntityManager +import org.springframework.stereotype.Component + +@Component +class KeyBaseTranslationDescriber( + private val entityManager: EntityManager, +) : ActivityAdditionalDescriber { + companion object { + const val FIELD_NAME: String = "baseTranslation" + } + + override fun describe( + activityRevision: ActivityRevision, + modifiedEntities: ModifiedEntitiesType, + ) { + val relevantTranslationModifiedEntities = getRelevantModifiedEntities(activityRevision, modifiedEntities) + val relevantTranslationDescribingEntities = getRelevantDescribingEntities(activityRevision) + val toDescribe = getToDescribe(activityRevision, modifiedEntities) + val newKeyIds = + modifiedEntities[Key::class] + ?.entries + ?.mapNotNull { + if (it.value.revisionType == RevisionType.ADD) it.resolvedEntityId else null + }?.toSet() ?: emptySet() + + toDescribe.removeIf { (id, entity) -> + // if entity is modified in current revision, we take it from there + relevantTranslationModifiedEntities[id]?.let { + entity.describe(getFromModifiedEntity(it)) + return@removeIf true + } + + // if entity is described in current revision, we take it from there + relevantTranslationDescribingEntities[id]?.let { + entity.describe(getFromDescribingEntity(it)) + return@removeIf true + } + + // if base value is not set for new key it doesn't make sense to search for it in the database + if (newKeyIds.contains(id)) { + entity.describe(null) + return@removeIf true + } + + false + } + + // other entities are taken from the database + describeRest(activityRevision, toDescribe) + } + + private fun ActivityEntityWithDescription.describe(baseText: String?) { + val additionalDescription = initAdditionalDescription() + additionalDescription[FIELD_NAME] = BaseTranslationDescription(baseText) + } + + private fun getToDescribe( + activityRevision: ActivityRevision, + allModifiedEntities: ModifiedEntitiesType, + ): MutableList> { + val describingRelations = + activityRevision.describingRelations.mapNotNull { + if (it.entityClass != "Key") return@mapNotNull null + it.entityId to it + } + + val modifiedEntities = + allModifiedEntities[Key::class]?.entries?.map { it.resolvedEntityId to it.value } ?: emptyList() + + return (describingRelations + modifiedEntities).toMutableList() + } + + private fun describeRest( + activityRevision: ActivityRevision, + toDescribe: MutableList>, + ) { + if (toDescribe.isEmpty()) { + return + } + + val keyIds = toDescribe.map { it.first } + val result = + entityManager + .createQuery( + "select t.key.id, t.text from Translation t where t.key.id in :keyIds and t.language.id = :languageId", + Array::class.java, + ).setParameter("keyIds", keyIds.toSet()) + .setParameter("languageId", activityRevision.baseLanguageId) + .resultList + + return result.forEach { + val keyId = it[0] as Long + val text = it[1] as? String + toDescribe + .filter { (toDescribeId) -> toDescribeId == keyId } + .forEach { (_, entity) -> + entity.describe(text) + } + } + } + + private fun getFromDescribingEntity(it: ActivityDescribingEntity): String? { + return it.data["text"] as? String + } + + private fun getFromModifiedEntity(entity: ActivityModifiedEntity): String? { + val text = entity.modifications["text"]?.new ?: entity.describingData?.get("text") + return text as? String + } + + private fun getRelevantModifiedEntities( + activityRevision: ActivityRevision, + modifiedEntities: ModifiedEntitiesType, + ): Map { + val baseLanguageId = activityRevision.baseLanguageId + + return modifiedEntities[Translation::class] + ?.values + ?.mapNotNull { + val languageId = it.languageId ?: return@mapNotNull null + if (languageId != baseLanguageId) return@mapNotNull null + val keyId = it.keyId ?: return@mapNotNull null + keyId to it + }?.toMap() ?: emptyMap() + } + + private fun getRelevantDescribingEntities(activityRevision: ActivityRevision): Map { + val baseLanguageId = activityRevision.baseLanguageId + + return activityRevision.describingRelations + .mapNotNull { + if (it.entityClass != "Translation") return@mapNotNull null + val languageId = it.languageId ?: return@mapNotNull null + if (languageId != baseLanguageId) return@mapNotNull null + val keyId = it.keyId ?: return@mapNotNull null + keyId to it + }.toMap() + } + + val ActivityEntityWithDescription.languageId: Long? + get() = + this.describingRelations?.get(Translation::language.name)?.entityId + + val ActivityEntityWithDescription.keyId: Long? + get() = + this.describingRelations?.get(Translation::key.name)?.entityId + + data class BaseTranslationDescription( + val text: String?, + ) +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/data/ActivityOrigin.kt b/backend/data/src/main/kotlin/io/tolgee/activity/data/ActivityOrigin.kt new file mode 100644 index 00000000000..6719ae818cd --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/data/ActivityOrigin.kt @@ -0,0 +1,10 @@ +package io.tolgee.activity.data + +/** + * How the request producing the activity was authenticated. + */ +enum class ActivityOrigin { + UI, + API_KEY, + PAT, +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/data/ActivityType.kt b/backend/data/src/main/kotlin/io/tolgee/activity/data/ActivityType.kt index 5720ce674a1..aff0a4fe9b7 100644 --- a/backend/data/src/main/kotlin/io/tolgee/activity/data/ActivityType.kt +++ b/backend/data/src/main/kotlin/io/tolgee/activity/data/ActivityType.kt @@ -6,6 +6,9 @@ import io.tolgee.batch.BranchMergeActivityParamsProvider import io.tolgee.model.EntityWithId import io.tolgee.model.Language import io.tolgee.model.glossary.Glossary +import io.tolgee.model.key.Key +import io.tolgee.model.key.KeyMeta +import io.tolgee.model.translation.Translation import io.tolgee.model.translationMemory.TranslationMemory import kotlin.reflect.KClass @@ -16,14 +19,45 @@ enum class ActivityType( val hideInList: Boolean = false, /** * If true, the activity will be saved even if it does - * not contain any changes in fields market for activity logging + * not contain any changes in fields marked for activity logging */ val saveWithoutModification: Boolean = false, + val typeDefinitions: Map, EntityModificationTypeDefinition<*>>? = null, ) { UNKNOWN, - SET_TRANSLATION_STATE, - SET_TRANSLATIONS, - DISMISS_AUTO_TRANSLATED_STATE, + SET_TRANSLATION_STATE( + typeDefinitions = + mapOf( + Translation::class to + EntityModificationTypeDefinition( + creation = false, + modificationProps = arrayOf(Translation::state, Translation::outdated, Translation::mtProvider), + deletion = false, + ), + ), + ), + SET_TRANSLATIONS( + typeDefinitions = + mapOf( + Translation::class to + EntityModificationTypeDefinition( + creation = true, + modificationProps = arrayOf(), + deletion = true, + ), + ), + ), + DISMISS_AUTO_TRANSLATED_STATE( + typeDefinitions = + mapOf( + Translation::class to + EntityModificationTypeDefinition( + creation = false, + modificationProps = arrayOf(Translation::outdated, Translation::mtProvider), + deletion = false, + ), + ), + ), SET_OUTDATED_FLAG, TRANSLATION_COMMENT_ADD, TRANSLATION_COMMENT_DELETE, @@ -40,7 +74,23 @@ enum class ActivityType( KEY_HARD_DELETE(true), BATCH_KEY_RESTORE(true), BATCH_KEY_HARD_DELETE(true), - CREATE_KEY, + CREATE_KEY( + typeDefinitions = + mapOf( + Key::class to + EntityModificationTypeDefinition( + creation = true, + modificationProps = null, + deletion = false, + ), + KeyMeta::class to + EntityModificationTypeDefinition( + creation = true, + modificationProps = null, + deletion = false, + ), + ), + ), COMPLEX_EDIT, IMPORT(true), CREATE_LANGUAGE, diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/data/EntityModificationTypeDefinition.kt b/backend/data/src/main/kotlin/io/tolgee/activity/data/EntityModificationTypeDefinition.kt new file mode 100644 index 00000000000..33f59356bbd --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/data/EntityModificationTypeDefinition.kt @@ -0,0 +1,13 @@ +package io.tolgee.activity.data + +import io.tolgee.model.EntityWithId +import kotlin.reflect.KProperty1 + +class EntityModificationTypeDefinition( + val creation: Boolean = false, + /** + * If null then all props can be modified + */ + val modificationProps: Array>? = emptyArray(), + val deletion: Boolean = false, +) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/ActivityGroupDto.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/ActivityGroupDto.kt new file mode 100644 index 00000000000..ec88e0d0248 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/ActivityGroupDto.kt @@ -0,0 +1,11 @@ +package io.tolgee.activity.groups + +import java.util.Date + +data class ActivityGroupDto( + val id: Long, + val activityGroupType: ActivityGroupType, + val latestTimestamp: Date, + val earliestTimestamp: Date, + val matchingString: String? = null, +) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/ActivityGroupService.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/ActivityGroupService.kt new file mode 100644 index 00000000000..fece64236a0 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/ActivityGroupService.kt @@ -0,0 +1,173 @@ +package io.tolgee.activity.groups + +import io.tolgee.activity.ModifiedEntitiesType +import io.tolgee.component.CurrentDateProvider +import io.tolgee.dtos.queryResults.ActivityGroupView +import io.tolgee.dtos.request.ActivityGroupFilters +import io.tolgee.exceptions.NotFoundException +import io.tolgee.model.activity.ActivityGroup +import io.tolgee.model.activity.ActivityRevision +import io.tolgee.repository.activity.ActivityGroupRepository +import org.springframework.context.ApplicationContext +import org.springframework.data.domain.PageImpl +import org.springframework.data.domain.Pageable +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional +import java.util.Date + +@Service +class ActivityGroupService( + private val applicationContext: ApplicationContext, + private val activityGroupRepository: ActivityGroupRepository, + private val currentDateProvider: CurrentDateProvider, +) { + fun addToGroup( + activityRevision: ActivityRevision, + modifiedEntities: ModifiedEntitiesType, + ) { + ActivityGrouper(activityRevision, modifiedEntities, applicationContext).addToGroup() + } + + fun getOrCreateCurrentActivityGroupDto( + type: ActivityGroupType, + matchingStrings: Set, + projectId: Long?, + authorId: Long?, + branchId: Long? = null, + ): Map { + return matchingStrings.associateWith { matchingString -> + val existing = findSuitableExistingSuitableGroupDto(type, matchingString, projectId, authorId, branchId) + val group = existing ?: createActivityGroupDto(type, matchingString, projectId, authorId, branchId) + group + } + } + + private fun createActivityGroupDto( + type: ActivityGroupType, + matchingString: String?, + projectId: Long?, + authorId: Long?, + branchId: Long?, + ): ActivityGroupDto { + val entity = createActivityGroup(type, matchingString, projectId, authorId, branchId) + return ActivityGroupDto( + entity.id, + entity.type, + currentDateProvider.date, + currentDateProvider.date, + matchingString = entity.matchingString, + ) + } + + private fun createActivityGroup( + type: ActivityGroupType, + matchingString: String?, + projectId: Long?, + authorId: Long?, + branchId: Long?, + ): ActivityGroup { + return ActivityGroup( + type = type, + ).also { + it.authorId = authorId + it.projectId = projectId + it.branchId = branchId + activityGroupRepository.saveAndFlush(it) + it.matchingString = matchingString + } + } + + private fun findSuitableExistingSuitableGroupDto( + type: ActivityGroupType, + matchingString: String?, + projectId: Long?, + authorId: Long?, + branchId: Long?, + ): ActivityGroupDto? { + val latest = findLatest(type, matchingString, authorId, projectId, branchId) ?: return null + if (latest.isTooOld || latest.lastActivityTooEarly) { + return null + } + return latest + } + + private fun findLatest( + type: ActivityGroupType, + matchingString: String?, + authorId: Long?, + projectId: Long?, + branchId: Long?, + ): ActivityGroupDto? { + val result = + activityGroupRepository.findLatest( + groupTypeName = type.name, + matchingString = matchingString, + authorId = authorId, + projectId = projectId, + branchId = branchId, + ) + + if (result.isEmpty()) { + return null + } + + val single = result.single() + + return single.mapToGroupDto() + } + + private fun Array.mapToGroupDto(): ActivityGroupDto { + return ActivityGroupDto( + this[0] as Long, + ActivityGroupType.valueOf(this[1] as String), + // if the group is empty we can just consider it as created now + this[3] as Date? ?: currentDateProvider.date, + this[4] as Date? ?: currentDateProvider.date, + matchingString = this[2] as String?, + ) + } + + fun getGroupInProject( + groupId: Long, + projectId: Long, + ): ActivityGroup { + val group = activityGroupRepository.findById(groupId).orElse(null) + if (group == null || group.projectId != projectId) { + throw NotFoundException() + } + return group + } + + @Transactional + fun getProjectActivityGroups( + projectId: Long, + pageable: Pageable, + activityGroupFilters: ActivityGroupFilters, + branchId: Long? = null, + defaultBranchId: Long? = null, + ): PageImpl { + return ActivityGroupsProvider( + projectId, + pageable, + activityGroupFilters, + applicationContext, + branchId, + defaultBranchId, + ).get() + } + + private val ActivityGroupDto.isTooOld: Boolean + get() { + return this.earliestTimestamp.time + GROUP_MAX_AGE < currentDateProvider.date.time + } + + private val ActivityGroupDto.lastActivityTooEarly: Boolean + get() { + return latestTimestamp.time + GROUP_MAX_LAST_ACTIVITY_AGE < currentDateProvider.date.time + } + + companion object { + const val GROUP_MAX_AGE = 1000 * 60 * 60 * 24 + const val GROUP_MAX_LAST_ACTIVITY_AGE = 1000 * 60 * 60 * 2 + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/ActivityGroupType.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/ActivityGroupType.kt new file mode 100644 index 00000000000..7c47798f102 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/ActivityGroupType.kt @@ -0,0 +1,906 @@ +package io.tolgee.activity.groups + +import io.tolgee.activity.data.ActivityType +import io.tolgee.activity.data.RevisionType +import io.tolgee.activity.groups.matchers.ActivityGroupValueMatcher.Companion.eq +import io.tolgee.activity.groups.matchers.ActivityGroupValueMatcher.Companion.modification +import io.tolgee.activity.groups.matchers.ActivityGroupValueMatcher.Companion.notNull +import io.tolgee.activity.groups.matchers.modifiedEntity.DefaultMatcher +import io.tolgee.activity.groups.matchers.modifiedEntity.MatchingStringProvider +import io.tolgee.activity.groups.matchers.modifiedEntity.ModifiedEntityMatcher +import io.tolgee.activity.groups.matchers.modifiedEntity.SetTranslationMatchingStringProvider +import io.tolgee.activity.groups.matchers.modifiedEntity.TranslationMatcher +import io.tolgee.activity.groups.viewProviders.createKey.CreateKeyGroupModelProvider +import io.tolgee.activity.groups.viewProviders.createProject.CreateProjectGroupModelProvider +import io.tolgee.activity.groups.viewProviders.setTranslations.SetTranslationsGroupModelProvider +import io.tolgee.model.Language +import io.tolgee.model.Project +import io.tolgee.model.Prompt +import io.tolgee.model.Screenshot +import io.tolgee.model.TranslationSuggestion +import io.tolgee.model.branching.Branch +import io.tolgee.model.contentDelivery.ContentDeliveryConfig +import io.tolgee.model.contentDelivery.ContentStorage +import io.tolgee.model.enums.TranslationState +import io.tolgee.model.enums.TranslationSuggestionState +import io.tolgee.model.enums.qa.QaIssueState +import io.tolgee.model.glossary.Glossary +import io.tolgee.model.glossary.GlossaryTerm +import io.tolgee.model.glossary.GlossaryTermTranslation +import io.tolgee.model.key.Key +import io.tolgee.model.key.KeyMeta +import io.tolgee.model.key.Namespace +import io.tolgee.model.key.Tag +import io.tolgee.model.key.screenshotReference.KeyScreenshotReference +import io.tolgee.model.qa.TranslationQaIssue +import io.tolgee.model.task.Task +import io.tolgee.model.task.TaskKey +import io.tolgee.model.translation.Label +import io.tolgee.model.translation.Translation +import io.tolgee.model.translation.TranslationComment +import io.tolgee.model.translationMemory.TranslationMemory +import io.tolgee.model.webhook.WebhookConfig +import kotlin.reflect.KClass + +enum class ActivityGroupType( + val sourceActivityTypes: List, + val modelProviderFactoryClass: KClass>? = null, + val matcher: ModifiedEntityMatcher? = null, + val matchingStringProvider: MatchingStringProvider? = null, + /** + * Even if we are working with same revisions order can be unnatural in some cases. + * e.g. when user creates a key and then sets translations for it. It results in multiple groups. + * We need to force the order, so key creation is always before translation set + */ + val orderAfter: ActivityGroupType? = null, +) { + CREATE_KEY( + listOf(ActivityType.CREATE_KEY), + matcher = + DefaultMatcher( + entityClass = Key::class, + revisionTypes = listOf(RevisionType.ADD), + ).or( + DefaultMatcher( + entityClass = KeyMeta::class, + revisionTypes = listOf(RevisionType.ADD), + ), + ).or( + TranslationMatcher(TranslationMatcher.Type.BASE), + ), + modelProviderFactoryClass = CreateKeyGroupModelProvider::class, + ), + + EDIT_KEY_NAME( + listOf(ActivityType.KEY_NAME_EDIT, ActivityType.COMPLEX_EDIT), + matcher = + DefaultMatcher( + entityClass = Key::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Key::name, Key::namespace), + ).or( + DefaultMatcher( + entityClass = Namespace::class, + revisionTypes = listOf(RevisionType.ADD, RevisionType.DEL), + ), + ), + ), + + DELETE_KEY( + listOf(ActivityType.KEY_DELETE), + matcher = + DefaultMatcher( + entityClass = Key::class, + revisionTypes = listOf(RevisionType.DEL), + ), + ), + + SET_TRANSLATION_STATE( + listOf(ActivityType.SET_TRANSLATION_STATE, ActivityType.COMPLEX_EDIT), + matcher = + DefaultMatcher( + entityClass = Translation::class, + revisionTypes = listOf(RevisionType.MOD, RevisionType.ADD), + modificationProps = listOf(Translation::state, Translation::outdated, Translation::mtProvider), + deniedValues = + mapOf( + Translation::state to TranslationState.REVIEWED, + Translation::text to modification(eq(null) to notNull()), + ), + ), + ), + REVIEW( + listOf(ActivityType.SET_TRANSLATION_STATE, ActivityType.COMPLEX_EDIT), + matcher = + DefaultMatcher( + entityClass = Translation::class, + revisionTypes = listOf(RevisionType.MOD, RevisionType.ADD), + modificationProps = listOf(Translation::state, Translation::outdated, Translation::mtProvider), + allowedValues = mapOf(Translation::state to TranslationState.REVIEWED), + ), + ), + + SET_BASE_TRANSLATION( + listOf(ActivityType.SET_TRANSLATIONS, ActivityType.COMPLEX_EDIT), + matcher = + TranslationMatcher(TranslationMatcher.Type.BASE), + ), + + SET_TRANSLATIONS( + listOf(ActivityType.SET_TRANSLATIONS, ActivityType.COMPLEX_EDIT, ActivityType.CREATE_KEY), + matcher = + TranslationMatcher(TranslationMatcher.Type.NON_BASE), + matchingStringProvider = SetTranslationMatchingStringProvider(), + modelProviderFactoryClass = SetTranslationsGroupModelProvider::class, + orderAfter = CREATE_KEY, + ), + + DISMISS_AUTO_TRANSLATED_STATE( + listOf(ActivityType.DISMISS_AUTO_TRANSLATED_STATE), + matcher = + DefaultMatcher( + entityClass = Translation::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Translation::auto, Translation::mtProvider), + allowedValues = mapOf(Translation::mtProvider to null, Translation::auto to false), + ), + ), + + SET_OUTDATED_FLAG( + listOf(ActivityType.SET_OUTDATED_FLAG), + matcher = + DefaultMatcher( + entityClass = Translation::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Translation::outdated), + ), + ), + + ADD_TRANSLATION_COMMENT( + listOf(ActivityType.TRANSLATION_COMMENT_ADD), + matcher = + DefaultMatcher( + entityClass = TranslationComment::class, + revisionTypes = listOf(RevisionType.ADD), + ).or( + DefaultMatcher( + entityClass = Translation::class, + revisionTypes = listOf(RevisionType.ADD), + ), + ), + ), + + DELETE_TRANSLATION_COMMENT( + listOf(ActivityType.TRANSLATION_COMMENT_DELETE), + matcher = + DefaultMatcher( + entityClass = TranslationComment::class, + revisionTypes = listOf(RevisionType.DEL), + ), + ), + + EDIT_TRANSLATION_COMMENT( + listOf(ActivityType.TRANSLATION_COMMENT_EDIT), + matcher = + DefaultMatcher( + entityClass = TranslationComment::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(TranslationComment::text), + ), + ), + + SET_TRANSLATION_COMMENT_STATE( + listOf(ActivityType.TRANSLATION_COMMENT_SET_STATE), + matcher = + DefaultMatcher( + entityClass = TranslationComment::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(TranslationComment::state), + ), + ), + + DELETE_SCREENSHOT( + listOf(ActivityType.SCREENSHOT_DELETE, ActivityType.COMPLEX_EDIT), + matcher = + DefaultMatcher( + entityClass = Screenshot::class, + revisionTypes = listOf(RevisionType.DEL), + ).or( + DefaultMatcher( + entityClass = KeyScreenshotReference::class, + revisionTypes = listOf(RevisionType.DEL), + ), + ), + ), + + ADD_SCREENSHOT( + listOf(ActivityType.SCREENSHOT_ADD, ActivityType.COMPLEX_EDIT), + matcher = + DefaultMatcher( + entityClass = Screenshot::class, + revisionTypes = listOf(RevisionType.ADD), + ).or( + DefaultMatcher( + entityClass = KeyScreenshotReference::class, + revisionTypes = listOf(RevisionType.ADD), + ), + ), + ), + + EDIT_KEY_TAGS( + listOf( + ActivityType.KEY_TAGS_EDIT, + ActivityType.COMPLEX_EDIT, + ActivityType.BATCH_TAG_KEYS, + ActivityType.BATCH_UNTAG_KEYS, + ActivityType.COMPLEX_TAG_OPERATION, + ), + matcher = + DefaultMatcher( + entityClass = KeyMeta::class, + revisionTypes = listOf(RevisionType.MOD, RevisionType.ADD), + modificationProps = listOf(KeyMeta::tags), + ).or( + DefaultMatcher( + entityClass = Tag::class, + revisionTypes = listOf(RevisionType.ADD, RevisionType.DEL), + ), + ), + ), + + IMPORT( + listOf(ActivityType.IMPORT), + matcher = + DefaultMatcher( + entityClass = Key::class, + revisionTypes = listOf(RevisionType.ADD), + ).or( + DefaultMatcher( + entityClass = Translation::class, + revisionTypes = listOf(RevisionType.ADD, RevisionType.MOD), + modificationProps = listOf(Translation::text), + ), + ), + ), + + CREATE_LANGUAGE( + listOf(ActivityType.CREATE_LANGUAGE), + matcher = + DefaultMatcher( + entityClass = Language::class, + revisionTypes = listOf(RevisionType.ADD), + ), + ), + + EDIT_LANGUAGE( + listOf(ActivityType.EDIT_LANGUAGE), + matcher = + DefaultMatcher( + entityClass = Language::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Language::name, Language::tag, Language::originalName, Language::flagEmoji), + ), + ), + + DELETE_LANGUAGE( + listOf(ActivityType.DELETE_LANGUAGE), + matcher = + DefaultMatcher( + entityClass = Language::class, + // language deletion is a soft delete followed by an async hard delete + revisionTypes = listOf(RevisionType.DEL, RevisionType.MOD), + ), + ), + + CREATE_PROJECT( + listOf(ActivityType.CREATE_PROJECT), + matcher = + DefaultMatcher( + entityClass = Project::class, + revisionTypes = listOf(RevisionType.ADD), + ), + modelProviderFactoryClass = CreateProjectGroupModelProvider::class, + ), + + EDIT_PROJECT( + listOf(ActivityType.EDIT_PROJECT), + matcher = + DefaultMatcher( + entityClass = Project::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = + listOf( + Project::name, + Project::description, + Project::baseLanguage, + Project::defaultNamespace, + Project::avatarHash, + ), + ), + ), + + NAMESPACE_EDIT( + listOf(ActivityType.NAMESPACE_EDIT, ActivityType.BATCH_SET_KEYS_NAMESPACE), + matcher = + DefaultMatcher( + entityClass = Namespace::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Namespace::name), + ), + ), + + BATCH_PRE_TRANSLATE_BY_TM( + listOf(ActivityType.BATCH_PRE_TRANSLATE_BY_TM), + matcher = + DefaultMatcher( + entityClass = Translation::class, + revisionTypes = listOf(RevisionType.MOD, RevisionType.ADD), + modificationProps = listOf(Translation::state, Translation::text, Translation::outdated, Translation::auto), + ), + ), + + BATCH_MACHINE_TRANSLATE( + listOf(ActivityType.BATCH_MACHINE_TRANSLATE), + matcher = + DefaultMatcher( + entityClass = Translation::class, + revisionTypes = listOf(RevisionType.MOD, RevisionType.ADD), + modificationProps = listOf(Translation::state, Translation::text, Translation::outdated, Translation::auto), + ), + ), + + AUTO_TRANSLATE( + listOf(ActivityType.AUTO_TRANSLATE), + matcher = + DefaultMatcher( + entityClass = Translation::class, + revisionTypes = listOf(RevisionType.MOD, RevisionType.ADD), + modificationProps = listOf(Translation::state, Translation::text, Translation::outdated, Translation::auto), + ), + ), + + BATCH_CLEAR_TRANSLATIONS( + listOf(ActivityType.BATCH_CLEAR_TRANSLATIONS), + matcher = + DefaultMatcher( + entityClass = Translation::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Translation::state, Translation::text, Translation::outdated, Translation::auto), + allowedValues = + mapOf( + Translation::text to null, + Translation::state to null, + Translation::outdated to false, + Translation::auto to false, + ), + ), + ), + + BATCH_COPY_TRANSLATIONS( + listOf(ActivityType.BATCH_COPY_TRANSLATIONS), + matcher = + DefaultMatcher( + entityClass = Translation::class, + revisionTypes = listOf(RevisionType.MOD, RevisionType.ADD), + modificationProps = listOf(Translation::state, Translation::text, Translation::outdated, Translation::auto), + ), + ), + + BATCH_SET_TRANSLATION_STATE( + listOf(ActivityType.BATCH_SET_TRANSLATION_STATE), + matcher = + DefaultMatcher( + entityClass = Translation::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Translation::state, Translation::outdated, Translation::auto), + ), + ), + + CONTENT_DELIVERY_CONFIG_CREATE( + listOf(ActivityType.CONTENT_DELIVERY_CONFIG_CREATE), + matcher = + DefaultMatcher( + entityClass = ContentDeliveryConfig::class, + revisionTypes = listOf(RevisionType.ADD), + ), + ), + + CONTENT_DELIVERY_CONFIG_UPDATE( + listOf(ActivityType.CONTENT_DELIVERY_CONFIG_UPDATE), + matcher = + DefaultMatcher( + entityClass = ContentDeliveryConfig::class, + revisionTypes = listOf(RevisionType.MOD), + ), + ), + + CONTENT_DELIVERY_CONFIG_DELETE( + listOf(ActivityType.CONTENT_DELIVERY_CONFIG_DELETE), + matcher = + DefaultMatcher( + entityClass = ContentDeliveryConfig::class, + revisionTypes = listOf(RevisionType.DEL), + ), + ), + + CONTENT_STORAGE_CREATE( + listOf(ActivityType.CONTENT_STORAGE_CREATE), + matcher = + DefaultMatcher( + entityClass = ContentStorage::class, + revisionTypes = listOf(RevisionType.ADD), + ), + ), + + CONTENT_STORAGE_UPDATE( + listOf(ActivityType.CONTENT_STORAGE_UPDATE), + matcher = + DefaultMatcher( + entityClass = ContentStorage::class, + revisionTypes = listOf(RevisionType.MOD), + ), + ), + + CONTENT_STORAGE_DELETE( + listOf(ActivityType.CONTENT_STORAGE_DELETE), + matcher = + DefaultMatcher( + entityClass = ContentStorage::class, + revisionTypes = listOf(RevisionType.DEL), + ), + ), + + WEBHOOK_CONFIG_CREATE( + listOf(ActivityType.WEBHOOK_CONFIG_CREATE), + matcher = + DefaultMatcher( + entityClass = WebhookConfig::class, + revisionTypes = listOf(RevisionType.ADD), + ), + ), + + WEBHOOK_CONFIG_UPDATE( + listOf(ActivityType.WEBHOOK_CONFIG_UPDATE), + matcher = + DefaultMatcher( + entityClass = WebhookConfig::class, + revisionTypes = listOf(RevisionType.MOD), + ), + ), + + WEBHOOK_CONFIG_DELETE( + listOf(ActivityType.WEBHOOK_CONFIG_DELETE), + matcher = + DefaultMatcher( + entityClass = WebhookConfig::class, + revisionTypes = listOf(RevisionType.DEL), + ), + ), + + EDIT_KEY_CHARACTER_LIMIT( + listOf(ActivityType.KEY_CHARACTER_LIMIT_EDIT), + matcher = + DefaultMatcher( + entityClass = Key::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Key::maxCharLimit), + ), + ), + + SOFT_DELETE_KEY( + listOf(ActivityType.KEY_SOFT_DELETE), + matcher = + DefaultMatcher( + entityClass = Key::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Key::deletedAt), + allowedValues = mapOf(Key::deletedAt to notNull()), + ), + ), + + RESTORE_KEY( + listOf(ActivityType.KEY_RESTORE, ActivityType.BATCH_KEY_RESTORE), + matcher = + DefaultMatcher( + entityClass = Key::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Key::deletedAt), + allowedValues = mapOf(Key::deletedAt to null), + ), + ), + + HARD_DELETE_KEY( + listOf(ActivityType.KEY_HARD_DELETE, ActivityType.BATCH_KEY_HARD_DELETE), + matcher = + DefaultMatcher( + entityClass = Key::class, + revisionTypes = listOf(RevisionType.DEL), + ), + ), + + SET_TRANSLATION_LABELS( + listOf( + ActivityType.TRANSLATION_LABEL_ASSIGN, + ActivityType.BATCH_ASSIGN_TRANSLATION_LABEL, + ActivityType.BATCH_UNASSIGN_TRANSLATION_LABEL, + ActivityType.TRANSLATION_LABELS_EDIT, + ), + matcher = + DefaultMatcher( + entityClass = Translation::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Translation::labels), + ), + ), + + CREATE_TRANSLATION_LABEL( + listOf(ActivityType.TRANSLATION_LABEL_CREATE), + matcher = + DefaultMatcher( + entityClass = Label::class, + revisionTypes = listOf(RevisionType.ADD), + ), + ), + + EDIT_TRANSLATION_LABEL( + listOf(ActivityType.TRANSLATION_LABEL_UPDATE), + matcher = + DefaultMatcher( + entityClass = Label::class, + revisionTypes = listOf(RevisionType.MOD), + ), + ), + + DELETE_TRANSLATION_LABEL( + listOf(ActivityType.TRANSLATION_LABEL_DELETE), + matcher = + DefaultMatcher( + entityClass = Label::class, + revisionTypes = listOf(RevisionType.DEL), + ), + ), + + CREATE_TASK( + listOf(ActivityType.TASK_CREATE, ActivityType.TASKS_CREATE), + matcher = + DefaultMatcher( + entityClass = Task::class, + revisionTypes = listOf(RevisionType.ADD), + ), + ), + + EDIT_TASK( + listOf(ActivityType.TASK_UPDATE), + matcher = + DefaultMatcher( + entityClass = Task::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Task::name, Task::description, Task::type, Task::dueDate, Task::assignees), + ), + ), + + FINISH_TASK( + listOf(ActivityType.TASK_FINISH), + matcher = + DefaultMatcher( + entityClass = Task::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Task::state, Task::closedAt), + ), + ), + + CLOSE_TASK( + listOf(ActivityType.TASK_CLOSE), + matcher = + DefaultMatcher( + entityClass = Task::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Task::state, Task::closedAt), + ), + ), + + REOPEN_TASK( + listOf(ActivityType.TASK_REOPEN), + matcher = + DefaultMatcher( + entityClass = Task::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Task::state, Task::closedAt), + ), + ), + + UPDATE_TASK_KEYS( + listOf(ActivityType.TASK_KEYS_UPDATE), + matcher = + DefaultMatcher( + entityClass = TaskKey::class, + revisionTypes = listOf(RevisionType.ADD, RevisionType.DEL), + ), + ), + + CREATE_GLOSSARY( + listOf(ActivityType.GLOSSARY_CREATE), + matcher = + DefaultMatcher( + entityClass = Glossary::class, + revisionTypes = listOf(RevisionType.ADD), + ), + ), + + EDIT_GLOSSARY( + listOf(ActivityType.GLOSSARY_UPDATE), + matcher = + DefaultMatcher( + entityClass = Glossary::class, + revisionTypes = listOf(RevisionType.MOD), + ), + ), + + DELETE_GLOSSARY( + listOf(ActivityType.GLOSSARY_DELETE), + matcher = + DefaultMatcher( + entityClass = Glossary::class, + revisionTypes = listOf(RevisionType.DEL), + ), + ), + + IMPORT_GLOSSARY( + listOf(ActivityType.GLOSSARY_IMPORT), + matcher = + DefaultMatcher( + entityClass = GlossaryTerm::class, + revisionTypes = listOf(RevisionType.ADD, RevisionType.MOD), + ).or( + DefaultMatcher( + entityClass = GlossaryTermTranslation::class, + revisionTypes = listOf(RevisionType.ADD, RevisionType.MOD), + ), + ), + ), + + CREATE_GLOSSARY_TERM( + listOf(ActivityType.GLOSSARY_TERM_CREATE), + matcher = + DefaultMatcher( + entityClass = GlossaryTerm::class, + revisionTypes = listOf(RevisionType.ADD), + ), + ), + + EDIT_GLOSSARY_TERM( + listOf(ActivityType.GLOSSARY_TERM_UPDATE), + matcher = + DefaultMatcher( + entityClass = GlossaryTerm::class, + revisionTypes = listOf(RevisionType.MOD), + ), + ), + + DELETE_GLOSSARY_TERM( + listOf(ActivityType.GLOSSARY_TERM_DELETE), + matcher = + DefaultMatcher( + entityClass = GlossaryTerm::class, + revisionTypes = listOf(RevisionType.DEL), + ), + ), + + SET_GLOSSARY_TERM_TRANSLATION( + listOf(ActivityType.GLOSSARY_TERM_TRANSLATION_UPDATE), + matcher = + DefaultMatcher( + entityClass = GlossaryTermTranslation::class, + revisionTypes = listOf(RevisionType.ADD, RevisionType.MOD), + modificationProps = listOf(GlossaryTermTranslation::text), + ), + ), + + CREATE_TRANSLATION_MEMORY( + listOf(ActivityType.TRANSLATION_MEMORY_CREATE), + matcher = + DefaultMatcher( + entityClass = TranslationMemory::class, + revisionTypes = listOf(RevisionType.ADD), + ), + ), + + EDIT_TRANSLATION_MEMORY( + listOf(ActivityType.TRANSLATION_MEMORY_UPDATE), + matcher = + DefaultMatcher( + entityClass = TranslationMemory::class, + revisionTypes = listOf(RevisionType.MOD), + ), + ), + + DELETE_TRANSLATION_MEMORY( + listOf(ActivityType.TRANSLATION_MEMORY_DELETE), + matcher = + DefaultMatcher( + entityClass = TranslationMemory::class, + revisionTypes = listOf(RevisionType.DEL), + ), + ), + + CREATE_SUGGESTION( + listOf(ActivityType.CREATE_SUGGESTION), + matcher = + DefaultMatcher( + entityClass = TranslationSuggestion::class, + revisionTypes = listOf(RevisionType.ADD), + ), + ), + + DELETE_SUGGESTION( + listOf(ActivityType.DELETE_SUGGESTION), + matcher = + DefaultMatcher( + entityClass = TranslationSuggestion::class, + revisionTypes = listOf(RevisionType.DEL), + ), + ), + + DECLINE_SUGGESTION( + listOf(ActivityType.DECLINE_SUGGESTION), + matcher = + DefaultMatcher( + entityClass = TranslationSuggestion::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(TranslationSuggestion::state), + allowedValues = mapOf(TranslationSuggestion::state to TranslationSuggestionState.DECLINED), + ), + ), + + ACCEPT_SUGGESTION( + listOf(ActivityType.ACCEPT_SUGGESTION), + matcher = + DefaultMatcher( + entityClass = TranslationSuggestion::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(TranslationSuggestion::state), + allowedValues = mapOf(TranslationSuggestion::state to TranslationSuggestionState.ACCEPTED), + ), + ), + + SET_SUGGESTION_ACTIVE( + listOf(ActivityType.SUGGESTION_SET_ACTIVE, ActivityType.REVERSE_SUGGESTION), + matcher = + DefaultMatcher( + entityClass = TranslationSuggestion::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(TranslationSuggestion::state), + allowedValues = mapOf(TranslationSuggestion::state to TranslationSuggestionState.ACTIVE), + ), + ), + + CREATE_AI_PROMPT( + listOf(ActivityType.AI_PROMPT_CREATE), + matcher = + DefaultMatcher( + entityClass = Prompt::class, + revisionTypes = listOf(RevisionType.ADD), + ), + ), + + EDIT_AI_PROMPT( + listOf(ActivityType.AI_PROMPT_UPDATE), + matcher = + DefaultMatcher( + entityClass = Prompt::class, + revisionTypes = listOf(RevisionType.MOD), + ), + ), + + DELETE_AI_PROMPT( + listOf(ActivityType.AI_PROMPT_DELETE), + matcher = + DefaultMatcher( + entityClass = Prompt::class, + revisionTypes = listOf(RevisionType.DEL), + ), + ), + + CREATE_BRANCH( + listOf(ActivityType.BRANCH_CREATE), + matcher = + DefaultMatcher( + entityClass = Branch::class, + revisionTypes = listOf(RevisionType.ADD), + ), + ), + + RENAME_BRANCH( + listOf(ActivityType.BRANCH_RENAME), + matcher = + DefaultMatcher( + entityClass = Branch::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Branch::name), + ), + ), + + CHANGE_BRANCH_PROTECTION( + listOf(ActivityType.BRANCH_PROTECTION_CHANGE), + matcher = + DefaultMatcher( + entityClass = Branch::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(Branch::isProtected), + ), + ), + + MERGE_BRANCH( + listOf(ActivityType.BRANCH_MERGE), + matcher = + DefaultMatcher( + entityClass = Key::class, + revisionTypes = listOf(RevisionType.ADD, RevisionType.MOD, RevisionType.DEL), + ).or( + DefaultMatcher( + entityClass = Translation::class, + revisionTypes = listOf(RevisionType.ADD, RevisionType.MOD, RevisionType.DEL), + ), + ), + ), + + IGNORE_QA_ISSUE( + listOf(ActivityType.QA_ISSUE_IGNORE), + matcher = + DefaultMatcher( + entityClass = TranslationQaIssue::class, + revisionTypes = listOf(RevisionType.MOD, RevisionType.ADD), + modificationProps = listOf(TranslationQaIssue::state), + allowedValues = mapOf(TranslationQaIssue::state to QaIssueState.IGNORED), + ), + ), + + UNIGNORE_QA_ISSUE( + listOf(ActivityType.QA_ISSUE_UNIGNORE), + matcher = + DefaultMatcher( + entityClass = TranslationQaIssue::class, + revisionTypes = listOf(RevisionType.MOD), + modificationProps = listOf(TranslationQaIssue::state), + allowedValues = mapOf(TranslationQaIssue::state to QaIssueState.OPEN), + ), + ), + + ; + + fun getProvidingModelTypes(): Pair?, KClass<*>?>? { + val arguments = + modelProviderFactoryClass + ?.supertypes + ?.firstOrNull() + ?.arguments ?: return null + + val groupType = + arguments + .firstOrNull() + ?.type + ?.classifier as? KClass<*> + + val itemType = + arguments[1] + .type + ?.classifier as? KClass<*> + + return groupType to itemType + } + + companion object { + fun getOrderedTypes(): List { + val withType = ActivityGroupType.entries.filter { it.orderAfter != null } + val referenced = withType.mapNotNull { it.orderAfter } + val all = (withType + referenced).toSet() + return all.sortedWith { a, b -> + when { + a.orderAfter == b -> 1 + b.orderAfter == a -> -1 + else -> 0 + } + } + } + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/ActivityGrouper.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/ActivityGrouper.kt new file mode 100644 index 00000000000..41764ff3240 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/ActivityGrouper.kt @@ -0,0 +1,88 @@ +package io.tolgee.activity.groups + +import io.tolgee.activity.ModifiedEntitiesType +import io.tolgee.activity.groups.matchers.modifiedEntity.StoringContext +import io.tolgee.model.activity.ActivityModifiedEntity +import io.tolgee.model.activity.ActivityRevision +import jakarta.persistence.EntityManager +import org.springframework.context.ApplicationContext + +class ActivityGrouper( + private val activityRevision: ActivityRevision, + private val modifiedEntities: ModifiedEntitiesType, + private val applicationContext: ApplicationContext, +) { + fun addToGroup() { + ActivityGroupType.entries.forEach { type -> + val matchingEntities = type.matchingEntities + if (matchingEntities.isEmpty()) { + return@forEach + } + matchingEntities.groupBy { it.branchId }.forEach { (branchId, entities) -> + val matchingStrings = + entities + .map { type.matchingStringProvider?.provide(it.getStoringContext()) } + .toSet() + getActivityGroupIds(type, matchingStrings, branchId).forEach { group -> + addToGroup(group.value) + } + } + } + } + + private fun addToGroup(groupId: Long) { + entityManager + .createNativeQuery( + """ + insert into activity_revision_activity_groups (activity_revisions_id, activity_groups_id) + values (:activityRevisionId, :activityGroupId) + """, + ).setParameter("activityRevisionId", activityRevision.id) + .setParameter("activityGroupId", groupId) + .executeUpdate() + } + + private fun getActivityGroupIds( + type: ActivityGroupType, + matchingStrings: Set, + branchId: Long?, + ): Map { + return activityGroupService + .getOrCreateCurrentActivityGroupDto( + type, + matchingStrings, + activityRevision.projectId, + activityRevision.authorId, + branchId, + ).mapValues { it.value.id } + } + + private val ActivityGroupType.matchingEntities: List + get() { + if (!this.sourceActivityTypes.contains(type)) { + return emptyList() + } + + return modifiedEntities.values.flatMap { + it.values.filter { entity -> entityMatches(entity) } + } + } + + private fun ActivityGroupType.entityMatches(entity: ActivityModifiedEntity): Boolean { + return this.matcher?.match(entity.getStoringContext()) ?: true + } + + private fun ActivityModifiedEntity.getStoringContext(): StoringContext { + return StoringContext(this, activityRevision) + } + + private val type = activityRevision.type + + private val activityGroupService by lazy { + applicationContext.getBean(ActivityGroupService::class.java) + } + + private val entityManager: EntityManager by lazy { + applicationContext.getBean(EntityManager::class.java) + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/ActivityGroupsProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/ActivityGroupsProvider.kt new file mode 100644 index 00000000000..c09761392e7 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/ActivityGroupsProvider.kt @@ -0,0 +1,189 @@ +package io.tolgee.activity.groups + +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.module.kotlin.readValue +import io.tolgee.api.SimpleUserAccount +import io.tolgee.dtos.queryResults.ActivityGroupView +import io.tolgee.dtos.request.ActivityGroupFilters +import org.jooq.CaseWhenStep +import org.jooq.DSLContext +import org.jooq.JSON +import org.jooq.impl.DSL +import org.jooq.impl.DSL.field +import org.jooq.impl.DSL.jsonArrayAgg +import org.jooq.impl.DSL.max +import org.jooq.impl.DSL.table +import org.springframework.context.ApplicationContext +import org.springframework.data.domain.PageImpl +import org.springframework.data.domain.Pageable +import java.util.Date + +class ActivityGroupsProvider( + val projectId: Long, + val pageable: Pageable, + val filters: ActivityGroupFilters, + applicationContext: ApplicationContext, + val branchId: Long? = null, + val defaultBranchId: Long? = null, +) { + fun get(): PageImpl { + page.forEach { + it.data = dataViews[it.id] + } + + return page + } + + private val page by lazy { + val from = table("activity_group").`as`("ag") + var where = field("ag.project_id").eq(projectId) + + where = + if (branchId != null) { + where.and(field("ag.branch_id", Long::class.java).eq(branchId)) + } else { + where.and( + field("ag.branch_id", Long::class.java) + .isNull + .or( + defaultBranchId?.let { field("ag.branch_id", Long::class.java).eq(it) } + ?: DSL.noCondition(), + ), + ) + } + + var having = DSL.noCondition() + + val lmeJsonArrayAggField = jsonArrayAgg(field("lme.entity_id")).`as`("lme_entity_ids") + val ldeJsonArrayAggField = jsonArrayAgg(field("lde.entity_id")).`as`("lde_entity_ids") + val sourceTypesAggField = DSL.field("json_agg(distinct ar.type)", String::class.java).`as`("source_types") + val originsAggField = DSL.field("json_agg(distinct ar.origin_type)", String::class.java).`as`("origin_types") + + if (filters.filterType != null) { + where = where.and(field("ag.type").eq(filters.filterType!!.name)) + } + + if (filters.filterLanguageIdIn != null) { + val languageIdsJson = JSON.json(objectMapper.writeValueAsString(filters.filterLanguageIdIn)) + having = lmeJsonArrayAggField.contains(languageIdsJson).and(ldeJsonArrayAggField.contains(languageIdsJson)) + } + + if (filters.filterAuthorUserIdIn != null) { + where = where.and(field("ag.author_id").`in`(filters.filterAuthorUserIdIn)) + } + + val count = + jooqContext + .selectCount() + .from(from) + .where(where) + .fetchOne(0, Long::class.java)!! + + val result = + jooqContext + .select( + field("ag.id"), + field("ag.type"), + field("ag.author_id"), + max(field("ar.timestamp")), + field("ua.id"), + field("ua.username"), + field("ua.name"), + field("ua.avatar_hash"), + field("ua.deleted_at").isNotNull, + lmeJsonArrayAggField, + ldeJsonArrayAggField, + sourceTypesAggField, + originsAggField, + ).from(from) + .leftJoin(table("activity_revision_activity_groups").`as`("arag")) + .on(field("ag.id").eq(field("arag.activity_groups_id"))) + .leftJoin(table("activity_revision").`as`("ar")) + .on(field("ar.id").eq(field("arag.activity_revisions_id"))) + .leftJoin(table("user_account").`as`("ua")) + .on(field("ag.author_id").eq(field("ua.id"))) + .leftJoin(table("activity_modified_entity").`as`("lme")) + .on( + field("ar.id") + .eq(field("lme.activity_revision_id")) + .and(field("lme.entity_class").eq("Language")), + ).leftJoin(table("activity_describing_entity").`as`("lde")) + .on( + field("ar.id") + .eq(field("lde.activity_revision_id")) + .and(field("lde.entity_class").eq("Language")), + ).where(where) + .groupBy(field("ag.id"), field("ua.id")) + .having(having) + .orderBy(max(field("ar.timestamp")).desc(), orderedTypesField?.desc()) + .limit(pageable.pageSize) + .offset(pageable.offset) + .fetch() + .map { + ActivityGroupView( + it[0] as Long, + ActivityGroupType.valueOf(it[1] as String), + it[3] as Date, + author = + object : SimpleUserAccount { + override val id: Long = it[4] as Long + override val username: String = it[5] as String + override val name: String = it[6] as String + override val avatarHash: String? = it[7] as String? + override val deleted: Boolean = it[8] as Boolean + }, + mentionedLanguageIds = parseMentionedLanguageIds(it), + sourceActivityTypes = + it.getJsonValue>("source_types")?.filterNotNull() ?: emptyList(), + origins = it.getJsonValue>("origin_types")?.filterNotNull() ?: emptyList(), + ) + } + + PageImpl(result, pageable, count) + } + + private fun parseMentionedLanguageIds(it: org.jooq.Record): List { + val lmeIds = it.getJsonValue>("lme_entity_ids") ?: emptyList() + val ldeIds = it.getJsonValue>("lde_entity_ids") ?: emptyList() + return (lmeIds + ldeIds).filterNotNull().toSet().toList() + } + + private inline fun org.jooq.Record.getJsonValue(fieldName: String): T? { + val string = this.getValue(fieldName, String::class.java) ?: return null + return objectMapper.readValue(string) + } + + private val dataViews by lazy { + byType + .flatMap { (type, items) -> + val provider = + type.modelProviderFactoryClass?.let { applicationContext.getBean(it.java) } + val ids = items.map { it.id } + provider?.provideGroup(ids)?.map { it.key to it.value } + ?: genericGroupModelProvider.provideCounts(type, ids).map { it.key to it.value } + }.toMap() + } + + private val genericGroupModelProvider by lazy { + applicationContext.getBean(io.tolgee.activity.groups.viewProviders.generic.GenericGroupModelProvider::class.java) + } + + private val byType by lazy { page.groupBy { it.type } } + + private val jooqContext = applicationContext.getBean(DSLContext::class.java) + + private val objectMapper = applicationContext.getBean(ObjectMapper::class.java) + + private val orderedTypesField by lazy { + val choose = DSL.choose(field("ag.type")) + var whenStep: CaseWhenStep? = null + ActivityGroupType.getOrderedTypes().mapIndexed { index, type -> + whenStep?.let { + whenStep = it.`when`(type.name, index) + } ?: let { + whenStep = choose.`when`(type.name, index) + } + } + whenStep?.otherwise(0) + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/GroupModelProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/GroupModelProvider.kt new file mode 100644 index 00000000000..973495964ab --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/GroupModelProvider.kt @@ -0,0 +1,13 @@ +package io.tolgee.activity.groups + +import org.springframework.data.domain.Page +import org.springframework.data.domain.Pageable + +interface GroupModelProvider { + fun provideGroup(groupIds: List): Map + + fun provideItems( + groupId: Long, + pageable: Pageable, + ): Page +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/baseModelAssemblers/ActivityKeyGroupModelAssembler.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/baseModelAssemblers/ActivityKeyGroupModelAssembler.kt new file mode 100644 index 00000000000..0bcb680ca9a --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/baseModelAssemblers/ActivityKeyGroupModelAssembler.kt @@ -0,0 +1,18 @@ +package io.tolgee.activity.groups.baseModelAssemblers + +import io.tolgee.activity.groups.baseModels.ActivityGroupKeyModel +import io.tolgee.activity.groups.data.ActivityEntityView +import io.tolgee.activity.groups.data.getAdditionalDescriptionFieldNullable +import io.tolgee.activity.groups.data.getFieldFromView +import io.tolgee.model.key.Key + +class ActivityKeyGroupModelAssembler : GroupModelAssembler { + override fun toModel(entity: ActivityEntityView): ActivityGroupKeyModel { + return ActivityGroupKeyModel( + id = entity.entityId, + name = entity.getFieldFromView(Key::name.name), + namespace = null, + baseTranslationText = entity.getAdditionalDescriptionFieldNullable("baseTranslation", "text"), + ) + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/baseModelAssemblers/GroupModelAssembler.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/baseModelAssemblers/GroupModelAssembler.kt new file mode 100644 index 00000000000..686d19fbabb --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/baseModelAssemblers/GroupModelAssembler.kt @@ -0,0 +1,7 @@ +package io.tolgee.activity.groups.baseModelAssemblers + +import io.tolgee.activity.groups.data.ActivityEntityView + +interface GroupModelAssembler { + fun toModel(entity: ActivityEntityView): T +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/baseModels/ActivityGroupKeyModel.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/baseModels/ActivityGroupKeyModel.kt new file mode 100644 index 00000000000..ebcb0af8301 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/baseModels/ActivityGroupKeyModel.kt @@ -0,0 +1,8 @@ +package io.tolgee.activity.groups.baseModels + +class ActivityGroupKeyModel( + val id: Long, + val name: String, + val namespace: String?, + val baseTranslationText: String?, +) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/baseModels/ActivityGroupLanguageModel.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/baseModels/ActivityGroupLanguageModel.kt new file mode 100644 index 00000000000..a40c075219e --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/baseModels/ActivityGroupLanguageModel.kt @@ -0,0 +1,11 @@ +package io.tolgee.activity.groups.baseModels + +import io.tolgee.api.ILanguageModel + +class ActivityGroupLanguageModel( + override val id: Long, + override val name: String, + override val originalName: String, + override val tag: String, + override val flagEmoji: String, +) : ILanguageModel diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/data/ActivityEntityView.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/data/ActivityEntityView.kt new file mode 100644 index 00000000000..41459974fe3 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/data/ActivityEntityView.kt @@ -0,0 +1,33 @@ +package io.tolgee.activity.groups.data + +interface ActivityEntityView { + val activityRevisionId: Long + val entityId: Long + val entityClass: String + val additionalDescription: Map? +} + +inline fun ActivityEntityView.getFieldFromViewNullable(name: String): T? { + return when (this) { + is DescribingEntityView -> + this.data[name] as? T + + is ModifiedEntityView -> + this.describingData[name] as? T ?: this.modifications[name]?.let { it.new as? T } + + else -> throw IllegalArgumentException("Unknown entity view type") + } +} + +inline fun ActivityEntityView.getFieldFromView(name: String): T { + return this.getFieldFromViewNullable(name) + ?: throw IllegalArgumentException("Field $name not found in describing data") +} + +inline fun ActivityEntityView.getAdditionalDescriptionFieldNullable( + fieldName: String, + propertyName: String, +): T? { + val field = this.additionalDescription?.get(fieldName) as? Map + return field?.get(propertyName) as? T +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/data/DescribingEntityView.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/data/DescribingEntityView.kt new file mode 100644 index 00000000000..8a168a5cd70 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/data/DescribingEntityView.kt @@ -0,0 +1,21 @@ +package io.tolgee.activity.groups.data + +import io.tolgee.activity.data.EntityDescriptionRef + +class DescribingEntityView( + override val entityId: Long, + override val entityClass: String, + val data: Map, + val describingRelations: Map, + override val activityRevisionId: Long, + override val additionalDescription: Map? = null, +) : ActivityEntityView { + inline fun getFieldFromViewNullable(name: String): T? { + return this.data[name] as? T + } + + inline fun getFieldFromView(name: String): T { + return this.data[name] as? T + ?: throw IllegalArgumentException("Field $name not found in describing data") + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/data/DescribingMapping.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/data/DescribingMapping.kt new file mode 100644 index 00000000000..0b69c1fe81e --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/data/DescribingMapping.kt @@ -0,0 +1,9 @@ +package io.tolgee.activity.groups.data + +import io.tolgee.model.StandardAuditModel +import kotlin.reflect.KClass + +data class DescribingMapping( + val entityClass: KClass, + val field: String, +) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/data/ModifiedEntityView.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/data/ModifiedEntityView.kt new file mode 100644 index 00000000000..42b44967e1b --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/data/ModifiedEntityView.kt @@ -0,0 +1,14 @@ +package io.tolgee.activity.groups.data + +import io.tolgee.activity.data.EntityDescriptionRef +import io.tolgee.activity.data.PropertyModification + +class ModifiedEntityView( + override val entityId: Long, + override val entityClass: String, + val describingData: Map, + val describingRelations: Map, + val modifications: Map, + override val activityRevisionId: Long, + override val additionalDescription: Map? = null, +) : ActivityEntityView diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/data/RelatedMapping.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/data/RelatedMapping.kt new file mode 100644 index 00000000000..985e4faf7ab --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/data/RelatedMapping.kt @@ -0,0 +1,10 @@ +package io.tolgee.activity.groups.data + +import io.tolgee.model.StandardAuditModel +import kotlin.reflect.KClass + +data class RelatedMapping( + val entityClass: KClass, + val field: String, + val entities: Iterable, +) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/CountsProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/CountsProvider.kt new file mode 100644 index 00000000000..70ee84f08f5 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/CountsProvider.kt @@ -0,0 +1,75 @@ +package io.tolgee.activity.groups.dataProviders + +import io.tolgee.activity.groups.ActivityGroupType +import io.tolgee.activity.groups.matchers.modifiedEntity.SqlContext +import org.jooq.Condition +import org.jooq.DSLContext +import org.jooq.JSON +import org.jooq.impl.DSL + +class CountsProvider( + private val jooqContext: DSLContext, + private val groupType: ActivityGroupType, + private val entityClasses: List, + private val groupIds: List, +) { + private val activityModifiedEntityTable = DSL.table("activity_modified_entity").`as`("ame") + private val entityClassField = DSL.field("ame.entity_class", String::class.java) + private val activityRevisionTable = DSL.table("activity_revision").`as`("ar") + private val activityRevisionActivityGroupsTable = DSL.table("activity_revision_activity_groups").`as`("arag") + private val activityGroupTable = DSL.table("activity_group").`as`("ag") + private val groupIdField = DSL.field("arag.activity_groups_id", Long::class.java) + private val countField = DSL.count() + + fun provide(): Map> { + val queryResult = + jooqContext + .select( + groupIdField, + entityClassField, + countField, + ).from(activityModifiedEntityTable) + .join(activityRevisionTable) + .on( + DSL + .field("ame.activity_revision_id", Long::class.java) + .eq(DSL.field("ar.id", Long::class.java)), + ).join(activityRevisionActivityGroupsTable) + .on( + DSL + .field("ar.id", Long::class.java) + .eq(DSL.field("arag.activity_revisions_id", Long::class.java)), + ).join(activityGroupTable) + .on( + groupIdField.eq(DSL.field("ag.id", Long::class.java)), + ).where( + groupIdField + .`in`(groupIds) + .and(entityClassField.`in`(entityClasses)) + .and(groupType.matcher?.match(sqlContext)) + .and(getStringMatcherCondition()), + ).groupBy(entityClassField, groupIdField) + .fetch() + + return queryResult.groupBy { groupIdField.get(it)!! }.mapValues { rows -> + rows.value.associate { entityClassField.getValue(it)!! to countField.getValue(it)!! } + } + } + + private val sqlContext by lazy { + SqlContext( + modificationsField = DSL.field("ame.modifications", JSON::class.java), + entityClassField = entityClassField, + revisionTypeField = DSL.field("ame.revision_type", Int::class.java), + groupIdField = groupIdField, + baseLanguageField = DSL.field("ar.base_language_id", Long::class.java), + describingRelationsField = DSL.field("ame.describing_relations", JSON::class.java), + ) + } + + private fun getStringMatcherCondition(): Condition { + return groupType.matchingStringProvider + ?.provide(sqlContext) + ?.eq(DSL.field("ag.matching_string", String::class.java)) ?: DSL.noCondition() + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/DescribingEntitiesProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/DescribingEntitiesProvider.kt new file mode 100644 index 00000000000..142a9ae200d --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/DescribingEntitiesProvider.kt @@ -0,0 +1,81 @@ +package io.tolgee.activity.groups.dataProviders + +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.module.kotlin.readValue +import io.tolgee.activity.groups.data.DescribingEntityView +import io.tolgee.activity.groups.data.DescribingMapping +import io.tolgee.activity.groups.data.ModifiedEntityView +import org.jooq.DSLContext +import org.jooq.JSON +import org.jooq.impl.DSL + +class DescribingEntitiesProvider( + private val jooqContext: DSLContext, + private val objectMapper: ObjectMapper, + private val describingMapping: List, + private val entities: Iterable, +) { + private val describingEntityTable = DSL.table("activity_describing_entity").`as`("ade") + private val entityIdField = DSL.field("ade.entity_id", Long::class.java) + private val entityClassField = DSL.field("ade.entity_class", String::class.java) + private val dataField = DSL.field("ade.data", JSON::class.java) + private val describingRelationsField = DSL.field("ade.describing_relations", JSON::class.java) + private val activityRevisionIdField = DSL.field("ade.activity_revision_id", Long::class.java) + + fun provide(): Map> { + val views = + query + .fetch() + .map { + DescribingEntityView( + entityId = it.get(entityIdField), + entityClass = it.get(entityClassField), + data = objectMapper.readValue(it.get(dataField).data()), + describingRelations = objectMapper.readValue(it.get(describingRelationsField).data()), + activityRevisionId = it.get(activityRevisionIdField), + ) + } + + val grouped = refs.groupBy { it.first } + + return grouped.mapValues { (_, refs) -> + refs.mapNotNull { (entity, ref) -> + views.find { + it.entityId == ref.entityId && + it.entityClass == ref.entityClass && + it.activityRevisionId == entity.activityRevisionId + } + } + } + } + + val query by lazy { + jooqContext + .select(entityIdField, entityClassField, dataField, describingRelationsField, activityRevisionIdField) + .from(describingEntityTable) + .where(condition) + } + + val condition by lazy { + DSL.or( + refs.map { (entity, ref) -> + DSL + .condition(entityClassField.eq(ref.entityClass)) + .and(entityIdField.eq(ref.entityId)) + .and(activityRevisionIdField.eq(entity.activityRevisionId)) + }, + ) + } + + private val refs by lazy { + describingMapping.flatMap { mapping -> + entities.mapNotNull { entity -> + if (entity.entityClass != mapping.entityClass.simpleName) { + return@mapNotNull null + } + val ref = entity.describingRelations[mapping.field] ?: return@mapNotNull null + return@mapNotNull entity to ref + } + } + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/GenericRelationsProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/GenericRelationsProvider.kt new file mode 100644 index 00000000000..5097f36788d --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/GenericRelationsProvider.kt @@ -0,0 +1,82 @@ +package io.tolgee.activity.groups.dataProviders + +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.module.kotlin.readValue +import io.tolgee.activity.groups.data.DescribingEntityView +import io.tolgee.activity.groups.data.ModifiedEntityView +import org.jooq.DSLContext +import org.jooq.JSON +import org.jooq.impl.DSL + +/** + * Resolves whatever describing relations the given modified entities happen to have, + * without requiring a per-group-type mapping. + */ +class GenericRelationsProvider( + private val jooqContext: DSLContext, + private val objectMapper: ObjectMapper, + private val entities: List, +) { + private val entityIdField = DSL.field("ade.entity_id", Long::class.java) + private val entityClassField = DSL.field("ade.entity_class", String::class.java) + private val dataField = DSL.field("ade.data", JSON::class.java) + private val describingRelationsField = DSL.field("ade.describing_relations", JSON::class.java) + private val activityRevisionIdField = DSL.field("ade.activity_revision_id", Long::class.java) + + /** + * @return modified entity -> (relation field name -> describing entity) + */ + fun provide(): Map> { + if (refs.isEmpty()) { + return emptyMap() + } + + val views = + jooqContext + .select(entityIdField, entityClassField, dataField, describingRelationsField, activityRevisionIdField) + .from(DSL.table("activity_describing_entity").`as`("ade")) + .where( + DSL.or( + refs.map { (entity, _, ref) -> + entityClassField + .eq(ref.entityClass) + .and(entityIdField.eq(ref.entityId)) + .and(activityRevisionIdField.eq(entity.activityRevisionId)) + }, + ), + ).fetch() + .map { + DescribingEntityView( + entityId = it.get(entityIdField), + entityClass = it.get(entityClassField), + data = objectMapper.readValue(it.get(dataField).data()), + describingRelations = objectMapper.readValue(it.get(describingRelationsField).data()), + activityRevisionId = it.get(activityRevisionIdField), + ) + } + + return refs + .groupBy { it.first } + .mapValues { (_, entityRefs) -> + entityRefs + .mapNotNull { (entity, field, ref) -> + val view = + views.find { + it.entityId == ref.entityId && + it.entityClass == ref.entityClass && + it.activityRevisionId == entity.activityRevisionId + } ?: return@mapNotNull null + field to view + }.toMap() + } + } + + private val refs by lazy { + entities.flatMap { entity -> + entity.describingRelations.mapNotNull { (field, ref) -> + ref ?: return@mapNotNull null + Triple(entity, field, ref) + } + } + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/GroupDataProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/GroupDataProvider.kt new file mode 100644 index 00000000000..aa4ae08e8ca --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/GroupDataProvider.kt @@ -0,0 +1,128 @@ +package io.tolgee.activity.groups.dataProviders + +import com.fasterxml.jackson.databind.ObjectMapper +import io.tolgee.activity.groups.ActivityGroupType +import io.tolgee.activity.groups.data.DescribingEntityView +import io.tolgee.activity.groups.data.DescribingMapping +import io.tolgee.activity.groups.data.ModifiedEntityView +import io.tolgee.activity.groups.data.RelatedMapping +import io.tolgee.model.EntityWithId +import org.jooq.DSLContext +import org.jooq.impl.DSL +import org.springframework.data.domain.Page +import org.springframework.data.domain.Pageable +import org.springframework.stereotype.Component +import kotlin.reflect.KClass + +@Component +class GroupDataProvider( + private val jooqContext: DSLContext, + private val objectMapper: ObjectMapper, +) { + fun provideCounts( + groupType: ActivityGroupType, + entityClass: KClass, + groupIds: List, + ): Map { + val simpleNameString = entityClass.java.simpleName + + val result = + CountsProvider( + groupType = groupType, + entityClasses = listOf(simpleNameString), + groupIds = groupIds, + jooqContext = jooqContext, + ).provide() + + return result + .map { (groupId, counts) -> + groupId to (counts[simpleNameString] ?: 0) + }.toMap() + } + + fun provideRelevantModifiedEntities( + groupType: ActivityGroupType, + entityClass: KClass, + groupId: Long, + pageable: Pageable, + ): Page { + val simpleNameString = entityClass.java.simpleName + + return PagedRelevantModifiedEntitiesProvider( + jooqContext = jooqContext, + objectMapper = objectMapper, + groupType = groupType, + entityClasses = listOf(simpleNameString), + groupId = groupId, + pageable = pageable, + ).provide() + } + + fun getRelatedEntities( + groupType: ActivityGroupType, + relatedMappings: List, + groupId: Long, + ): Map>> { + val entityClasses = relatedMappings.map { it.entityClass }.toSet().map { it.java.simpleName } + + val entities = + RelevantModifiedEntitiesProvider( + jooqContext = jooqContext, + objectMapper = objectMapper, + groupType = groupType, + entityClasses = entityClasses, + additionalFilter = { context -> + DSL + .and( + context.groupIdField.eq(groupId), + ).and( + DSL.or( + relatedMappings.flatMap { mapping -> + mapping.entities.map { + DSL + .condition( + "(${context.describingRelationsField.name} -> ? -> 'entityId')::bigint = ?", + mapping.field, + it.entityId, + ).and(context.entityClassField.eq(mapping.entityClass.simpleName)) + } + }, + ), + ) + }, + ).provide() + + val allParents = relatedMappings.flatMap { it.entities } + + return allParents.associateWith { parent -> + relatedMappings.associateWith { mapping -> + entities.filter { entity -> + entity.entityClass == mapping.entityClass.simpleName && + entity.describingRelations.any { mapping.field == it.key && it.value?.entityId == parent.entityId } + } + } + } + } + + fun getGenericRelations( + entities: List, + ): Map> { + return GenericRelationsProvider( + jooqContext = jooqContext, + objectMapper = objectMapper, + entities = entities, + ).provide() + } + + fun getDescribingEntities( + entities: Iterable, + describingMapping: List, + ): Map> { + return DescribingEntitiesProvider( + entities = entities, + jooqContext = jooqContext, + objectMapper = objectMapper, + describingMapping = describingMapping, + ).provide() + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/PagedRelevantModifiedEntitiesProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/PagedRelevantModifiedEntitiesProvider.kt new file mode 100644 index 00000000000..404f1ffaae8 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/PagedRelevantModifiedEntitiesProvider.kt @@ -0,0 +1,36 @@ +package io.tolgee.activity.groups.dataProviders + +import com.fasterxml.jackson.databind.ObjectMapper +import io.tolgee.activity.groups.ActivityGroupType +import io.tolgee.activity.groups.data.ModifiedEntityView +import org.jooq.DSLContext +import org.jooq.impl.DSL +import org.springframework.data.domain.Page +import org.springframework.data.domain.PageImpl +import org.springframework.data.domain.Pageable + +class PagedRelevantModifiedEntitiesProvider( + jooqContext: DSLContext, + objectMapper: ObjectMapper, + groupType: ActivityGroupType, + entityClasses: List, + groupId: Long, + private val pageable: Pageable, +) { + private val baseProvider = + RelevantModifiedEntitiesProvider( + jooqContext = jooqContext, + objectMapper = objectMapper, + groupType = groupType, + entityClasses = entityClasses, + additionalFilter = { it.groupIdField.eq(groupId) }, + ) + + fun provide(): Page { + val count = getCountQuery().fetchOne(0, Int::class.java) ?: 0 + val content = baseProvider.provide(pageable) + return PageImpl(content, pageable, count.toLong()) + } + + private fun getCountQuery() = baseProvider.getQueryBase(DSL.count()) +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/RelevantModifiedEntitiesProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/RelevantModifiedEntitiesProvider.kt new file mode 100644 index 00000000000..ace23682570 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/dataProviders/RelevantModifiedEntitiesProvider.kt @@ -0,0 +1,96 @@ +package io.tolgee.activity.groups.dataProviders + +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.module.kotlin.readValue +import io.tolgee.activity.groups.ActivityGroupType +import io.tolgee.activity.groups.data.ModifiedEntityView +import io.tolgee.activity.groups.matchers.modifiedEntity.SqlContext +import org.jooq.Condition +import org.jooq.DSLContext +import org.jooq.JSON +import org.jooq.SelectField +import org.jooq.impl.DSL +import org.springframework.data.domain.Pageable + +class RelevantModifiedEntitiesProvider( + private val jooqContext: DSLContext, + private val objectMapper: ObjectMapper, + private val groupType: ActivityGroupType, + private val entityClasses: List, + private val additionalFilter: ((SqlContext) -> Condition)? = null, +) { + private val activityModifiedEntityTable = DSL.table("activity_modified_entity").`as`("ame") + private val activityRevisionTable = DSL.table("activity_revision").`as`("ar") + private val activityRevisionActivityGroupsTable = DSL.table("activity_revision_activity_groups").`as`("arag") + private val groupIdField = DSL.field("arag.activity_groups_id", Long::class.java) + private val entityClassField = DSL.field("ame.entity_class", String::class.java) + private val entityIdField = DSL.field("ame.entity_id", Long::class.java) + private val describingDataField = DSL.field("ame.describing_data", JSON::class.java) + private val describingRelationsField = DSL.field("ame.describing_relations", JSON::class.java) + private val modificationsField = DSL.field("ame.modifications", JSON::class.java) + private val activityRevisionId = DSL.field("ame.activity_revision_id", Long::class.java) + + private val sqlContext = + SqlContext( + modificationsField = DSL.field("ame.modifications", JSON::class.java), + entityClassField = entityClassField, + revisionTypeField = DSL.field("ame.revision_type", Int::class.java), + groupIdField = groupIdField, + baseLanguageField = DSL.field("ar.base_language_id", Long::class.java), + describingRelationsField = describingRelationsField, + ) + + fun getQueryBase(vararg fields: SelectField<*>) = + jooqContext + .select(*fields) + .from(activityModifiedEntityTable) + .join(activityRevisionTable) + .on( + DSL + .field("ame.activity_revision_id", Long::class.java) + .eq(DSL.field("ar.id", Long::class.java)), + ).join(activityRevisionActivityGroupsTable) + .on( + DSL + .field("ar.id", Long::class.java) + .eq(DSL.field("arag.activity_revisions_id", Long::class.java)), + ).where( + DSL + .and(entityClassField.`in`(entityClasses)) + .and( + groupType.matcher?.match(sqlContext), + ).and(additionalFilter?.let { it(sqlContext) } ?: DSL.noCondition()), + ) + + private fun getDataQuery() = + getQueryBase( + entityIdField, + entityClassField, + describingDataField, + describingRelationsField, + modificationsField, + activityRevisionId, + ) + + fun provide(pageable: Pageable? = null): List { + val query = + getDataQuery().orderBy(activityRevisionId.desc()).also { query -> + pageable?.let { + query.limit(it.pageSize).offset(it.offset) + } + } + + val queryResult = query.fetch() + + return queryResult.map { + ModifiedEntityView( + entityId = it.get(entityIdField)!!, + entityClass = it.get(entityClassField)!!, + describingData = objectMapper.readValue(it.get(describingDataField).data()), + describingRelations = objectMapper.readValue(it.get(describingRelationsField).data()), + modifications = objectMapper.readValue(it.get(modificationsField).data()), + activityRevisionId = activityRevisionId.get(it)!!, + ) + } + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/ActivityGroupValueMatcher.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/ActivityGroupValueMatcher.kt new file mode 100644 index 00000000000..9fafd88c6cc --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/ActivityGroupValueMatcher.kt @@ -0,0 +1,22 @@ +package io.tolgee.activity.groups.matchers + +import org.jooq.Condition +import org.jooq.Field +import org.jooq.JSON + +interface ActivityGroupValueMatcher { + fun match(value: Any?): Boolean + + fun createChildSqlCondition(field: Field): Condition + + fun createRootSqlCondition(field: Field): Condition + + companion object { + fun notNull() = NotNullValueMatcher() + + fun modification(pair: Pair) = + ModificationValueMatcher(pair.first, pair.second) + + fun eq(value: Any?) = EqualsValueMatcher(value) + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/EqualsValueMatcher.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/EqualsValueMatcher.kt new file mode 100644 index 00000000000..771128c889e --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/EqualsValueMatcher.kt @@ -0,0 +1,37 @@ +package io.tolgee.activity.groups.matchers + +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import io.tolgee.activity.data.PropertyModification +import org.jooq.Condition +import org.jooq.Field +import org.jooq.JSON +import org.jooq.impl.DSL + +class EqualsValueMatcher( + val value: Any?, +) : ActivityGroupValueMatcher { + override fun match(value: Any?): Boolean { + if (value is PropertyModification) { + return value.new == this.value + } + return this.value == value + } + + override fun createChildSqlCondition(field: Field): Condition { + // json has no equality operator in postgres, so compare as jsonb; + // an absent attribute yields SQL NULL, an attribute set to null yields JSON null + if (value == null) { + return DSL.condition("({0} is null or {0}::jsonb = 'null'::jsonb)", field) + } + return DSL.condition("{0}::jsonb = {1}::jsonb", field, DSL.`val`(jsonValue)) + } + + override fun createRootSqlCondition(field: Field): Condition { + val new = DSL.jsonGetAttribute(field, "new") + return createChildSqlCondition(new) + } + + private val jsonValue by lazy { + JSON.json(jacksonObjectMapper().writeValueAsString(value)) + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/ModificationValueMatcher.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/ModificationValueMatcher.kt new file mode 100644 index 00000000000..4f000d97a14 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/ModificationValueMatcher.kt @@ -0,0 +1,29 @@ +package io.tolgee.activity.groups.matchers + +import io.tolgee.activity.data.PropertyModification +import org.jooq.Condition +import org.jooq.Field +import org.jooq.JSON +import org.jooq.impl.DSL + +class ModificationValueMatcher( + val old: ActivityGroupValueMatcher, + val new: ActivityGroupValueMatcher, +) : ActivityGroupValueMatcher { + override fun match(value: Any?): Boolean { + if (value is PropertyModification) { + return old.match(value.old) && new.match(value.new) + } + throw IllegalArgumentException("Value is not PropertyModification") + } + + override fun createChildSqlCondition(field: Field): Condition { + throw UnsupportedOperationException("ModificationValueMatcher cannot be used as child condition") + } + + override fun createRootSqlCondition(field: Field): Condition { + val oldField = DSL.jsonGetAttribute(field, "old") + val newField = DSL.jsonGetAttribute(field, "new") + return old.createChildSqlCondition(oldField).and(new.createChildSqlCondition(newField)) + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/NotNullValueMatcher.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/NotNullValueMatcher.kt new file mode 100644 index 00000000000..ceb55a38338 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/NotNullValueMatcher.kt @@ -0,0 +1,26 @@ +package io.tolgee.activity.groups.matchers + +import io.tolgee.activity.data.PropertyModification +import org.jooq.Condition +import org.jooq.Field +import org.jooq.JSON +import org.jooq.impl.DSL + +class NotNullValueMatcher : ActivityGroupValueMatcher { + override fun match(value: Any?): Boolean { + if (value is PropertyModification) { + return value.new != null + } + return value != null + } + + override fun createChildSqlCondition(field: Field): Condition { + // an attribute set to null is JSON null, not SQL NULL + return DSL.condition("({0} is not null and {0}::jsonb <> 'null'::jsonb)", field) + } + + override fun createRootSqlCondition(field: Field): Condition { + val new = DSL.jsonGetAttribute(field, "new") + return createChildSqlCondition(new) + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/DefaultMatcher.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/DefaultMatcher.kt new file mode 100644 index 00000000000..62208d62b18 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/DefaultMatcher.kt @@ -0,0 +1,134 @@ +package io.tolgee.activity.groups.matchers.modifiedEntity + +import io.tolgee.activity.data.PropertyModification +import io.tolgee.activity.data.RevisionType +import io.tolgee.activity.groups.matchers.ActivityGroupValueMatcher +import io.tolgee.activity.groups.matchers.EqualsValueMatcher +import org.jooq.Condition +import org.jooq.impl.DSL +import kotlin.reflect.KClass +import kotlin.reflect.KProperty1 + +class DefaultMatcher( + val entityClass: KClass, + val revisionTypes: List, + val modificationProps: List>? = null, + val allowedValues: Map, Any?>? = null, + val deniedValues: Map, Any?>? = null, +) : ModifiedEntityMatcher { + override val relevantEntityClasses: Set> = setOf(entityClass) + + override fun match(context: StoringContext): Boolean { + if (context.modifiedEntity.entityClass != entityClass.simpleName) { + return false + } + + if (context.modifiedEntity.revisionType !in revisionTypes) { + return false + } + + val hasModifiedColumn = + context.modifiedEntity.modifications.any { modification -> + modificationProps?.any { it.name == modification.key } ?: true + } + + if (!hasModifiedColumn) { + return false + } + + if (!isAllValuesAllowed(context)) { + return false + } + + return isNoValueDenied(context) + } + + private fun isAllValuesAllowed(context: StoringContext): Boolean { + return context.modifiedEntity.modifications.all { modification -> + val allowedValueDefinition = + allowedValues?.filterKeys { it.name == modification.key }?.values?.firstOrNull() ?: return@all true + compareValue(allowedValueDefinition, modification.value) + } + } + + private fun isNoValueDenied(context: StoringContext): Boolean { + val isAnyDenied = + context.modifiedEntity.modifications.any { modification -> + deniedValues?.any { it.key.name == modification.key && compareValue(it.value, modification.value) } ?: false + } + return !isAnyDenied + } + + private fun compareValue( + matcher: Any?, + modification: PropertyModification, + ): Boolean { + return when (matcher) { + is ActivityGroupValueMatcher -> matcher.match(modification) + else -> matcher == modification.new + } + } + + override fun match(context: SqlContext): Condition { + return DSL.and( + getEntityClassCondition(context), + getRevisionTypeCondition(context), + getModificationPropsCondition(context), + getAllowedValuesCondition(context), + getDeniedValuesCondition(context), + ) + } + + private fun getModificationPropsCondition(context: SqlContext): Condition { + if (modificationProps != null) { + val props = modificationProps.map { it.name }.toTypedArray() + return DSL.arrayOverlap( + DSL.field( + "array(select jsonb_object_keys(${context.modificationsField.name}))::varchar[]", + Array::class.java, + ), + props, + ) + } + return DSL.noCondition() + } + + private fun getRevisionTypeCondition(context: SqlContext): Condition { + return context.revisionTypeField.`in`(revisionTypes.map { it.ordinal }) + } + + private fun getEntityClassCondition(context: SqlContext): Condition { + return context.entityClassField.eq(entityClass.simpleName) + } + + private fun getAllowedModString(): String { + return "{${modificationProps?.joinToString(",") { "'${it.name}'" }}}" + } + + private fun getAllowedValuesCondition(context: SqlContext): Condition { + val allowedValues = this.allowedValues ?: return DSL.noCondition() + val conditions = getValueMatcherConditions(context, allowedValues) + return DSL.and(conditions) + } + + private fun getDeniedValuesCondition(context: SqlContext): Condition { + val deniedValues = this.deniedValues ?: return DSL.noCondition() + val conditions = getValueMatcherConditions(context, deniedValues) + return DSL.not(DSL.or(conditions)) + } + + private fun getValueMatcherConditions( + context: SqlContext, + values: Map, Any?>, + ): List { + return values.map { (property, requiredValue) -> + val matcher = + when (requiredValue) { + is ActivityGroupValueMatcher -> requiredValue + else -> EqualsValueMatcher(requiredValue) + } + val propertyField = DSL.jsonGetAttribute(context.modificationsField, property.name) + matcher.createRootSqlCondition(propertyField) + } + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/MatchingStringProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/MatchingStringProvider.kt new file mode 100644 index 00000000000..8bb94bf8ec3 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/MatchingStringProvider.kt @@ -0,0 +1,9 @@ +package io.tolgee.activity.groups.matchers.modifiedEntity + +import org.jooq.Field + +interface MatchingStringProvider { + fun provide(context: StoringContext): String? + + fun provide(context: SqlContext): Field? +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/ModifiedEntityMatcher.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/ModifiedEntityMatcher.kt new file mode 100644 index 00000000000..eb9606a4f31 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/ModifiedEntityMatcher.kt @@ -0,0 +1,43 @@ +package io.tolgee.activity.groups.matchers.modifiedEntity + +import org.jooq.Condition +import org.jooq.impl.DSL +import kotlin.reflect.KClass + +interface ModifiedEntityMatcher { + val relevantEntityClasses: Set> + + fun match(context: StoringContext): Boolean + + fun match(context: SqlContext): Condition + + fun and(other: ModifiedEntityMatcher): ModifiedEntityMatcher { + return object : ModifiedEntityMatcher { + override val relevantEntityClasses = + this@ModifiedEntityMatcher.relevantEntityClasses + other.relevantEntityClasses + + override fun match(context: StoringContext): Boolean { + return this@ModifiedEntityMatcher.match(context) && other.match(context) + } + + override fun match(context: SqlContext): Condition { + return DSL.and(this@ModifiedEntityMatcher.match(context), other.match(context)) + } + } + } + + fun or(other: ModifiedEntityMatcher): ModifiedEntityMatcher { + return object : ModifiedEntityMatcher { + override val relevantEntityClasses = + this@ModifiedEntityMatcher.relevantEntityClasses + other.relevantEntityClasses + + override fun match(context: StoringContext): Boolean { + return this@ModifiedEntityMatcher.match(context) || other.match(context) + } + + override fun match(context: SqlContext): Condition { + return DSL.or(this@ModifiedEntityMatcher.match(context), other.match(context)) + } + } + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/SetTranslationMatchingStringProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/SetTranslationMatchingStringProvider.kt new file mode 100644 index 00000000000..bbc5052e202 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/SetTranslationMatchingStringProvider.kt @@ -0,0 +1,25 @@ +package io.tolgee.activity.groups.matchers.modifiedEntity + +import io.tolgee.model.translation.Translation +import org.jooq.Field +import org.jooq.impl.DSL + +class SetTranslationMatchingStringProvider : MatchingStringProvider { + override fun provide(context: StoringContext): String? { + if (context.modifiedEntity.entityClass != Translation::class.simpleName) { + return null + } + return context.modifiedEntity.describingRelations + ?.get("language") + ?.entityId + ?.toString() + ?: throw IllegalStateException("Language not found") + } + + override fun provide(context: SqlContext): Field { + return DSL.field( + "(${context.describingRelationsField.name} -> 'language' -> 'entityId')::varchar", + String::class.java, + ) + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/SqlContext.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/SqlContext.kt new file mode 100644 index 00000000000..10ed5f84f70 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/SqlContext.kt @@ -0,0 +1,16 @@ +package io.tolgee.activity.groups.matchers.modifiedEntity + +import org.jooq.Field +import org.jooq.JSON + +/** + * This is all the context that can be used when data are queried from the database + */ +class SqlContext( + val modificationsField: Field, + var entityClassField: Field, + var revisionTypeField: Field, + val groupIdField: Field, + val describingRelationsField: Field, + val baseLanguageField: Field, +) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/StoringContext.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/StoringContext.kt new file mode 100644 index 00000000000..b4f22c751e0 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/StoringContext.kt @@ -0,0 +1,12 @@ +package io.tolgee.activity.groups.matchers.modifiedEntity + +import io.tolgee.model.activity.ActivityModifiedEntity +import io.tolgee.model.activity.ActivityRevision + +/** + * This is all the context that is provided when storing the activity data + */ +class StoringContext( + val modifiedEntity: ActivityModifiedEntity, + val activityRevision: ActivityRevision, +) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/TranslationMatcher.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/TranslationMatcher.kt new file mode 100644 index 00000000000..35129fcab29 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/matchers/modifiedEntity/TranslationMatcher.kt @@ -0,0 +1,75 @@ +package io.tolgee.activity.groups.matchers.modifiedEntity + +import io.tolgee.activity.data.RevisionType +import io.tolgee.model.translation.Translation +import org.jooq.Condition +import org.jooq.impl.DSL +import kotlin.reflect.KClass + +class TranslationMatcher( + private val type: Type = Type.BASE, +) : ModifiedEntityMatcher { + override val relevantEntityClasses: Set> = setOf(Translation::class) + + private val defaultMatcher by lazy { + DefaultMatcher( + entityClass = Translation::class, + revisionTypes = listOf(RevisionType.ADD, RevisionType.MOD), + modificationProps = listOf(Translation::text), + ) + } + + override fun match(context: StoringContext): Boolean { + if (!defaultMatcher.match(context)) { + return false + } + + if (type == Type.ANY) { + return true + } + + val entityId = + context.modifiedEntity.describingRelations + ?.get("language") + ?.entityId + // non-base is the default, so we return true if it is not base translation + ?: return type == Type.NON_BASE + + val isBase = context.activityRevision.baseLanguageId == entityId + + if (type == Type.BASE) { + return isBase + } + + return !isBase + } + + override fun match(context: SqlContext): Condition { + val baseCondition = defaultMatcher.match(context) + + if (type == Type.ANY) { + return baseCondition + } + + val baseLanguageCondition = context.getSqlCondition() + + if (type == Type.BASE) { + return baseCondition.and(baseLanguageCondition) + } + + return baseCondition.and(baseLanguageCondition.not()) + } + + private fun SqlContext.getSqlCondition(): Condition { + val sqlCondition = + "(${describingRelationsField.name} -> 'language' -> 'entityId')::bigint = ${baseLanguageField.name}" + + return DSL.condition(sqlCondition) + } + + enum class Type { + BASE, + NON_BASE, + ANY, + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/createKey/CreateKeyGroupItemModel.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/createKey/CreateKeyGroupItemModel.kt new file mode 100644 index 00000000000..39243287c75 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/createKey/CreateKeyGroupItemModel.kt @@ -0,0 +1,23 @@ +package io.tolgee.activity.groups.viewProviders.createKey + +import io.swagger.v3.oas.annotations.media.Schema +import io.tolgee.api.IKeyModel +import io.tolgee.sharedDocs.Key +import org.springframework.hateoas.server.core.Relation + +@Relation(collectionRelation = "items", itemRelation = "item") +class CreateKeyGroupItemModel( + override val id: Long, + override val name: String, + override val namespace: String?, + @Schema(description = Key.IS_PLURAL_FIELD) + val isPlural: Boolean, + @Schema(description = Key.PLURAL_ARG_NAME_FIELD) + val pluralArgName: String?, + @Schema(description = "The base translation value entered when key was created") + val baseTranslationText: String?, + val tags: List, + override val description: String?, + override val custom: Map?, + val baseLanguageId: Long?, +) : IKeyModel diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/createKey/CreateKeyGroupModel.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/createKey/CreateKeyGroupModel.kt new file mode 100644 index 00000000000..04083fa0115 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/createKey/CreateKeyGroupModel.kt @@ -0,0 +1,5 @@ +package io.tolgee.activity.groups.viewProviders.createKey + +class CreateKeyGroupModel( + val keyCount: Int, +) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/createKey/CreateKeyGroupModelProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/createKey/CreateKeyGroupModelProvider.kt new file mode 100644 index 00000000000..dca76ec125e --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/createKey/CreateKeyGroupModelProvider.kt @@ -0,0 +1,114 @@ +package io.tolgee.activity.groups.viewProviders.createKey + +import io.tolgee.activity.groups.ActivityGroupType +import io.tolgee.activity.groups.GroupModelProvider +import io.tolgee.activity.groups.data.DescribingMapping +import io.tolgee.activity.groups.data.RelatedMapping +import io.tolgee.activity.groups.data.getFieldFromView +import io.tolgee.activity.groups.data.getFieldFromViewNullable +import io.tolgee.activity.groups.dataProviders.GroupDataProvider +import io.tolgee.model.key.Key +import io.tolgee.model.key.KeyMeta +import io.tolgee.model.key.Namespace +import io.tolgee.model.translation.Translation +import org.springframework.data.domain.Page +import org.springframework.data.domain.Pageable +import org.springframework.stereotype.Component + +@Component +class CreateKeyGroupModelProvider( + private val groupDataProvider: GroupDataProvider, +) : GroupModelProvider { + override fun provideGroup(groupIds: List): Map { + val keyCounts = + groupDataProvider.provideCounts(ActivityGroupType.CREATE_KEY, groupIds = groupIds, entityClass = Key::class) + + return groupIds.associateWith { + CreateKeyGroupModel( + keyCounts[it] ?: 0, + ) + } + } + + override fun provideItems( + groupId: Long, + pageable: Pageable, + ): Page { + val entities = + groupDataProvider.provideRelevantModifiedEntities( + ActivityGroupType.CREATE_KEY, + Key::class, + groupId, + pageable, + ) + + val translationMapping = + RelatedMapping( + entityClass = Translation::class, + field = "key", + entities, + ) + + val keyMetaMapping = + RelatedMapping( + entityClass = KeyMeta::class, + field = "key", + entities, + ) + + val relatedEntities = + groupDataProvider.getRelatedEntities( + groupType = ActivityGroupType.CREATE_KEY, + relatedMappings = + listOf( + keyMetaMapping, + translationMapping, + ), + groupId = groupId, + ) + + val descriptions = + groupDataProvider.getDescribingEntities( + entities, + listOf(DescribingMapping(Key::class, Key::namespace.name)), + ) + + return entities.map { entity -> + val baseTranslation = + relatedEntities[entity] + ?.get(translationMapping) + ?.singleOrNull() + + val baseTranslationText = + baseTranslation + ?.modifications + ?.get("text") + ?.new as? String + + val baseLanguageId = baseTranslation?.describingRelations?.get("language")?.entityId + + val keyMeta = + relatedEntities[entity] + ?.get(keyMetaMapping) + ?.singleOrNull() + + CreateKeyGroupItemModel( + entity.entityId, + name = entity.getFieldFromView(Key::name.name), + tags = (keyMeta?.getFieldFromViewNullable(KeyMeta::tags.name) as? List) ?: emptyList(), + description = keyMeta?.getFieldFromViewNullable(KeyMeta::description.name), + custom = keyMeta?.getFieldFromViewNullable(KeyMeta::custom.name), + isPlural = entity.getFieldFromView(Key::isPlural.name), + pluralArgName = entity.getFieldFromViewNullable(Key::pluralArgName.name), + namespace = + descriptions[entity] + ?.find { it.entityClass == Namespace::class.simpleName } + ?.data + ?.get(Namespace::name.name) + as? String, + baseTranslationText = baseTranslationText, + baseLanguageId = baseLanguageId, + ) + } + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/createProject/CreateProjectGroupModel.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/createProject/CreateProjectGroupModel.kt new file mode 100644 index 00000000000..62cf7391b5e --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/createProject/CreateProjectGroupModel.kt @@ -0,0 +1,10 @@ +package io.tolgee.activity.groups.viewProviders.createProject + +import io.tolgee.activity.groups.baseModels.ActivityGroupLanguageModel + +class CreateProjectGroupModel( + val id: Long, + val name: String, + val languages: List, + val description: String?, +) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/createProject/CreateProjectGroupModelProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/createProject/CreateProjectGroupModelProvider.kt new file mode 100644 index 00000000000..852a9038ad8 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/createProject/CreateProjectGroupModelProvider.kt @@ -0,0 +1,73 @@ +package io.tolgee.activity.groups.viewProviders.createProject + +import io.tolgee.activity.groups.GroupModelProvider +import io.tolgee.activity.groups.baseModels.ActivityGroupLanguageModel +import org.jooq.DSLContext +import org.jooq.impl.DSL +import org.springframework.data.domain.Page +import org.springframework.data.domain.Pageable +import org.springframework.stereotype.Component + +@Component +class CreateProjectGroupModelProvider( + private val jooqContext: DSLContext, +) : GroupModelProvider { + override fun provideGroup(groupIds: List): Map { + val query = + jooqContext + .select( + DSL.field("arag.activity_groups_id", Long::class.java).`as`("groupId"), + DSL.field("pme.modifications -> 'name' ->> 'new'", String::class.java).`as`("name"), + DSL.field("pme.modifications -> 'description' ->> 'new'", String::class.java).`as`("description"), + DSL.field("pme.entity_id").`as`("id"), + DSL.field("lme.modifications -> 'name' ->> 'new'", String::class.java).`as`("languageName"), + DSL.field("lme.entity_id", Long::class.java).`as`("languageId"), + DSL.field("lme.modifications -> 'tag' ->> 'new'", String::class.java).`as`("languageTag"), + DSL.field("lme.modifications -> 'originalName' ->> 'new'", String::class.java).`as`("languageOriginalName"), + DSL.field("lme.modifications -> 'flagEmoji' ->> 'new'", String::class.java).`as`("languageFlagEmoji"), + ).from(DSL.table("activity_modified_entity").`as`("pme")) + .join(DSL.table("activity_revision").`as`("ar")) + .on(DSL.field("pme.activity_revision_id").eq(DSL.field("ar.id"))) + .join(DSL.table("activity_revision_activity_groups").`as`("arag")) + .on(DSL.field("ar.id").eq(DSL.field("arag.activity_revisions_id"))) + .join(DSL.table("activity_modified_entity").`as`("lme")) + .on( + DSL + .field("lme.entity_class") + .eq(DSL.inline("Language")) + .and(DSL.field("lme.activity_revision_id").eq(DSL.field("ar.id"))), + ).where(DSL.field("arag.activity_groups_id").`in`(groupIds)) + .and(DSL.field("pme.entity_class").eq(DSL.inline("Project"))) + .fetch() + + return query + .groupBy { it["groupId"] as Long } + .map { (id, rows) -> + val languages = + rows.map { + ActivityGroupLanguageModel( + it["languageId"] as Long, + it["languageName"] as String, + it["languageOriginalName"] as String, + it["languageTag"] as String, + it["languageFlagEmoji"] as String, + ) + } + + id to + CreateProjectGroupModel( + id = id, + name = rows.first()["name"] as String, + description = rows.first()["description"] as String?, + languages = languages, + ) + }.toMap() + } + + override fun provideItems( + groupId: Long, + pageable: Pageable, + ): Page { + return Page.empty() + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/generic/GenericGroupItemModel.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/generic/GenericGroupItemModel.kt new file mode 100644 index 00000000000..6fcbbfbd789 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/generic/GenericGroupItemModel.kt @@ -0,0 +1,21 @@ +package io.tolgee.activity.groups.viewProviders.generic + +import io.tolgee.activity.data.PropertyModification + +data class GenericGroupItemModel( + val entityClass: String, + val entityId: Long, + val description: Map, + /** + * Related entities describing this one (e.g. the key and language of a translation), + * keyed by the relation name, with their describing data resolved. + */ + val relations: Map, + val modifications: Map, +) + +data class GenericGroupItemRelationModel( + val entityClass: String, + val entityId: Long, + val data: Map, +) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/generic/GenericGroupModel.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/generic/GenericGroupModel.kt new file mode 100644 index 00000000000..933da19c0b5 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/generic/GenericGroupModel.kt @@ -0,0 +1,5 @@ +package io.tolgee.activity.groups.viewProviders.generic + +data class GenericGroupModel( + val counts: Map, +) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/generic/GenericGroupModelProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/generic/GenericGroupModelProvider.kt new file mode 100644 index 00000000000..8d70c7801f5 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/generic/GenericGroupModelProvider.kt @@ -0,0 +1,90 @@ +package io.tolgee.activity.groups.viewProviders.generic + +import com.fasterxml.jackson.databind.ObjectMapper +import io.tolgee.activity.groups.ActivityGroupType +import io.tolgee.activity.groups.data.ModifiedEntityView +import io.tolgee.activity.groups.dataProviders.CountsProvider +import io.tolgee.activity.groups.dataProviders.GroupDataProvider +import io.tolgee.activity.groups.dataProviders.PagedRelevantModifiedEntitiesProvider +import org.jooq.DSLContext +import org.springframework.data.domain.Page +import org.springframework.data.domain.Pageable +import org.springframework.stereotype.Component + +/** + * Group data for group types without a specialized [io.tolgee.activity.groups.GroupModelProvider]: + * per-entity-class counts for the group header and paged modified entities, with their describing + * relations resolved, for the expanded view. + */ +@Component +class GenericGroupModelProvider( + private val jooqContext: DSLContext, + private val objectMapper: ObjectMapper, + private val groupDataProvider: GroupDataProvider, +) { + fun provideCounts( + groupType: ActivityGroupType, + groupIds: List, + ): Map { + val entityClasses = groupType.entityClassNames + if (entityClasses.isEmpty()) { + return emptyMap() + } + val counts = + CountsProvider( + jooqContext = jooqContext, + groupType = groupType, + entityClasses = entityClasses, + groupIds = groupIds, + ).provide() + return counts.mapValues { GenericGroupModel(it.value) } + } + + fun provideItems( + groupType: ActivityGroupType, + groupId: Long, + pageable: Pageable, + ): Page { + val entityClasses = groupType.entityClassNames + if (entityClasses.isEmpty()) { + return Page.empty(pageable) + } + + val entities = + PagedRelevantModifiedEntitiesProvider( + jooqContext = jooqContext, + objectMapper = objectMapper, + groupType = groupType, + entityClasses = entityClasses, + groupId = groupId, + pageable = pageable, + ).provide() + + val relations = groupDataProvider.getGenericRelations(entities.content) + + return entities.map { entity -> entity.toModel(relations[entity]) } + } + + private fun ModifiedEntityView.toModel( + relations: Map?, + ): GenericGroupItemModel { + return GenericGroupItemModel( + entityClass = entityClass, + entityId = entityId, + description = describingData, + relations = + relations + ?.mapValues { (_, view) -> + GenericGroupItemRelationModel( + entityClass = view.entityClass, + entityId = view.entityId, + data = view.data, + ) + }.orEmpty(), + modifications = modifications, + ) + } + + private val ActivityGroupType.entityClassNames: List + get() = matcher?.relevantEntityClasses?.mapNotNull { it.simpleName }.orEmpty() +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/setTranslations/SetTranslationsGroupItemModel.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/setTranslations/SetTranslationsGroupItemModel.kt new file mode 100644 index 00000000000..6337f6cd39b --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/setTranslations/SetTranslationsGroupItemModel.kt @@ -0,0 +1,12 @@ +package io.tolgee.activity.groups.viewProviders.setTranslations + +import io.tolgee.activity.data.PropertyModification +import io.tolgee.activity.groups.baseModels.ActivityGroupKeyModel +import org.springframework.hateoas.server.core.Relation + +@Relation(collectionRelation = "items", itemRelation = "item") +class SetTranslationsGroupItemModel( + val id: Long, + val text: PropertyModification, + val key: ActivityGroupKeyModel, +) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/setTranslations/SetTranslationsGroupModel.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/setTranslations/SetTranslationsGroupModel.kt new file mode 100644 index 00000000000..22eb2a4ec71 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/setTranslations/SetTranslationsGroupModel.kt @@ -0,0 +1,5 @@ +package io.tolgee.activity.groups.viewProviders.setTranslations + +class SetTranslationsGroupModel( + val translationCount: Int, +) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/setTranslations/SetTranslationsGroupModelProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/setTranslations/SetTranslationsGroupModelProvider.kt new file mode 100644 index 00000000000..8d0c72fb6c4 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/groups/viewProviders/setTranslations/SetTranslationsGroupModelProvider.kt @@ -0,0 +1,36 @@ +package io.tolgee.activity.groups.viewProviders.setTranslations + +import io.tolgee.activity.groups.ActivityGroupType +import io.tolgee.activity.groups.GroupModelProvider +import io.tolgee.activity.groups.dataProviders.GroupDataProvider +import io.tolgee.model.translation.Translation +import org.springframework.data.domain.Page +import org.springframework.data.domain.Pageable +import org.springframework.stereotype.Component + +@Component +class SetTranslationsGroupModelProvider( + private val groupDataProvider: GroupDataProvider, +) : GroupModelProvider { + override fun provideGroup(groupIds: List): Map { + val translationCounts = + groupDataProvider.provideCounts( + ActivityGroupType.SET_TRANSLATIONS, + groupIds = groupIds, + entityClass = Translation::class, + ) + + return groupIds.associateWith { + SetTranslationsGroupModel( + translationCounts[it] ?: 0, + ) + } + } + + override fun provideItems( + groupId: Long, + pageable: Pageable, + ): Page { + return Page.empty() + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/iterceptor/ActivityRevisionInitializer.kt b/backend/data/src/main/kotlin/io/tolgee/activity/iterceptor/ActivityRevisionInitializer.kt index 2e52222522c..e9d67fa35db 100644 --- a/backend/data/src/main/kotlin/io/tolgee/activity/iterceptor/ActivityRevisionInitializer.kt +++ b/backend/data/src/main/kotlin/io/tolgee/activity/iterceptor/ActivityRevisionInitializer.kt @@ -1,6 +1,7 @@ package io.tolgee.activity.iterceptor import io.tolgee.activity.ActivityHolder +import io.tolgee.activity.data.ActivityOrigin import io.tolgee.dtos.cacheable.ProjectDto import io.tolgee.dtos.cacheable.UserAccountDto import io.tolgee.model.activity.ActivityRevision @@ -27,10 +28,25 @@ class ActivityRevisionInitializer( revision.isInitializedByInterceptor = true revision.authorId = userAccount?.id ?: revision.authorId revision.organizationId = organizationId ?: revision.organizationId - revision.projectId = project?.id ?: revision.projectId + project?.let { revision.setProject(it) } revision.type = activityHolder.activity ?: revision.type + revision.originType = origin ?: revision.originType } + private val origin: ActivityOrigin? + get() { + if (authenticationFacade.authenticatedUserOrNull == null) { + return null + } + if (authenticationFacade.isProjectApiKeyAuth) { + return ActivityOrigin.API_KEY + } + if (authenticationFacade.isPersonalAccessTokenAuth) { + return ActivityOrigin.PAT + } + return ActivityOrigin.UI + } + /** * Lazily retrieves a project from ProjectHolder. * Returns null if a project is not selected diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/iterceptor/InterceptedEventsManager.kt b/backend/data/src/main/kotlin/io/tolgee/activity/iterceptor/InterceptedEventsManager.kt index 06baa8e20af..fa58d92ccfd 100644 --- a/backend/data/src/main/kotlin/io/tolgee/activity/iterceptor/InterceptedEventsManager.kt +++ b/backend/data/src/main/kotlin/io/tolgee/activity/iterceptor/InterceptedEventsManager.kt @@ -2,6 +2,7 @@ package io.tolgee.activity.iterceptor import io.tolgee.activity.ActivityService import io.tolgee.activity.EntityDescriptionProvider +import io.tolgee.activity.EntityIdentity import io.tolgee.activity.annotation.ActivityIgnoredProp import io.tolgee.activity.annotation.ActivityLoggedEntity import io.tolgee.activity.annotation.ActivityLoggedProp @@ -146,7 +147,13 @@ class InterceptedEventsManager( val changesMap = getChangesMap(entity, currentState, previousState, propertyNames) - activityModifiedEntity.revisionType = effectiveRevisionType + activityModifiedEntity.revisionType = + when { + // when we are replacing ADD with MOD, we want to keep ADD + activityModifiedEntity.revisionType == RevisionType.ADD && effectiveRevisionType == RevisionType.MOD -> + RevisionType.ADD + else -> effectiveRevisionType + } activityModifiedEntity.modifications.addAll(changesMap) activityModifiedEntity.setEntityDescription(entity) @@ -195,18 +202,24 @@ class InterceptedEventsManager( revisionType: RevisionType, state: Array? = null, ): ActivityModifiedEntity { + val classMap = activityHolder.modifiedEntities.computeIfAbsent(entity::class) { mutableMapOf() } + if (entity.id != 0L) { + // the entity may have been recorded before its id was allocated + classMap.remove(EntityIdentity(entity))?.let { + it.entityId = entity.id + classMap.putIfAbsent(entity.id, it) + } + } val activityModifiedEntity = - activityHolder.modifiedEntities - .computeIfAbsent(entity::class) { mutableMapOf() } - .computeIfAbsent( + classMap.computeIfAbsent( + if (entity.id != 0L) entity.id else EntityIdentity(entity), + ) { + ActivityModifiedEntity( + activityRevision, + entity::class.simpleName!!, entity.id, - ) { - ActivityModifiedEntity( - activityRevision, - entity::class.simpleName!!, - entity.id, - ).also { it.revisionType = revisionType } - } + ).also { it.revisionType = revisionType } + } activityModifiedEntity.branchId = resolveBranchId(entity, revisionType, state) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/ActivityItemsParser.kt b/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/ActivityItemsParser.kt new file mode 100644 index 00000000000..c7dccb1ca7d --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/ActivityItemsParser.kt @@ -0,0 +1,81 @@ +package io.tolgee.activity.rootActivity + +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.module.kotlin.readValue +import org.springframework.stereotype.Component + +@Component +class ActivityItemsParser( + private val objectMapper: ObjectMapper, +) { + fun parse(items: List>): List { + return items.map { + parseItem(it) + } + } + + private fun parseItem(item: Array): ActivityTreeResultItem { + val modifications = item[2].parseJsonOrNull() + val type = Type.getByValue(item[4] as String) + return ActivityTreeResultItem( + entityClass = item[0] as String, + description = getDescription(modifications, item), + modifications = modifications, + entityId = item[3] as Long, + type = type, + parentId = getParentId(item), + ) + } + + private fun getParentId(item: Array): Long? { + return try { + item[5] as? Long + } catch (e: IndexOutOfBoundsException) { + null + } + } + + private fun getDescription( + modifications: Map?, + item: Array, + ): Map { + val description = item[1].parseJsonOrNull()?.toMutableMap() ?: mutableMapOf() + + val new = getNewFromModifications(modifications) ?: return description + + return description + new + } + + private fun getNewFromModifications(modifications: Map?): Map? { + return modifications + ?.map { + @Suppress("UNCHECKED_CAST") + it.key to ((it.value as? Map)?.get("new")) + }?.toMap() + } + + private fun Any?.parseJsonOrNull(): Map? { + if (this is String) { + return try { + objectMapper.readValue>(this) + } catch (e: Exception) { + null + } + } + return null + } + + enum class Type( + val value: String, + ) { + MODIFIED_ENTITY("AME"), + DESCRIBING_ENTITY("ADE"), + ; + + companion object { + fun getByValue(value: String): Type { + return entries.first { it.value == value } + } + } + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/ActivityTreeDefinitionItem.kt b/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/ActivityTreeDefinitionItem.kt new file mode 100644 index 00000000000..5f57c7f9777 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/ActivityTreeDefinitionItem.kt @@ -0,0 +1,19 @@ +package io.tolgee.activity.rootActivity + +import io.tolgee.model.EntityWithId +import kotlin.reflect.KClass + +/** + * In some cases we need to return the data in activities in structured way by some root entity, for example for import + * we need to return the data rooted by key, so we can list the data on front-end nicely. + */ +class ActivityTreeDefinitionItem( + val entityClass: KClass, + /** + * The field of the child entity that describes the parent entity. + * E.g., For `Translation` entity this would be the `key` + */ + val describingField: String? = null, + val single: Boolean = false, + val children: Map = emptyMap(), +) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/ActivityTreeResultItem.kt b/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/ActivityTreeResultItem.kt new file mode 100644 index 00000000000..8b8da352a4a --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/ActivityTreeResultItem.kt @@ -0,0 +1,11 @@ +package io.tolgee.activity.rootActivity + +data class ActivityTreeResultItem( + val entityClass: String, + val description: Map?, + val modifications: Map?, + val entityId: Long, + val type: ActivityItemsParser.Type, + val parentId: Long?, + var children: MutableMap? = null, +) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/ChildItemsProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/ChildItemsProvider.kt new file mode 100644 index 00000000000..51db2a4ffd1 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/ChildItemsProvider.kt @@ -0,0 +1,57 @@ +package io.tolgee.activity.rootActivity + +import jakarta.persistence.EntityManager +import org.springframework.context.ApplicationContext + +class ChildItemsProvider( + private val activityRevisionId: List, + private val treeItem: ActivityTreeDefinitionItem, + private val applicationContext: ApplicationContext, + private val parentIds: List, +) { + fun provide(): List { + val rootItems = getItemsRaw() + return itemsParser.parse(rootItems) + } + + private fun getItemsRaw(): List> { + return entityManager + .createNativeQuery( + """ + select entity_class, ame.describing_data, modifications, ame.entity_id id, 'AME' as type, + (ame.describing_relations -> :describingField -> 'entityId')::bigint as parent_id + from activity_modified_entity ame + where ame.entity_class = :entityClass + and ame.activity_revision_id in :revisionIds + and (ame.describing_relations -> :describingField -> 'entityId')::bigint in :ids + union + select ade.entity_class, ade.data, null, ade.entity_id id, 'ADE' as type, + (ade.describing_relations -> :describingField -> 'entityId')::bigint as parent_id + from activity_describing_entity ade + where ade.activity_revision_id in :revisionIds + and ade.entity_class = :entityClass + and (ade.describing_relations -> :describingField -> 'entityId')::bigint in :ids + and ade.entity_id not in (select ame.entity_id id + from activity_modified_entity ame + where ame.activity_revision_id in :revisionIds + and ame.entity_class = :entityClass + and (ame.describing_relations -> :describingField -> 'entityId')::bigint in :ids + ) + order by id + """, + Array::class.java, + ).setParameter("entityClass", treeItem.entityClass.simpleName) + .setParameter("describingField", treeItem.describingField) + .setParameter("revisionIds", activityRevisionId) + .setParameter("ids", parentIds) + .resultList as List> + } + + val entityManager: EntityManager by lazy { + applicationContext.getBean(EntityManager::class.java) + } + + val itemsParser: ActivityItemsParser by lazy { + applicationContext.getBean(ActivityItemsParser::class.java) + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/RootActivityProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/RootActivityProvider.kt new file mode 100644 index 00000000000..365b08216e2 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/RootActivityProvider.kt @@ -0,0 +1,64 @@ +package io.tolgee.activity.rootActivity + +import io.tolgee.activity.groups.matchers.modifiedEntity.DefaultMatcher +import jakarta.persistence.EntityManager +import org.springframework.context.ApplicationContext +import org.springframework.data.domain.Pageable + +class RootActivityProvider( + private val applicationContext: ApplicationContext, + private val activityRevisionIds: List, + private val activityTreeDefinitionItem: ActivityTreeDefinitionItem, + private val pageable: Pageable, + filterModifications: List>? = null, +) { + private val filterModificationsByEntityClass = filterModifications?.groupBy { it.entityClass } + + private val rootItems by lazy { + val rootModificationItems = filterModificationsByEntityClass?.get(activityTreeDefinitionItem.entityClass) + + RootItemsProvider( + pageable, + activityRevisionIds, + activityTreeDefinitionItem.entityClass, + rootModificationItems, + applicationContext, + ).provide() + } + + fun provide(): List { + addChildren(activityTreeDefinitionItem, rootItems) + return rootItems + } + + private fun addChildren( + parentItemDefinition: ActivityTreeDefinitionItem, + parentItems: List, + ) { + val parentIds = parentItems.map { it.entityId } + parentItemDefinition.children.map { (key, item) -> + val childItems = + ChildItemsProvider(activityRevisionIds, item, applicationContext, parentIds).provide().groupBy { it.parentId } + + childItems.forEach { + addChildren(item, it.value) + } + + rootItems.forEach { parentItem -> + val children = + parentItem.children ?: let { + parentItem.children = mutableMapOf() + parentItem.children!! + } + + childItems[parentItem.entityId]?.let { + children[key] = if (item.single) it.singleOrNull() else it + } + } + } + } + + val entityManager: EntityManager by lazy { + applicationContext.getBean(EntityManager::class.java) + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/RootItemsProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/RootItemsProvider.kt new file mode 100644 index 00000000000..75519cb6749 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/RootItemsProvider.kt @@ -0,0 +1,90 @@ +package io.tolgee.activity.rootActivity + +import io.tolgee.activity.groups.matchers.modifiedEntity.DefaultMatcher +import io.tolgee.model.EntityWithId +import org.jooq.DSLContext +import org.jooq.impl.DSL.field +import org.jooq.impl.DSL.select +import org.jooq.impl.DSL.table +import org.jooq.impl.DSL.value +import org.springframework.context.ApplicationContext +import org.springframework.data.domain.Pageable +import kotlin.reflect.KClass + +class RootItemsProvider( + private val pageable: Pageable, + private val activityRevisionIds: List, + private val rootEntityClass: KClass, + rootModificationItems: List>?, + private val applicationContext: ApplicationContext, +) { + fun provide(): List { + val rootItems = getRootItemsRaw() + return itemsParser.parse(rootItems) + } + + fun getRootItemsRaw(): List> { + val limit = pageable.pageSize + val offset = pageable.offset + + val activityModifiedEntity = table("activity_modified_entity") + val activityDescribingEntity = table("activity_describing_entity") + + val ameEntityClass = field("entity_class", String::class.java) + val ameDescribingData = field("describing_data", Any::class.java) // Adjust type if needed + val ameModifications = field("modifications", Any::class.java) // Adjust type if needed + val ameEntityId = field("entity_id", Long::class.java) + val ameActivityRevisionId = field("activity_revision_id", Long::class.java) + + val adeEntityClass = field("entity_class", String::class.java) + val adeData = field("data", Any::class.java) // Adjust type if needed + val adeEntityId = field("entity_id", Long::class.java) + val adeActivityRevisionId = field("activity_revision_id", Long::class.java) + + val ameSelect = + select( + ameEntityClass, + ameDescribingData, + ameModifications, + ameEntityId.`as`("id"), + value("AME").`as`("type"), + ).from(activityModifiedEntity) + .where(ameEntityClass.eq(rootEntityClass.simpleName)) + .and(ameActivityRevisionId.`in`(activityRevisionIds)) + + val adeSubQuery = + select(ameEntityId) + .from(activityModifiedEntity) + .where(ameActivityRevisionId.`in`(activityRevisionIds)) + .and(ameEntityClass.eq(rootEntityClass.simpleName)) + + val adeSelect = + select( + adeEntityClass, + adeData, + value(null as Any?).`as`("modifications"), // Adjust type if needed + adeEntityId.`as`("id"), + value("ADE").`as`("type"), + ).from(activityDescribingEntity) + .where(adeActivityRevisionId.`in`(activityRevisionIds)) + .and(adeEntityClass.eq(rootEntityClass.simpleName)) + .and(adeEntityId.notIn(adeSubQuery)) + + val unionQuery = + ameSelect + .unionAll(adeSelect) + .orderBy(field("id")) + .limit(limit) + .offset(offset) + + return jooqContext.fetch(unionQuery).map { it.intoArray() }.toList() + } + + private val itemsParser: ActivityItemsParser by lazy { + applicationContext.getBean(ActivityItemsParser::class.java) + } + + private val jooqContext: DSLContext by lazy { + applicationContext.getBean(DSLContext::class.java) + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/keyRootActivityTree.kt b/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/keyRootActivityTree.kt new file mode 100644 index 00000000000..47935684871 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/rootActivity/keyRootActivityTree.kt @@ -0,0 +1,23 @@ +package io.tolgee.activity.rootActivity + +import io.tolgee.model.key.Key +import io.tolgee.model.key.KeyMeta +import io.tolgee.model.translation.Translation + +val KeyActivityTreeDefinitionItem = + ActivityTreeDefinitionItem( + entityClass = Key::class, + children = + mapOf( + "translations" to + ActivityTreeDefinitionItem( + describingField = "key", + entityClass = Translation::class, + ), + "keyMeta" to + ActivityTreeDefinitionItem( + describingField = "key", + entityClass = KeyMeta::class, + ), + ), + ) diff --git a/backend/data/src/main/kotlin/io/tolgee/activity/views/ModifiedEntitiesViewProvider.kt b/backend/data/src/main/kotlin/io/tolgee/activity/views/ModifiedEntitiesViewProvider.kt new file mode 100644 index 00000000000..bf9c66ead74 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/activity/views/ModifiedEntitiesViewProvider.kt @@ -0,0 +1,153 @@ +/** + * Copyright (C) 2023 Tolgee s.r.o. and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.tolgee.activity.views + +import io.sentry.Sentry +import io.tolgee.activity.annotation.ActivityReturnsExistence +import io.tolgee.activity.data.ActivityType +import io.tolgee.activity.data.EntityDescriptionRef +import io.tolgee.activity.data.ExistenceEntityDescription +import io.tolgee.model.activity.ActivityDescribingEntity +import io.tolgee.model.activity.ActivityModifiedEntity +import io.tolgee.model.views.activity.ModifiedEntityView +import io.tolgee.model.views.activity.SimpleModifiedEntityView +import io.tolgee.repository.activity.ActivityRevisionRepository +import io.tolgee.service.security.UserAccountService +import io.tolgee.util.EntityUtil +import jakarta.persistence.EntityManager +import org.springframework.context.ApplicationContext + +class ModifiedEntitiesViewProvider( + applicationContext: ApplicationContext, + private val modifiedEntities: Collection, +) { + val userAccountService: UserAccountService = + applicationContext.getBean(UserAccountService::class.java) + + private val activityRevisionRepository: ActivityRevisionRepository = + applicationContext.getBean(ActivityRevisionRepository::class.java) + + private val entityManager: EntityManager = + applicationContext.getBean(EntityManager::class.java) + + private val entityUtil: EntityUtil = + applicationContext.getBean(EntityUtil::class.java) + + private val describingEntities: Map> by lazy { fetchAllowedRevisionRelations() } + + private val entityExistences: Map, Boolean> by lazy { fetchEntityExistences() } + + fun get(): List { + return modifiedEntities.map entities@{ entity -> + val relations = getRelations(entity) + ModifiedEntityView( + entityClass = entity.entityClass, + entityId = entity.entityId, + exists = entityExistences[entity.entityClass to entity.entityId], + modifications = entity.modifications, + description = entity.describingData, + describingRelations = relations, + ) + } + } + + fun getSimple(): List { + return modifiedEntities.map entities@{ entity -> + val relations = getRelations(entity) + SimpleModifiedEntityView( + entityClass = entity.entityClass, + entityId = entity.entityId, + exists = entityExistences[entity.entityClass to entity.entityId], + modifications = entity.modifications, + description = entity.describingData, + describingRelations = relations, + ) + } + } + + private fun getRelations(entity: ActivityModifiedEntity): Map? { + return entity.describingRelations + ?.mapNotNull { + Pair( + it.key, + extractCompressedRef( + it.value, + describingEntities[entity.activityRevision.id] ?: let { _ -> + Sentry.captureException( + IllegalStateException("No relation data for revision ${entity.activityRevision.id}"), + ) + return@mapNotNull null + }, + ), + ) + }?.toMap() + } + + private fun fetchAllowedRevisionRelations(): Map> { + val revisionIds = modifiedEntities.map { it.activityRevision.id } + val allowedTypes = ActivityType.entries.filter { !it.onlyCountsInList } + return activityRevisionRepository + .getRelationsForRevisions(revisionIds, allowedTypes) + .groupBy { it.activityRevision.id } + } + + private fun fetchEntityExistences(): Map, Boolean> { + val modifiedEntityClassIdPairs = modifiedEntities.map { it.entityClass to it.entityId } + val relationsClassIdPairs = describingEntities.flatMap { (_, data) -> data.map { it.entityClass to it.entityId } } + val entities = (modifiedEntityClassIdPairs + relationsClassIdPairs).toHashSet() + + return entities + .groupBy { (entityClass, _) -> entityClass } + .mapNotNull { (entityClassName, classIdPairs) -> + val entityClass = entityUtil.getRealEntityClass(entityClassName) + val annotation = entityClass?.getAnnotation(ActivityReturnsExistence::class.java) + if (annotation != null) { + val cb = entityManager.criteriaBuilder + val query = cb.createQuery(Long::class.java) + val root = query.from(entityClass) + val ids = classIdPairs.map { it.second } + query.select(root.get("id")) + query.where(root.get("id").`in`(ids)) + val existingIds = entityManager.createQuery(query).resultList + return@mapNotNull (entityClassName to ids.map { it to existingIds.contains(it) }) + } + return@mapNotNull null + }.flatMap { (entityClassName, existingIds) -> existingIds.map { (entityClassName to it.first) to it.second } } + .toMap() + } + + private fun extractCompressedRef( + value: EntityDescriptionRef, + describingEntities: List, + ): ExistenceEntityDescription { + val entity = describingEntities.find { it.entityClass == value.entityClass && it.entityId == value.entityId } + + val relations = + entity + ?.describingRelations + ?.map { it.key to extractCompressedRef(it.value, describingEntities) } + ?.toMap() + + return ExistenceEntityDescription( + entityClass = value.entityClass, + entityId = value.entityId, + exists = entityExistences[value.entityClass to value.entityId], + data = entity?.data ?: mapOf(), + relations = relations ?: mapOf(), + ) + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/api/IKeyModel.kt b/backend/data/src/main/kotlin/io/tolgee/api/IKeyModel.kt new file mode 100644 index 00000000000..5a19fc77b26 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/api/IKeyModel.kt @@ -0,0 +1,23 @@ +package io.tolgee.api + +import io.swagger.v3.oas.annotations.media.Schema + +interface IKeyModel { + @get:Schema(description = "Id of key record") + val id: Long + + @get:Schema(description = "Name of key", example = "this_is_super_key") + val name: String + + @get:Schema(description = "Namespace of key", example = "homepage") + val namespace: String? + + @get:Schema( + description = "Description of key", + example = "This key is used on homepage. It's a label of sign up button.", + ) + val description: String? + + @get:Schema(description = "Custom values of the key") + val custom: Map? +} diff --git a/backend/data/src/main/kotlin/io/tolgee/api/ILanguageModel.kt b/backend/data/src/main/kotlin/io/tolgee/api/ILanguageModel.kt new file mode 100644 index 00000000000..5c377a7e1ac --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/api/ILanguageModel.kt @@ -0,0 +1,9 @@ +package io.tolgee.api + +interface ILanguageModel { + val id: Long + val name: String + val tag: String + val originalName: String? + val flagEmoji: String? +} diff --git a/backend/data/src/main/kotlin/io/tolgee/api/ProjectIdAndBaseLanguageId.kt b/backend/data/src/main/kotlin/io/tolgee/api/ProjectIdAndBaseLanguageId.kt new file mode 100644 index 00000000000..8d045c00951 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/api/ProjectIdAndBaseLanguageId.kt @@ -0,0 +1,6 @@ +package io.tolgee.api + +interface ProjectIdAndBaseLanguageId { + val id: Long + val baseLanguageId: Long? +} diff --git a/backend/data/src/main/kotlin/io/tolgee/api/SimpleUserAccount.kt b/backend/data/src/main/kotlin/io/tolgee/api/SimpleUserAccount.kt new file mode 100644 index 00000000000..a07e1a2200e --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/api/SimpleUserAccount.kt @@ -0,0 +1,9 @@ +package io.tolgee.api + +interface SimpleUserAccount { + val id: Long + val username: String + val name: String + val deleted: Boolean + val avatarHash: String? +} diff --git a/backend/data/src/main/kotlin/io/tolgee/batch/BatchJobActivityFinalizer.kt b/backend/data/src/main/kotlin/io/tolgee/batch/BatchJobActivityFinalizer.kt index 735eab1746e..5b0a6e1a877 100644 --- a/backend/data/src/main/kotlin/io/tolgee/batch/BatchJobActivityFinalizer.kt +++ b/backend/data/src/main/kotlin/io/tolgee/batch/BatchJobActivityFinalizer.kt @@ -56,6 +56,7 @@ class BatchJobActivityFinalizer( mergeDescribingEntities(activityRevisionIdToMergeInto, revisionIds) mergeModifiedEntities(activityRevisionIdToMergeInto, revisionIds) + mergeActivityGroups(activityRevisionIdToMergeInto, revisionIds) deleteUnusedRevisions(revisionIds) setJobIdAndAuthorIdToRevision(activityRevisionIdToMergeInto, job) applicationEventPublisher.publishEvent(OnBatchJobFinalized(job, activityRevisionIdToMergeInto)) @@ -121,6 +122,38 @@ class BatchJobActivityFinalizer( .executeUpdate() } + private fun mergeActivityGroups( + activityRevisionIdToMergeInto: Long, + revisionIds: MutableList, + ) { + if (revisionIds.isEmpty()) { + return + } + entityManager + .createNativeQuery( + """ + insert into activity_revision_activity_groups (activity_revisions_id, activity_groups_id) + select distinct :activityRevisionIdToMergeInto, activity_groups_id + from activity_revision_activity_groups + where activity_revisions_id in (:revisionIds) + and activity_groups_id not in ( + select activity_groups_id from activity_revision_activity_groups + where activity_revisions_id = :activityRevisionIdToMergeInto + ) + """, + ).setParameter("activityRevisionIdToMergeInto", activityRevisionIdToMergeInto) + .setParameter("revisionIds", revisionIds) + .executeUpdate() + + entityManager + .createNativeQuery( + """ + delete from activity_revision_activity_groups where activity_revisions_id in (:revisionIds) + """, + ).setParameter("revisionIds", revisionIds) + .executeUpdate() + } + private fun deleteUnusedRevisions(revisionIds: MutableList) { entityManager .createNativeQuery( diff --git a/backend/data/src/main/kotlin/io/tolgee/batch/ChunkProcessingUtil.kt b/backend/data/src/main/kotlin/io/tolgee/batch/ChunkProcessingUtil.kt index d412439dd3a..8ef8fc0d746 100644 --- a/backend/data/src/main/kotlin/io/tolgee/batch/ChunkProcessingUtil.kt +++ b/backend/data/src/main/kotlin/io/tolgee/batch/ChunkProcessingUtil.kt @@ -71,7 +71,7 @@ open class ChunkProcessingUtil( activityRevision.batchJobChunkExecution = execution job.projectId?.let { val project = projectService.getDto(it) - activityRevision.projectId = project.id + activityRevision.setProject(project) activityRevision.organizationId = project.organizationOwnerId } activityHolder.activity = job.type.activityType diff --git a/backend/data/src/main/kotlin/io/tolgee/batch/ProgressManager.kt b/backend/data/src/main/kotlin/io/tolgee/batch/ProgressManager.kt index 072b18a1d68..d9dd552efd9 100644 --- a/backend/data/src/main/kotlin/io/tolgee/batch/ProgressManager.kt +++ b/backend/data/src/main/kotlin/io/tolgee/batch/ProgressManager.kt @@ -282,7 +282,6 @@ class ProgressManager( } fun onJobCompletedCommitted(batchJob: BatchJobDto) { - eventPublisher.publishEvent(OnBatchJobStatusUpdated(batchJob.id, batchJob.projectId, batchJob.status)) cachingBatchJobService.evictJobCache(batchJob.id) batchJobProjectLockingManager.unlockJobForProject(batchJob.projectId, batchJob.id) batchJobStateProvider.removeJobState(batchJob.id) diff --git a/backend/data/src/main/kotlin/io/tolgee/component/demoProject/DemoProjectCreator.kt b/backend/data/src/main/kotlin/io/tolgee/component/demoProject/DemoProjectCreator.kt index 00aeec2a32d..b5a7d35250d 100644 --- a/backend/data/src/main/kotlin/io/tolgee/component/demoProject/DemoProjectCreator.kt +++ b/backend/data/src/main/kotlin/io/tolgee/component/demoProject/DemoProjectCreator.kt @@ -40,7 +40,7 @@ class DemoProjectCreator( fun createDemoProject(): Project { activityHolder.activity = ActivityType.CREATE_PROJECT - activityHolder.activityRevision.projectId = project.id + activityHolder.activityRevision.setProject(project) setStates() addBigMeta() addScreenshots() diff --git a/backend/data/src/main/kotlin/io/tolgee/component/eventListeners/LanguageStatsListener.kt b/backend/data/src/main/kotlin/io/tolgee/component/eventListeners/LanguageStatsListener.kt index 410c373d3ad..6618cc3130a 100644 --- a/backend/data/src/main/kotlin/io/tolgee/component/eventListeners/LanguageStatsListener.kt +++ b/backend/data/src/main/kotlin/io/tolgee/component/eventListeners/LanguageStatsListener.kt @@ -1,6 +1,7 @@ package io.tolgee.component.eventListeners import com.fasterxml.jackson.databind.ObjectMapper +import io.tolgee.activity.resolvedEntityId import io.tolgee.batch.data.BatchJobType import io.tolgee.batch.data.BatchTranslationTargetItem import io.tolgee.batch.events.OnBatchJobFinalized @@ -134,7 +135,11 @@ class LanguageStatsListener( event: OnProjectActivityEvent, branchIds: MutableSet, ) { - val keyIds = event.modifiedEntities[Key::class]?.keys.orEmpty() + val keyIds = + event.modifiedEntities[Key::class] + ?.entries + .orEmpty() + .map { it.resolvedEntityId } if (keyIds.isEmpty()) return keyIds.chunked(IN_CLAUSE_BATCH_SIZE).forEach { chunk -> @@ -146,7 +151,11 @@ class LanguageStatsListener( event: OnProjectActivityEvent, branchIds: MutableSet, ) { - val translationIds = event.modifiedEntities[Translation::class]?.keys.orEmpty() + val translationIds = + event.modifiedEntities[Translation::class] + ?.entries + .orEmpty() + .map { it.resolvedEntityId } if (translationIds.isEmpty()) return translationIds.chunked(IN_CLAUSE_BATCH_SIZE).forEach { chunk -> diff --git a/backend/data/src/main/kotlin/io/tolgee/development/testDataBuilder/data/dataImport/ImportTestData.kt b/backend/data/src/main/kotlin/io/tolgee/development/testDataBuilder/data/dataImport/ImportTestData.kt index f11d66e62ac..5f81cc2696a 100644 --- a/backend/data/src/main/kotlin/io/tolgee/development/testDataBuilder/data/dataImport/ImportTestData.kt +++ b/backend/data/src/main/kotlin/io/tolgee/development/testDataBuilder/data/dataImport/ImportTestData.kt @@ -372,6 +372,7 @@ class ImportTestData { fromImport = true author = userAccount } + description = "This is a key" } projectBuilder.data.imports[0].data.importFiles[0].data.importKeys[2].addMeta { diff --git a/backend/data/src/main/kotlin/io/tolgee/dtos/ComputedPermissionDto.kt b/backend/data/src/main/kotlin/io/tolgee/dtos/ComputedPermissionDto.kt index 74b68c53d45..51418153e22 100644 --- a/backend/data/src/main/kotlin/io/tolgee/dtos/ComputedPermissionDto.kt +++ b/backend/data/src/main/kotlin/io/tolgee/dtos/ComputedPermissionDto.kt @@ -99,7 +99,7 @@ class ComputedPermissionDto( ) companion object { - private fun getEmptyPermission( + fun getEmptyPermission( scopes: Array, type: ProjectPermissionType, ): IPermission { diff --git a/backend/data/src/main/kotlin/io/tolgee/dtos/cacheable/ProjectDto.kt b/backend/data/src/main/kotlin/io/tolgee/dtos/cacheable/ProjectDto.kt index d646ecb3f98..207ff384bd8 100644 --- a/backend/data/src/main/kotlin/io/tolgee/dtos/cacheable/ProjectDto.kt +++ b/backend/data/src/main/kotlin/io/tolgee/dtos/cacheable/ProjectDto.kt @@ -1,6 +1,7 @@ package io.tolgee.dtos.cacheable import io.tolgee.api.ISimpleProject +import io.tolgee.api.ProjectIdAndBaseLanguageId import io.tolgee.model.Project import io.tolgee.model.enums.SuggestionsMode import io.tolgee.model.enums.TranslationProtection @@ -15,13 +16,15 @@ data class ProjectDto( var aiTranslatorPromptDescription: String?, override var avatarHash: String? = null, override var icuPlaceholders: Boolean, + override val baseLanguageId: Long?, var useNamespaces: Boolean, var useBranching: Boolean, var useQaChecks: Boolean, var suggestionsMode: SuggestionsMode, var translationProtection: TranslationProtection, ) : Serializable, - ISimpleProject { + ISimpleProject, + ProjectIdAndBaseLanguageId { companion object { fun fromEntity(entity: Project) = ProjectDto( @@ -33,6 +36,7 @@ data class ProjectDto( aiTranslatorPromptDescription = entity.aiTranslatorPromptDescription, avatarHash = entity.avatarHash, icuPlaceholders = entity.icuPlaceholders, + baseLanguageId = entity.baseLanguageId, useNamespaces = entity.useNamespaces, useBranching = entity.useBranching, useQaChecks = entity.useQaChecks, diff --git a/backend/data/src/main/kotlin/io/tolgee/dtos/queryResults/ActivityGroupView.kt b/backend/data/src/main/kotlin/io/tolgee/dtos/queryResults/ActivityGroupView.kt new file mode 100644 index 00000000000..24e990cf263 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/dtos/queryResults/ActivityGroupView.kt @@ -0,0 +1,15 @@ +package io.tolgee.dtos.queryResults + +import io.tolgee.activity.groups.ActivityGroupType +import io.tolgee.api.SimpleUserAccount + +data class ActivityGroupView( + val id: Long, + val type: ActivityGroupType, + val timestamp: java.util.Date, + var data: Any? = null, + var author: SimpleUserAccount, + var mentionedLanguageIds: List, + var sourceActivityTypes: List = emptyList(), + var origins: List = emptyList(), +) diff --git a/backend/data/src/main/kotlin/io/tolgee/dtos/queryResults/TranslationHistoryView.kt b/backend/data/src/main/kotlin/io/tolgee/dtos/queryResults/TranslationHistoryView.kt index 202f0729463..1d046537379 100644 --- a/backend/data/src/main/kotlin/io/tolgee/dtos/queryResults/TranslationHistoryView.kt +++ b/backend/data/src/main/kotlin/io/tolgee/dtos/queryResults/TranslationHistoryView.kt @@ -7,7 +7,7 @@ import java.util.Date interface TranslationHistoryView { var modifications: Map? var timestamp: Date - var authorName: String? + var authorName: String var authorAvatarHash: String? var authorEmail: String? var authorDeletedAt: Date? diff --git a/backend/data/src/main/kotlin/io/tolgee/dtos/request/ActivityGroupFilters.kt b/backend/data/src/main/kotlin/io/tolgee/dtos/request/ActivityGroupFilters.kt new file mode 100644 index 00000000000..66b8cb3c9de --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/dtos/request/ActivityGroupFilters.kt @@ -0,0 +1,9 @@ +package io.tolgee.dtos.request + +import io.tolgee.activity.groups.ActivityGroupType + +class ActivityGroupFilters { + var filterType: ActivityGroupType? = null + var filterLanguageIdIn: List? = null + var filterAuthorUserIdIn: List? = null +} diff --git a/backend/data/src/main/kotlin/io/tolgee/dtos/request/key/CreateKeyDto.kt b/backend/data/src/main/kotlin/io/tolgee/dtos/request/key/CreateKeyDto.kt index bbf1a2c1c7f..e79aa1c1cfb 100644 --- a/backend/data/src/main/kotlin/io/tolgee/dtos/request/key/CreateKeyDto.kt +++ b/backend/data/src/main/kotlin/io/tolgee/dtos/request/key/CreateKeyDto.kt @@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema import io.tolgee.dtos.RelatedKeyDto import io.tolgee.dtos.WithRelatedKeysInOrder import io.tolgee.model.enums.AssignableTranslationState +import io.tolgee.sharedDocs.Key import io.tolgee.util.getSafeNamespace import jakarta.validation.constraints.Min import jakarta.validation.constraints.NotBlank @@ -41,7 +42,7 @@ class CreateKeyDto( example = "This key is used on homepage. It's a label of sign up button.", ) val description: String? = null, - @Schema(description = "If key is pluralized. If it will be reflected in the editor") + @Schema(description = Key.IS_PLURAL_FIELD) val isPlural: Boolean = false, @Schema( description = diff --git a/backend/data/src/main/kotlin/io/tolgee/dtos/request/key/EditKeyDto.kt b/backend/data/src/main/kotlin/io/tolgee/dtos/request/key/EditKeyDto.kt index e7794a6f24d..bc9900136d6 100644 --- a/backend/data/src/main/kotlin/io/tolgee/dtos/request/key/EditKeyDto.kt +++ b/backend/data/src/main/kotlin/io/tolgee/dtos/request/key/EditKeyDto.kt @@ -15,7 +15,7 @@ data class EditKeyDto( @field:Length(max = 2000) var name: String = "", @field:Length(max = ValidationConstants.MAX_NAMESPACE_LENGTH) - @Schema(description = "The namespace of the key. (When empty or null default namespace will be used)") + @Schema(description = "The namespace of the key. (When empty or null, no namespace will be used)") @JsonProperty(access = JsonProperty.Access.READ_ONLY) var namespace: String? = null, @Schema(description = "The branch of the key. (When empty or null default branch will be used)") diff --git a/backend/data/src/main/kotlin/io/tolgee/model/Project.kt b/backend/data/src/main/kotlin/io/tolgee/model/Project.kt index fe1e9e0f90e..abaf94365d2 100644 --- a/backend/data/src/main/kotlin/io/tolgee/model/Project.kt +++ b/backend/data/src/main/kotlin/io/tolgee/model/Project.kt @@ -3,6 +3,8 @@ package io.tolgee.model import io.tolgee.activity.annotation.ActivityLoggedEntity import io.tolgee.activity.annotation.ActivityLoggedProp import io.tolgee.api.ISimpleProject +import io.tolgee.api.ProjectIdAndBaseLanguageId +import io.tolgee.exceptions.NotFoundException import io.tolgee.model.automations.Automation import io.tolgee.model.branching.Branch import io.tolgee.model.contentDelivery.ContentDeliveryConfig @@ -83,7 +85,8 @@ class Project( ModelWithAvatar, EntityWithId, SoftDeletable, - ISimpleProject { + ISimpleProject, + ProjectIdAndBaseLanguageId { @OrderBy("id") @OneToMany(fetch = FetchType.LAZY, mappedBy = "project") var languages: MutableSet = LinkedHashSet() @@ -97,7 +100,6 @@ class Project( @OneToMany(fetch = FetchType.LAZY, mappedBy = "project") var apiKeys: MutableSet = LinkedHashSet() - @Suppress("SetterBackingFieldAssignment") @ManyToOne(optional = true, fetch = FetchType.LAZY) @Deprecated(message = "Project can be owned only by organization") var userOwner: UserAccount? = null @@ -135,16 +137,16 @@ class Project( @Transient override var disableActivityLogging = false - @OneToMany(orphanRemoval = true, mappedBy = "project") + @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true, mappedBy = "project") var automations: MutableList = mutableListOf() - @OneToMany(orphanRemoval = true, mappedBy = "project") + @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true, mappedBy = "project") var contentDeliveryConfigs: MutableList = mutableListOf() - @OneToMany(orphanRemoval = true, mappedBy = "project") + @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true, mappedBy = "project") var contentStorages: MutableList = mutableListOf() - @OneToMany(orphanRemoval = true, mappedBy = "project") + @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true, mappedBy = "project") var webhookConfigs: MutableList = mutableListOf() @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true, mappedBy = "project") @@ -239,4 +241,7 @@ class Project( } } } + + override val baseLanguageId: Long? + get() = this.baseLanguage?.id } diff --git a/backend/data/src/main/kotlin/io/tolgee/model/UserAccount.kt b/backend/data/src/main/kotlin/io/tolgee/model/UserAccount.kt index 2759f5deda0..439f9a7e823 100644 --- a/backend/data/src/main/kotlin/io/tolgee/model/UserAccount.kt +++ b/backend/data/src/main/kotlin/io/tolgee/model/UserAccount.kt @@ -3,6 +3,7 @@ package io.tolgee.model import io.hypersistence.utils.hibernate.type.array.ListArrayType import io.tolgee.activity.annotation.ActivityLoggedEntity import io.tolgee.api.IUserAccount +import io.tolgee.api.SimpleUserAccount import io.tolgee.component.ThirdPartyAuthTypeConverter import io.tolgee.model.enums.ThirdPartyAuthType import io.tolgee.model.slackIntegration.SlackConfig @@ -37,7 +38,7 @@ data class UserAccount( @field:NotBlank override var username: String = "", var password: String? = null, - var name: String = "", + override var name: String = "", @Enumerated(EnumType.STRING) var role: Role? = Role.USER, /** @@ -55,6 +56,7 @@ data class UserAccount( ) : AuditModel(), ModelWithAvatar, IUserAccount, + SimpleUserAccount, EntityWithId { @Column(name = "totp_key", columnDefinition = "bytea") override var totpKey: ByteArray? = null @@ -144,6 +146,9 @@ data class UserAccount( @OneToMany(mappedBy = "userAccount", fetch = FetchType.LAZY, orphanRemoval = true) var slackConfig: MutableList = mutableListOf() + override val deleted: Boolean + get() = deletedAt != null + @ManyToMany(mappedBy = "assignees") var tasks: MutableSet = mutableSetOf() diff --git a/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityDescribingEntity.kt b/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityDescribingEntity.kt index f2d28ac8f06..ce4eb8caad8 100644 --- a/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityDescribingEntity.kt +++ b/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityDescribingEntity.kt @@ -23,12 +23,17 @@ class ActivityDescribingEntity( val entityClass: String, @Id val entityId: Long, -) : Serializable { +) : Serializable, + ActivityEntityWithDescription { @Column(columnDefinition = "jsonb") @Type(JsonBinaryType::class) var data: Map = mutableMapOf() @Type(JsonBinaryType::class) @Column(columnDefinition = "jsonb") - var describingRelations: Map? = null + override var describingRelations: Map? = null + + @Column(columnDefinition = "jsonb") + @Type(JsonBinaryType::class) + override var additionalDescription: MutableMap? = null } diff --git a/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityEntityWithDescription.kt b/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityEntityWithDescription.kt new file mode 100644 index 00000000000..7e976f76186 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityEntityWithDescription.kt @@ -0,0 +1,20 @@ +package io.tolgee.model.activity + +import io.tolgee.activity.data.EntityDescriptionRef + +interface ActivityEntityWithDescription { + val describingRelations: Map? + + /** + * This field is filled by components implementing [io.tolgee.activity.ActivityAdditionalDescriber] + */ + var additionalDescription: MutableMap? + + fun initAdditionalDescription(): MutableMap { + return additionalDescription ?: let { + val value = mutableMapOf() + additionalDescription = value + value + } + } +} diff --git a/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityGroup.kt b/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityGroup.kt new file mode 100644 index 00000000000..4680967f537 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityGroup.kt @@ -0,0 +1,49 @@ +package io.tolgee.model.activity + +import io.tolgee.activity.groups.ActivityGroupType +import jakarta.persistence.Column +import jakarta.persistence.Entity +import jakarta.persistence.EnumType +import jakarta.persistence.Enumerated +import jakarta.persistence.GeneratedValue +import jakarta.persistence.GenerationType +import jakarta.persistence.Id +import jakarta.persistence.ManyToMany +import jakarta.persistence.SequenceGenerator + +@Entity +class ActivityGroup( + @Enumerated(EnumType.STRING) + var type: ActivityGroupType, +) { + @Id + @SequenceGenerator( + name = "activitySequenceGenerator", + sequenceName = "activity_sequence", + initialValue = 0, + allocationSize = 10, + ) + @GeneratedValue( + strategy = GenerationType.SEQUENCE, + generator = "activitySequenceGenerator", + ) + val id: Long = 0 + + /** + * We don't want a foreign key, since user could have been deleted + */ + var authorId: Long? = null + + /** + * Project of the change + */ + var projectId: Long? = null + + @Column(name = "branch_id") + var branchId: Long? = null + + @ManyToMany(mappedBy = "activityGroups") + var activityRevisions: MutableList = mutableListOf() + + var matchingString: String? = null +} diff --git a/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityModifiedEntity.kt b/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityModifiedEntity.kt index e39c5b24e1e..af5fab50b71 100644 --- a/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityModifiedEntity.kt +++ b/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityModifiedEntity.kt @@ -37,11 +37,13 @@ class ActivityModifiedEntity( @Id val entityClass: String, /** - * ID of the modified entity + * ID of the modified entity. Can be recorded before the entity's id is allocated; + * the interceptor sets the real id as soon as it's known. */ @Id - val entityId: Long, -) : Serializable { + var entityId: Long, +) : Serializable, + ActivityEntityWithDescription { @Column(name = "branch_id") var branchId: Long? = null @@ -58,7 +60,11 @@ class ActivityModifiedEntity( /** Related-entity refs describing the entity (e.g. a Translation's key and language). */ @Column(columnDefinition = "jsonb") @Type(JsonBinaryType::class) - var describingRelations: DescribingRelationsMap? = null + override var describingRelations: DescribingRelationsMap? = null + + @Column(columnDefinition = "jsonb") + @Type(JsonBinaryType::class) + override var additionalDescription: MutableMap? = null @Enumerated var revisionType: RevisionType = RevisionType.MOD diff --git a/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityRevision.kt b/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityRevision.kt index 10dcab49a2f..1ed7ad9db89 100644 --- a/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityRevision.kt +++ b/backend/data/src/main/kotlin/io/tolgee/model/activity/ActivityRevision.kt @@ -1,7 +1,9 @@ package io.tolgee.model.activity import io.hypersistence.utils.hibernate.type.json.JsonBinaryType +import io.tolgee.activity.data.ActivityOrigin import io.tolgee.activity.data.ActivityType +import io.tolgee.api.ProjectIdAndBaseLanguageId import io.tolgee.component.CurrentDateProvider import io.tolgee.model.batch.BatchJob import io.tolgee.model.batch.BatchJobChunkExecution @@ -15,6 +17,7 @@ import jakarta.persistence.GeneratedValue import jakarta.persistence.GenerationType import jakarta.persistence.Id import jakarta.persistence.Index +import jakarta.persistence.ManyToMany import jakarta.persistence.OneToMany import jakarta.persistence.OneToOne import jakarta.persistence.PrePersist @@ -70,6 +73,14 @@ class ActivityRevision : java.io.Serializable { @Enumerated(EnumType.STRING) var type: ActivityType? = null + /** + * How the request producing this revision was authenticated (null for + * system-triggered activity, e.g. batch chunk processing). + */ + @Enumerated(EnumType.STRING) + @Column(name = "origin_type") + var originType: ActivityOrigin? = null + /** * Project of the change */ @@ -109,6 +120,20 @@ class ActivityRevision : java.io.Serializable { @Transient var cancelledBatchJobExecutionCount: Int? = null + @ManyToMany + var activityGroups: MutableList = mutableListOf() + + /** + * We need to store it to know which language was the base language when the change was made + * for group and filtering purposes + */ + var baseLanguageId: Long? = null + + fun setProject(project: ProjectIdAndBaseLanguageId) { + this.projectId = project.id + this.baseLanguageId = project.baseLanguageId + } + companion object { @Configurable class ActivityRevisionListener { diff --git a/backend/data/src/main/kotlin/io/tolgee/model/key/Key.kt b/backend/data/src/main/kotlin/io/tolgee/model/key/Key.kt index d4e3649ac1a..b0491c13c40 100644 --- a/backend/data/src/main/kotlin/io/tolgee/model/key/Key.kt +++ b/backend/data/src/main/kotlin/io/tolgee/model/key/Key.kt @@ -1,5 +1,6 @@ package io.tolgee.model.key +import com.fasterxml.jackson.annotation.JsonIgnore import io.tolgee.activity.annotation.ActivityDescribingProp import io.tolgee.activity.annotation.ActivityEntityDescribingPaths import io.tolgee.activity.annotation.ActivityLoggedEntity @@ -100,10 +101,12 @@ class Key( var keyScreenshotReferences: MutableList = mutableListOf() @ActivityLoggedProp + @ActivityDescribingProp @ColumnDefault("false") var isPlural: Boolean = false @ActivityLoggedProp + @ActivityDescribingProp var pluralArgName: String? = null @ActivityLoggedProp @@ -124,6 +127,7 @@ class Key( this.translations = translations } + @get:JsonIgnore val path: PathDTO get() = PathDTO.fromFullPath(name) diff --git a/backend/data/src/main/kotlin/io/tolgee/model/views/activity/SimpleModifiedEntityView.kt b/backend/data/src/main/kotlin/io/tolgee/model/views/activity/SimpleModifiedEntityView.kt new file mode 100644 index 00000000000..b04287a8dff --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/model/views/activity/SimpleModifiedEntityView.kt @@ -0,0 +1,29 @@ +/** + * Copyright (C) 2023 Tolgee s.r.o. and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.tolgee.model.views.activity + +import io.tolgee.activity.data.ExistenceEntityDescription +import io.tolgee.activity.data.PropertyModification + +data class SimpleModifiedEntityView( + val entityClass: String, + val entityId: Long, + val exists: Boolean?, + var modifications: Map = mutableMapOf(), + var description: Map? = null, + var describingRelations: Map? = null, +) diff --git a/backend/data/src/main/kotlin/io/tolgee/repository/LanguageRepository.kt b/backend/data/src/main/kotlin/io/tolgee/repository/LanguageRepository.kt index a1ea43b2bb9..48b77552176 100644 --- a/backend/data/src/main/kotlin/io/tolgee/repository/LanguageRepository.kt +++ b/backend/data/src/main/kotlin/io/tolgee/repository/LanguageRepository.kt @@ -4,6 +4,7 @@ import io.tolgee.dtos.cacheable.LanguageDto import io.tolgee.dtos.cacheable.OrganizationLanguageDto import io.tolgee.dtos.request.language.LanguageFilters import io.tolgee.model.Language +import io.tolgee.model.Project import org.springframework.context.annotation.Lazy import org.springframework.data.domain.Page import org.springframework.data.domain.Pageable @@ -24,7 +25,7 @@ interface LanguageRepository : JpaRepository { ) fun findByNameAndProject( name: String?, - project: io.tolgee.model.Project, + project: Project, ): Optional @Query( @@ -228,6 +229,18 @@ interface LanguageRepository : JpaRepository { ) fun findAllDtosByProjectId(projectId: Long): List + @Query( + """ + SELECT new map(t.id as translationId, t.language.id as languageId) + FROM Translation t + WHERE t.id IN :translationIds + """, + ) + fun findLanguageIdsOfTranslations(translationIds: List): List> + + @Query("SELECT l.id FROM Language l, Project p WHERE p.id = :projectId AND l = p.baseLanguage") + fun getBaseLanguageForProjectId(projectId: Long): Long? + companion object { const val LANGUAGE_FILTERS = """ ( diff --git a/backend/data/src/main/kotlin/io/tolgee/repository/UserAccountRepository.kt b/backend/data/src/main/kotlin/io/tolgee/repository/UserAccountRepository.kt index 6a06da8e310..95f311264ca 100644 --- a/backend/data/src/main/kotlin/io/tolgee/repository/UserAccountRepository.kt +++ b/backend/data/src/main/kotlin/io/tolgee/repository/UserAccountRepository.kt @@ -319,7 +319,7 @@ interface UserAccountRepository : JpaRepository { @Query( value = """ - select ua from UserAccount ua where id in (:ids) + select ua from UserAccount ua where ua.id in (:ids) """, ) fun getAllByIdsIncludingDeleted(ids: Set): MutableList diff --git a/backend/data/src/main/kotlin/io/tolgee/repository/activity/ActivityGroupRepository.kt b/backend/data/src/main/kotlin/io/tolgee/repository/activity/ActivityGroupRepository.kt new file mode 100644 index 00000000000..1438bac13d4 --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/repository/activity/ActivityGroupRepository.kt @@ -0,0 +1,40 @@ +package io.tolgee.repository.activity + +import io.tolgee.model.activity.ActivityGroup +import org.springframework.data.jpa.repository.JpaRepository +import org.springframework.data.jpa.repository.Query +import org.springframework.stereotype.Repository + +@Repository +interface ActivityGroupRepository : JpaRepository { + @Query( + nativeQuery = true, + value = """ + SELECT + ag.id, + ag.type, + ag.matching_string, + MAX(ar.timestamp) AS last_activity, + MIN(ar.timestamp) AS first_activity + FROM activity_group ag + left JOIN activity_revision_activity_groups arag ON arag.activity_groups_id = ag.id + left JOIN activity_revision ar ON ar.id = arag.activity_revisions_id + WHERE + ag.project_id = :projectId + AND ag.author_id = :authorId + AND ag.type = :groupTypeName + AND (ag.matching_string = :matchingString or (:matchingString is null)) + AND ((ag.branch_id = :branchId) or (ag.branch_id is null and :branchId is null)) + GROUP BY ag.id + order by ag.id desc + limit 1 + """, + ) + fun findLatest( + groupTypeName: String, + authorId: Long?, + projectId: Long?, + matchingString: String?, + branchId: Long?, + ): List> +} diff --git a/backend/data/src/main/kotlin/io/tolgee/repository/activity/ActivityRevisionRepository.kt b/backend/data/src/main/kotlin/io/tolgee/repository/activity/ActivityRevisionRepository.kt index a7f7923d13c..e0685a07265 100644 --- a/backend/data/src/main/kotlin/io/tolgee/repository/activity/ActivityRevisionRepository.kt +++ b/backend/data/src/main/kotlin/io/tolgee/repository/activity/ActivityRevisionRepository.kt @@ -2,6 +2,7 @@ package io.tolgee.repository.activity import io.tolgee.activity.data.ActivityType import io.tolgee.dtos.queryResults.ActivityRevisionInfo +import io.tolgee.model.activity.ActivityDescribingEntity import io.tolgee.model.activity.ActivityRevision import org.springframework.context.annotation.Lazy import org.springframework.data.domain.Page @@ -50,6 +51,20 @@ interface ActivityRevisionRepository : JpaRepository { defaultBranchId: Long? = null, ): Page + @Query( + """ + select dr + from ActivityRevision ar + join ar.describingRelations dr + where ar.id in :revisionIds + and ar.type in :allowedTypes + """, + ) + fun getRelationsForRevisions( + revisionIds: List, + allowedTypes: Collection, + ): List + @Query( """ select ar.id, me.entityClass, count(me) diff --git a/backend/data/src/main/kotlin/io/tolgee/service/language/LanguageService.kt b/backend/data/src/main/kotlin/io/tolgee/service/language/LanguageService.kt index 85b10b75b7e..7481ab8430b 100644 --- a/backend/data/src/main/kotlin/io/tolgee/service/language/LanguageService.kt +++ b/backend/data/src/main/kotlin/io/tolgee/service/language/LanguageService.kt @@ -111,7 +111,7 @@ class LanguageService( ) { activityHolder.activity = ActivityType.HARD_DELETE_LANGUAGE activityHolder.activityRevision.authorId = authorId - activityHolder.activityRevision.projectId = language.project.id + activityHolder.activityRevision.setProject(language.project) hardDeleteLanguage(language) } @@ -316,6 +316,15 @@ class LanguageService( return languageRepository.findByNameAndProject(name, project) } + fun findLanguageIdsOfTranslations(translationIds: List): Map { + val maps = languageRepository.findLanguageIdsOfTranslations(translationIds) + if (maps.isEmpty()) return emptyMap() + + return maps + .map { mapOf(it["translationId"]!! to it["languageId"]!!) } + .reduce { acc, map -> acc.plus(map) } + } + @Transactional fun deleteAllByProject(projectId: Long) { translationService.deleteAllByProject(projectId) @@ -519,4 +528,8 @@ class LanguageService( language.project = entityManager.getReference(Project::class.java, projectId) return languageRepository.save(language) } + + fun getBaseLanguageForProjectId(projectId: Long): Long? { + return languageRepository.getBaseLanguageForProjectId(projectId) + } } diff --git a/backend/data/src/main/kotlin/io/tolgee/service/project/ProjectService.kt b/backend/data/src/main/kotlin/io/tolgee/service/project/ProjectService.kt index 5b43e2c6232..3ff14f9b687 100644 --- a/backend/data/src/main/kotlin/io/tolgee/service/project/ProjectService.kt +++ b/backend/data/src/main/kotlin/io/tolgee/service/project/ProjectService.kt @@ -383,7 +383,7 @@ class ProjectService( } /** - * If base language is missing on project it selects language with lowest id + * If base language is missing on project it selects the language with the lowest id * It saves updated project and returns project's new baseLanguage */ @CacheEvict(cacheNames = [Caches.PROJECTS], key = "#projectId") @@ -475,7 +475,7 @@ class ProjectService( projectRepository.save(project) if (isCreating) { projectHolder.project = ProjectDto.fromEntity(project) - activityHolder.activityRevision.projectId = projectHolder.project.id + activityHolder.activityRevision.setProject(project) } return project } diff --git a/backend/data/src/main/kotlin/io/tolgee/service/security/PermissionService.kt b/backend/data/src/main/kotlin/io/tolgee/service/security/PermissionService.kt index 9839029e0d2..263cbe64f63 100644 --- a/backend/data/src/main/kotlin/io/tolgee/service/security/PermissionService.kt +++ b/backend/data/src/main/kotlin/io/tolgee/service/security/PermissionService.kt @@ -229,7 +229,7 @@ class PermissionService( @Transactional(readOnly = true) fun computeProjectPermission( organizationRole: OrganizationRoleType?, - organizationBasePermission: IPermission, + organizationBasePermission: IPermission?, directPermission: IPermission?, userRole: UserAccount.Role? = null, ): ComputedPermissionDto { @@ -237,7 +237,8 @@ class PermissionService( when { organizationRole == OrganizationRoleType.OWNER -> ComputedPermissionDto.ORGANIZATION_OWNER directPermission != null -> ComputedPermissionDto(directPermission, ComputedPermissionOrigin.DIRECT) - organizationRole == OrganizationRoleType.MEMBER || organizationRole == OrganizationRoleType.MAINTAINER -> + (organizationRole == OrganizationRoleType.MEMBER || organizationRole == OrganizationRoleType.MAINTAINER) && + organizationBasePermission != null -> ComputedPermissionDto( organizationBasePermission, ComputedPermissionOrigin.ORGANIZATION_BASE, diff --git a/backend/data/src/main/kotlin/io/tolgee/service/security/UserAccountService.kt b/backend/data/src/main/kotlin/io/tolgee/service/security/UserAccountService.kt index 86dc8519a66..84b6ea06b28 100644 --- a/backend/data/src/main/kotlin/io/tolgee/service/security/UserAccountService.kt +++ b/backend/data/src/main/kotlin/io/tolgee/service/security/UserAccountService.kt @@ -248,6 +248,7 @@ class UserAccountService( toDelete.organizationRoles.forEach { entityManager.remove(it) } + aiPlaygroundResultService.deleteResultsByUser(toDelete.id) userAccountRepository.softDeleteUser(toDelete, currentDateProvider.date) applicationEventPublisher.publishEvent(OnUserCountChanged(decrease = true, this)) diff --git a/backend/data/src/main/kotlin/io/tolgee/sharedDocs/Key.kt b/backend/data/src/main/kotlin/io/tolgee/sharedDocs/Key.kt new file mode 100644 index 00000000000..1f3855ed26b --- /dev/null +++ b/backend/data/src/main/kotlin/io/tolgee/sharedDocs/Key.kt @@ -0,0 +1,6 @@ +package io.tolgee.sharedDocs + +object Key { + const val IS_PLURAL_FIELD = "If key is pluralized. If it will be reflected in the editor" + const val PLURAL_ARG_NAME_FIELD = "The argument name for the plural" +} diff --git a/backend/data/src/main/resources/db/changelog/schema.xml b/backend/data/src/main/resources/db/changelog/schema.xml index 4afede661f2..fa13f45fcc5 100644 --- a/backend/data/src/main/resources/db/changelog/schema.xml +++ b/backend/data/src/main/resources/db/changelog/schema.xml @@ -5775,4 +5775,60 @@ ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend/data/src/main/resources/hibernate-types.properties b/backend/data/src/main/resources/hypersistence-utils.properties similarity index 100% rename from backend/data/src/main/resources/hibernate-types.properties rename to backend/data/src/main/resources/hypersistence-utils.properties diff --git a/backend/testing/src/main/kotlin/io/tolgee/fixtures/EmailTestUtil.kt b/backend/testing/src/main/kotlin/io/tolgee/fixtures/EmailTestUtil.kt index 01b357f01e4..65e81c400ab 100644 --- a/backend/testing/src/main/kotlin/io/tolgee/fixtures/EmailTestUtil.kt +++ b/backend/testing/src/main/kotlin/io/tolgee/fixtures/EmailTestUtil.kt @@ -78,7 +78,6 @@ class EmailTestUtil { val assertEmailTo: AbstractStringAssert<*> get() { - @Suppress("CAST_NEVER_SUCCEEDS") return Assertions.assertThat(messageArgumentCaptor.firstValue.getHeader("To")[0] as String) } diff --git a/backend/testing/src/main/kotlin/io/tolgee/fixtures/ProjectApiKeyAuthRequestPerformer.kt b/backend/testing/src/main/kotlin/io/tolgee/fixtures/ProjectApiKeyAuthRequestPerformer.kt index ce79f7fb876..b35a58fd247 100644 --- a/backend/testing/src/main/kotlin/io/tolgee/fixtures/ProjectApiKeyAuthRequestPerformer.kt +++ b/backend/testing/src/main/kotlin/io/tolgee/fixtures/ProjectApiKeyAuthRequestPerformer.kt @@ -12,7 +12,6 @@ import org.springframework.stereotype.Component import org.springframework.test.web.servlet.ResultActions import org.springframework.test.web.servlet.request.MockMvcRequestBuilders -@Suppress("SpringJavaInjectionPointsAutowiringInspection") @Component @org.springframework.context.annotation.Scope("prototype") class ProjectApiKeyAuthRequestPerformer( diff --git a/backend/testing/src/main/kotlin/io/tolgee/fixtures/scopeAssert.kt b/backend/testing/src/main/kotlin/io/tolgee/fixtures/scopeAssert.kt index 3676d0e3613..101df2de55a 100644 --- a/backend/testing/src/main/kotlin/io/tolgee/fixtures/scopeAssert.kt +++ b/backend/testing/src/main/kotlin/io/tolgee/fixtures/scopeAssert.kt @@ -4,6 +4,7 @@ import io.tolgee.model.enums.ProjectPermissionType import io.tolgee.model.enums.Scope import io.tolgee.model.enums.unpack import io.tolgee.testing.assertions.Assertions +import io.tolgee.testing.satisfies import org.assertj.core.api.ObjectArrayAssert fun ObjectArrayAssert.equalsPermissionType(permissionType: ProjectPermissionType): ObjectArrayAssert? { diff --git a/backend/testing/src/main/kotlin/io/tolgee/fixtures/statusExpectations.kt b/backend/testing/src/main/kotlin/io/tolgee/fixtures/statusExpectations.kt index 71fe8393e1e..a106fd56131 100644 --- a/backend/testing/src/main/kotlin/io/tolgee/fixtures/statusExpectations.kt +++ b/backend/testing/src/main/kotlin/io/tolgee/fixtures/statusExpectations.kt @@ -6,6 +6,7 @@ import io.tolgee.constants.Message import io.tolgee.model.enums.ProjectPermissionType import io.tolgee.model.enums.Scope import io.tolgee.testing.assertions.Assertions.assertThat +import io.tolgee.testing.assertions.ErrorResponseAssert import io.tolgee.testing.assertions.MvcResultAssert import net.javacrumbs.jsonunit.assertj.JsonAssert import net.javacrumbs.jsonunit.assertj.assertThatJson @@ -83,16 +84,20 @@ fun ResultActions.tryPrettyPrinting(fn: ResultActions.() -> ResultActions): Resu } } -val ResultActions.andGetContentAsString +val ResultActions.andGetContentAsString: String get() = this.andReturn().response.getContentAsString(StandardCharsets.UTF_8) -val ResultActions.andAssertError +val ResultActions.andGetContentAsJsonMap + @Suppress("UNCHECKED_CAST") + get() = jacksonObjectMapper().readValue(andGetContentAsString, MutableMap::class.java) as MutableMap + +val ResultActions.andAssertError: ErrorResponseAssert get() = assertThat(this.andReturn()).error() val ResultActions.andPrettyPrint: ResultActions get() = jacksonObjectMapper().let { mapper -> - val parsed = mapper.readValue(this.andGetContentAsString) + val parsed = mapper.readValue(andGetContentAsString) println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(parsed)) return this } diff --git a/backend/testing/src/main/kotlin/io/tolgee/testing/satisfies.kt b/backend/testing/src/main/kotlin/io/tolgee/testing/satisfies.kt new file mode 100644 index 00000000000..977e9029468 --- /dev/null +++ b/backend/testing/src/main/kotlin/io/tolgee/testing/satisfies.kt @@ -0,0 +1,34 @@ +/** + * Copyright (C) 2023 Tolgee s.r.o. and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.tolgee.testing + +import org.assertj.core.api.AbstractAssert +import org.assertj.core.api.Condition +import org.assertj.core.api.ThrowingConsumer + +// https://github.com/assertj/assertj/issues/2357 +fun , E> AbstractAssert.satisfies(fn: (actual: E) -> Unit): S { + return satisfies(ThrowingConsumer { fn(it) }) +} + +fun , E> AbstractAssert.satisfiesIf(fn: (actual: E) -> Boolean): S { + return satisfies( + object : Condition() { + override fun matches(value: E): Boolean = fn(value) + }, + ) +} diff --git a/e2e/cypress/common/activities.ts b/e2e/cypress/common/activities.ts index 6b6baa6b35e..d43d98b1d61 100644 --- a/e2e/cypress/common/activities.ts +++ b/e2e/cypress/common/activities.ts @@ -1,22 +1,32 @@ -import { gcy, selectInProjectMenu } from './shared'; +import { gcyAdvanced, selectInProjectMenu } from './shared'; -export function checkActivity(activityText: string) { - selectInProjectMenu('Project Dashboard'); - cy.waitForDom(); +/** + * Expands the activity group of the given type on the project dashboard. + */ +export function expandActivityGroup(groupType: string) { + gcyAdvanced({ value: 'activity-group-item', type: groupType }) + .should('be.visible') + .findDcy('activity-group-expand-button') + .click(); - gcy('activity-compact').contains(activityText).should('be.visible'); + return cy; +} - gcy('activity-compact') - .contains(activityText) - .closestDcy('activity-compact') - .findDcy('activity-compact-detail-button') - .click({ force: true }); +/** + * Opens the project dashboard and expands the activity group of the given type. + */ +export function checkActivityGroup(groupType: string) { + selectInProjectMenu('Project Dashboard'); + cy.waitForDom(); - return cy; + return expandActivityGroup(groupType); } -export function assertActivityDetails(expectedTexts: string[]) { - gcy('activity-detail-dialog').within(() => { +export function assertActivityGroupDetails( + groupType: string, + expectedTexts: string[] +) { + gcyAdvanced({ value: 'activity-group-item', type: groupType }).within(() => { expectedTexts.forEach((text) => { cy.contains(text).should('be.visible'); }); diff --git a/e2e/cypress/compounds/E2ActivityChecker.ts b/e2e/cypress/compounds/E2ActivityChecker.ts deleted file mode 100644 index af7e3945da5..00000000000 --- a/e2e/cypress/compounds/E2ActivityChecker.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { gcy, selectInProjectMenu } from '../common/shared'; - -export class E2ActivityChecker { - checkActivity(activityText: string) { - selectInProjectMenu('Project Dashboard'); - cy.waitForDom(); - - gcy('activity-compact').contains(activityText).should('be.visible'); - - gcy('activity-compact') - .contains(activityText) - .closestDcy('activity-compact') - .findDcy('activity-compact-detail-button') - .click({ force: true }); - - return this; - } - - assertActivityDetails(expectedTexts: string[]) { - gcy('activity-detail-dialog').within(() => { - expectedTexts.forEach((text) => { - cy.contains(text).should('be.visible'); - }); - }); - return this; - } -} diff --git a/e2e/cypress/e2e/projects/labels.cy.ts b/e2e/cypress/e2e/projects/labels.cy.ts index 5c4f9b32582..6086a43d247 100644 --- a/e2e/cypress/e2e/projects/labels.cy.ts +++ b/e2e/cypress/e2e/projects/labels.cy.ts @@ -3,7 +3,10 @@ import { labelsTestData } from '../../common/apiCalls/testData/testData'; import { assertMessage, assertMissingFeature, gcy } from '../../common/shared'; import { E2ProjectLabelsSection } from '../../compounds/projectSettings/labels/E2ProjectLabelsSection'; import { isDarkMode } from '../../common/helpers'; -import { assertActivityDetails, checkActivity } from '../../common/activities'; +import { + assertActivityGroupDetails, + checkActivityGroup, +} from '../../common/activities'; import { setFeature } from '../../common/features'; let projectId = null; @@ -97,9 +100,8 @@ describe('Projects Settings - Labels', () => { const labelModal = projectLabels.openCreateLabelModal(); labelModal.fillAndSave('test-label', '#FF0055', 'New label description'); - checkActivity('Created translation label'); - assertActivityDetails([ - 'Created translation label', + checkActivityGroup('CREATE_TRANSLATION_LABEL'); + assertActivityGroupDetails('CREATE_TRANSLATION_LABEL', [ 'test-label', 'New label description', ]); @@ -111,8 +113,8 @@ describe('Projects Settings - Labels', () => { const labelModal = projectLabels.openEditLabelModal('First label'); labelModal.fillAndSave('Edited label', '#00FF00', 'Totally new text'); - checkActivity('Edited translation label'); - assertActivityDetails(['Edited translation label']); + checkActivityGroup('EDIT_TRANSLATION_LABEL'); + assertActivityGroupDetails('EDIT_TRANSLATION_LABEL', ['Edited label']); }); it('creates activity when label is deleted', () => { @@ -120,9 +122,8 @@ describe('Projects Settings - Labels', () => { projectLabels.deleteLabel('First label'); - checkActivity('Deleted translation label'); - assertActivityDetails([ - 'Deleted translation label', + checkActivityGroup('DELETE_TRANSLATION_LABEL'); + assertActivityGroupDetails('DELETE_TRANSLATION_LABEL', [ 'This is a description', ]); }); diff --git a/e2e/cypress/e2e/projects/projectDashboard.cy.ts b/e2e/cypress/e2e/projects/projectDashboard.cy.ts index c68d96ab706..5e36eeb5d2c 100644 --- a/e2e/cypress/e2e/projects/projectDashboard.cy.ts +++ b/e2e/cypress/e2e/projects/projectDashboard.cy.ts @@ -3,7 +3,7 @@ import { projectListData } from '../../common/apiCalls/testData/testData'; import { createComment, resolveComment } from '../../common/comments'; import { HOST } from '../../common/constants'; import { createProject, enterProject } from '../../common/projects'; -import { gcy, selectInProjectMenu } from '../../common/shared'; +import { gcy, gcyAdvanced, selectInProjectMenu } from '../../common/shared'; import { getCell } from '../../common/state'; import { createTag } from '../../common/tags'; import { createTranslation } from '../../common/translations'; @@ -35,31 +35,20 @@ describe('Project stats', () => { selectInProjectMenu('Project Dashboard'); - cy.gcy('activity-compact') - .contains('Comment state change') + assertGroupVisible('SET_TRANSLATION_COMMENT_STATE'); + assertGroupVisible('ADD_TRANSLATION_COMMENT'); + assertGroupVisible('REVIEW'); + assertGroupVisible('EDIT_KEY_TAGS'); + assertGroupVisible('CREATE_KEY'); + assertGroupVisible('CREATE_PROJECT'); + + // expandable group detail + gcyAdvanced({ value: 'activity-group-item', type: 'CREATE_KEY' }) + .findDcy('activity-group-expand-button') + .click(); + cy.gcy('activity-group-create-key-item') + .contains('new translation') .should('be.visible'); - cy.gcy('activity-compact').contains('Added comment').should('be.visible'); - cy.gcy('activity-compact') - .contains('Set translation state') - .should('be.visible'); - cy.gcy('activity-compact') - .contains('Key tags updated') - .should('be.visible'); - cy.gcy('activity-compact').contains('Created key').should('be.visible'); - cy.gcy('activity-compact').contains('Created project').should('be.visible'); - - openActivityDetail('Created key'); - - // activity is accessible through external link - cy.url().then((url) => { - const activityId = new URL(url).searchParams.get('activity'); - const projectId = new URL(url).pathname.match(/[0-9]+/)[0]; - cy.visit( - HOST + `/projects/${projectId}/activity-detail?activity=${activityId}` - ); - cy.waitForDom(); - cy.gcy('activity-detail-dialog').contains('Created key'); - }); }); it('Global statistics', () => { @@ -100,13 +89,8 @@ describe('Project stats', () => { }); }); -const openActivityDetail = (label: string) => { - cy.gcy('activity-compact') - .contains(label) - .closestDcy('activity-compact') - .findDcy('activity-compact-detail-button') - .click({ force: true }); - cy.gcy('activity-detail-dialog').contains(label); +const assertGroupVisible = (type: string) => { + gcyAdvanced({ value: 'activity-group-item', type }).should('be.visible'); }; const checkLabelRow = ( diff --git a/e2e/cypress/e2e/projects/suggestions/suggestions.reviewer.cy.ts b/e2e/cypress/e2e/projects/suggestions/suggestions.reviewer.cy.ts index bbda50be919..d7634445562 100644 --- a/e2e/cypress/e2e/projects/suggestions/suggestions.reviewer.cy.ts +++ b/e2e/cypress/e2e/projects/suggestions/suggestions.reviewer.cy.ts @@ -1,3 +1,7 @@ +import { + assertActivityGroupDetails, + expandActivityGroup, +} from '../../../common/activities'; import { login } from '../../../common/apiCalls/common'; import { suggestionsTestData } from '../../../common/apiCalls/testData/testData'; import { waitForGlobalLoading } from '../../../common/loading'; @@ -99,10 +103,8 @@ describe('Suggestions reviewer', () => { .findDcy('translation-suggestion') .should('have.length', 1); visitProjectDashboard(projectId); - gcyAdvanced({ - value: 'activity-compact', - type: 'SUGGESTION_SET_ACTIVE', - }).should('contain', 'Navržený překlad'); + expandActivityGroup('SET_SUGGESTION_ACTIVE'); + assertActivityGroupDetails('SET_SUGGESTION_ACTIVE', ['Navržený překlad']); }); it('reviewer can decline suggestion', () => { @@ -120,10 +122,8 @@ describe('Suggestions reviewer', () => { .should('have.length', 1); visitProjectDashboard(projectId); - gcyAdvanced({ - value: 'activity-compact', - type: 'DECLINE_SUGGESTION', - }).should('contain', 'Navržený překlad'); + expandActivityGroup('DECLINE_SUGGESTION'); + assertActivityGroupDetails('DECLINE_SUGGESTION', ['Navržený překlad']); }); it('reviewer can delete his own suggestion', () => { @@ -141,10 +141,8 @@ describe('Suggestions reviewer', () => { .should('not.exist'); visitProjectDashboard(projectId); - gcyAdvanced({ - value: 'activity-compact', - type: 'DELETE_SUGGESTION', - }).should('contain', 'Navržený překlad'); + expandActivityGroup('DELETE_SUGGESTION'); + assertActivityGroupDetails('DELETE_SUGGESTION', ['Navržený překlad']); }); it('reviewer can accept his own suggestion', () => { @@ -166,10 +164,8 @@ describe('Suggestions reviewer', () => { assertMessage('Suggestion accepted, other variants declined (1)'); visitProjectDashboard(projectId); - gcyAdvanced({ - value: 'activity-compact', - type: 'ACCEPT_SUGGESTION', - }).should('contain', 'Navržený překlad 0-1'); + expandActivityGroup('ACCEPT_SUGGESTION'); + assertActivityGroupDetails('ACCEPT_SUGGESTION', ['Navržený překlad 0-1']); }); function acceptSuggestion() { diff --git a/e2e/cypress/e2e/translations/outdated.cy.ts b/e2e/cypress/e2e/translations/outdated.cy.ts index a481561e538..badadf1c702 100644 --- a/e2e/cypress/e2e/translations/outdated.cy.ts +++ b/e2e/cypress/e2e/translations/outdated.cy.ts @@ -1,7 +1,11 @@ import { ProjectDTO } from '../../../../webapp/src/service/response.types'; import { deleteProject } from '../../common/apiCalls/common'; import { waitForGlobalLoading } from '../../common/loading'; -import { assertMessage, visitProjectDashboard } from '../../common/shared'; +import { + gcyAdvanced, + assertMessage, + visitProjectDashboard, +} from '../../common/shared'; import { create4Translations, @@ -46,8 +50,10 @@ describe('Translation states', () => { getRemoveOutdatedIndicator('Studený přeložený text 1').click(); visitProjectDashboard(project.id); - const lastActivity = cy.gcy('activity-compact').first(); - lastActivity.contains('Updated state').should('be.visible'); + gcyAdvanced({ + value: 'activity-group-item', + type: 'SET_OUTDATED_FLAG', + }).should('be.visible'); }); it("won't mark empty translation", () => { diff --git a/e2e/cypress/e2e/translations/translationLabels.cy.ts b/e2e/cypress/e2e/translations/translationLabels.cy.ts index 4144aeed0b4..65592afd686 100644 --- a/e2e/cypress/e2e/translations/translationLabels.cy.ts +++ b/e2e/cypress/e2e/translations/translationLabels.cy.ts @@ -8,7 +8,10 @@ import { dismissMenu, gcy } from '../../common/shared'; import { isDarkMode } from '../../common/helpers'; import { E2TranslationLabel } from '../../compounds/E2TranslationLabel'; import { E2TranslationsView } from '../../compounds/E2TranslationsView'; -import { assertActivityDetails, checkActivity } from '../../common/activities'; +import { + assertActivityGroupDetails, + checkActivityGroup, +} from '../../common/activities'; import { setFeature } from '../../common/features'; import { findBatchOperation, @@ -155,9 +158,8 @@ describe('Projects Settings - Labels', () => { 4 ); - checkActivity('Translation labels updated'); - assertActivityDetails([ - 'Translation labels updated', + checkActivityGroup('SET_TRANSLATION_LABELS'); + assertActivityGroupDetails('SET_TRANSLATION_LABELS', [ 'first key', 'label to assign 1', ]); @@ -173,8 +175,8 @@ describe('Projects Settings - Labels', () => { 'First label' ); - checkActivity('Translation labels updated'); - assertActivityDetails(['Translation labels updated', 'first key']); + checkActivityGroup('SET_TRANSLATION_LABELS'); + assertActivityGroupDetails('SET_TRANSLATION_LABELS', ['first key']); }); it('adds labels to translations and sorts them alphabetically', () => { diff --git a/e2e/cypress/support/dataCyType.d.ts b/e2e/cypress/support/dataCyType.d.ts index 57ea576904f..cac2780bde6 100644 --- a/e2e/cypress/support/dataCyType.d.ts +++ b/e2e/cypress/support/dataCyType.d.ts @@ -19,6 +19,15 @@ declare namespace DataCy { "activity-compact-detail-button": true; "activity-detail": true; "activity-detail-dialog": true; + "activity-group-count": true; + "activity-group-create-key-item": true; + "activity-group-create-project-detail": true; + "activity-group-expand-button": true; + "activity-group-generic-item": true; + "activity-group-item": true; + "activity-group-origin": true; + "activity-group-source-info": true; + "activity-groups-list": true; "administration-access-message": true; "administration-debug-customer-account-message": true; "administration-debug-customer-exit-button": true; diff --git a/ee/backend/app/src/main/kotlin/io/tolgee/ee/component/qa/QaActivityListener.kt b/ee/backend/app/src/main/kotlin/io/tolgee/ee/component/qa/QaActivityListener.kt index 5bce8c3333c..2e9e3893cfd 100644 --- a/ee/backend/app/src/main/kotlin/io/tolgee/ee/component/qa/QaActivityListener.kt +++ b/ee/backend/app/src/main/kotlin/io/tolgee/ee/component/qa/QaActivityListener.kt @@ -2,6 +2,7 @@ package io.tolgee.ee.component.qa import io.tolgee.activity.ActivityService import io.tolgee.activity.data.RevisionType +import io.tolgee.activity.resolvedEntityId import io.tolgee.batch.BatchJobService import io.tolgee.batch.data.BatchJobType import io.tolgee.batch.data.BatchTranslationTargetItem @@ -305,8 +306,9 @@ class QaActivityListener( private fun getLanguageTagChangedIds(event: OnProjectActivityEvent): List { val languageEntities = event.modifiedEntities[Language::class] ?: return emptyList() return languageEntities - .filter { (_, entity) -> entity.modifications.containsKey("tag") } - .map { (id, _) -> id } + .entries + .filter { it.value.modifications.containsKey("tag") } + .map { it.resolvedEntityId } } // endregion diff --git a/ee/backend/tests/src/test/resources/application.yaml b/ee/backend/tests/src/test/resources/application.yaml index 909db1e3c57..01eaa913ba3 100644 --- a/ee/backend/tests/src/test/resources/application.yaml +++ b/ee/backend/tests/src/test/resources/application.yaml @@ -103,3 +103,4 @@ springdoc: logging: level: "io.tolgee": DEBUG + org.jooq.Constants: off diff --git a/gradle/liquibase.gradle b/gradle/liquibase.gradle index 5a2b97663e3..bb77a44df86 100644 --- a/gradle/liquibase.gradle +++ b/gradle/liquibase.gradle @@ -35,8 +35,9 @@ ext { "billing_sequence," + "activity_sequence," + "FK9xs5a07fba5yqje5jqm6qrehs," + + "column:textsearchable_.*," + "column:enabled_features,"+ - "table:temp_unsuccessful_job_keys" + "table:temp_.*" } } } diff --git a/settings.gradle b/settings.gradle index 4047dd38063..d58c23259f2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -78,6 +78,8 @@ dependencyResolutionManagement { library('slackApiClient', "com.slack.api:slack-api-client:$slackSdkVersion") library('slackApiModelKotlinExtension', "com.slack.api:slack-api-model-kotlin-extension:$slackSdkVersion") library('slackApiClientKotlinExtension', "com.slack.api:slack-api-client-kotlin-extension:$slackSdkVersion") + library('commonsText', 'org.apache.commons:commons-text:1.10.0') + library('springJooq', "org.springframework.boot:spring-boot-starter-jooq:$springBootVersion") library('jakartaMail', 'org.eclipse.angus', 'jakarta.mail').version('2.0.4') library('mcpBom', 'io.modelcontextprotocol.sdk', 'mcp-bom').version('0.18.0') library('mcp', 'io.modelcontextprotocol.sdk', 'mcp').withoutVersion() diff --git a/webapp/src/component/activity/groups/ActivityGroupCard.tsx b/webapp/src/component/activity/groups/ActivityGroupCard.tsx new file mode 100644 index 00000000000..83000a46aac --- /dev/null +++ b/webapp/src/component/activity/groups/ActivityGroupCard.tsx @@ -0,0 +1,268 @@ +import React, { FC, PropsWithChildren, useState } from 'react'; +import { Box, Chip, IconButton, styled, Tooltip } from '@mui/material'; +import { ChevronDown, Code02, Terminal } from '@untitled-ui/icons-react'; +import { T } from '@tolgee/react'; + +import { components } from 'tg.service/apiSchema.generated'; +import { AvatarImg } from 'tg.component/common/avatar/AvatarImg'; +import { FormatedDateTooltip } from 'tg.component/common/tooltip/FormatedDateTooltip'; +import { actionsConfiguration } from 'tg.component/activity/configuration'; +import { ActionType } from 'tg.component/activity/types'; +import { getGroupIcon, getGroupSemantic } from './groupTypeVisuals'; + +type ActivityGroupModel = components['schemas']['ActivityGroupModel']; + +const StyledContainer = styled('div')` + display: grid; + gap: 2px 12px; + padding: 10px 14px; + border-radius: 12px; + background: ${({ theme }) => theme.palette.background.paper}; + border: 1px solid ${({ theme }) => theme.palette.divider1}; + grid-template-columns: auto auto 1fr auto auto; + grid-template-areas: + 'icon avatar content time expand' + 'expanded expanded expanded expanded expanded'; + align-items: center; + transition: background 0.1s ease-out; + + &:hover { + background: ${({ theme }) => theme.palette.cell.hover}; + } +`; + +const StyledIconChip = styled(Box)<{ semantic: string }>` + grid-area: icon; + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + border-radius: 50%; + flex-shrink: 0; + color: ${({ theme, semantic }) => + semantic === 'create' + ? theme.palette.success.main + : semantic === 'delete' + ? theme.palette.error.main + : theme.palette.text.secondary}; + background: ${({ theme }) => theme.palette.tokens.background.hover}; + + & svg { + width: 18px; + height: 18px; + } +`; + +const StyledContent = styled(Box)` + grid-area: content; + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 2px 8px; + min-width: 0; +`; + +const StyledAuthor = styled('span')` + font-weight: 600; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +`; + +const StyledLabel = styled('span')` + min-width: 0; +`; + +const StyledSourceInfo = styled('span')` + color: ${({ theme }) => theme.palette.text.secondary}; + font-size: 13px; +`; + +const StyledTime = styled(Box)` + grid-area: time; + font-size: 12px; + color: ${({ theme }) => theme.palette.text.secondary}; + white-space: nowrap; +`; + +const StyledExpandButton = styled(IconButton)<{ expanded?: string }>` + grid-area: expand; + + & svg { + transition: transform 0.2s ease-in-out; + transform: rotate(${({ expanded }) => (expanded ? '180deg' : '0deg')}); + } +`; + +const StyledExpanded = styled(Box)` + grid-area: expanded; + overflow-x: auto; + padding-top: 8px; +`; + +const StyledOriginChip = styled(Chip)` + height: 20px; + font-size: 11px; + + & .MuiChip-icon { + width: 12px; + height: 12px; + } +`; + +type Props = PropsWithChildren<{ + item: ActivityGroupModel; + count?: number; + expandedContent?: React.ReactNode; +}>; + +export const ActivityGroupCard: FC = (props) => { + const [expanded, setExpanded] = useState(false); + + const author = props.item.author; + const Icon = getGroupIcon(props.item.type); + const semantic = getGroupSemantic(props.item.type); + + return ( + + + + + + {author && ( + + )} + + + {author?.name || author?.username} + {props.children} + {props.count !== undefined && props.count > 0 && ( + + )} + + + + + + + {props.expandedContent !== undefined && ( + setExpanded(!expanded)} + > + + + )} + {expanded && {props.expandedContent}} + + ); +}; + +const OriginChips: FC<{ item: ActivityGroupModel }> = ({ item }) => { + const origins = item.origins || []; + return ( + <> + {origins.includes('API_KEY') && ( + + } + > + } + data-cy="activity-group-origin" + data-cy-origin="API_KEY" + label={ + + } + /> + + )} + {origins.includes('PAT') && ( + + } + > + } + data-cy="activity-group-origin" + data-cy-origin="PAT" + label={ + + } + /> + + )} + + ); +}; + +/** + * When the underlying activity is a compound action (e.g. translations set + * while creating a key), show which action the group emerged from. + */ +const SourceActivityInfo: FC<{ item: ActivityGroupModel }> = ({ item }) => { + const interestingSources = (item.sourceActivityTypes || []).filter( + (type) => + COMPOUND_SOURCE_TYPES.includes(type) && + // don't attribute a group to its own natural action + type !== (item.type as string) + ); + + if (!interestingSources.length) { + return null; + } + + return ( + + {' '} + {interestingSources.map((type, index) => { + const label = actionsConfiguration[type as ActionType]?.label?.({}); + return ( + + {index > 0 && ', '} + {label ?? type} + + ); + })} + + ); +}; + +const COMPOUND_SOURCE_TYPES = ['COMPLEX_EDIT', 'CREATE_KEY', 'IMPORT']; diff --git a/webapp/src/component/activity/groups/ActivityGroupItem.tsx b/webapp/src/component/activity/groups/ActivityGroupItem.tsx new file mode 100644 index 00000000000..aff52f0e3fd --- /dev/null +++ b/webapp/src/component/activity/groups/ActivityGroupItem.tsx @@ -0,0 +1,68 @@ +import React, { FC } from 'react'; +import { components } from 'tg.service/apiSchema.generated'; +import { ActivityGroupCard } from './ActivityGroupCard'; +import { GenericGroupExpandedContent } from './GenericGroupExpandedContent'; +import { CreateKeysExpandedContent } from './groupTypeComponents/CreateKeysActivityGroup'; +import { CreateProjectExpandedContent } from './groupTypeComponents/CreateProjectActivityGroup'; +import { groupsConfiguration } from './groupsConfiguration'; + +type ActivityGroupModel = components['schemas']['ActivityGroupModel']; + +export const ActivityGroupItem: FC<{ + item: ActivityGroupModel; +}> = ({ item }) => { + const label = groupsConfiguration[item.type]?.label ?? item.type; + const data = ('data' in item ? item.data : undefined) as + | Record + | undefined; + + switch (item.type) { + case 'CREATE_PROJECT': + return ( + } + > + {label} + + ); + case 'CREATE_KEY': + return ( + } + > + {label} + + ); + case 'SET_TRANSLATIONS': + return ( + } + > + {label} + + ); + default: + return ( + } + > + {label} + + ); + } +}; + +function sumCounts(data: Record | undefined): number | undefined { + const counts = data?.counts as Record | undefined; + if (!counts) { + return undefined; + } + return Object.values(counts).reduce((a, b) => a + b, 0); +} diff --git a/webapp/src/component/activity/groups/GenericGroupExpandedContent.tsx b/webapp/src/component/activity/groups/GenericGroupExpandedContent.tsx new file mode 100644 index 00000000000..83627bc6b3f --- /dev/null +++ b/webapp/src/component/activity/groups/GenericGroupExpandedContent.tsx @@ -0,0 +1,230 @@ +import React, { FC, useState } from 'react'; +import { + styled, + Table, + TableBody, + TableCell, + TableHead, + TableRow, +} from '@mui/material'; +import { T } from '@tolgee/react'; + +import { useApiQuery } from 'tg.service/http/useQueryApi'; +import { useProject } from 'tg.hooks/useProject'; +import { PaginatedHateoasList } from 'tg.component/common/list/PaginatedHateoasList'; +import { components } from 'tg.service/apiSchema.generated'; + +type GenericGroupItemModel = components['schemas']['GenericGroupItemModel']; + +const StyledOld = styled('span')` + color: ${({ theme }) => theme.palette.text.secondary}; + text-decoration: line-through; +`; + +const StyledNew = styled('span')` + color: ${({ theme }) => theme.palette.text.primary}; +`; + +const StyledEntity = styled('span')` + color: ${({ theme }) => theme.palette.text.secondary}; +`; + +const StyledLanguage = styled('span')` + color: ${({ theme }) => theme.palette.text.secondary}; +`; + +const StyledSecondary = styled('div')` + color: ${({ theme }) => theme.palette.text.secondary}; + font-size: 13px; +`; + +const MAX_DISPLAYED_MODIFICATIONS = 3; +const MAX_VALUE_LENGTH = 60; + +export const GenericGroupExpandedContent: FC<{ groupId: number }> = (props) => { + const project = useProject(); + const [page, setPage] = useState(0); + + const loadable = useApiQuery({ + url: '/v2/projects/{projectId}/activity/group-items/generic/{groupId}', + method: 'get', + path: { projectId: project.id, groupId: props.groupId }, + query: { page, size: 20 }, + }); + + return ( + setPage(p)} + listComponent={ItemsTable} + renderItem={(item: GenericGroupItemModel) => ( + + + {item.entityClass} + + +
+ {getTitle(item)} + {getLanguageTag(item) && ( + ({getLanguageTag(item)}) + )} +
+ {getSubtitle(item) && ( + {getSubtitle(item)} + )} +
+ + + +
+ )} + /> + ); +}; + +const ItemsTable: FC = (props) => ( + + + + + + + + + + + + + + + {props.children} +
+); + +const Modifications: FC<{ item: GenericGroupItemModel }> = ({ item }) => { + const modifications = Object.entries(item.modifications || {}); + const displayed = modifications.slice(0, MAX_DISPLAYED_MODIFICATIONS); + + return ( + <> + {displayed.map(([field, modification], index) => ( + + {index > 0 && ', '} + {field}: + {modification.old !== undefined && modification.old !== null && ( + <> + {formatValue(field, modification.old)} + {' → '} + + )} + {formatValue(field, modification.new)} + + ))} + {modifications.length > displayed.length && + ` +${modifications.length - displayed.length}`} + + ); +}; + +const TITLE_FIELDS = ['name', 'text', 'tag', 'username', 'url']; + +function getTitle(item: GenericGroupItemModel): string { + // a translation is best identified by the key it belongs to + const keyName = item.relations?.key?.data?.name; + if (typeof keyName === 'string' && keyName) { + return keyName; + } + + for (const field of TITLE_FIELDS) { + const described = item.description?.[field]; + if (typeof described === 'string' && described) { + return described; + } + const modification = item.modifications?.[field]; + for (const value of [modification?.new, modification?.old]) { + if (typeof value === 'string' && value) { + return value; + } + } + } + + return `#${item.entityId}`; +} + +const SUBTITLE_FIELDS = ['translation', 'text', 'description']; + +/** + * The entity's own content, when the title had to be taken from a relation + * (e.g. a suggestion titled by its key still wants to show the suggested text). + */ +function getSubtitle(item: GenericGroupItemModel): string | undefined { + const title = getTitle(item); + + for (const field of SUBTITLE_FIELDS) { + const described = item.description?.[field]; + if (typeof described === 'string' && described && described !== title) { + return described; + } + } + + return undefined; +} + +function getLanguageTag(item: GenericGroupItemModel): string | undefined { + const tag = item.relations?.language?.data?.tag; + return typeof tag === 'string' ? tag : undefined; +} + +const NAME_FIELDS = ['name', 'text', 'tag', 'title']; + +function formatValue(field: string, value: unknown): string { + return truncate(stringifyValue(field, value)); +} + +function stringifyValue(field: string, value: unknown): string { + if (value === null || value === undefined) { + return '∅'; + } + + if (typeof value === 'string') { + return value; + } + + if (typeof value === 'number') { + return isTimestampField(field) + ? new Date(value).toLocaleString() + : String(value); + } + + if (Array.isArray(value)) { + return value.map((item) => stringifyValue(field, item)).join(', ') || '∅'; + } + + if (typeof value === 'object') { + // entity references and describing data carry their own name + const reference = value as Record; + const data = reference.data ?? reference; + for (const nameField of NAME_FIELDS) { + const name = data?.[nameField]; + if (typeof name === 'string' && name) { + return name; + } + } + if (reference.entityId) { + return `#${reference.entityId}`; + } + return JSON.stringify(value); + } + + return String(value); +} + +function isTimestampField(field: string): boolean { + return field.endsWith('At') || field.endsWith('Date'); +} + +function truncate(text: string): string { + return text.length > MAX_VALUE_LENGTH + ? `${text.slice(0, MAX_VALUE_LENGTH)}…` + : text; +} diff --git a/webapp/src/component/activity/groups/common/ActivityGroupMentionedLanguages.tsx b/webapp/src/component/activity/groups/common/ActivityGroupMentionedLanguages.tsx new file mode 100644 index 00000000000..fb990b1c191 --- /dev/null +++ b/webapp/src/component/activity/groups/common/ActivityGroupMentionedLanguages.tsx @@ -0,0 +1,27 @@ +import { FC } from 'react'; +import { LanguageIconWithTooltip } from '../../../languages/LanguageIconWithTooltip'; +import { useProjectLanguages } from 'tg.hooks/useProjectLanguages'; +import { Box } from '@mui/material'; + +type ActivityGroupMentionedLanguagesProps = { + mentionedLanguageIds: number[]; +}; + +export const ActivityGroupMentionedLanguages: FC< + ActivityGroupMentionedLanguagesProps +> = (props) => { + const languages = useProjectLanguages(); + + //filter only mentioned + const used = languages.filter((l) => + props.mentionedLanguageIds.includes(l.id) + ); + + return ( + + {used.map((l, i) => ( + + ))} + + ); +}; diff --git a/webapp/src/component/activity/groups/groupTypeComponents/CreateKeysActivityGroup.tsx b/webapp/src/component/activity/groups/groupTypeComponents/CreateKeysActivityGroup.tsx new file mode 100644 index 00000000000..599b9abcef7 --- /dev/null +++ b/webapp/src/component/activity/groups/groupTypeComponents/CreateKeysActivityGroup.tsx @@ -0,0 +1,61 @@ +import React, { FC, useState } from 'react'; +import { + Table, + TableBody, + TableCell, + TableHead, + TableRow, +} from '@mui/material'; +import { T } from '@tolgee/react'; + +import { useApiQuery } from 'tg.service/http/useQueryApi'; +import { useProject } from 'tg.hooks/useProject'; +import { PaginatedHateoasList } from 'tg.component/common/list/PaginatedHateoasList'; +import { components } from 'tg.service/apiSchema.generated'; + +type CreateKeyGroupItemModel = components['schemas']['CreateKeyGroupItemModel']; + +export const CreateKeysExpandedContent: FC<{ groupId: number }> = (props) => { + const project = useProject(); + const [page, setPage] = useState(0); + + const loadable = useApiQuery({ + url: '/v2/projects/{projectId}/activity/group-items/create-key/{groupId}', + method: 'get', + path: { projectId: project.id, groupId: props.groupId }, + query: { page, size: 20 }, + }); + + return ( + setPage(p)} + listComponent={KeysTable} + renderItem={(item: CreateKeyGroupItemModel) => ( + + {item.name} + {item.baseTranslationText ?? ''} + + )} + /> + ); +}; + +const KeysTable: FC = (props) => ( + + + + + + + + + + + + {props.children} +
+); diff --git a/webapp/src/component/activity/groups/groupTypeComponents/CreateProjectActivityGroup.tsx b/webapp/src/component/activity/groups/groupTypeComponents/CreateProjectActivityGroup.tsx new file mode 100644 index 00000000000..6f92a9eb39b --- /dev/null +++ b/webapp/src/component/activity/groups/groupTypeComponents/CreateProjectActivityGroup.tsx @@ -0,0 +1,37 @@ +import React, { FC } from 'react'; +import { Box, styled } from '@mui/material'; + +import { CircledLanguageIcon } from 'tg.component/languages/CircledLanguageIcon'; + +const StyledLanguages = styled(Box)` + display: flex; + gap: 8px; + align-items: center; + flex-wrap: wrap; + padding: 8px 0; +`; + +export const CreateProjectExpandedContent: FC<{ + data: Record | undefined; +}> = ({ data }) => { + const languages = (data?.languages || []) as { + id: number; + name: string; + tag: string; + flagEmoji: string; + }[]; + + return ( + + {data?.name} + + {languages.map((language) => ( + + + {language.name} + + ))} + + + ); +}; diff --git a/webapp/src/component/activity/groups/groupTypeVisuals.tsx b/webapp/src/component/activity/groups/groupTypeVisuals.tsx new file mode 100644 index 00000000000..043570aa039 --- /dev/null +++ b/webapp/src/component/activity/groups/groupTypeVisuals.tsx @@ -0,0 +1,91 @@ +import React from 'react'; +import { + CheckVerified01, + ClipboardCheck, + Cloud01, + Edit02, + File06, + GitBranch02, + Globe01, + Image01, + Key01, + LayersTwo01, + MessageTextSquare02, + Package, + Plus, + Settings02, + Tag01, + Translate01, + Trash01, + UploadCloud01, + Zap, +} from '@untitled-ui/icons-react'; + +import { components } from 'tg.service/apiSchema.generated'; + +type ActivityGroupTypeEnum = + components['schemas']['ActivityGroupModel']['type']; + +export type GroupSemantic = 'create' | 'delete' | 'neutral'; + +const DOMAIN_ICONS: [string, React.ComponentType][] = [ + ['SCREENSHOT', Image01], + ['COMMENT', MessageTextSquare02], + ['TAG', Tag01], + ['CHARACTER_LIMIT', Key01], + ['KEY', Key01], + ['BASE_TRANSLATION', Translate01], + ['TRANSLATION_MEMORY', LayersTwo01], + ['TRANSLATION_LABEL', Tag01], + ['LABEL', Tag01], + ['REVIEW', CheckVerified01], + ['SUGGESTION', MessageTextSquare02], + ['TRANSLATION', Translate01], + ['LANGUAGE', Globe01], + ['NAMESPACE', Package], + ['PROJECT', Settings02], + ['IMPORT', UploadCloud01], + ['GLOSSARY', File06], + ['TASK', ClipboardCheck], + ['BRANCH', GitBranch02], + ['AI_PROMPT', Zap], + ['QA_ISSUE', CheckVerified01], + ['WEBHOOK', Zap], + ['CONTENT_DELIVERY', Cloud01], + ['CONTENT_STORAGE', Cloud01], + ['OUTDATED', Translate01], + ['AUTO_TRANSLATE', Translate01], +]; + +export function getGroupIcon( + type: ActivityGroupTypeEnum +): React.ComponentType { + const domainIcon = DOMAIN_ICONS.find(([domain]) => + type.includes(domain) + )?.[1]; + if (domainIcon) { + return domainIcon; + } + if (type.startsWith('CREATE') || type.startsWith('ADD')) { + return Plus; + } + if (type.includes('DELETE')) { + return Trash01; + } + return Edit02; +} + +export function getGroupSemantic(type: ActivityGroupTypeEnum): GroupSemantic { + if ( + type.startsWith('CREATE') || + type.startsWith('ADD') || + type.startsWith('IMPORT') || + type === 'RESTORE_KEY' + ) { + return 'create'; + } + if (type.includes('DELETE')) { + return 'delete'; + } + return 'neutral'; +} diff --git a/webapp/src/component/activity/groups/groupsConfiguration.tsx b/webapp/src/component/activity/groups/groupsConfiguration.tsx new file mode 100644 index 00000000000..3f667437a5a --- /dev/null +++ b/webapp/src/component/activity/groups/groupsConfiguration.tsx @@ -0,0 +1,626 @@ +import React from 'react'; +import { T } from '@tolgee/react'; +import { components } from 'tg.service/apiSchema.generated'; + +type ActivityGroupTypeEnum = + components['schemas']['ActivityGroupModel']['type']; + +type GroupTypeConfiguration = { + label: React.ReactNode; +}; + +export const groupsConfiguration: Record< + ActivityGroupTypeEnum, + GroupTypeConfiguration +> = { + CREATE_KEY: { + label: ( + + ), + }, + EDIT_KEY_NAME: { + label: ( + + ), + }, + DELETE_KEY: { + label: ( + + ), + }, + SET_TRANSLATION_STATE: { + label: ( + + ), + }, + REVIEW: { + label: ( + + ), + }, + SET_BASE_TRANSLATION: { + label: ( + + ), + }, + SET_TRANSLATIONS: { + label: ( + + ), + }, + DISMISS_AUTO_TRANSLATED_STATE: { + label: ( + + ), + }, + SET_OUTDATED_FLAG: { + label: ( + + ), + }, + ADD_TRANSLATION_COMMENT: { + label: ( + + ), + }, + DELETE_TRANSLATION_COMMENT: { + label: ( + + ), + }, + EDIT_TRANSLATION_COMMENT: { + label: ( + + ), + }, + SET_TRANSLATION_COMMENT_STATE: { + label: ( + + ), + }, + DELETE_SCREENSHOT: { + label: ( + + ), + }, + ADD_SCREENSHOT: { + label: ( + + ), + }, + EDIT_KEY_TAGS: { + label: ( + + ), + }, + IMPORT: { + label: ( + + ), + }, + CREATE_LANGUAGE: { + label: ( + + ), + }, + EDIT_LANGUAGE: { + label: ( + + ), + }, + DELETE_LANGUAGE: { + label: ( + + ), + }, + CREATE_PROJECT: { + label: ( + + ), + }, + EDIT_PROJECT: { + label: ( + + ), + }, + NAMESPACE_EDIT: { + label: ( + + ), + }, + BATCH_PRE_TRANSLATE_BY_TM: { + label: ( + + ), + }, + BATCH_MACHINE_TRANSLATE: { + label: ( + + ), + }, + AUTO_TRANSLATE: { + label: ( + + ), + }, + BATCH_CLEAR_TRANSLATIONS: { + label: ( + + ), + }, + BATCH_COPY_TRANSLATIONS: { + label: ( + + ), + }, + BATCH_SET_TRANSLATION_STATE: { + label: ( + + ), + }, + CONTENT_DELIVERY_CONFIG_CREATE: { + label: ( + + ), + }, + CONTENT_DELIVERY_CONFIG_UPDATE: { + label: ( + + ), + }, + CONTENT_DELIVERY_CONFIG_DELETE: { + label: ( + + ), + }, + CONTENT_STORAGE_CREATE: { + label: ( + + ), + }, + CONTENT_STORAGE_UPDATE: { + label: ( + + ), + }, + CONTENT_STORAGE_DELETE: { + label: ( + + ), + }, + WEBHOOK_CONFIG_CREATE: { + label: ( + + ), + }, + WEBHOOK_CONFIG_UPDATE: { + label: ( + + ), + }, + WEBHOOK_CONFIG_DELETE: { + label: ( + + ), + }, + EDIT_KEY_CHARACTER_LIMIT: { + label: ( + + ), + }, + SOFT_DELETE_KEY: { + label: ( + + ), + }, + RESTORE_KEY: { + label: ( + + ), + }, + HARD_DELETE_KEY: { + label: ( + + ), + }, + SET_TRANSLATION_LABELS: { + label: ( + + ), + }, + CREATE_TRANSLATION_LABEL: { + label: ( + + ), + }, + EDIT_TRANSLATION_LABEL: { + label: ( + + ), + }, + DELETE_TRANSLATION_LABEL: { + label: ( + + ), + }, + CREATE_TASK: { + label: ( + + ), + }, + EDIT_TASK: { + label: ( + + ), + }, + FINISH_TASK: { + label: ( + + ), + }, + CLOSE_TASK: { + label: ( + + ), + }, + REOPEN_TASK: { + label: ( + + ), + }, + UPDATE_TASK_KEYS: { + label: ( + + ), + }, + CREATE_GLOSSARY: { + label: ( + + ), + }, + EDIT_GLOSSARY: { + label: ( + + ), + }, + DELETE_GLOSSARY: { + label: ( + + ), + }, + IMPORT_GLOSSARY: { + label: ( + + ), + }, + CREATE_GLOSSARY_TERM: { + label: ( + + ), + }, + EDIT_GLOSSARY_TERM: { + label: ( + + ), + }, + DELETE_GLOSSARY_TERM: { + label: ( + + ), + }, + SET_GLOSSARY_TERM_TRANSLATION: { + label: ( + + ), + }, + CREATE_TRANSLATION_MEMORY: { + label: ( + + ), + }, + EDIT_TRANSLATION_MEMORY: { + label: ( + + ), + }, + DELETE_TRANSLATION_MEMORY: { + label: ( + + ), + }, + CREATE_SUGGESTION: { + label: ( + + ), + }, + DELETE_SUGGESTION: { + label: ( + + ), + }, + DECLINE_SUGGESTION: { + label: ( + + ), + }, + ACCEPT_SUGGESTION: { + label: ( + + ), + }, + SET_SUGGESTION_ACTIVE: { + label: ( + + ), + }, + CREATE_AI_PROMPT: { + label: ( + + ), + }, + EDIT_AI_PROMPT: { + label: ( + + ), + }, + DELETE_AI_PROMPT: { + label: ( + + ), + }, + CREATE_BRANCH: { + label: ( + + ), + }, + RENAME_BRANCH: { + label: ( + + ), + }, + CHANGE_BRANCH_PROTECTION: { + label: ( + + ), + }, + MERGE_BRANCH: { + label: ( + + ), + }, + IGNORE_QA_ISSUE: { + label: ( + + ), + }, + UNIGNORE_QA_ISSUE: { + label: ( + + ), + }, +}; diff --git a/webapp/src/component/activity/types.tsx b/webapp/src/component/activity/types.tsx index 66bbf59e19c..82da0a32918 100644 --- a/webapp/src/component/activity/types.tsx +++ b/webapp/src/component/activity/types.tsx @@ -98,7 +98,7 @@ export type FieldOptions = boolean | FieldOptionsObj; export type LanguageReferenceType = { tag: string; name: string; - flagEmoji: string; + flagEmoji?: string; }; export type KeyReferenceData = { diff --git a/webapp/src/component/languages/LanguageIconWithTooltip.tsx b/webapp/src/component/languages/LanguageIconWithTooltip.tsx new file mode 100644 index 00000000000..e290fed45e2 --- /dev/null +++ b/webapp/src/component/languages/LanguageIconWithTooltip.tsx @@ -0,0 +1,20 @@ +import React, { FC } from 'react'; +import { Tooltip } from '@mui/material'; +import { CircledLanguageIcon } from './CircledLanguageIcon'; +import { LanguageReferenceType } from '../activity/types'; + +type LanguageIconWithTooltipProps = { + l: LanguageReferenceType; +}; + +export const LanguageIconWithTooltip: FC = ({ + l, +}) => { + return ( + + + + + + ); +}; diff --git a/webapp/src/constants/links.tsx b/webapp/src/constants/links.tsx index 567cf897168..54ed663f5b6 100644 --- a/webapp/src/constants/links.tsx +++ b/webapp/src/constants/links.tsx @@ -181,6 +181,10 @@ export class LINKS { static MY_TASKS = Link.ofRoot('my-tasks'); + /** + * Notifications + */ + /** * Administration */ @@ -353,7 +357,7 @@ export class LINKS { 'websockets' ); - static ACTIVITY_PREVIEW = Link.ofParent(LINKS.PROJECT, 'activity'); + static PROJECT_ACTIVITY_GROUPS = Link.ofParent(LINKS.PROJECT, 'activity'); static PROJECT_DASHBOARD = LINKS.PROJECT; diff --git a/webapp/src/i18n/en.json b/webapp/src/i18n/en.json index 1e71fbf9361..4d7e7055b60 100644 --- a/webapp/src/i18n/en.json +++ b/webapp/src/i18n/en.json @@ -52,6 +52,93 @@ "active-plan-license-key-button": "Show license key", "active-plan-license-key-caption": "Apply this license key in your local Tolgee instance", "active-plan-subscribed-at-tooltip": "Subscribed at", + "activity_groups_origin_api_key": "API key", + "activity_groups_origin_api_key_hint": "Done over the API with a project API key", + "activity_groups_origin_pat": "PAT", + "activity_groups_origin_pat_hint": "Done over the API with a personal access token", + "activity_groups_source_info_prefix": "as part of:", + "activity_groups_base_translation_column": "Base translation", + "activity_groups_change_column": "Change", + "activity_groups_entity_column": "Entity", + "activity_groups_item_column": "Item", + "activity_groups_key_name_column": "Key", + "activity_groups_type_accept_suggestion": "Accepted suggestions", + "activity_groups_type_add_screenshot": "Added screenshots", + "activity_groups_type_add_translation_comment": "Added translation comments", + "activity_groups_type_auto_translate": "Auto-translated", + "activity_groups_type_batch_clear_translations": "Cleared translations", + "activity_groups_type_batch_copy_translations": "Copied translations", + "activity_groups_type_batch_machine_translate": "Machine translated", + "activity_groups_type_batch_pre_translate_by_tm": "Pre-translated by translation memory", + "activity_groups_type_batch_set_translation_state": "Changed translation states in batch", + "activity_groups_type_change_branch_protection": "Changed branch protection", + "activity_groups_type_close_task": "Closed tasks", + "activity_groups_type_content_delivery_config_create": "Created content delivery configurations", + "activity_groups_type_content_delivery_config_delete": "Deleted content delivery configurations", + "activity_groups_type_content_delivery_config_update": "Updated content delivery configurations", + "activity_groups_type_content_storage_create": "Created content storages", + "activity_groups_type_content_storage_delete": "Deleted content storages", + "activity_groups_type_content_storage_update": "Updated content storages", + "activity_groups_type_create_ai_prompt": "Created AI prompts", + "activity_groups_type_create_branch": "Created branches", + "activity_groups_type_create_glossary": "Created glossaries", + "activity_groups_type_create_glossary_term": "Created glossary terms", + "activity_groups_type_create_key": "Created keys", + "activity_groups_type_create_language": "Created languages", + "activity_groups_type_create_project": "Created the project", + "activity_groups_type_create_suggestion": "Created suggestions", + "activity_groups_type_create_task": "Created tasks", + "activity_groups_type_create_translation_label": "Created labels", + "activity_groups_type_create_translation_memory": "Created translation memories", + "activity_groups_type_decline_suggestion": "Declined suggestions", + "activity_groups_type_delete_ai_prompt": "Deleted AI prompts", + "activity_groups_type_delete_glossary": "Deleted glossaries", + "activity_groups_type_delete_glossary_term": "Deleted glossary terms", + "activity_groups_type_delete_key": "Deleted keys", + "activity_groups_type_delete_language": "Deleted languages", + "activity_groups_type_delete_screenshot": "Deleted screenshots", + "activity_groups_type_delete_suggestion": "Deleted suggestions", + "activity_groups_type_delete_translation_comment": "Deleted translation comments", + "activity_groups_type_delete_translation_label": "Deleted labels", + "activity_groups_type_delete_translation_memory": "Deleted translation memories", + "activity_groups_type_dismiss_auto_translated_state": "Dismissed auto-translated states", + "activity_groups_type_edit_ai_prompt": "Edited AI prompts", + "activity_groups_type_edit_glossary": "Edited glossaries", + "activity_groups_type_edit_glossary_term": "Edited glossary terms", + "activity_groups_type_edit_key_character_limit": "Changed key character limits", + "activity_groups_type_edit_key_name": "Renamed keys", + "activity_groups_type_edit_key_tags": "Edited key tags", + "activity_groups_type_edit_language": "Edited languages", + "activity_groups_type_edit_project": "Edited project settings", + "activity_groups_type_edit_task": "Edited tasks", + "activity_groups_type_edit_translation_comment": "Edited translation comments", + "activity_groups_type_edit_translation_label": "Edited labels", + "activity_groups_type_edit_translation_memory": "Edited translation memories", + "activity_groups_type_finish_task": "Finished tasks", + "activity_groups_type_hard_delete_key": "Permanently deleted keys", + "activity_groups_type_ignore_qa_issue": "Ignored QA issues", + "activity_groups_type_import": "Imported data", + "activity_groups_type_import_glossary": "Imported glossaries", + "activity_groups_type_merge_branch": "Merged branches", + "activity_groups_type_namespace_edit": "Edited namespaces", + "activity_groups_type_rename_branch": "Renamed branches", + "activity_groups_type_reopen_task": "Reopened tasks", + "activity_groups_type_restore_key": "Restored keys", + "activity_groups_type_review": "Reviewed translations", + "activity_groups_type_set_base_translation": "Changed base translations", + "activity_groups_type_set_glossary_term_translation": "Set glossary term translations", + "activity_groups_type_set_outdated_flag": "Changed outdated flags", + "activity_groups_type_set_suggestion_active": "Reactivated suggestions", + "activity_groups_type_set_translations": "Set translations", + "activity_groups_type_set_translation_comment_state": "Changed translation comment states", + "activity_groups_type_set_translation_labels": "Changed translation labels", + "activity_groups_type_set_translation_state": "Changed translation states", + "activity_groups_type_soft_delete_key": "Moved keys to trash", + "activity_groups_type_unignore_qa_issue": "Reopened QA issues", + "activity_groups_type_update_task_keys": "Updated task keys", + "activity_groups_type_webhook_config_create": "Created webhook configurations", + "activity_groups_type_webhook_config_delete": "Deleted webhook configurations", + "activity_groups_type_webhook_config_update": "Updated webhook configurations", "activity_accept_suggestion": "Accepted suggestion", "activity_batch_key_hard_delete": "{KeyCount, plural, one {Permanently deleted 1 key} other {Permanently deleted # key}}", "activity_batch_key_restore": "{KeyCount, plural, one {Restored 1 key} other {Restored # keys}}", @@ -1925,6 +2012,7 @@ "project_dashboard_strings_count_plural": "{value, plural, one {String} other {Strings}}", "project_dashboard_tag_count_plural": "{value, plural, one {Tag} other {Tags}}", "project_dashboard_task_count_plural": "{value, plural, one {Task} other {Tasks}}", + "project_activity_title": "Project Activity", "project_dashboard_title": "Project Dashboard", "project_dashboard_translated_percent": "Translated", "project_dashboard_translations_less_then_1_percent": "< 1%", diff --git a/webapp/src/service/apiSchema.generated.ts b/webapp/src/service/apiSchema.generated.ts index 74c548fd153..2258d998691 100644 --- a/webapp/src/service/apiSchema.generated.ts +++ b/webapp/src/service/apiSchema.generated.ts @@ -427,6 +427,17 @@ export interface paths { "/v2/projects/{projectId}/activity": { get: operations["getActivity"]; }; + "/v2/projects/{projectId}/activity/group-items/create-key/{groupId}": { + get: operations["getCreateKeyItems"]; + }; + "/v2/projects/{projectId}/activity/group-items/generic/{groupId}": { + /** Returns the modified entities of the group as generic items (any group type). */ + get: operations["getGenericItems"]; + }; + "/v2/projects/{projectId}/activity/groups": { + /** This endpoints returns the activity grouped by time windows so it's easier to read on the frontend. */ + get: operations["getActivityGroups"]; + }; "/v2/projects/{projectId}/activity/revisions/{revisionId}": { get: operations["getSingleRevision"]; }; @@ -1306,6 +1317,17601 @@ export interface components { AcceptAuthProviderChangeRequest: { id: string; }; + ActivityGroupAcceptSuggestionModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "ACCEPT_SUGGESTION"; + }; + ActivityGroupAddScreenshotModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "ADD_SCREENSHOT"; + }; + ActivityGroupAddTranslationCommentModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "ADD_TRANSLATION_COMMENT"; + }; + ActivityGroupAutoTranslateModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "AUTO_TRANSLATE"; + }; + ActivityGroupBatchClearTranslationsModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "BATCH_CLEAR_TRANSLATIONS"; + }; + ActivityGroupBatchCopyTranslationsModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "BATCH_COPY_TRANSLATIONS"; + }; + ActivityGroupBatchMachineTranslateModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "BATCH_MACHINE_TRANSLATE"; + }; + ActivityGroupBatchPreTranslateByTmModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "BATCH_PRE_TRANSLATE_BY_TM"; + }; + ActivityGroupBatchSetTranslationStateModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "BATCH_SET_TRANSLATION_STATE"; + }; + ActivityGroupChangeBranchProtectionModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CHANGE_BRANCH_PROTECTION"; + }; + ActivityGroupCloseTaskModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CLOSE_TASK"; + }; + ActivityGroupContentDeliveryConfigCreateModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CONTENT_DELIVERY_CONFIG_CREATE"; + }; + ActivityGroupContentDeliveryConfigDeleteModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CONTENT_DELIVERY_CONFIG_DELETE"; + }; + ActivityGroupContentDeliveryConfigUpdateModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CONTENT_DELIVERY_CONFIG_UPDATE"; + }; + ActivityGroupContentStorageCreateModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CONTENT_STORAGE_CREATE"; + }; + ActivityGroupContentStorageDeleteModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CONTENT_STORAGE_DELETE"; + }; + ActivityGroupContentStorageUpdateModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CONTENT_STORAGE_UPDATE"; + }; + ActivityGroupCreateAiPromptModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_AI_PROMPT"; + }; + ActivityGroupCreateBranchModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_BRANCH"; + }; + ActivityGroupCreateGlossaryModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_GLOSSARY"; + }; + ActivityGroupCreateGlossaryTermModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_GLOSSARY_TERM"; + }; + ActivityGroupCreateKeyModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + data?: { + /** Format: int32 */ + keyCount?: number; + }; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_KEY"; + }; + ActivityGroupCreateLanguageModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_LANGUAGE"; + }; + ActivityGroupCreateProjectModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + data?: { + description?: string; + /** Format: int64 */ + id?: number; + languages?: components["schemas"]["ActivityGroupLanguageModel"][]; + name?: string; + }; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_PROJECT"; + }; + ActivityGroupCreateSuggestionModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_SUGGESTION"; + }; + ActivityGroupCreateTaskModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_TASK"; + }; + ActivityGroupCreateTranslationLabelModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_TRANSLATION_LABEL"; + }; + ActivityGroupCreateTranslationMemoryModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_TRANSLATION_MEMORY"; + }; + ActivityGroupDeclineSuggestionModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DECLINE_SUGGESTION"; + }; + ActivityGroupDeleteAiPromptModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_AI_PROMPT"; + }; + ActivityGroupDeleteGlossaryModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_GLOSSARY"; + }; + ActivityGroupDeleteGlossaryTermModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_GLOSSARY_TERM"; + }; + ActivityGroupDeleteKeyModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_KEY"; + }; + ActivityGroupDeleteLanguageModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_LANGUAGE"; + }; + ActivityGroupDeleteScreenshotModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_SCREENSHOT"; + }; + ActivityGroupDeleteSuggestionModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_SUGGESTION"; + }; + ActivityGroupDeleteTranslationCommentModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_TRANSLATION_COMMENT"; + }; + ActivityGroupDeleteTranslationLabelModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_TRANSLATION_LABEL"; + }; + ActivityGroupDeleteTranslationMemoryModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_TRANSLATION_MEMORY"; + }; + ActivityGroupDismissAutoTranslatedStateModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DISMISS_AUTO_TRANSLATED_STATE"; + }; + ActivityGroupEditAiPromptModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_AI_PROMPT"; + }; + ActivityGroupEditGlossaryModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_GLOSSARY"; + }; + ActivityGroupEditGlossaryTermModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_GLOSSARY_TERM"; + }; + ActivityGroupEditKeyCharacterLimitModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_KEY_CHARACTER_LIMIT"; + }; + ActivityGroupEditKeyNameModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_KEY_NAME"; + }; + ActivityGroupEditKeyTagsModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_KEY_TAGS"; + }; + ActivityGroupEditLanguageModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_LANGUAGE"; + }; + ActivityGroupEditProjectModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_PROJECT"; + }; + ActivityGroupEditTaskModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_TASK"; + }; + ActivityGroupEditTranslationCommentModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_TRANSLATION_COMMENT"; + }; + ActivityGroupEditTranslationLabelModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_TRANSLATION_LABEL"; + }; + ActivityGroupEditTranslationMemoryModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_TRANSLATION_MEMORY"; + }; + ActivityGroupFinishTaskModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "FINISH_TASK"; + }; + ActivityGroupHardDeleteKeyModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "HARD_DELETE_KEY"; + }; + ActivityGroupIgnoreQaIssueModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "IGNORE_QA_ISSUE"; + }; + ActivityGroupImportGlossaryModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "IMPORT_GLOSSARY"; + }; + ActivityGroupImportModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "IMPORT"; + }; + ActivityGroupLanguageModel: { + flagEmoji?: string; + /** Format: int64 */ + id?: number; + name?: string; + originalName?: string; + tag?: string; + }; + ActivityGroupMergeBranchModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "MERGE_BRANCH"; + }; + ActivityGroupModel: + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + data?: { + /** Format: int32 */ + keyCount?: number; + }; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_KEY"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_KEY_NAME"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_KEY"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SET_TRANSLATION_STATE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "REVIEW"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SET_BASE_TRANSLATION"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + data?: { + /** Format: int32 */ + translationCount?: number; + }; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SET_TRANSLATIONS"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DISMISS_AUTO_TRANSLATED_STATE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SET_OUTDATED_FLAG"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "ADD_TRANSLATION_COMMENT"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_TRANSLATION_COMMENT"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_TRANSLATION_COMMENT"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SET_TRANSLATION_COMMENT_STATE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_SCREENSHOT"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "ADD_SCREENSHOT"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_KEY_TAGS"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "IMPORT"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_LANGUAGE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_LANGUAGE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_LANGUAGE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + data?: { + description?: string; + /** Format: int64 */ + id?: number; + languages?: components["schemas"]["ActivityGroupLanguageModel"][]; + name?: string; + }; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_PROJECT"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_PROJECT"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "NAMESPACE_EDIT"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "BATCH_PRE_TRANSLATE_BY_TM"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "BATCH_MACHINE_TRANSLATE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "AUTO_TRANSLATE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "BATCH_CLEAR_TRANSLATIONS"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "BATCH_COPY_TRANSLATIONS"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "BATCH_SET_TRANSLATION_STATE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CONTENT_DELIVERY_CONFIG_CREATE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CONTENT_DELIVERY_CONFIG_UPDATE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CONTENT_DELIVERY_CONFIG_DELETE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CONTENT_STORAGE_CREATE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CONTENT_STORAGE_UPDATE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CONTENT_STORAGE_DELETE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "WEBHOOK_CONFIG_CREATE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "WEBHOOK_CONFIG_UPDATE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "WEBHOOK_CONFIG_DELETE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_KEY_CHARACTER_LIMIT"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SOFT_DELETE_KEY"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "RESTORE_KEY"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "HARD_DELETE_KEY"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SET_TRANSLATION_LABELS"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_TRANSLATION_LABEL"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_TRANSLATION_LABEL"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_TRANSLATION_LABEL"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_TASK"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_TASK"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "FINISH_TASK"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CLOSE_TASK"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "REOPEN_TASK"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "UPDATE_TASK_KEYS"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_GLOSSARY"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_GLOSSARY"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_GLOSSARY"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "IMPORT_GLOSSARY"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_GLOSSARY_TERM"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_GLOSSARY_TERM"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_GLOSSARY_TERM"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SET_GLOSSARY_TERM_TRANSLATION"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_TRANSLATION_MEMORY"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_TRANSLATION_MEMORY"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_TRANSLATION_MEMORY"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_SUGGESTION"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_SUGGESTION"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DECLINE_SUGGESTION"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "ACCEPT_SUGGESTION"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SET_SUGGESTION_ACTIVE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_AI_PROMPT"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "EDIT_AI_PROMPT"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "DELETE_AI_PROMPT"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CREATE_BRANCH"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "RENAME_BRANCH"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "CHANGE_BRANCH_PROTECTION"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "MERGE_BRANCH"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "IGNORE_QA_ISSUE"; + } + | { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "UNIGNORE_QA_ISSUE"; + }; + ActivityGroupNamespaceEditModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "NAMESPACE_EDIT"; + }; + ActivityGroupRenameBranchModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "RENAME_BRANCH"; + }; + ActivityGroupReopenTaskModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "REOPEN_TASK"; + }; + ActivityGroupRestoreKeyModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "RESTORE_KEY"; + }; + ActivityGroupReviewModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "REVIEW"; + }; + ActivityGroupSetBaseTranslationModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SET_BASE_TRANSLATION"; + }; + ActivityGroupSetGlossaryTermTranslationModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SET_GLOSSARY_TERM_TRANSLATION"; + }; + ActivityGroupSetOutdatedFlagModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SET_OUTDATED_FLAG"; + }; + ActivityGroupSetSuggestionActiveModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SET_SUGGESTION_ACTIVE"; + }; + ActivityGroupSetTranslationCommentStateModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SET_TRANSLATION_COMMENT_STATE"; + }; + ActivityGroupSetTranslationLabelsModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SET_TRANSLATION_LABELS"; + }; + ActivityGroupSetTranslationStateModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SET_TRANSLATION_STATE"; + }; + ActivityGroupSetTranslationsModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + data?: { + /** Format: int32 */ + translationCount?: number; + }; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SET_TRANSLATIONS"; + }; + ActivityGroupSoftDeleteKeyModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "SOFT_DELETE_KEY"; + }; + ActivityGroupUnignoreQaIssueModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "UNIGNORE_QA_ISSUE"; + }; + ActivityGroupUpdateTaskKeysModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "UPDATE_TASK_KEYS"; + }; + ActivityGroupWebhookConfigCreateModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "WEBHOOK_CONFIG_CREATE"; + }; + ActivityGroupWebhookConfigDeleteModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "WEBHOOK_CONFIG_DELETE"; + }; + ActivityGroupWebhookConfigUpdateModel: { + author?: components["schemas"]["SimpleUserAccountModel"]; + /** Format: int64 */ + id: number; + mentionedLanguageIds: number[]; + origins: ("UI" | "API_KEY" | "PAT")[]; + sourceActivityTypes: ( + | "UNKNOWN" + | "SET_TRANSLATION_STATE" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "TRANSLATION_COMMENT_ADD" + | "TRANSLATION_COMMENT_DELETE" + | "TRANSLATION_COMMENT_EDIT" + | "TRANSLATION_COMMENT_SET_STATE" + | "SCREENSHOT_DELETE" + | "SCREENSHOT_ADD" + | "KEY_TAGS_EDIT" + | "KEY_NAME_EDIT" + | "KEY_CHARACTER_LIMIT_EDIT" + | "KEY_DELETE" + | "KEY_SOFT_DELETE" + | "KEY_RESTORE" + | "KEY_HARD_DELETE" + | "BATCH_KEY_RESTORE" + | "BATCH_KEY_HARD_DELETE" + | "CREATE_KEY" + | "COMPLEX_EDIT" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "HARD_DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "BATCH_TAG_KEYS" + | "BATCH_UNTAG_KEYS" + | "BATCH_SET_KEYS_NAMESPACE" + | "BATCH_ASSIGN_TRANSLATION_LABEL" + | "BATCH_UNASSIGN_TRANSLATION_LABEL" + | "AUTOMATION" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "COMPLEX_TAG_OPERATION" + | "TASKS_CREATE" + | "TASK_CREATE" + | "TASK_UPDATE" + | "TASK_KEYS_UPDATE" + | "TASK_FINISH" + | "TASK_CLOSE" + | "TASK_REOPEN" + | "TASK_KEY_UPDATE" + | "ORDER_TRANSLATION" + | "GLOSSARY_CREATE" + | "GLOSSARY_UPDATE" + | "GLOSSARY_DELETE" + | "GLOSSARY_IMPORT" + | "GLOSSARY_TERM_CREATE" + | "GLOSSARY_TERM_UPDATE" + | "GLOSSARY_TERM_DELETE" + | "GLOSSARY_TERM_TRANSLATION_UPDATE" + | "TRANSLATION_MEMORY_CREATE" + | "TRANSLATION_MEMORY_UPDATE" + | "TRANSLATION_MEMORY_DELETE" + | "TRANSLATION_MEMORY_ASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UNASSIGN_PROJECT" + | "TRANSLATION_MEMORY_UPDATE_PROJECT_CONFIG" + | "TRANSLATION_MEMORY_ENTRY_CREATE" + | "TRANSLATION_MEMORY_ENTRY_UPDATE" + | "TRANSLATION_MEMORY_ENTRY_DELETE" + | "TRANSLATION_MEMORY_IMPORT" + | "TRANSLATION_MEMORY_COPY_FROM_PROJECT" + | "TRANSLATION_LABELS_EDIT" + | "TRANSLATION_LABEL_ASSIGN" + | "TRANSLATION_LABEL_CREATE" + | "TRANSLATION_LABEL_UPDATE" + | "TRANSLATION_LABEL_DELETE" + | "CREATE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "REVERSE_SUGGESTION" + | "DELETE_SUGGESTION" + | "SUGGESTION_SET_ACTIVE" + | "AI_PROMPT_CREATE" + | "AI_PROMPT_UPDATE" + | "AI_PROMPT_DELETE" + | "BRANCH_CREATE" + | "BRANCH_RENAME" + | "BRANCH_DELETE" + | "BRANCH_PROTECTION_CHANGE" + | "BRANCH_MERGE" + | "QA_ISSUE_IGNORE" + | "QA_ISSUE_UNIGNORE" + )[]; + /** Format: int64 */ + timestamp: number; + /** @enum {string} */ + type: "WEBHOOK_CONFIG_UPDATE"; + }; AiPlaygroundResultModel: { contextDescription?: string; /** Format: int64 */ @@ -2559,6 +20165,43 @@ export interface components { tags?: string[]; translations?: { [key: string]: string }; }; + CreateKeyGroupItemModel: { + /** Format: int64 */ + baseLanguageId?: number; + /** @description The base translation value entered when key was created */ + baseTranslationText?: string; + /** @description Custom values of the key */ + custom?: { [key: string]: unknown }; + /** + * @description Description of key + * @example This key is used on homepage. It's a label of sign up button. + */ + description?: string; + /** + * Format: int64 + * @description Id of key record + */ + id: number; + /** @description If key is pluralized. If it will be reflected in the editor */ + isPlural: boolean; + /** + * @description Name of key + * @example this_is_super_key + */ + name: string; + /** + * @description Namespace of key + * @example homepage + */ + namespace?: string; + /** @description The argument name for the plural */ + pluralArgName?: string; + tags: string[]; + }; + CreateKeyGroupModel: { + /** Format: int32 */ + keyCount?: number; + }; CreateMultipleTasksRequest: { tasks: components["schemas"]["CreateTaskRequest"][]; }; @@ -2593,6 +20236,13 @@ export interface components { */ expiresAt?: number; }; + CreateProjectGroupModel: { + description?: string; + /** Format: int64 */ + id?: number; + languages?: components["schemas"]["ActivityGroupLanguageModel"][]; + name?: string; + }; CreateProjectRequest: { /** @description Tag of one of created languages, to select it as base language. If not provided, first language will be selected as base. */ baseLanguageTag?: string; @@ -3313,6 +20963,24 @@ export interface components { name: string; oldSlug?: string; }; + GenericGroupItemModel: { + description: { [key: string]: unknown }; + entityClass: string; + /** Format: int64 */ + entityId: number; + modifications: { + [key: string]: components["schemas"]["PropertyModification"]; + }; + relations: { + [key: string]: components["schemas"]["GenericGroupItemRelationModel"]; + }; + }; + GenericGroupItemRelationModel: { + data: { [key: string]: unknown }; + entityClass: string; + /** Format: int64 */ + entityId: number; + }; GetKeysRequestDto: { keys: components["schemas"]["KeyDefinitionDto"][]; /** @description Tags to return language translations in */ @@ -4545,6 +22213,12 @@ export interface components { size?: number; sort?: string[]; }; + PagedModelActivityGroupModel: { + _embedded?: { + groups?: components["schemas"]["ActivityGroupModel"][]; + }; + page?: components["schemas"]["PageMetadata"]; + }; PagedModelApiKeyModel: { _embedded?: { apiKeys?: components["schemas"]["ApiKeyModel"][]; @@ -4593,6 +22267,18 @@ export interface components { }; page?: components["schemas"]["PageMetadata"]; }; + PagedModelCreateKeyGroupItemModel: { + _embedded?: { + items?: components["schemas"]["CreateKeyGroupItemModel"][]; + }; + page?: components["schemas"]["PageMetadata"]; + }; + PagedModelGenericGroupItemModel: { + _embedded?: { + genericGroupItemModelList?: components["schemas"]["GenericGroupItemModel"][]; + }; + page?: components["schemas"]["PageMetadata"]; + }; PagedModelImportFileIssueModel: { _embedded?: { importFileIssues?: components["schemas"]["ImportFileIssueModel"][]; @@ -6229,6 +23915,10 @@ export interface components { */ description?: string; }; + SetTranslationsGroupModel: { + /** Format: int32 */ + translationCount?: number; + }; SetTranslationsResponseModel: { /** * Format: int64 @@ -13597,6 +31287,232 @@ export interface operations { }; }; }; + getCreateKeyItems: { + parameters: { + query: { + /** Zero-based page index (0..N) */ + page?: number; + /** The size of the page to be returned */ + size?: number; + /** Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported. */ + sort?: string[]; + }; + path: { + groupId: number; + projectId: number; + }; + }; + responses: { + /** OK */ + 200: { + content: { + "application/hal+json": components["schemas"]["PagedModelCreateKeyGroupItemModel"]; + }; + }; + /** Bad Request */ + 400: { + content: { + "application/json": string; + }; + }; + /** Unauthorized */ + 401: { + content: { + "application/json": string; + }; + }; + /** Forbidden */ + 403: { + content: { + "application/json": string; + }; + }; + /** Not Found */ + 404: { + content: { + "application/json": string; + }; + }; + }; + }; + /** Returns the modified entities of the group as generic items (any group type). */ + getGenericItems: { + parameters: { + query: { + /** Zero-based page index (0..N) */ + page?: number; + /** The size of the page to be returned */ + size?: number; + /** Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported. */ + sort?: string[]; + }; + path: { + groupId: number; + projectId: number; + }; + }; + responses: { + /** OK */ + 200: { + content: { + "application/hal+json": components["schemas"]["PagedModelGenericGroupItemModel"]; + }; + }; + /** Bad Request */ + 400: { + content: { + "application/json": string; + }; + }; + /** Unauthorized */ + 401: { + content: { + "application/json": string; + }; + }; + /** Forbidden */ + 403: { + content: { + "application/json": string; + }; + }; + /** Not Found */ + 404: { + content: { + "application/json": string; + }; + }; + }; + }; + /** This endpoints returns the activity grouped by time windows so it's easier to read on the frontend. */ + getActivityGroups: { + parameters: { + query: { + /** Zero-based page index (0..N) */ + page?: number; + /** The size of the page to be returned */ + size?: number; + /** Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported. */ + sort?: string[]; + filterType?: + | "CREATE_KEY" + | "EDIT_KEY_NAME" + | "DELETE_KEY" + | "SET_TRANSLATION_STATE" + | "REVIEW" + | "SET_BASE_TRANSLATION" + | "SET_TRANSLATIONS" + | "DISMISS_AUTO_TRANSLATED_STATE" + | "SET_OUTDATED_FLAG" + | "ADD_TRANSLATION_COMMENT" + | "DELETE_TRANSLATION_COMMENT" + | "EDIT_TRANSLATION_COMMENT" + | "SET_TRANSLATION_COMMENT_STATE" + | "DELETE_SCREENSHOT" + | "ADD_SCREENSHOT" + | "EDIT_KEY_TAGS" + | "IMPORT" + | "CREATE_LANGUAGE" + | "EDIT_LANGUAGE" + | "DELETE_LANGUAGE" + | "CREATE_PROJECT" + | "EDIT_PROJECT" + | "NAMESPACE_EDIT" + | "BATCH_PRE_TRANSLATE_BY_TM" + | "BATCH_MACHINE_TRANSLATE" + | "AUTO_TRANSLATE" + | "BATCH_CLEAR_TRANSLATIONS" + | "BATCH_COPY_TRANSLATIONS" + | "BATCH_SET_TRANSLATION_STATE" + | "CONTENT_DELIVERY_CONFIG_CREATE" + | "CONTENT_DELIVERY_CONFIG_UPDATE" + | "CONTENT_DELIVERY_CONFIG_DELETE" + | "CONTENT_STORAGE_CREATE" + | "CONTENT_STORAGE_UPDATE" + | "CONTENT_STORAGE_DELETE" + | "WEBHOOK_CONFIG_CREATE" + | "WEBHOOK_CONFIG_UPDATE" + | "WEBHOOK_CONFIG_DELETE" + | "EDIT_KEY_CHARACTER_LIMIT" + | "SOFT_DELETE_KEY" + | "RESTORE_KEY" + | "HARD_DELETE_KEY" + | "SET_TRANSLATION_LABELS" + | "CREATE_TRANSLATION_LABEL" + | "EDIT_TRANSLATION_LABEL" + | "DELETE_TRANSLATION_LABEL" + | "CREATE_TASK" + | "EDIT_TASK" + | "FINISH_TASK" + | "CLOSE_TASK" + | "REOPEN_TASK" + | "UPDATE_TASK_KEYS" + | "CREATE_GLOSSARY" + | "EDIT_GLOSSARY" + | "DELETE_GLOSSARY" + | "IMPORT_GLOSSARY" + | "CREATE_GLOSSARY_TERM" + | "EDIT_GLOSSARY_TERM" + | "DELETE_GLOSSARY_TERM" + | "SET_GLOSSARY_TERM_TRANSLATION" + | "CREATE_TRANSLATION_MEMORY" + | "EDIT_TRANSLATION_MEMORY" + | "DELETE_TRANSLATION_MEMORY" + | "CREATE_SUGGESTION" + | "DELETE_SUGGESTION" + | "DECLINE_SUGGESTION" + | "ACCEPT_SUGGESTION" + | "SET_SUGGESTION_ACTIVE" + | "CREATE_AI_PROMPT" + | "EDIT_AI_PROMPT" + | "DELETE_AI_PROMPT" + | "CREATE_BRANCH" + | "RENAME_BRANCH" + | "CHANGE_BRANCH_PROTECTION" + | "MERGE_BRANCH" + | "IGNORE_QA_ISSUE" + | "UNIGNORE_QA_ISSUE"; + filterLanguageIdIn?: number[]; + filterAuthorUserIdIn?: number[]; + branch?: string; + }; + path: { + projectId: number; + }; + }; + responses: { + /** OK */ + 200: { + content: { + "application/hal+json": components["schemas"]["PagedModelActivityGroupModel"]; + }; + }; + /** Bad Request */ + 400: { + content: { + "application/json": string; + }; + }; + /** Unauthorized */ + 401: { + content: { + "application/json": string; + }; + }; + /** Forbidden */ + 403: { + content: { + "application/json": string; + }; + }; + /** Not Found */ + 404: { + content: { + "application/json": string; + }; + }; + }; + }; getSingleRevision: { parameters: { path: { diff --git a/webapp/src/service/apiSchemaTypes.generated.ts b/webapp/src/service/apiSchemaTypes.generated.ts index e659c400ee0..f2ad957afec 100644 --- a/webapp/src/service/apiSchemaTypes.generated.ts +++ b/webapp/src/service/apiSchemaTypes.generated.ts @@ -5,6 +5,85 @@ import type { components } from './apiSchema.generated'; export type AcceptAuthProviderChangeRequest = components['schemas']['AcceptAuthProviderChangeRequest']; +export type ActivityGroupAcceptSuggestionModel = components['schemas']['ActivityGroupAcceptSuggestionModel']; +export type ActivityGroupAddScreenshotModel = components['schemas']['ActivityGroupAddScreenshotModel']; +export type ActivityGroupAddTranslationCommentModel = components['schemas']['ActivityGroupAddTranslationCommentModel']; +export type ActivityGroupAutoTranslateModel = components['schemas']['ActivityGroupAutoTranslateModel']; +export type ActivityGroupBatchClearTranslationsModel = components['schemas']['ActivityGroupBatchClearTranslationsModel']; +export type ActivityGroupBatchCopyTranslationsModel = components['schemas']['ActivityGroupBatchCopyTranslationsModel']; +export type ActivityGroupBatchMachineTranslateModel = components['schemas']['ActivityGroupBatchMachineTranslateModel']; +export type ActivityGroupBatchPreTranslateByTmModel = components['schemas']['ActivityGroupBatchPreTranslateByTmModel']; +export type ActivityGroupBatchSetTranslationStateModel = components['schemas']['ActivityGroupBatchSetTranslationStateModel']; +export type ActivityGroupChangeBranchProtectionModel = components['schemas']['ActivityGroupChangeBranchProtectionModel']; +export type ActivityGroupCloseTaskModel = components['schemas']['ActivityGroupCloseTaskModel']; +export type ActivityGroupContentDeliveryConfigCreateModel = components['schemas']['ActivityGroupContentDeliveryConfigCreateModel']; +export type ActivityGroupContentDeliveryConfigDeleteModel = components['schemas']['ActivityGroupContentDeliveryConfigDeleteModel']; +export type ActivityGroupContentDeliveryConfigUpdateModel = components['schemas']['ActivityGroupContentDeliveryConfigUpdateModel']; +export type ActivityGroupContentStorageCreateModel = components['schemas']['ActivityGroupContentStorageCreateModel']; +export type ActivityGroupContentStorageDeleteModel = components['schemas']['ActivityGroupContentStorageDeleteModel']; +export type ActivityGroupContentStorageUpdateModel = components['schemas']['ActivityGroupContentStorageUpdateModel']; +export type ActivityGroupCreateAiPromptModel = components['schemas']['ActivityGroupCreateAiPromptModel']; +export type ActivityGroupCreateBranchModel = components['schemas']['ActivityGroupCreateBranchModel']; +export type ActivityGroupCreateGlossaryModel = components['schemas']['ActivityGroupCreateGlossaryModel']; +export type ActivityGroupCreateGlossaryTermModel = components['schemas']['ActivityGroupCreateGlossaryTermModel']; +export type ActivityGroupCreateKeyModel = components['schemas']['ActivityGroupCreateKeyModel']; +export type ActivityGroupCreateLanguageModel = components['schemas']['ActivityGroupCreateLanguageModel']; +export type ActivityGroupCreateProjectModel = components['schemas']['ActivityGroupCreateProjectModel']; +export type ActivityGroupCreateSuggestionModel = components['schemas']['ActivityGroupCreateSuggestionModel']; +export type ActivityGroupCreateTaskModel = components['schemas']['ActivityGroupCreateTaskModel']; +export type ActivityGroupCreateTranslationLabelModel = components['schemas']['ActivityGroupCreateTranslationLabelModel']; +export type ActivityGroupCreateTranslationMemoryModel = components['schemas']['ActivityGroupCreateTranslationMemoryModel']; +export type ActivityGroupDeclineSuggestionModel = components['schemas']['ActivityGroupDeclineSuggestionModel']; +export type ActivityGroupDeleteAiPromptModel = components['schemas']['ActivityGroupDeleteAiPromptModel']; +export type ActivityGroupDeleteGlossaryModel = components['schemas']['ActivityGroupDeleteGlossaryModel']; +export type ActivityGroupDeleteGlossaryTermModel = components['schemas']['ActivityGroupDeleteGlossaryTermModel']; +export type ActivityGroupDeleteKeyModel = components['schemas']['ActivityGroupDeleteKeyModel']; +export type ActivityGroupDeleteLanguageModel = components['schemas']['ActivityGroupDeleteLanguageModel']; +export type ActivityGroupDeleteScreenshotModel = components['schemas']['ActivityGroupDeleteScreenshotModel']; +export type ActivityGroupDeleteSuggestionModel = components['schemas']['ActivityGroupDeleteSuggestionModel']; +export type ActivityGroupDeleteTranslationCommentModel = components['schemas']['ActivityGroupDeleteTranslationCommentModel']; +export type ActivityGroupDeleteTranslationLabelModel = components['schemas']['ActivityGroupDeleteTranslationLabelModel']; +export type ActivityGroupDeleteTranslationMemoryModel = components['schemas']['ActivityGroupDeleteTranslationMemoryModel']; +export type ActivityGroupDismissAutoTranslatedStateModel = components['schemas']['ActivityGroupDismissAutoTranslatedStateModel']; +export type ActivityGroupEditAiPromptModel = components['schemas']['ActivityGroupEditAiPromptModel']; +export type ActivityGroupEditGlossaryModel = components['schemas']['ActivityGroupEditGlossaryModel']; +export type ActivityGroupEditGlossaryTermModel = components['schemas']['ActivityGroupEditGlossaryTermModel']; +export type ActivityGroupEditKeyCharacterLimitModel = components['schemas']['ActivityGroupEditKeyCharacterLimitModel']; +export type ActivityGroupEditKeyNameModel = components['schemas']['ActivityGroupEditKeyNameModel']; +export type ActivityGroupEditKeyTagsModel = components['schemas']['ActivityGroupEditKeyTagsModel']; +export type ActivityGroupEditLanguageModel = components['schemas']['ActivityGroupEditLanguageModel']; +export type ActivityGroupEditProjectModel = components['schemas']['ActivityGroupEditProjectModel']; +export type ActivityGroupEditTaskModel = components['schemas']['ActivityGroupEditTaskModel']; +export type ActivityGroupEditTranslationCommentModel = components['schemas']['ActivityGroupEditTranslationCommentModel']; +export type ActivityGroupEditTranslationLabelModel = components['schemas']['ActivityGroupEditTranslationLabelModel']; +export type ActivityGroupEditTranslationMemoryModel = components['schemas']['ActivityGroupEditTranslationMemoryModel']; +export type ActivityGroupFinishTaskModel = components['schemas']['ActivityGroupFinishTaskModel']; +export type ActivityGroupHardDeleteKeyModel = components['schemas']['ActivityGroupHardDeleteKeyModel']; +export type ActivityGroupIgnoreQaIssueModel = components['schemas']['ActivityGroupIgnoreQaIssueModel']; +export type ActivityGroupImportGlossaryModel = components['schemas']['ActivityGroupImportGlossaryModel']; +export type ActivityGroupImportModel = components['schemas']['ActivityGroupImportModel']; +export type ActivityGroupLanguageModel = components['schemas']['ActivityGroupLanguageModel']; +export type ActivityGroupMergeBranchModel = components['schemas']['ActivityGroupMergeBranchModel']; +export type ActivityGroupModel = components['schemas']['ActivityGroupModel']; +export type ActivityGroupNamespaceEditModel = components['schemas']['ActivityGroupNamespaceEditModel']; +export type ActivityGroupRenameBranchModel = components['schemas']['ActivityGroupRenameBranchModel']; +export type ActivityGroupReopenTaskModel = components['schemas']['ActivityGroupReopenTaskModel']; +export type ActivityGroupRestoreKeyModel = components['schemas']['ActivityGroupRestoreKeyModel']; +export type ActivityGroupReviewModel = components['schemas']['ActivityGroupReviewModel']; +export type ActivityGroupSetBaseTranslationModel = components['schemas']['ActivityGroupSetBaseTranslationModel']; +export type ActivityGroupSetGlossaryTermTranslationModel = components['schemas']['ActivityGroupSetGlossaryTermTranslationModel']; +export type ActivityGroupSetOutdatedFlagModel = components['schemas']['ActivityGroupSetOutdatedFlagModel']; +export type ActivityGroupSetSuggestionActiveModel = components['schemas']['ActivityGroupSetSuggestionActiveModel']; +export type ActivityGroupSetTranslationCommentStateModel = components['schemas']['ActivityGroupSetTranslationCommentStateModel']; +export type ActivityGroupSetTranslationLabelsModel = components['schemas']['ActivityGroupSetTranslationLabelsModel']; +export type ActivityGroupSetTranslationStateModel = components['schemas']['ActivityGroupSetTranslationStateModel']; +export type ActivityGroupSetTranslationsModel = components['schemas']['ActivityGroupSetTranslationsModel']; +export type ActivityGroupSoftDeleteKeyModel = components['schemas']['ActivityGroupSoftDeleteKeyModel']; +export type ActivityGroupUnignoreQaIssueModel = components['schemas']['ActivityGroupUnignoreQaIssueModel']; +export type ActivityGroupUpdateTaskKeysModel = components['schemas']['ActivityGroupUpdateTaskKeysModel']; +export type ActivityGroupWebhookConfigCreateModel = components['schemas']['ActivityGroupWebhookConfigCreateModel']; +export type ActivityGroupWebhookConfigDeleteModel = components['schemas']['ActivityGroupWebhookConfigDeleteModel']; +export type ActivityGroupWebhookConfigUpdateModel = components['schemas']['ActivityGroupWebhookConfigUpdateModel']; export type AiPlaygroundResultModel = components['schemas']['AiPlaygroundResultModel']; export type AiPlaygroundResultRequest = components['schemas']['AiPlaygroundResultRequest']; export type AnnouncementDto = components['schemas']['AnnouncementDto']; @@ -83,10 +162,13 @@ export type CreateBranchModel = components['schemas']['CreateBranchModel']; export type CreateGlossaryRequest = components['schemas']['CreateGlossaryRequest']; export type CreateGlossaryTermWithTranslationRequest = components['schemas']['CreateGlossaryTermWithTranslationRequest']; export type CreateKeyDto = components['schemas']['CreateKeyDto']; +export type CreateKeyGroupItemModel = components['schemas']['CreateKeyGroupItemModel']; +export type CreateKeyGroupModel = components['schemas']['CreateKeyGroupModel']; export type CreateMultipleTasksRequest = components['schemas']['CreateMultipleTasksRequest']; export type CreateMultipleTranslationMemoryEntriesRequest = components['schemas']['CreateMultipleTranslationMemoryEntriesRequest']; export type CreateMultipleTranslationMemoryEntriesTranslationRequest = components['schemas']['CreateMultipleTranslationMemoryEntriesTranslationRequest']; export type CreatePatDto = components['schemas']['CreatePatDto']; +export type CreateProjectGroupModel = components['schemas']['CreateProjectGroupModel']; export type CreateProjectRequest = components['schemas']['CreateProjectRequest']; export type CreateProviderRequest = components['schemas']['CreateProviderRequest']; export type CreateTaskRequest = components['schemas']['CreateTaskRequest']; @@ -112,6 +194,8 @@ export type ExistenceEntityDescription = components['schemas']['ExistenceEntityD export type ExportFormatModel = components['schemas']['ExportFormatModel']; export type ExportParams = components['schemas']['ExportParams']; export type GenerateSlugDto = components['schemas']['GenerateSlugDto']; +export type GenericGroupItemModel = components['schemas']['GenericGroupItemModel']; +export type GenericGroupItemRelationModel = components['schemas']['GenericGroupItemRelationModel']; export type GetKeysRequestDto = components['schemas']['GetKeysRequestDto']; export type GlossaryHighlightsRequest = components['schemas']['GlossaryHighlightsRequest']; export type GlossaryImportResult = components['schemas']['GlossaryImportResult']; @@ -200,6 +284,7 @@ export type OrganizationLanguageModel = components['schemas']['OrganizationLangu export type OrganizationModel = components['schemas']['OrganizationModel']; export type PageMetadata = components['schemas']['PageMetadata']; export type Pageable = components['schemas']['Pageable']; +export type PagedModelActivityGroupModel = components['schemas']['PagedModelActivityGroupModel']; export type PagedModelApiKeyModel = components['schemas']['PagedModelApiKeyModel']; export type PagedModelBatchJobModel = components['schemas']['PagedModelBatchJobModel']; export type PagedModelBranchMergeChangeModel = components['schemas']['PagedModelBranchMergeChangeModel']; @@ -208,6 +293,8 @@ export type PagedModelBranchMergeModel = components['schemas']['PagedModelBranch export type PagedModelBranchModel = components['schemas']['PagedModelBranchModel']; export type PagedModelContentDeliveryConfigModel = components['schemas']['PagedModelContentDeliveryConfigModel']; export type PagedModelContentStorageModel = components['schemas']['PagedModelContentStorageModel']; +export type PagedModelCreateKeyGroupItemModel = components['schemas']['PagedModelCreateKeyGroupItemModel']; +export type PagedModelGenericGroupItemModel = components['schemas']['PagedModelGenericGroupItemModel']; export type PagedModelImportFileIssueModel = components['schemas']['PagedModelImportFileIssueModel']; export type PagedModelImportLanguageModel = components['schemas']['PagedModelImportLanguageModel']; export type PagedModelImportTranslationModel = components['schemas']['PagedModelImportTranslationModel']; @@ -324,6 +411,7 @@ export type SetLicenseKeyDto = components['schemas']['SetLicenseKeyDto']; export type SetMachineTranslationSettingsDto = components['schemas']['SetMachineTranslationSettingsDto']; export type SetOrganizationRoleDto = components['schemas']['SetOrganizationRoleDto']; export type SetProjectPromptCustomizationRequest = components['schemas']['SetProjectPromptCustomizationRequest']; +export type SetTranslationsGroupModel = components['schemas']['SetTranslationsGroupModel']; export type SetTranslationsResponseModel = components['schemas']['SetTranslationsResponseModel']; export type SetTranslationsStateStateRequest = components['schemas']['SetTranslationsStateStateRequest']; export type SetTranslationsWithKeyDto = components['schemas']['SetTranslationsWithKeyDto']; diff --git a/webapp/src/views/projects/ActivityView.tsx b/webapp/src/views/projects/ActivityView.tsx new file mode 100644 index 00000000000..6a801bb0914 --- /dev/null +++ b/webapp/src/views/projects/ActivityView.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import { Box, styled } from '@mui/material'; +import { useTranslate } from '@tolgee/react'; + +import { BaseProjectView } from './BaseProjectView'; +import { useApiQuery } from 'tg.service/http/useQueryApi'; +import { useProject } from 'tg.hooks/useProject'; +import { PaginatedHateoasList } from 'tg.component/common/list/PaginatedHateoasList'; +import { ActivityGroupItem } from 'tg.component/activity/groups/ActivityGroupItem'; +import { ProjectLanguagesProvider } from 'tg.hooks/ProjectLanguagesProvider'; + +const StyledList = styled(Box)` + display: grid; + gap: 8px; + padding-top: 16px; +`; + +export const ActivityView = () => { + const { t } = useTranslate(); + const project = useProject(); + const [page, setPage] = React.useState(0); + + const groupsLoadable = useApiQuery({ + url: '/v2/projects/{projectId}/activity/groups', + method: 'get', + path: { projectId: project.id }, + query: { page, size: 20, sort: ['id,desc'] }, + }); + + return ( + + + + setPage(p)} + renderItem={(item) => } + /> + + + + ); +}; diff --git a/webapp/src/views/projects/ProjectRouter.tsx b/webapp/src/views/projects/ProjectRouter.tsx index d74ec5bbdc1..0cc63bc6a27 100644 --- a/webapp/src/views/projects/ProjectRouter.tsx +++ b/webapp/src/views/projects/ProjectRouter.tsx @@ -19,6 +19,7 @@ import { DashboardView } from './dashboard/DashboardView'; import { WebsocketPreview } from './WebsocketPreview'; import { DeveloperView } from './developer/DeveloperView'; import { TaskRedirect } from './TaskRedirect'; +import { ActivityView } from './ActivityView'; import { routes } from 'tg.ee'; import { IntegrateView } from './integrate/IntegrateView'; import { AiView } from './ai/AiView'; @@ -93,6 +94,10 @@ export const ProjectRouter = () => { + + + + diff --git a/webapp/src/views/projects/dashboard/ActivityDateSeparator.tsx b/webapp/src/views/projects/dashboard/ActivityDateSeparator.tsx index 0bad142a1eb..c77408155e5 100644 --- a/webapp/src/views/projects/dashboard/ActivityDateSeparator.tsx +++ b/webapp/src/views/projects/dashboard/ActivityDateSeparator.tsx @@ -3,7 +3,7 @@ import { useTranslate } from '@tolgee/react'; import { useCurrentLanguage } from '@tginternal/library/hooks/useCurrentLanguage'; const StyledContainer = styled('div')` - grid-column: 1 / span 3; + grid-column: 1 / -1; display: flex; align-items: center; position: sticky; diff --git a/webapp/src/views/projects/dashboard/ActivityGroupsList.tsx b/webapp/src/views/projects/dashboard/ActivityGroupsList.tsx new file mode 100644 index 00000000000..ce8d3eae7a2 --- /dev/null +++ b/webapp/src/views/projects/dashboard/ActivityGroupsList.tsx @@ -0,0 +1,101 @@ +import React, { useEffect, useMemo } from 'react'; +import { styled, Typography, Box } from '@mui/material'; +import { T } from '@tolgee/react'; +import { UseInfiniteQueryResult } from 'react-query'; +import { useInView } from 'react-intersection-observer'; + +import { components } from 'tg.service/apiSchema.generated'; +import { ActivityGroupItem } from 'tg.component/activity/groups/ActivityGroupItem'; +import { ActivityDateSeparator } from 'tg.views/projects/dashboard/ActivityDateSeparator'; +import { useDateCounter } from 'tg.hooks/useDateCounter'; +import { BoxLoading } from 'tg.component/common/BoxLoading'; + +type ActivityGroupModel = components['schemas']['ActivityGroupModel']; +type PagedModelActivityGroupModel = + components['schemas']['PagedModelActivityGroupModel']; + +const StyledContainer = styled('div')` + display: grid; + gap: 5px; + border: 1px solid ${({ theme }) => theme.palette.divider1}; + border-radius: 10px; +`; + +const StyledHeader = styled('div')` + display: flex; + justify-content: space-between; + margin: 12px 18px 8px 12px; +`; + +const StyledScroller = styled('div')` + overflow-y: auto; + overflow-x: hidden; + max-height: 600px; +`; + +const StyledList = styled('div')` + display: grid; + gap: 8px; + padding: 0px 8px 12px 8px; +`; + +const StyledLoadingWrapper = styled(Box)` + justify-self: center; + margin-top: 5px; +`; + +type Props = { + activityLoadable: UseInfiniteQueryResult; +}; + +export const ActivityGroupsList: React.FC = ({ activityLoadable }) => { + const { ref, inView } = useInView({ rootMargin: '100px' }); + + const data = useMemo(() => { + const result: ActivityGroupModel[] = []; + activityLoadable.data?.pages.forEach((p) => + p._embedded?.groups?.forEach((group) => { + result.push(group); + }) + ); + return result; + }, [activityLoadable.data]); + + const counter = useDateCounter(); + + useEffect(() => { + if (inView) { + activityLoadable.fetchNextPage(); + } + }, [inView]); + + return ( + + + + + + + + + {data.map((item) => { + const date = new Date(item.timestamp); + return ( + + {counter.isNewDate(date) && ( + + )} + + + ); + })} + {activityLoadable.hasNextPage && ( + + + + )} + + + + ); +}; diff --git a/webapp/src/views/projects/dashboard/ActivityList.tsx b/webapp/src/views/projects/dashboard/ActivityList.tsx deleted file mode 100644 index d6822ee06e1..00000000000 --- a/webapp/src/views/projects/dashboard/ActivityList.tsx +++ /dev/null @@ -1,151 +0,0 @@ -import React, { useEffect, useMemo } from 'react'; -import { - styled, - Typography, - FormControlLabel, - Switch, - Box, -} from '@mui/material'; -import { T, useTranslate } from '@tolgee/react'; -import { UseInfiniteQueryResult } from 'react-query'; -import { useInView } from 'react-intersection-observer'; - -import { ActivityCompact } from 'tg.component/activity/ActivityCompact/ActivityCompact'; -import { components } from 'tg.service/apiSchema.generated'; -import { ActivityDateSeparator } from 'tg.views/projects/dashboard/ActivityDateSeparator'; -import { useState } from 'react'; -import { useDateCounter } from 'tg.hooks/useDateCounter'; -import { BoxLoading } from 'tg.component/common/BoxLoading'; -import { ActivityDetailDialog } from 'tg.component/activity/ActivityDetail/ActivityDetailDialog'; -import { ActivityModel } from 'tg.component/activity/types'; -import { useUrlSearchState } from 'tg.hooks/useUrlSearchState'; - -type ProjectActivityModel = components['schemas']['ProjectActivityModel']; -type PagedModelProjectActivityModel = - components['schemas']['PagedModelProjectActivityModel']; - -const StyledContainer = styled('div')` - display: grid; - gap: 5px; - border: 1px solid ${({ theme }) => theme.palette.divider1}; - border-radius: 10px; -`; - -const StyledHeader = styled('div')` - display: flex; - justify-content: space-between; - margin: 12px 18px 8px 12px; -`; - -const StyledScroller = styled('div')` - overflow-y: auto; - overflow-x: hidden; - max-height: 600px; -`; - -const StyledList = styled('div')` - display: grid; - grid-template-columns: fit-content(30%) 1fr auto; - gap: 3px 0px; - padding-bottom: 12px; -`; - -const StyledLoadingWrapper = styled(Box)` - grid-column: 1 / span 3; - justify-self: center; - margin-top: 5px; -`; - -type Props = { - activityLoadable: UseInfiniteQueryResult; -}; - -export const ActivityList: React.FC> = ({ - activityLoadable, -}) => { - const { ref, inView } = useInView({ rootMargin: '100px' }); - const [detailData, setDetailData] = useState(); - const [detailId, setDetailId] = useUrlSearchState('activity'); - - const data = useMemo(() => { - const result: ProjectActivityModel[] = []; - activityLoadable.data?.pages.forEach((p) => - p._embedded?.activities?.forEach((activity) => { - result.push(activity); - }) - ); - return result; - }, [activityLoadable.data]); - - const { t } = useTranslate(); - const [diffEnabled, setDiffEnabled] = useState(true); - - const toggleDiff = () => { - setDiffEnabled(!diffEnabled); - }; - - const counter = useDateCounter(); - - useEffect(() => { - if (inView) { - activityLoadable.fetchNextPage(); - } - }, [inView]); - - return ( - - - - - - - } - label={t('dashboard_activity_differences')} - labelPlacement="start" - /> - - - - {data?.map((item) => { - const date = new Date(item.timestamp); - return ( - - {counter.isNewDate(date) && ( - - )} - { - setDetailData(detailData); - setDetailId(String(detailData.revisionId)); - }} - /> - - ); - })} - {activityLoadable.hasNextPage && ( - - - - )} - - - {detailId && ( - { - setDetailData(undefined); - setDetailId(undefined); - }} - maxWidth="lg" - /> - )} - - ); -}; diff --git a/webapp/src/views/projects/dashboard/DashboardView.tsx b/webapp/src/views/projects/dashboard/DashboardView.tsx index 269363cb87c..91a147e84ff 100644 --- a/webapp/src/views/projects/dashboard/DashboardView.tsx +++ b/webapp/src/views/projects/dashboard/DashboardView.tsx @@ -11,7 +11,7 @@ import { useProjectPermissions } from 'tg.hooks/useProjectPermissions'; import { ProjectTotals } from './ProjectTotals'; import { LanguageStats } from './LanguageStats/LanguageStats'; import { DailyActivityChart } from './DailyActivityChart'; -import { ActivityList } from './ActivityList'; +import { ActivityGroupsList } from './ActivityGroupsList'; import { BaseProjectView } from '../BaseProjectView'; import { ProjectDescription } from './ProjectDescription'; import { useReportEvent } from 'tg.hooks/useReportEvent'; @@ -72,7 +72,7 @@ export const DashboardView = () => { const path = { projectId: project.id }; const query = { size: 15, sort: ['timestamp,desc'], branch }; const activityLoadable = useApiInfiniteQuery({ - url: '/v2/projects/{projectId}/activity', + url: '/v2/projects/{projectId}/activity/groups', method: 'get', path, query, @@ -159,7 +159,7 @@ export const DashboardView = () => { gridArea="activityList" data-cy="project-dashboard-activity-list" > - +